برتری کد بر بمب؛ داستان Stuxnet
نویسنده: یاسین عابدینی · دسته: Story · تاریخ انتشار: ۱۴۰۵/۲/۱
تحلیل جامع و فنی معماری بدافزار استاکسنت (Stuxnet)
بدافزار استاکسنت به عنوان یکی از پیچیدهترین سلاحهای سایبری در تاریخ امنیت اطلاعات شناخته میشود. این کرم رایانهای، مفهوم امنیت در سیستمهای کنترل صنعتی (ICS) و اسکادا (SCADA) را به طور کامل تغییر داد. در ادامه، کالبدشکافی فنی این بدافزار با جزئیات معماری نرمافزاری و سختافزاری ارائه شده است.
فصل اول: فرآیند دسترسی اولیه و عبور از معماری Air-Gap
توسعه این بدافزار در حدود سال 2005 میلادی آغاز شد. حجم نسخه نهایی این Payload کامپایل شده تقریباً 500 KB بود. هدف اولیه، نفوذ به شبکههای ایزولهای بود که فاقد هرگونه ارتباط فیزیکی یا منطقی با اینترنت (Air-Gapped) بودند.
- مکانیزم نفوذ (Infection Vector): بدافزار از طریق USB به شبکه منتقل شد. بدافزار از آسیبپذیری Zero-day با شناسه
CVE-2010-2568در مفسر فایلهای میانبر ویندوز (LNK) بهره میبرد. سیستمعامل در زمان بارگذاری آیکون فایل LNK، کدهای مخرب را به صورت خودکار در حافظه (RAM) اجرا میکرد (بدون نیاز به تعامل کاربر). - تکنیک امضای دیجیتال: برای عبور از سدهای امنیتی و سیاستهای اجرای کد (Code Execution Policies) ویندوز، فایلهای باینری بدافزار با استفاده از کلیدهای خصوصی سرقتشده از شرکتهای معتبر تایوانی نظیر
Realtek SemiconductorوJMicron Technologyامضا شده بودند. - استقرار روتکیت در سطح هسته: استاکسنت دو درایور با نامهای
mrxnet.sysوmrxcls.sysرا در Kernel-mode نصب میکرد. این روتکیت وظیفه پنهانسازی فایلهای مخرب روی فلش درایو را بر عهده داشت تا از دید کاربر و آنتیویروسها مخفی بمانند.
فصل دوم: Lateral Movement و ارتقای سطح دسترسی
پس از استقرار اولیه، استاکسنت باید در سراسر شبکه محلی (LAN) منتشر میشد تا به سیستم ایستگاه مهندسی (Engineering Station) برسد. برای این منظور، از ترکیبی از آسیبپذیریهای پیچیده استفاده شد:
- ارتقای دسترسی (Privilege Escalation): بدافزار برای اجرای کدهای خود با بالاترین سطح دسترسی (SYSTEM)، از دو آسیبپذیری ZeroDay دیگر شامل
CVE-2010-2743(در درایورwin32k.sys) وCVE-2010-3338(در سرویس Task Scheduler) استفاده میکرد. - تکثیر در شبکه: استاکسنت از آسیبپذیری معروف
MS08-067در سرویس Server ویندوز (مشابه کرم Conficker) و همچنین آسیبپذیری ZeroDay در Print Spooler ویندوز (CVE-2010-2729) برای تکثیر خودکار از طریق پروتکلهای RPC و SMB بهره میبرد. - کنترل همزمانی (Concurrency Control): برای جلوگیری از آلودگی مجدد سیستمها و ایجاد اختلال و کرش (Crash) که منجر به جلب توجه میشد، بدافزار از Mutexهای اختصاصی در سیستمعامل استفاده میکرد تا اطمینان حاصل کند که روی هر ماشین تنها یک نسخه از آن در حال اجراست.
فصل سوم: هوک کردن (Hooking) توابع و MitM
هدف اصلی استاکسنت، نرمافزار Siemens SIMATIC Step 7 بود. این نرمافزار برای برنامهنویسی و پیکربندی کنترلکنندههای منطقی برنامهپذیر (PLC) استفاده میشود.
استاکسنت از تکنیک Inline Hooking و DLL Injection استفاده کرد. فایل حیاتی s7otbxdx.dll که پل ارتباطی بین نرمافزار Step 7 و سختافزار PLC است، توسط بدافزار هوک شد. با این کار، استاکسنت یک معماری Man-in-the-Middle در سطح نرمافزار ایجاد کرد:
- تغییر در لحظه (On-the-fly Modification): هر کدی که مهندس کنترل برای PLC مینوشت، پیش از ارسال به دستگاه، توسط استاکسنت رهگیری شده و کدهای مخرب (به زبان Statement List یا STL) به آن تزریق میشد.
- پنهانسازی کد: زمانی که مهندس قصد خواندن و بررسی کدهای روی PLC را داشت، نسخه هوک شده DLL کدهای مخرب را فیلتر کرده و تنها کدهای استاندارد را نمایش میداد.
فصل چهارم: Hardware Fingerprinting
استاکسنت یک بدافزار کور نبود؛ بلکه به طور دقیق برای یک توپولوژی صنعتی خاص طراحی شده بود. بدافزار پیش از اجرای پیلود تخریبی خود، گذرگاه ارتباطی Profibus را اسکن میکرد:
- شناسایی پردازندهها: بررسی میکرد که آیا PLC هدف از نوع
S7-315یاS7-412شرکت زیمنس است یا خیر. - تحلیل درایوها: بدافزار به دنبال شناسههای خاص Profibus (مانند
0x7050) میگشت که متعلق به مبدلهای فرکانس (VFD) از شرکتهای Vacon و Fararo Paya بودند. - محدودیت فرکانسی: بررسی میکرد که این درایوها موتورهایی را کنترل کنند که در فرکانسهای کاری بسیار بالا، بین 807 Hz 807 Hz تا 1210 Hz 1210 Hz فعالیت میکنند (مختص سانتریفیوژهای گازی).
- آرایش شبکهای: بدافزار بلوکهای داده (Data Blocks) را در حافظه PLC میخواند تا مطمئن شود پیکربندی آبشاری (Cascade) دستگاهها دقیقاً شامل 164 164 یا 168 168 مبدل متصل به هم باشد.
فصل پنجم: rootkit سختافزاری (Replay Attack)
پس از تطبیق کامل Hardware Fingerprinting، فاز تخریب فیزیکی آغاز میشد. بدافزار کدهای خود را در بلاکهای اجرایی PLC (به ویژه OB1 که چرخه اصلی است و OB35 که وقفه زمانی استاندارد است) تزریق میکرد.
الگوی تخریب فیزیکی: بدافزار در بازههای زمانی چند هفتهای بیدار میشد و فرکانس موتورها را به شکل زیر تغییر میداد:
- افزایش ناگهانی سرعت تا 1410 Hz به مدت 15 دقیقه.
- بازگشت به حالت عادی به مدت 27 روز.
- کاهش شدید سرعت تا 2 Hz به مدت 50 دقیقه.
این تغییرات باعث ایجاد پدیده تشدید مکانیکی (Mechanical Resonance) و تنش گریز از مرکز میشد که روتورها را از نظر فیزیکی نابود میکرد.
حمله بازپخش (Replay Attack) سایبری: برای جلوگیری از مداخله اپراتورها، استاکسنت به عنوان یک روتکیت PLC عمل کرد. بدافزار حدود 21 ثانیه از دادههای تلهمتری (Telemetry) در حالت عادی (با فرکانس نرمال 1064 Hz ) را ضبط میکرد. در زمان اجرای حمله مخرب، حلقه ضبط شده را به سیستم مانیتورینگ (HMI / WinCC) ارسال میکرد. در نتیجه، در اتاق کنترل هیچگونه هشدار (Alarm) یا افت سرعتی ثبت نمیشد.
فصل ششم: نشت به خارج از شبکه و کشف معماری
علیرغم طراحی برای ماندن در محیطهای ایزوله، استاکسنت احتمالاً از طریق اتصال یک دستگاه آلوده به شبکههای خارجی، به اینترنت نشت کرد. این بدافزار دارای ماژول ارتباط با سرورهای C2 از طریق دامنههایی مانند mypremierkarte[.]com بود (ترافیک روی پورت
80 صورت میگرفت).
در اواسط سال 2010، افزایش ناگهانی خطاهای صفحه آبی (BSOD) در سیستمهای ویندوزی در سراسر جهان منجر به کشف آن شد. محققان امنیت سایبری (برای اولین بار توسط Sergey Ulasen) با مهندسی معکوس کدهای باینری، به کشفیات زیر دست یافتند:
- کد بدافزار از نظر معماری دارای ماژولهای رمزنگاری شده (XOR شده با کلیدهای استاتیک با طول 255 بایت) بود تا از تحلیلهای استاتیک آنتیویروسها در امان بماند.
- استفاده همزمان از 4 آسیبپذیری Zero-day که نشاندهنده دسترسی به منابع مالی و فنی در سطح دولت-ملت (Nation-State) بود.
- تغییر ماهیت بدافزارها از ابزارهای جاسوسی اطلاعات (Espionage) یا اخاذی (Ransom)، به جنگافزارهای دیجیتال با قابلیت تخریب فیزیکی ملموس (Kinetic Damage).