آسیبپذیری بحرانی و روزصفرم PrintNightmare
آسیبپذیری خطرناک PrintNightmare در سرویس Print Spooler ویندوز و بهطور دقیقتر در تابع RpcAddPrinterDriver وجود دارد که به مهاجم احراز هویت شده (کاربر عادی) اجازه میدهد با بهرهبرداری از آن با سطح دسترسی SYSTEM به اجرای کد بر روی سیستم آسیبپذیر بپردازد. همچنین مهاجم امکان نصب برنامه، مشاهده، تغییر یا حذف اطلاعات و ساخت حسابهای کاربری جدید با سطح دسترسی کامل را خواهد داشت. فرآیند بهرهبرداری توسط مهاجم احراز هویت شده باید شامل فراخوانی تابع RpcAddPrinterDriver باشد. تقریبا همهی نسخههای ویندوز تحت تاثیر این آسیبپذیری هستند.
آسیبپذیری روزصفرم PrintNightmare چگونه منتشر شد؟
ماکروسافت در Patch Tuesday خرداد ماه 1400، از وجود یک آسیبپذیری ارتقای سطح دسترسی شدت پایین با شناسهی CVE-2021-1675 در سرویس Print Spooler ویندوز خبر داد.
چند روز بعد در تاریخ 31 خرداد، ماکروسافت شدت این آسیبپذیری را به «بحرانی» و نوع آن را به آسیبپذیری «اجرای کد از راه دور» تغییر داد. با بحرانی تلقی شدن این آسیبپذیری نظر محققان امنیتی به آن جلب شد و گروهی از آنها برای تشریح بیشتر آسیبپذیری PoC مربوط به آن را در Github منتشر کردند؛ چراکه باور داشتند ماکروسافت این آسیبپذیری را وصله کرده است. اما در واقع آسیبپذیری که ماکروسافت وصله کرده بود با آسیبپذیری که محققان امنیتی طریقه بهرهبرداری از آن را منتشر کرده بودند متفاوت بود.
به این طریق محققان امنیتی به اشتباه یک آسیبپذیری روزصفرم خطرناک را به طور عمومی منتشر کردند.
پس از آنکه محققان امنیتی متوجه موضوع شدند PoC را از مخزن github حذف کردند اما مخزن این محققان در github عمومی بوده و اکسپلویت به صورت گسترده منتشر شده و در سطح اینترنت در حال دست به دست شدن بود.
در حال حاضر ماکروسافت یک شناسهی جداگانه یعنی CVE-2021-34527 به آسیبپذیری خطرناک PrintNightmare در سرویس Print Spooler اختصاص داده است و شدت آن را 8.8 در نظر گرفته است.
جهت به حداقل رساندن مخاطرات این آسیبپذیری اکیداً توصیه میشود که ویندوز خود را از طریق بخش Update & Security به آخرین نسخهی موجود (June 8, 2021) بهروزرسانی کنید و اقدامات کاهشی/راهکار موقت در بخشهای بعد را به کار ببندید.
تاثیر بر کنترلکنندگان دامنه (DC) و اعضای دامنه
اگر سرویس Print Spooler ویندوز سرورهایی که به عنوان کنترلکنندگان دامنه (DC) عمل میکنند، فعال باشد، آسیبپذیر هستند.
سایر سیستمهایی که DC نیستند نیز در شرایط زیر آسیبپذیر هستند:
1 – فعال بودن Point and Print
2 – اگر گروه Authenticated Users در داخل هر یک از گروههایی که در بخش اقدامات کاهشی فهرستشده به صورت تودرتو وجود داشته باشد.
برای کاهش سطح حمله و به عنوان جایگزینی برای غیرفعال کردن سرویس Print Spooler، عضویت کاربران در گروههای زیر را بررسی کنید. سعی کنید سطح عضویت در این گروهها را به حداقل برسانید یا در صورت امکان بهطور کلی گروهها را از عضو خالی کنید. ممکن است کاربران احراز هویت شده و کاربران دامنه در برخی از این گروهها عضو باشند؛ این موضوع میتواند به هر عضوی در دامنه اجازه دهد که آسیبپذیری را در Domain Controller (DC) اکسپلویت کند:
- Administrators
- Domain Controllers
- Read Only Domain Controllers
- Enterprise Read Only Domain Controllers
- Certificate Admins
- Schema Admins
- Enterprise Admins
- Group Policy Admins
- Power Users
- System Operators
- Print Operators
- Backup Operators
- RAS Servers
- Pre-Windows 2000 Compatible Access
- Network Configuration Operators Group Object
- Cryptographic Operators Group Object
- Local account and member of Administrators group
توجه:لغو عضویت کاربران از این گروهها ممکن است موجب بروز مشکلاتی شود.
راهکار موقت برای آسیبپذیری PrintNightmare
برای آگاهی از اینکه سرویس Print Spooler در حال اجرا است یا خیر، دستور زیر را اجرا کنید:
Get-Service -Name Spooler <
اگر سرویس Print Spooler در حال اجرا باشد یا غیرفعال نباشد دو گزینه به عنوان راهکار موقت وجود دارد:
1 – غیرفعال کردن سرویس Print Spooler (disable): اگر غیرفعال کردن سرویس برای سازمان شما راهکار مناسبی است، دستورات زیر را در رابط PowerShell اجرا کنید.
Stop-Service -Name Spooler -Force <
Set-Service -Name Spooler -StartupType Disabled <
با اعمال این راهکار، امکان پرینت بهصورت محلی یا از راه دور از بین می رود.
2 – غیرفعالسازی پرینت (inbound) از راه دور در تنظیمات Group Policy
به آدرس زیر در Group Policy بروید:
Computer Configuration / Administrative Templates / Printers
و “Allow Print Spooler to accept client connections:” را غیرفعال (disable) کنید تا از حملات از راه دور جلوگیری شود. برای ثبت این تنظیمات باید سرویس Print Spooler را restart کنید.
این راهکار با جلوگیری از عملیات پرینت از راه دور، بردار حمله از راه دور را بلاک میکند. با اعمال این راهکار سیستم دیگر به عنوان یک سرور پرینت عمل نخواهد کرد اما انجام پرینت به صورت محلی با یک دستگاه که مستقیماً به سیستم متصل شده است، ممکن خواهد بود.
سرویس را در DCها غیرفعال کنید و در سیستمهای دیگر تنظیمات group policy را به صورت زیر تغییر دهید:
- تنظیم فیلد «Allow Print Spooler to accept client connections» در آدرس زیر به Disabled:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\Printers
- تنظیم مقدار دو فیلد «NoWarningNoElevationOnInstall» و «NoWarningNoElevationOnUpdate» به «0»:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint
مراجع
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-34527
https://grahamcluley.com/printnightmare-zero-day-exploit
https://twitter.com/securityswami/status/1411250265294970884/