۱ مقدمه
بر اساس اطلاعات گزارش منتشره توسط شرکت Microsoft با نمایهی MS15-034، آسیبپذیری مورد نظر در این گزارش به عنوان یک آسیبپذیری اجرای کد اعلام شده است. البته از لغت احتمالا استفاده شده است ولی به دلیل همین احتمال این آسیبپذیری به عنوان یک آسیبپذیری حساس(۱) ثبت شده است. با این وجود تنها اکسپلویت منجر به منع سرویس این آسیبپذیری در دسترس عموم قرار دارد. البته در برخی از فروشگاههای اکسپلویت خصوصی، اکسپلویت اجرای کد این آسیبپذیری را نیز مشاهده شده است. این آسیبپذیری در درایوری HTTP.sys سیستمعامل ویندوز قرار دارد. این آسیب پذیری با استفاده از مقدار ارسال شده در سرآیند Range ایجاد میشود.
۱-۱ بررسی HTTP.sys
درایور HTTP.sys یک درایور در سطح هستهی(۲) سیستم عامل است که در محصول سرویسدهندهی وب IIS به کار گرفته شده است. کار رسمی این درایور گوش ایستادن(۳) برای درخواستهای HTTP، ردکردن درخواستها به IIS و باز فرستادن درخواستهای پاسخ داده شده به مرورگر کاربر توصیف شده است. در نتیجه این درایور زیرساخت اتصال بین سرویسدهندهی وب و سرویسگیرنده را در سیستمعامل ویندوز ایجاد مینماید. از دلایل ایجاد این زیرساخت در سطح هستهی سیستم عامل علاوه بر دسترسی به بستهی شبکه، افزایش کارایی این فرآیندهاست.
۱-۲ سرآیند range
همانطور که قبلا نیز ارائه شد، این آسیبپذیری با استفاده از سرآیند range قابل تحریک است. این سرآیند، برای دریافت بخشی از یک منبع کاربرد دارد. به طور مثال شکل زیر، قسمت مشخصی از فایل humans.txt در سایت google را دریافت نموده است.
۲ تحلیل
یکی از روشهای تحلیل آسیبپذیری تشخیص تفاوت بین نسخهی آسیبپذیر و نسخهی اصلاح(۴) شده است. در شکل زیر یکی از تفاوت های بین این دو نسخه که مربوط به این آسیبپذیری است را مشاهده میکنیم. در این شکل تابع UlpParseRange را نشان میدهد که در نسخهی اصلاح شده در برابر سرریز عدد(۵) مقاوم شده است.
در شکل زیر نگاهی عمیقتر به نسخهی آسیبپذیر تابع UlpParseRange خواهیم انداخت. در این نسخه مقدار رسیده از سرآیند range چک نشده و امکان سرریز عددی وجود دارد.
اگر در شکل بالا دقت کنید، محلی که باید سرریز عددی چک میشد و نشده است مشخص شده است. جزییات بیشتر فنی از حوصله این گزارش خارج است.
۲-۱ تشخیص آسیبپذیری
برای تشخیص آنکه سرویسدهندهی وب موردنظر شما، آسیبپذیری CVE-2015-1635 را دارد یا خیر به سادگی میتوانید یک درخواست(۶) برای یک منبع ایستا- مانند فایل متنی یا فایل سادهی html- با سرآیند Range به مقدار bytes=0-18446744073709551615 ارسال کنید. در صورتی که جواب مورد نظر، جواب ۴۱۶ Requested Range Not Satisfiable را ارسال کرد، میتوان گفت که این سرویسدهندهی وب آسیبپذیر است. با یک فرمان ساده به شرح زیر نیز میتوان این کار را انجام داد.
curl -H ‘Range: bytes=0-18446744073709551615’ http://TAGET.site/
البته باید این احتمال را هم درنظر گرفت که شما با این کار سرویسدهندهی وب را از دسترسی خارج کنید!
۲-۲ ایجاد حملهی منع دسترسی
با مقداردهی سرآیند range به مقدار کمتر از ۰ شما میتوانید این حمله را شبیهسازی کنید. کد زیر، به زبان پایتون این حمله را به صورت خودگار انجام میدهد.
۲-۳ ایجاد حملهی افشای اطلاعات
در برخی از نگارشها دیده شده است که از کاربری سرآیند range استفاده شده است که بیشتر از اندازهی منبع مورد درخواست میشود. برای در یافت بیشتر مطلب به شکلهای زیر توجه کنید.
۲-۴ اصلاحیه
در اصلاحیهی شرکت ماکروسافت برای این آسیبپذیری توابع زیر اضافه شده است و اصلاح این آسیبپذیری با یک چک سادهی سرریز عددی توسط تابع RtlULongLongAdd اتفاق افتاده است.
منابع
- http://www.iis.net/learn/get-started/introduction-to-iis/introduction-to-iis-architecture
- https://www.exploit-db.com/exploits/36776
(۱) critical
(۲) Kernel mode
(۳) Listen
(۴) patch
(۵) Integer overflow
(۶) Request
ثبت ديدگاه