اخیرا مایکروسافت وصلهای را برای برطرف نمودن یک آسیبپذیری حیاتی (CVE-2020-16875) در پشته IPv6 منتشر نمود. این آسیبپذیری که Bad Neighbor نامیده شده، یک باگ در پروتکل کشف همسایه پروتکل IPv6 است که میتواند منجر به صفحه آبی مرگ[۱] (BSOD) شود. این آسیبپذیری در نتیجهی مدیریت نامناسب “بستههای شبکه”[۲] Router Advertisement در پروتکل ICMPv6 است که در سیستمعاملهای مایکروسافت وجود دارد. بررسیهای انجام شده بیانگر این است که روش بهرهبرداری از این آسیبپذیری که در دسترس عموم قرار دارد، تنها منجر به منع سرویس میشود؛ با این حال بهرهبرداری مهاجمان از این باگ برای انجام حملات اجرای کد به صورت از راه دور نیز امکانپذیر است. این امکان، در کنار سادگی بهرهبرداری از این آسیبپذیری، منجر به دریافت مرتبه حیاتی و امتیاز CVSS v3 برابر با ۸.۸ برای این آسیبپذیری شده است.
جزئیات و تجزیه و تحلیل آسیبپذیری Bad Neighbor
این آسیبپذیری، از دو عامل مدیریت نادرست بستههای شبکه Router Advertisement در پروتکل ICMPv6 که شامل Optionهای “سرور DNS بازگشتی”[۳] (RDNSS) هستند و اختصاص مقداری زوج به فیلد طول در این Option ایجاد شده است. با توجه به سندRFC 8106، فیلد طول Option برحسب واحدهایی هشت تایی از Octetها بوده و حداقل مقدار آن برابر با ۳ و برای زمانی است که تنها یک آدرس IPv6 وجود دارد. به ازای هر آدرس RDNSS دیگر موجود در Option، مقدار این فیلد با عدد ۲ جمع میشود. از این فیلد برای تعیین تعداد آدرسهای IPv6 در Option استفاده میشود (شکل زیر را ببینید). فیلد آدرسها، حاوی تعدادی متغیر برابر با (Length-1)/2 از آدرسهاست. هر آدرس IPv6 دارای ۱۶ بایت طول بوده و هر کدام نیازمند این است که مقدار فیلد طول عددی فرد و حداقل برابر با ۳ باشد.
حفره[۴]
با ارسال یک RDNSS option برای فیلد طول که دارای مقدار زوج است، یک مقدار آدرس IPv6 ارسال میشود که طول آن ۸ بایت از ۱۶ بایت مورد انتظار کمتر است. این مساله منجر به این میشود که پشته TCP/IP این آدرس را به عنوان شروع یک Option دوم در نظر گرفته که در نهایت منجر به سرریز بافر یا یک اجرای کد از راه دور بالقوه میشود. Driver ویندوز tcpip.sys نیز قادر به تجزیه چنین درخواستی نبوده و منجر به منع سرویس یا BSOD میشود. Tcpip.sys یک Driver ویندوز است که برای برقراری ارتباط میان دستگاهها با تنظیم ویژگیهای TCP/IP استفاده میشود.
برای کسب جزئیات بیشتر در مورد این آسیبپذیری، میتوان به گزارش ارائه شده توسط آزمایشگاه McAfee (https://www.mcafee.com/blogs/other-blogs/mcafee-labs/cve-2020-16898-bad-neighbor/) و گزارش وبسایت pi3 (http://blog.pi3.com.pl/?p=780) مراجعه نمود.
تاثیرات این آسیبپذیری
برای بررسی تاثیرات احتمالی این آسیبپذیری باید به موارد زیر توجه کرد:
- این آسیبپذیری بر روی اینترنت قابل استفاده نیست.
- با توجه به وجود GS (Buffer Security Check)، اجرای کد به صورت از راه دور روی سیستمعاملهای جدید ویندوز بسیار دشوار است.
- تجهیز این آسیبپذیری در راستای کرمگونه[۵] نمودن آن نیز بسیار دشوار است.
در نتیجه، بهرهبرداری از آن برای انجام حملات اجرای کد به صورت از راه دور دشوار است. با این حال، همچنان میتوان از این آسیبپذیری به عنوان ابزاری قدرتمند جهت ایجاد منع سرویس کرد.
راهکار مقابله با آسیبپذیری Bad Neighbor
در حال حاضر، اعمال به روزرسانیهای “وصله روز سهشنبه”[۶] ماه اکتبر مایکروسافت بهترین راهکار محافظت از سیستمها در برابر این آسیبپذیری است. در صورتی که امکان اعمال وصله وجود نداشته باشد باید ICMPV6 RDNSS را در ویندوز با استفاده از فرمان PowerShell زیر غیرفعال نمود:
netsh int ipv6 set int *INTERFACENUMBER* rabaseddnsconfig=disable
این راهکار جایگزین تنها برای Windows 1709 و نسخههای بالاتر در دسترس است و پس از اجرای آن نیازی به راهاندازی مجدد سیستم نیست. لازم به ذکر است که این فرمان پیکربندی RNS مبتنی بر Router Advertisement را غیرفعال میکند. برای غیرفعال کردن راهکار جایگزین ذکر شده میتوان از فرمان PowerShell زیر استفاده کرد:
netsh int ipv6 set int *INTERFACENUMBER* rabaseddnsconfig=enable
که مجددا اعمال این فرمان نیز نیازی به راهاندازی مجدد سیستم ندارد.
[۱] Blue screen of death
[۲] Packet
[۳] Recursive DNS Server
[۴] Exploit
[۵] Wormable
[۶] Tuesday patch