مقاله آموزشی: چرا آگاهی از زمان به‌کار سامانه می‌تواند خطرناک باشد؟

در زمان اجرای یک آزمون امنیتی، معمولاً توجهی به این مسئله نمی‌شود که کارگزار مورد نظر چه مدت زمانی در حال کار بوده است. مدت‌زمانی که منابع رایانه‏‌ای یا شبکه‏‌ا‌ی در حال کارند یا در دسترس کاربر قرار دارند به زمان به‌کار (uptime) شهرت دارد و در ادامه به اهمیت این زمان از منظر امنیتی پرداخته می‌شود و این مسئله که دانستن زمان به‌کار، چه زمانی کارگزار را آسیب‌پذیر می‌کند شرح داده می‌شود.

اطلاعات زمان به‌کار را می‌توان از روش‌های مختلفی جمع‌آوری کرد، البته عموماً زمان به‌کار به عنوان یک تهدید برای کارگزار به حساب نمی‌آید، اما نشان داده می‌شود که راهی مطمئن و پایدار وجود ندارد که زمان به‌کار کارگزار در اختیار مهاجمین قرار نگیرد.
پویش‌گرهای معروف مانند Nessus (با سیاست پیش‌فرض: پویش شبکه‌ی خارجی)، زمان به‌کاری را با رنگ سبز گزارش می‌کند، این بدین معنی است که Nessus نه تنها زمان به‌کار را یک تهدید به حساب نمی‌آورد بلکه این زمان را به عنوان اطلاعات معمولی نمایش می‌دهد.

اگر کمی با نرم‌افزار‌های پویش شبکه آشنا باشید می‌دانید که یکی از خروجی‌های پویش یک کارگزار، زمان به‌کار آن است، البته امکان مسدود کردن دست‌رسی به زمان به‌کار هم وجود دارد که در انتهای همین مقاله به عواقب آن پرداخته شده است.

با استفاده از نرم‌افزار Nmap در ترمینال، دستوری مانند دستور زیر را وارد می‌کنیم:

[root@ASIS ~]# nmap -v -O victim.com

خروجی به شکل زیر خواهد بود:

Starting Nmap ۶.۰۱ ( http://nmap.org ) at ۲۰۱۴-۰۵-۲۵ ۲۰:۲۹ IRDT
Initiating Ping Scan at ۲۰:۲۹
(…)
Uptime guess: ۱۵.۴۱۴ days (since Mon May ۱۰ ۲۰۱۴ ۱۰:۲۳:۳۲ IRDT)

Nmap اشتباه نمی‌کند و تعداد روز‌ها و ساعت‌های دقیق زمان آماده به کار کارگزار را در خروجی تولید می‌کند.

بسیاری از به‌روز‌رسانی‌های سامانه‌عامل ( به طور مثال به‌روز‌رسانی‌های هسته‌ی سامانه‌عامل)، برای تکمیل مراحل نصب و اعمال نیاز دارند تا کارگزار راه‌اندازی مجدد شود. با داشتن زمان به‌کار سامانه، در واقع مهاجم می‌تواند بفهمد آخرین به‌روزرسانی سامانه چه زمانی بوده است و اگر به طور مثال یک به‌روز‌رسانی هسته ده روز پیش منتشر شده است و زمان به‌کار سامانه در حدود ۱۵ روز است، مهاجم به طور قطع یقین پیدا می‌کند که این کارگزار وصله‌ی خاصی را دریافت نکرده و به همین دلیل آسیب‌پذیری کارگزار را تشخیص می‌دهد. این مثال مهم‌ترین سوءاستفاده‌ای است که مهاجمان از زمان به‌کار می‌کنند.

اما استفاده از زمان به‌کار برای تشخیص آسیب‌پذیری تنها کاربردی نیست که مورد علاقه‌ی نفوذگران است، با استفاده از این زمان تشخیص می‌دهند که چه ماشینی در شبکه کارگزار و چه ماشینی میزبان است. در ٪۹۰ مواقع، ماشین کارگزار دارای زمان به‌کار بیش‌تری است ( زمانی در مقیاس روز و ماه برای کارگزار و در مقایس ساعت برای میزبان‌ها). مشخص است ماشین‌های میزبان یا سرویس‌گیرنده تنها زمانی که کارمندان در اداره هستند باید روشن باشند و راه‌اندازی مجدد ماشین‌های میزبان در یک روز اتفاق می‌افتد.

با استفاده از زمان به‌کار کارگزار می‌توان تشخیص داد که آیا حملات انسداد سرویس روی کارگزار موفق بوده است یا خیر، اگر پس از حملات انسداد سرویس کارگزار راه‌اندازی مجدد شود، زمان به‌کار نیز تغییر می‌کند و این یعنی حملات موفق بوده‌اند.

بهتر است نگاه دقیق‌تری به طرز کار زمان به‌کار داشته باشیم. زمان به‌کار با استفاده از اطلاعات زمانی بسته‌های TCP که از طریق کارگزار ارسال می‌شوند محاسبه می‌شود. Nmap با استفاده از برچسب‌های زمانی بسته‌ها سعی می‌کند زمان به‌کار کارگزار را محاسبه کند، اگرچه زمان‌های محاسبه شده گاهی ممکن است زمان‌های معتبر نباشد و به همین دلیل گفته می‌شود Nmap، این زمان‌ را حدس می‌زند. با اضافه کردن گزینه‌ی -d به دستور Nmap می‌توان این زمان‌ها را مشاهده کرد.
برچسب زمانی TCP، یک شمارش‌گر اعداد است که با روشن شدن سامانه‌عامل از صفر شروع می‌شود و با گذر زمان افزایش می‌یاد. اگر ثابت زمانی که با ان شمارش‌گر افزایش پیدا می‌کند را بدانیم، مدت زمانی که سامانه‌عامل آماده به‌کار بوده است را می‌توان تشخیص داد. استاندارد RFC اطلاعات جزیی در مورد این عدد افزایشی نمی‌گوید و تنها تاکید می‌کند که این عدد باید ثابت باشد . به همین دلیل در سامانه‌عامل‌های مختلف این ثابت متفاوت است اما همیشه مقدار آن در یک سامانه ثابت است.
با داشتن ثابت زمانی از فرمول زیر می‌توان زمان به‌کار سامانه را تشخیص داد:

timestamp / num inc by sec = uptime in sec

یعنی اگر شبیه‌سازی به صورت یک معادله خط باشد داریم:

y = Ax + B
timestamp = numincbysec * sec + intial number

اگر ضریب ثابت را ندانیم، با داشتن دو برچسب زمانی از دو بسته متفاوت ( که تاخیر ارسال آن را می‌دانیم) می‌توان ثابت زمانی را به دست آورد:

ts۱ = A*s۱ + B
ts۲ = A*s۲ + B
ts۱ – ts۲ = A*(s۱ – s۲) <=> A = (ts۱ – ts۲) / (s۱ – s۲)

و از همین طریق، یک نرم‌افزار پویش‌گر مانند Nmap با درخواست دو بسته و تعیین برچسب زمانی هریک ثابت زمانی و سپس زمان به‌کار سامانه را تشخیص می‌دهد.

در مثال زیر، از یک کارگزار که درگاه شماره ۲۲ آن باز است ( درگاه sshd)، دو بسته درخواست شده است که گزینه‌ی TCP timestamp این درخواست نیز فعال است و درخواست‌ها با وقفه‌ی زمانی ۵ ثانیه ارسال شده‌اند. پاسخ کارگزار نشان می‌دهد که برچسب‌های زمانی اختلافی به میزان ۵۰۸۰ واحد (میلی‌ثانیه) دارند.

root@ASIS# hping۳ –tcp-timestamp -S victim.com -p ۲۲ -c ۱;
sleep ۵; hping۳ –tcp-timestamp -S victim.com -p ۲۲ -c ۱
HPING ۱.۲.۳.۴ (eth۰ ۱.۲.۳.۴): S set, ۴۰ headers + ۰ data bytes
len=۵۶ ip=۱۰.۱۶۸.۱۶۸.۱۲ ttl=۶۴ DF id=۰ sport=۲۲ flags=SA seq=۰
win=۱۴۴۸۰ rtt=۴.۰ ms
TCP timestamp: tcpts=۱۵۵۷۸۰۳۲۶۴
— ۱.۲.۳.۴ hping statistic —
۱ packets transmitted, ۱ packets received, ۰% packet loss
round-trip min/avg/max = ۴.۰/۴.۰/۴.۰ ms
HPING ۱.۲.۳.۴ (eth۰ ۱.۲.۳.۴): S set, ۴۰ headers + ۰ data bytes
len=۵۶ ip=۱۰.۱۶۸.۱۶۸.۱۲ ttl=۶۴ DF id=۰ sport=۲۲ flags=SA seq=۰
win=۱۴۴۸۰ rtt=۰.۳ ms
TCP timestamp: tcpts=۱۵۵۷۸۰۸۳۴۴
— ۱.۲.۳.۴ hping statistic —
۱ packets transmitted, ۱ packets received, ۰% packet loss
round-trip min/avg/max = ۰.۳/۰.۳/۰.۳ ms

۵ ثانیه اختلافی است که خودمان ایجاد کرده‌ایم، بنابراین تقریباً ۱ ثانیه طول می‌کشد تا برچسب زمانی افزایش پیدا کند ( هر یک ثانیه، ۱۰۰۰ واحد افزایش)، این بدین معنی است که کارگزار ما (در این‌جا victim.com) هر یک میلی‌ثانیه شمارش‌گر را افزایش می‌دهد.
اگر فرضیات بالا صحیح باشد، ۱۵۵۷۸۰۳۲۶۴ میلی‌ثانیه مدت زمانی است که کارگزار روشن بوده است، با تغییر این میزان به ساعت و روز به مقدار ۱۸ روز می‌رسیم که زمان به‌کار سامانه است.

چگونه زمان به‌کار را از کار بیاندازیم و این کار چه عواقبی دارد؟

به راحتی می‌توان با دستور زیر در کارگزار، ارسال برچسب‌های زمانی را متوقف کرد:

[root@victim.com ~]# echo ۰ > /proc/sys/net/ipv۴/tcp_timestamps

اما دیگر در استاندارد RFC، بسته‌ها ارسال نمی‌شوند. برچسب‌های زمانی TCP در PAWS مورد استفاده قرار می‌گیرد، PAWS مخفف Protection Against Wrapped Sequence numbers روشی است که برای قبول یا عدم قبول بسته‌هایی که بیش از یک بار ارسال شده‌اند، استفاده می‌شود و از این طریق از مخدوش شدن داده جلوگیری می‌شود.
با نداشتن برچسب زمانی بسته‌ها نمی‌توان از ویژگی PAWS استفاده کرد، بنابراین حذف این برچسب، یک راه‌حل مطلوب برای پنهان کردن زمان به‌کار سامانه نیست.

منبع: asis

درباره نماد امنیت وب

“نماد امنیت وب” به عنوان یکی از شرکت های پیشتاز در زمینه امنیت نرم افزار و سرویس های تحت وب، با ارائه سرویس های امنیتی برای تمامی کسب و کار ها و دارای نمایندگی شرکت Acunetix (اکوانتیکس) بعنوان محبوب ترین اسکنر امنیتی black box در دنیا، ایمنی وب سایت شما را در مقابل حمله هکر ها تضمین می کند.