خلاصه اجرایی
- SentinelLABS یک چارچوب خرابکاری سایبریِ پیشتر مستندنشده را کشف کرده که اجزای اصلی آن به سال ۲۰۰۵ بازمیگردد و با نام
fast16ردیابی میشود. fast16.sysبهصورت گزینشی نرمافزارهای محاسبات بسیار دقیق را هدف میگیرد و کد را در حافظه وصله میکند تا نتایج دستکاری شوند. مهاجمان با ترکیب این محموله با سازوکارهای خودانتشار، میکوشند محاسبات نادرستِ همسان را در سراسر یک تأسیسات تولید کنند.- این حمله سال ۲۰۰۵ نشانهای زودهنگام از عملیات خرابکاری علیه بارهای کاری بسیار پرهزینه و دقیق با اهمیت ملی، از جمله پژوهشهای فیزیک پیشرفته، رمزنگاری و هستهای است.
fast16دستکم پنج سال پیش از Stuxnet وجود داشته و نخستین عملیات از نوع خود به شمار میآید. استفاده آن از ماشین مجازی Lua سفارشی و تعبیهشده نیز سه سال زودتر از نخستین نمونههای Flame است.- نام
fast16در افشای مشهور ShadowBrokers از اجزای «Territorial Dispute» منتسب به NSA آمده است. یک امضای گریز به اپراتورها دستور میدهد:fast16 *** Nothing to see here – carry on ***
نمای کلی
تحقیق SentinelLABS درباره fast16 با یک حدس معماری آغاز شد. سطح خاصی از بازیگران تهدیدِ بسیار پیشرفته، بارها از موتورهای اسکریپتنویسی تعبیهشده برای ایجاد ماژولاریتۀ عملیاتی استفاده کردهاند.
Flame،
Bunny متعلق به Animal Farm،
«PlexingEagle»،
Flame 2.0 و
Project Sauron
هرکدام پلتفرمهایی را حول قابلیت توسعه و ماژولاریتۀ یک ماشین مجازی Lua تعبیهشده ساخته بودند. پژوهشگران میخواستند بدانند آیا این سبک توسعه از منبعی مشترک آمده است یا نه، بنابراین رد نخستین استفاده پیچیده از موتور Lua تعبیهشده در بدافزار ویندوزی را دنبال کردند.
Lua زبان اسکریپتنویسی سبکی است که بهصورت ذاتی برای گسترش قابلیتهای C/C++ مناسب است. با توجه به جذابیت C++ برای چارچوبهای بدافزار سطح بالا و قابل اتکا، این قابلیت برای افزودن کارکرد به ماشینهای آلوده، بدون نیاز به کامپایل دوبارۀ کل اجزای ایمپلنت، ضروری است. پژوهشگران نشانهای از منشأ مشترک مستقیم پیدا نکردند، اما قدیمیترین نمونه از این معماری حمله مدرن را کشف کردند.
Lua اثرانگشت مشخصی بر جا میگذارد. محفظههای بایتکد کامپایلشده با بایتهای جادویی 1B 4C 75 61 یا \x1bLua آغاز میشوند، سپس بایت نسخه میآید، و موتور معمولاً API مشخص C و متغیرهای محیطی مانند LUA_PATH را آشکار میکند. جستوجوی این ویژگیها در مجموعههای بدافزاری نیمه دهۀ ۲۰۰۰ به نمونهای رسید که در نگاه اول عادی به نظر میرسید: svcmgmt.exe.
svcmgmt.exe؛ یک باینری سرویس مبتنی بر Lua از سال ۲۰۰۵
در ظاهر، svcmgmt.exe شبیه یک لفاف سرویس عمومی در حالت کنسول از دوران Windows 2000/XP است.
| نام فایل | svcmgmt.exe |
| اندازه فایل | 315,392 bytes |
| MD5 | dbe51eabebf9d4ef9581ef99844a2944 |
| SHA1 | de584703c78a60a56028f9834086facd1401b355 |
| SHA256 | 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525 |
| نوع | PE32 executable for MS Windows 4.00 (console), Intel i386 |
| زمان لینک | 2005-08-30 18:15:06 UTC |
بررسی دقیقتر یک ماشین مجازی Lua 5.0 تعبیهشده و یک محفظۀ بایتکد رمزگذاریشده را نشان میدهد که نقطۀ ورود سرویس آن را باز میکند.
توسعهدهندگان محیط Lua را با این قابلیتها گسترش داده بودند:
- یک ماژول
wstringبرای مدیریت بومی Unicode؛ - یک رمز متقارن داخلی، در دسترس از طریق تابعی که معمولاً با
bبرچسبگذاری شده و برای رمزگشایی دادههای تعبیهشده به کار میرود؛ - چند ماژول که مستقیماً به APIهای فایلسیستم، رجیستری، کنترل سرویس و شبکه در Windows NT متصل میشوند.
svcmgmt.exe حتی بهتنهایی هم مانند یک ایمپلنت سطح بالای اولیه به نظر میرسد: یک باینری سرویس ماژولار که بیشتر منطق خود را به بایتکد رمزگذاریشدۀ Lua میسپارد. این باینری یک جزئیات کلیدی دارد: مسیر PDB که آن را به درایور هستهای fast16.sys پیوند میدهد.
fast16؛ معمای آزاردهنده از افشای ShadowBrokers
در میان رشتههای باینری، یک ارجاع PDB دفن شده است:
C:\buildy\driver\fd\i386\fast16.pdb
در نگاه اول، این مسیر شبیه هر اثر کامپایل دیگری است: یک پوشۀ ساخت داخلی، نام جزء (fast16) و اشارهای به معماری (i386). اما در این مورد ناسازگاری وجود دارد. رشته داخل یک فایل اجراییِ حالت سرویس ظاهر میشود، در حالی که بخش driver\fd\i386\fast16 در رشته PDB بهوضوح به یک پروژه درایور هسته اشاره دارد.
دنبال کردن این سرنخ پژوهشگران را به باینری دوم رساند: fast16.sys.
| نام فایل | fast16.sys |
| اندازه فایل | 44,580 bytes |
| MD5 | 0ff6abe0252d4f37a196a1231fae5f26 |
| SHA256 | 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529 |
| نوع | PE32 executable for MS Windows 5.00 (native), Intel i386, 5 sections |
| زمان لینک | 2005-07-19 15:15:41 UTC (0x42dd191d) |
این درایور هسته یک جزء فایلسیستم با شروع هنگام بوت است که کد اجرایی را هنگام خواندهشدن از دیسک رهگیری و تغییر میدهد. هرچند درایوری با این سن روی Windows 7 یا نسخههای بعدی اجرا نمیشود، برای زمان خود بهدلیل جایگاهش در پشته ذخیرهسازی، کنترل بر ورودی/خروجی فایلسیستم و قابلیت وصلهکردن کد براساس قواعد، بسیار فراتر از روتکیتهای کالایی بود.
در آوریل ۲۰۱۷، تقریباً دوازده سال پس از زمان کامپایل، همین نام فایل، یعنی fast16، در افشای ShadowBrokers ظاهر شد. پژوهش دکتر Boldizsár Bencsáth درباره
Territorial Dispute
به یک فایل متنی با نام drv_list.txt اشاره میکند. این فایل ۲۵۰ کیلوبایتی فهرست کوتاهی از نام درایورهاست که برای علامتگذاری ایمپلنتهای احتمالی روی یک ماشین هدف بهعنوان «دوستانه» یا برای «عقبکشیدن» و جلوگیری از برخورد با عملیات هکری دولت-ملتهای رقیب استفاده میشد.
راهنمایی مربوط به یک درایور خاص، یعنی fast16، هم منحصربهفرد است و هم بسیار غیرمعمول.
رشته موجود در svcmgmt.exe پیوند جرمشناسانۀ کلیدی این تحقیق را فراهم کرد. مسیر PDB امضاهای رفع تداخل عملیاتی افشاشده در سال ۲۰۱۷ را که اپراتورهای NSA از آن استفاده میکردند، به یک ماژول «حامل» چندحالته مبتنی بر Lua که در سال ۲۰۰۵ کامپایل شده بود، و در نهایت به محمولۀ پنهان آن پیوند میدهد: درایور هستهای طراحیشده برای خرابکاری دقیق.
svcmgmt.exe؛ معماری حامل
جزء اصلی fast16، یعنی svcmgmt.exe، بهعنوان یک ماژول حامل بسیار سازگارپذیر عمل میکند و براساس آرگومانهای خط فرمان حالت عملیاتی خود را تغییر میدهد.
- بدون آرگومان: بهصورت سرویس ویندوز اجرا میشود.
-p: مقدارInstallFlag = 1را تنظیم میکند و بهصورت سرویس اجرا میشود؛ یعنی انتشار/نصب و اجرا.-i: مقدارInstallFlag = 1را تنظیم میکند و کد Lua را اجرا میکند؛ یعنی نصب و اجرای Lua.-r: کد Lua را بدون تنظیم پرچم نصب اجرا میکند.- هر آرگومان دیگر (
<filename>): آن را بهعنوان نام فایل تفسیر میکند و دو فرزند ایجاد میکند؛ فرمان اصلی و فرمانی دیگر با آرگومان-r، در حالت لفاف/پراکسی.
در داخل، svcmgmt.exe سه محمولۀ متمایز را نگه میدارد؛ از جمله بایتکد رمزگذاریشدۀ Lua که پیکربندی، منطق انتشار و هماهنگی، ConnotifyDLL کمکی و درایور هستهای fast16.sys را مدیریت میکند.
توسعهدهندگان با جدا کردن یک لفاف اجرایی نسبتاً پایدار از محمولههای رمزگذاریشده و مأموریتمحور، چارچوبی قابل استفاده مجدد و محفظهبندیشده ساختند که میتوانست برای محیطهای هدف و اهداف عملیاتی مختلف سازگار شود، در حالی که باینری حامل بیرونی در کارزارهای مختلف عمدتاً ثابت میماند.
Wormletها و معماری اولیۀ گریز
اوایل دهۀ ۲۰۰۰ شاهد شمار زیادی کرم شبکهای بود. بیشتر آنها را علاقهمندان مینوشتند، سریع پخش میشدند و محمولۀ معناداری نداشتند یا بسیار کم داشتند. fast16 از همان دوره میآید، اما الگوی کاملاً متفاوتی را دنبال میکند که نشاندهندۀ منشأ آن بهعنوان ابزار سطح دولتی است. این نخستین کرم شبکهای ثبتشده مبتنی بر Lua است و با مأموریتی بسیار مشخص ساخته شده بود.
حامل طوری طراحی شده بود که مانند مهمات خوشهای در قالب نرمافزار عمل کند و بتواند چند محمولۀ کرمپذیر را حمل کند؛ محمولههایی که در داخل با عنوان wormlet شناخته میشدند. ماژول svcmgmt.exe این گامها را انجام میدهد:
- پیکربندی را آماده میکند و مسیر محموله، جزئیات سرویس و محدودههای IP هدف را تعریف میکند.
- مقادیر پیکربندی را برای لایه C به رشتههای wide-character تبدیل میکند.
- امتیازها را ارتقا میدهد، فایل اجرایی حامل را بهعنوان سرویس
SvcMgmtنصب میکند و سپس آن را آغاز میکند. - در صورت فعال بودن گزینه پیکربندی، ایمپلنت درایور هستهای
fast16.sysرا مستقر میکند. wormletها را آزاد میکند. در این پیکربندی خاص، فقط یک جایگاهwormletبا یک SCM wormlet پر شده است که بهدنبال سرورهای شبکه میگردد، محموله را از طریق یک share شبکهای کپی میکند و آن سرویس راهدور را آغاز میکند.- این فرایند را تا رسیدن به آستانۀ شکست یا شرط کشتن بیرونی، با خوابیدن بهاندازۀ تأخیر اولیه پیکربندیشده میان موجها، بیپایان تکرار میکند.
wormletها در انبار داخلی حامل ذخیره شده بودند:
تنها wormlet مستقرشده که در svcmgmt.exe یافت شده، یعنی SCM wormlet، نمونهای از راهبرد انتشار ساده اما مؤثر مبتنی بر قابلیتهای بومی ویندوز و امنیت ضعیف شبکه است. این جزء محیطهای Windows 2000/XP را هدف میگیرد و به گذرواژههای مدیریتی پیشفرض یا ضعیف روی file shareها متکی است. همۀ انتشار از طریق APIهای استاندارد کنترل سرویس و اشتراک فایل ویندوز انجام میشود؛ نمونهای اولیه از انتشاری که بهجای پروتکلهای شبکه سفارشی، بر ویژگیهای مدیریت داخلی تکیه دارد.
پیش از اجرای این گردش کار، یک kill-switch پیشنصب محیط را بررسی میکند. روال ok_to_install() تابع ok_to_propagate() را فراخوانی میکند و انتشار فقط زمانی مجاز است که دستی اجبار شده باشد یا با بررسی کلیدهای رجیستری مرتبط، مطمئن شود محصولات امنیتی رایج وجود ندارند. این روال فهرستی از کلیدهای فروشندگان را طی میکند و اگر هرکدام حاضر باشند نصب را متوقف میکند تا از استقرار در محیطهای پایششده جلوگیری شود.
برای ابزاری با این قدمت، این سطح از آگاهی محیطی قابل توجه است. هرچند فهرست محصولات شاید جامع به نظر نرسد، احتمالاً محصولاتی را بازتاب میدهد که اپراتورها انتظار داشتند در شبکههای هدف حاضر باشند و فناوری تشخیص آنها میتوانست پنهانماندن یک عملیات مخفی را تهدید کند:
HKLM\SOFTWARE\Symantec\InstalledApps
HKLM\SOFTWARE\Sygate Technologies, Inc.\Sygate Personal Firewall
HKLM\SOFTWARE\TrendMicro\PFW
HKLM\SOFTWARE\Zone Labs\TrueVector
HKLM\SOFTWARE\F-Secure
HKLM\SOFTWARE\Network Ice\BlackIce
HKLM\SOFTWARE\McAfee.com\Personal Firewall
HKLM\SOFTWARE\ComputerAssociates\eTrust EZ Armor
HKLM\SOFTWARE\RedCannon\Fireball
HKLM\SOFTWARE\Kerio\Personal Firewall 4
HKLM\SOFTWARE\KasperskyLab\InstalledProducts\Kaspersky Anti-Hacker
HKLM\SOFTWARE\Tiny Software\Tiny Firewall
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Look n Stop 2.05p2
HKCU\SOFTWARE\Soft4Ever
HKLM\SOFTWARE\Norman Data Defense Systems
HKLM\SOFTWARE\Agnitum\Outpost Firewall
HKLM\SOFTWARE\Panda Software\Firewall
HKLM\SOFTWARE\InfoTeCS\TermiNET
یک جزء جداگانه در حالت کاربر، svcmgmt.dll، کانال گزارشدهی حداقلی فراهم میکند. این DLL که در انبار داخلی حامل قرار دارد، از طریق API ویندوزی AddConnectNotify() ثبت میشود تا هر بار که سامانه با استفاده از Remote Access Service یا RAS، مسئول اتصالهای dial-up و VPNهای اولیه دهۀ ۲۰۰۰، یک اتصال شبکهای جدید برقرار میکند، فراخوانی شود.
| نام ماژول | User Module (connotifydll) |
| نام فایل | svcmgmt.dll |
| اندازه فایل | 45056 bytes |
| MD5 | 410eddfc19de44249897986ecc8ac449 |
| SHA256 | 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9 |
| زمان لینک | 2005-06-06 18:42:45 UTC |
| نوع | PE32 DLL (i386, 4 sections) |
هنگام فراخوانی، DLL یک رشته مبهمسازیشده را رمزگشایی میکند تا named pipe با مسیر \\.\pipe\p577 را به دست آورد، تلاش میکند به pipe محلی وصل شود، و نامهای اتصال دور و محلی را پیش از بستن pipe در آن مینویسد. این ماژول بهصورت مستقل اجرا نمیشود و باید توسط یک فرایند میزبان ثبت شده باشد.
fast16.sys؛ درایور فایلسیستم برای خرابکاری دقیق
درایور هستهای fast16.sys قدرتمندترین جزء این چارچوب است.
درایور در گروه کلاس SCSI با Start=0 (بوت) و Type=2 (درایور فایلسیستم) پیکربندی شده است. در مرحلهای اولیه، در کنار درایورهای دیسک، خودکار بارگذاری میشود و خود را بالای هر دستگاه فایلسیستم، از جمله NTFS، FAT و MRxSMB، قرار میدهد. در ورود، این کارها را انجام میدهد:
- Windows Prefetcher را با تنظیم مقدار
EnablePrefetcherروی 0 زیر کلیدPrefetchParametersمتعلق به Session Manager غیرفعال میکند و درخواستهای بعدی code-page را وادار میکند از کل پشته فایلسیستم عبور کنند؛ - APIهای هسته را با استفاده از یک رمز رشتهای ساده مبتنی بر XOR و پیمایش
ntoskrnl.exeبهصورت پویا resolve میکند؛ \Device\fast16و\??\fast16را با مقدار سفارشیDeviceTypeبرابر 0xA57C آشکار میکند که بهعنوان نشانگر جرمشناسانۀ ثانویه عمل میکند.
درایور با IoRegisterFsRegistrationChange ثبت میشود تا بتواند یک شیء دستگاه worker را بالای هر دستگاه فایلسیستم فعال و تازهساختهشده متصل کند. همۀ I/O Request Packetهای مرتبط، از جمله IRP_MJ_CREATE، IRP_MJ_READ، IRP_MJ_CLOSE، IRP_MJ_QUERY_INFORMATION، IRP_MJ_FILE_SYSTEM_CONTROL و مسیرهای Fast I/O مرتبط، از طریق این دستگاههای worker مسیریابی میشوند.
با وجود بارگذاری هنگام بوت، موتور تزریق کد در سطح هسته فقط پس از باز شدن explorer.exe در سامانه فعال میشود. این طراحی پایش و وصلهکردن پرهزینه را تا زمانی که محیط دسکتاپ در دسترس شود به تعویق میاندازد و از اثر غیرضروری بر کارایی اصلی بوت جلوگیری میکند.
هدفگیری باریک از طریق آثار کامپایلر Intel
پس از فعال شدن، fast16.sys روی فایلهای اجرایی تمرکز میکند. یک فایل زمانی هدف معتبر است که دو معیار را داشته باشد:
- نام فایل با
.EXEپایان یابد. - بلافاصله پس از آخرین سرآیند بخش PE، یک رشته ASCII قابل چاپ با آغاز
Intelوجود داشته باشد.
این منطق گزینش به فایلهای اجرایی کامپایلشده با کامپایلر Intel C/C++ اشاره دارد؛ کامپایلری که غالباً فرادادههای خود را در همین ناحیه قرار میداد. این نشان میدهد توسعهدهندگان میدانستند نرمافزار هدفشان با این toolchain ساخته شده است.
برای فایلهایی که این معیارها را دارند، درایور در حافظه یک تغییر در سرآیند PE انجام میدهد. دو بخش اضافی، .xdata و .pdata، تزریق میکند و آنها را با بایتهایی از بخش کد اصلی پر میکند؛ در نتیجه شمار بخشها افزایش مییابد و یک نسخۀ پاک از کد نگه داشته میشود. هدف احتمالاً افزایش پایداری در عین امکان وصلهکردن گسترده بوده است، هرچند بدون شناسایی باینریهای هدف اصلی، این فقط یک فرضیۀ آگاهانه میماند.
وصلهکردن قاعدهمحور و خرابسازی ممیز شناور
موتور وصلهکردن یک ابزار پیمایش و تغییر مینیمال، بهینهشده برای کارایی و حالتمند است. این موتور با مجموعهای از ۱۰۱ قاعده پیکربندی شده که هرکدام منطق تطبیق الگو و جایگزینی دارند. برای حفظ کارایی، موتور:
- از یک آرایۀ dispatch بهاندازۀ ۲۵۶ بایت استفاده میکند و فقط مقدارهای بایت آغازین شمار کمی از الگوهای یکتا را علامت میزند؛
- درون الگوها wildcard میپذیرد تا یک قاعده بتواند چند گونه کامپایلر-بهینهشده از همان کد را تطبیق دهد؛
- از پرچمهای حالت پشتیبانی میکند که برخی قواعد میتوانند تنظیم یا بررسی کنند و به این ترتیب زنجیرههای چندمرحلهای تغییر، مشابه موتورهای پیشرفتۀ اسکن ضدویروس، ممکن میشود.
بیشتر الگوهای وصلهشده با کد استاندارد x86 برای ربودن یا اثرگذاری بر جریان اجرا مطابقت دارند. یک بلوک تزریقشده متفاوت است: دنبالهای بزرگتر و پیچیده از دستورهای Floating Point Unit یا FPU که به محاسبات دقیق و scale کردن مقدارها در آرایههای داخلی اختصاص دارد. این کد یک تابع محاسباتی مستقل است و به ربایش جریان کد یا هر نوع تزریق کد مخرب معمول دیگر ارتباطی ندارد.
برای فهمیدن اینکه درایور انتظار دیدن چه چیزی را داشت، پژوهشگران قواعد وصلهکردن را به امضاهای YARA هگزادسیمال تبدیل کردند و آنها را روی یک corpus بزرگ و متناسب با همان دوره اجرا کردند. نتایج نرخ اصابت بسیار پایینی نشان داد: کمتر از ده فایل با دو یا چند الگو تطبیق داشت. اما همین تطبیقها یک مضمون روشن داشتند: ابزارهای محاسبات دقیق در حوزههای تخصصی مانند مهندسی عمران، فیزیک و شبیهسازی فرایندهای فیزیکی.
وصله FPU در fast16.sys برای خراب کردن کنترلشدۀ این روالها نوشته شده بود تا خروجیهای جایگزین تولید کند. این موضوع fast16 را از قلمرو ابزار جاسوسی عمومی خارج و وارد دسته خرابکاری راهبردی میکند. چارچوب میتوانست با وارد کردن خطاهای کوچک اما نظاممند در محاسبات جهان فیزیکی، برنامههای پژوهش علمی را تضعیف یا کند کند، سامانههای مهندسی را در گذر زمان فرسوده سازد یا حتی به آسیب فاجعهبار کمک کند.
چنین عملیات خرابکاریای با راستیآزمایی محاسبات روی سامانهای جداگانه خنثی میشد. اما در محیطی که چند سامانه همان شبکه و وضعیت امنیتی را به اشتراک میگذاشتند، حامل کرمپذیر ماژول درایور مخرب را روی آن سامانهها نیز مستقر میکرد و احتمال اینکه یک محاسبۀ مستقل از خروجی خرابشده متفاوت باشد را کاهش میداد.
در زمان انتشار این پژوهش، SentinelLABS هنوز نتوانسته همۀ باینریهای هدف را شناسایی کند تا ماهیت خرابکاری مورد نظر را بفهمد. پژوهشگران از مشارکت جامعۀ گستردهتر امنیت اطلاعات استقبال کردهاند و قواعد YARA را برای شکار این الگوها در پیوست آوردهاند.
موتور وصلهکردن داده
حتی پس از تحلیل عمیق، درایور fast16 فریبندهوار ساده به نظر میرسد. زیر این کد حداقلی، یک موتور قاعدهمحورِ درونحافظهای قرار دارد که هنگام خواندهشدن فایلهای اجرایی از دیسک، بیصدا کد را وصله میکند.
این موتور به مجموعهای فشرده از کمی بیش از صد قاعدۀ تطبیق الگو و یک dispatch table کوچک تکیه دارد تا فقط بایتهایی را بررسی کند که احتمالاً مهم هستند. بیشتر الگوها با دستورهای معمول x86 متناظرند، اما یکی برجسته است: بلوکی بزرگتر از کد ممیز شناور یا FPU که به محاسبات دقیق اختصاص دارد. این روال تزریقشده مقدارها را در سه آرایۀ داخلی که به تابع داده میشوند scale میکند و محاسبات را ظریف تغییر میدهد.
بدون دانستن باینریها و بارهای کاری دقیقی که وصله میشدند، نمیتوان بهطور کامل مشخص کرد این آرایهها چه چیزی را نشان میدهند؛ فقط میتوان گفت هدف دستکاری نتایج عددی بود، نه دسترسی غیرمجاز، انتشار بدافزار یا دیگر اهداف معمول بدافزاری.
هدفهای وصله
بهترین سرنخها درباره قربانیان مورد نظر از تطبیق این الگوها با corpusهای نرمافزاری بزرگ و متناسب با همان دوره به دست میآید. قویترین همپوشانیها به سه مجموعۀ مهندسی و شبیهسازی دقیق از نیمۀ دهۀ ۲۰۰۰ اشاره دارند: LS-DYNA 970، PKPM و پلتفرم مدلسازی هیدرودینامیک MOHID؛ همگی برای سناریوهایی مانند آزمون تصادف، تحلیل سازه و مدلسازی محیطی استفاده میشوند.
بهویژه LS-DYNA در گزارشهای عمومی درباره نقضهای مشکوک ایران در بخش T برجام، در مطالعههای مربوط به مدلسازی رایانهای مرتبط با توسعه جنگافزار هستهای، ذکر شده است.
ردپاهای کامپایلر و تبار
پژوهشگران هنگام تلاش برای فهم تبار این مجموعۀ غیرمعمول از اجزا، به یک نکته عجیب برخوردند. رشتههایی با قالب @(#)par.h $Revision: 1.3 $ درون باینریها به یک قرارداد کنترل منبع غیرمعمول اشاره میکنند. پیشوند @(#) ویژگی ابزارهای قدیمی Unix Source Code Control System یا SCCS و Revision Control System یا RCS از دهههای ۱۹۷۰ و ۱۹۸۰ است. این نشانگرها بر اجرا اثر نمیگذارند و در درایورهای هستهای مدرن ویندوزی زائد هستند.
یافتن آثار SCCS/RCS در کد ویندوزی نیمۀ دهۀ ۲۰۰۰ نادر است. این موضوع بهشدت نشان میدهد نویسندگان این چارچوب توسعهدهندگان معمولِ صرفاً ویندوزی نبودند. در عوض، به نظر میرسد مهندسانی بلندمدت بودهاند که فرهنگ و toolchain آنها از محیطهای قدیمیتر و بسیار امن Unix آمده؛ محیطهایی که اغلب با کار دولتی یا نظامیدرجه مرتبطاند. این جزئیات از این دیدگاه پشتیبانی میکند که fast16 از یک برنامۀ توسعهای برخوردار، دیرپا و دارای منابع کافی آمده است.
فسیل دیجیتالی با پیامدهای مدرن
svcmgmt.exe نزدیک به یک دهه پیش در VirusTotal بارگذاری شد. هنوز تقریباً هیچ تشخیصی دریافت نمیکند: یک موتور آن را بهطور کلی مخرب طبقهبندی میکند و همان هم با اطمینان محدود. برای یک حامل خودانتشار پنهانکار که یکی از پیچیدهترین درایورهای خرابکاری دوران خود را مستقر میکند، این سابقه تشخیص قابل توجه است.
fast16 همراه با حضورش در امضاهای ShadowBrokers برای Territorial Dispute یا TeDi، بازنگری در فهم تاریخی ما از خط زمانی توسعه عملیات جدی خرابکاری سایبری پنهان را ضروری میکند. کد نشان میدهد که:
- خرابکاری سایبری در سطح دولتی علیه اهداف فیزیکی تا نیمۀ دهۀ ۲۰۰۰ کاملاً توسعه یافته و مستقر شده بود؛
- موتورهای اسکریپتنویسی تعبیهشده، هدفگیری باریک مبتنی بر کامپایلر و وصلهکردن در سطح هسته، بسیار جلوتر از خانوادههای شناختهشدهتر، یک معماری منسجم ساخته بودند؛
- برخی از مهمترین قابلیتهای تهاجمی در این اکوسیستم ممکن است هنوز در مجموعهها بهعنوان نمونههای «قدیمی اما جالب» قرار داشته باشند، بیآنکه زمینهای وجود داشته باشد که اهمیت واقعی آنها را برجسته کند.
در داخل، عملیات تقریباً هیچ نشان تجاری آشکاری ندارد. یکی از معدود برچسبهای خوانای انسانی، طعنهآمیز و کمحرف است:
*** Nothing to see here – carry on ***
سالها هیچ گزارش عمومی، هیچ کارزار نامگذاریشده و هیچ حادثۀ تیترساز مرتبط با این چارچوب وجود نداشت.
در تصویر گستردهتر تکامل APTها، fast16 شکاف میان برنامههای توسعهای اولیه و عمدتاً نامرئی و ابزارهای
مبتنی بر Lua و LuaJIT
بعدی و مستندتر را پر میکند. این چارچوب مرجعی است برای فهم اینکه بازیگران پیشرفته چگونه درباره ایمپلنتهای بلندمدت، خرابکاری و توانایی یک دولت برای بازشکلدادن جهان فیزیکی از طریق نرمافزار فکر میکنند. fast16 پیشدرآمد خاموش شکلی تازه از حکمرانی دولتی بود؛ پیشدرآمدی که تا امروز در پنهانکاری خود موفق مانده بود.
قدردانی
SentinelLABS از Silas Cutler و Costin Raiu برای مشارکتهایشان در مسیر این پژوهش تشکر کرده است. این تحقیق به یاد Sergey Mineev، شکارچی برجستۀ APT، تقدیم شده است؛ کسی که بسیاری از تکنیکهای ممکنکنندۀ این کشف را پیشگامانه به کار گرفت.
پیوست: الگوهای موتور وصلهکردن و نامزدهای هدف
الگوهای تطبیق استخراجشده
48 89 84 24 9C 00 00 00 4B 0F 8F 79 FF FF FF 00
D8 E1 D9 5D FC D9 04 00
55 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 00
89 4D C8 8B FB 8B C8 00
8B 4C 24 0C 8B 01 83 F8 63 00
39 2D ?? ?? ?? ?? 0F 84 F4 00 00 00 8B 35 ?? ?? ?? ?? 2B 35
7C 02 89 C6 89 35 ?? ?? ?? ?? 89 B4 24 D0
83 3D ?? ?? ?? ?? 00 0F 84 70 BD FF FF 00
BE 07 00 00 00 BF 04 00 00 00 BB 02 00 00 00 00
8B 4D 10 C1 E2 04 8B 19 83 EA 30 8B CB 49
8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00
0F 8F A5 00 00 00 A1 ?? ?? ?? ?? 83 F8 14 7D 0D
8B 5D B0 0F 85 ?? ?? ?? ?? 8D 34 9D ?? ?? ?? ?? 8D 14 9D 00 0F 8E 1B 03 00 00 D9 05
8B 45 44 6B 00 04 D9 05 ?? ?? ?? ?? D8 B0
E9 7E 04 00 00 8B 74 24 1C 8B 54 24 14 85
83 39 63 0F 85 21 03 00 00 8B EE 85 F6 0F
85 DB 8B 55 D4 75 2C 89 35 00
75 18 8D 35 ?? ?? ?? ?? 56 8D 3D 00
8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? EB 0E 83 EC 04 56 57 53 E8 95 00
D8 34 85 ?? ?? ?? ?? 8B 44 ?? ?? 8B CA 00
8B 5D 0C 8B 55 08 8B 36 8B 00
8D 04 BD ?? ?? ?? ?? 03 DF 00
8B EE 85 F6 0F 8E ?? ?? ?? ?? 8D 1C BD 00
D9 04 9D ?? ?? ?? ?? 83 ED 04 05 10 00 00 00 D8 0D 00
75 2C 89 35 ?? ?? ?? ?? 89 05 ?? ?? ?? ?? 89 15
89 55 F4 8B F9 8B D3 03 FB C1 E2 02 89 35
40 23 72 65 63 24 65 69 69 6E 20 2E 30 24 D9 5D 00 D9 03 D8 0D ?? ?? ?? ?? D8 0D 00
DF E0 F6 C4 41 A1 ?? ?? ?? ?? 74 5A
FF 35 ?? ?? ?? ?? E8 ?? ?? ?? ?? 9D D9 E0 D9 1D ?? ?? ?? ?? 8B 4C
6A 46 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? 6A 03
D8 05 ?? ?? ?? ?? D9 55 00 9C
C2 08 00 A1 ?? ?? ?? ?? 8B 0C 85 ?? ?? ?? ?? 89 0E 00
83 EC 04 53 E8 ?? ?? ?? ?? EB 09 83 EC 04 53 00
D8 1D ?? ?? ?? ?? DF E0 F6 C4 41 B8 00 00 00 00 75 05 B8 01 00 00 00 85 C0 74 11 6A 29 00
2B DA 89 3C 03 83 3D 00
D9 5D C0 8B 4D C0 D9 45 E0 89 0E 00
8B 05 ?? ?? ?? ?? 8B 0D ?? ?? ?? ?? 0F 85 7E 00 00 00 0F AF 15 00
B9 01 00 00 00 C1 E7 02 8B BF ?? ?? ?? ?? 8B D7 85 FF 8B 55 30 8B 45 30 D8 C9 8B 75 2C 00 9A 8B 00 00 00 1B 00 90 0F 94 C3 0B D8 33 D2 83 3D 00
2B FB 8B DE C1 E3 02 89 7D A0 03 5D A0 8B 03 F7 F7 DB 0C 02 89 35
0F 0F 94 C0 23 C3 33 D2
8B 55 30 8B 75 2C D8 C9 8B 45 30 00
DD 05 ?? ?? ?? ?? 8B 05 ?? ?? ?? ?? 8B 15 ?? ?? ?? ?? 0F AF 05 ?? ?? ?? ?? 8B 1D ?? ?? ?? ?? 0F AF 15
68 28 00 00 00 57 E8 ?? ?? ?? ?? 8B 1D ?? ?? ?? ?? 8B 35 ?? ?? ?? ?? 0F AF 1D ?? ?? ?? ?? 8B 3D ?? ?? ?? ?? 8B 05
8B 75 38 8B 4D 34 D8 C9 8B 00
8B 55 88 8B 5D B0 83 7D 84 01
55 8B EC 83 EC 2C 33 D2 53 56 57 8B
55 8B EC 83 EC 2C B9 46 00 00 00 53 56 57 8B 00
نامزد هدف وصله ۱: مجموعه نرمافزاری LS-DYNA 970
مجموعه LS-DYNA یک نرمافزار قدرتمند شبیهسازی مهندسی است که برای تحلیل رفتار مواد و سازهها در شرایط شدید به کار میرود. مهندسان از این ابزار برای شبیهسازی رخدادهای فیزیکی و مدلسازی شرایط، بدون انجام آزمایشهای پرهزینه یا خطرناک، استفاده میکنند.
LS-DYNA برای مدیریت رخدادهای پویا و پیچیدهای طراحی شده که با سرعت رخ میدهند؛ مانند تصادف خودرو، انفجار، برخورد، شکلدهی فلز و فرایندهای تولید. این نرمافزار معمولاً در شرکتهای خودروسازی، مهندسی هوافضا، پژوهش دفاعی و نظامی، و نیز کاربردهای تولید و علم مواد استفاده میشد. توسعه LS-DYNA از سال ۱۹۷۶ ادامه داشته است.
| MD5 | 1d2f32c57ae2f2013f513d342925e972 |
| SHA1 | 2fa28ef1c6744bdc2021abd4048eefc777dccf22 |
| SHA256 | 5966513a12a5601b262c4ee4d3e32091feb05b666951d06431c30a8cece83010 |
| اندازه فایل | 5,225,591 bytes |
| زمان لینک | 2003-10-24 16:34:57 UTC |
| نوع فایل | PE32 executable for MS Windows 4.00 (console), Intel i386, 7 sections |
نامزد هدف وصله ۲: مجموعه نرمافزاری PKPM
Practical Structural Design and Construction Software یا PKPM یک مجموعۀ نرمافزاری CAD مهندسی سازه است که در چین برای طراحی ساختمان بهطور گسترده استفاده میشود. این مجموعه چند ماژول اجرایی را در بر میگیرد که چرخه کامل طراحی سازۀ ساختمان را پوشش میدهند؛ از جانمایی سازهای و طراحی برش بتن برای تیرها و ستونها تا تحلیل لرزهای، باد و بار برای ساختمانهای بلندمرتبه.
موتور تحلیل مرکزی PKPM، یعنی SATWE یا Space Analysis of Tridimensional Wired Elements، تحلیل سهبعدی سازه را در طبقات، تیرها، ستونها، دیوارها و قابها انجام میدهد. PKPM در مهندسی عمران چین بسیار پرکاربرد است.
ماژول طراحی برش بتن در PKPM
| MD5 | af4461a149bfd2ba566f2abefe7dcde4 |
| SHA1 | 586edef41c3b3fba87bf0f0346c7e402f86fc11e |
| SHA256 | 09ca719e06a526f70aadf34fb66b136ed20f923776e6b33a33a9059ef674da22 |
| اندازه فایل | 7716864 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections |
| زمان لینک | 2011-08-26 10:58:17 UTC |
ماژولهای CAD سازۀ ساختمان در PKPM
| MD5 | 49a8934ccd34e2aaae6ea1e6a6313ffe |
| SHA1 | 3ce5b358c2ddd116ac9582efbb38354809999cb5 |
| SHA256 | 8b018452fdd64c346af4d97da420681e2e0b55b8c9ce2b8de75e330993b759a0 |
| اندازه فایل | 11849728 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 4 sections |
| زمان لینک | 2005-12-01 08:35:46 UTC |
| MD5 | e0c10106626711f287ff91c0d6314407 |
| SHA1 | 650fc6b3e4f62ecdc1ec5728f36bb46ba0f74d05 |
| SHA256 | 06361562cc53d759fb5a4c2b7aac348e4d23fe59be3b2871b14678365283ca47 |
| اندازه فایل | 16355328 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 5 sections |
| زمان لینک | 2012-07-07 08:47:11 UTC |
موتور تحلیل سازه SATWE در PKPM
| MD5 | 2717b58246237b35d44ef2e49712d3a2 |
| SHA1 | d475ace24b9aedebf431efc68f9db32d5ae761bd |
| SHA256 | bd04715c5c43c862c38a4ad6c2167ad082a352881e04a35117af9bbfad8e5613 |
| اندازه فایل | 9908224 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections |
| زمان لینک | 2011-01-12 06:37:39 UTC |
| MD5 | daea40562458fc7ae1adb812137d3d05 |
| SHA1 | 1ce1111702b765f5c4d09315ff1f0d914f7e5c70 |
| SHA256 | da2b170994031477091be89c8835ff9db1a5304f3f2f25344654f44d0430ced1 |
| اندازه فایل | 8454144 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 7 sections |
| زمان لینک | 2012-11-29 03:10:12 UTC |
| MD5 | 2740a703859cbd8b43425d4a2cacb5ec |
| SHA1 | ca665b59bc590292f94c23e04fa458f90d7b20c9 |
| SHA256 | aeaa389453f04a9e79ff6c8b7b66db7b65d4aaffc6cac0bd7957257a30468e33 |
| اندازه فایل | 16568320 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 5 sections |
| زمان لینک | 2014-12-30 03:23:43 UTC |
| MD5 | ebff5b7d4c5becb8715009df596c5a91 |
| SHA1 | 829f8be65dfe159d2b0dc7ee7a61a017acb54b7b |
| SHA256 | 37414d9ca87a132ec5081f3e7590d04498237746f9a7479c6b443accee17a062 |
| اندازه فایل | 8089600 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections |
| زمان لینک | 2009-04-22 01:46:46 UTC |
| MD5 | cb66a4d52a30bfcd980fe50e7e3f73f0 |
| SHA1 | e6018cd482c012de8b69c64dc3165337bc121b86 |
| SHA256 | 66fe485f29a6405265756aaf7f822b9ceb56e108afabd414ee222ee9657dd7e2 |
| اندازه فایل | 9219072 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 8 sections |
| زمان لینک | N/A |
فایلهای CAD اضافی PKPM
| MD5 | 075b4aa105e728f2b659723e3f36c72c |
| SHA1 | 145ef372c3e9c352eaaa53bb0893749163e49892 |
| SHA256 | c11a210cb98095422d0d33cbd4e9ecc86b95024f956ede812e17c97e79591cfa |
| اندازه فایل | 6852608 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections |
| زمان لینک | 2012-06-18 10:01:54 UTC |
| MD5 | cf859f164870d113608a843e4a9600ab |
| SHA1 | 952ed694b60c34ba12df9d392269eae3a4f11be4 |
| SHA256 | 7e00030a35504de5c0d16020aa40cbaf5d36561e0716feb8f73235579a7b0909 |
| اندازه فایل | 8392704 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections |
| زمان لینک | 2012-11-29 03:10:12 UTC |
نامزد ۳: مجموعه نرمافزاری MOHID
Modelo Hidrodinâmico، به پرتغالی به معنای «مدل هیدرودینامیک»، یا MOHID، یک سامانه متنباز مدلسازی آب است که توسط MARETEC، مرکز فناوری دریایی و محیطی در Instituto Superior Técnico در لیسبون پرتغال، توسعه یافته است. این نرمافزار برای مدلسازی آبهای دریایی و ساحلی استفاده میشود و هیدرودینامیک، شبیهسازی کیفیت آب، انتقال رسوب، مدلسازی نشت نفت و ردیابی ذرات لاگرانژی را پوشش میدهد.
در زمان انتشار این پژوهش، SentinelLABS نمیتواند هدف را بهطور قطعی شناسایی کند و از مشارکت جامعۀ گستردهتر پژوهشی برای کمک به فهم آثار مورد نظر از حمله به این نرمافزار استقبال کرده است.
| MD5 | f4dbbb78979c1ee8a1523c77065e18a5 |
| SHA1 | 9e089a733fb2740c0e408b2a25d8f5a451584cf6 |
| SHA256 | e775049d1ecf68dee870f1a5c36b2f3542d1182782eb497b8ccfd2309c400b3a |
| اندازه فایل | 5443584 bytes |
| نوع فایل | PE32 executable for MS Windows 4.00 (console), Intel i386, 3 sections |
| زمان لینک | 2002-10-18 09:29:54 UTC |
شاخصهای آلودگی
| نام | fast16.sys |
| MD5 | 0ff6abe0252d4f37a196a1231fae5f26 |
| SHA1 | 92e9dcaf7249110047ef121b7586c81d4b8cb4e5 |
| SHA256 | 07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529 |
| نام | connotify.dll |
| MD5 | 410eddfc19de44249897986ecc8ac449 |
| SHA1 | 675cb83cec5f25ebbe8d9f90dea3d836fcb1c234 |
| SHA256 | 8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9 |
| نام | svcmgmt.exe |
| MD5 | dbe51eabebf9d4ef9581ef99844a2944 |
| SHA1 | de584703c78a60a56028f9834086facd1401b355 |
| SHA256 | 9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525 |
قواعد YARA
import "pe"
rule apt_fast16_carrier {
meta:
author = "SentinelLABS/vk"
date = "2025-04-07"
description = "Catches fast16 carrier, its Lua payload, and plaintext variants"
hash = "9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525"
strings:
$lua_magic = { 1B 4C 75 61 } //Lua bytecode magic
//Decrypted strings
$s1 = "build_wormlet_table"
$s2 = "unpropagate"
$s3 = "worm_install_failure_action"
$s4 = "implant_install_failure_action"
$s5 = "scm_wormlet_propagate_system"
$s6 = "scm_wormlet_install"
$s7 = "scm_wormlet_init"
$s8 = "scm_copy_payload"
$s9 = "get_logged_on_user"
$s10 = "logged_on_program"
$s11 = "phase_1_prop_delay"
$s12 = "connotify_pipename"
$s13 = "cndll_internal_name"
$s14 = "connotify_provider_key"
$s15 = "check_implant_reg_values"
$s16 = "set_implant_reg_values"
$s17 = "install_implant"
$s18 = "implant_installed"
$s19 = "implant_internal_name"
$s20 = "implant_files"
$s21 = "implant_owner"
$s22 = "install_worm"
$s23 = "start_worm"
$s24 = "implant_install_failure_action"
$s25 = "worm_install_failure_action"
$s26 = "ok_to_propagate"
$s27 = "no_firewall_check"
$s28 = "scm_wormlet"
$s29 = "implant_install_failure_action"
$s30 = "worm_install_failure_action"
//Encrypted strings
$e1 = { 98 18 A1 94 24 E3 A2 4C 61 C8 AE 04 DC 4E 03 CD 0D 9D F0 }
$e2 = { E8 76 53 6D D4 B9 6E 28 6C 5D C2 }
$e3 = { 7D B7 14 73 F0 C0 4D 53 BB F7 0A 4A 3A 63 05 92 EC 0A 11 BC 22 59 99 05 72 05 19 }
$e4 = { 88 5F 1B E4 45 56 75 4B A5 3D 19 0B 3F 30 5A 85 E2 BD D0 E7 1C 13 D0 1D BD D8 CF A1 88 DB }
$e5 = { 88 1E 54 4E 00 C1 EF 79 AA AD 9F 50 27 B5 B8 4C 32 06 D2 7B 32 E3 AF D6 DC D2 BB 83 }
$e6 = { 39 F9 BC E9 27 70 C4 3E 04 2A 7D E1 68 67 B7 ED D4 41 6A }
$e7 = { 13 FC 24 20 1F 20 74 1B E5 5F 59 56 D7 61 3E BD }
$e8 = { EF 94 49 63 33 41 62 F2 26 A6 48 DE 6D 7B A4 CF }
$e9 = { 36 5F 5E E5 C1 1A 17 6A 4E B9 94 52 1B DC C6 60 CA C7 }
$e10 = { B3 9C A3 F1 12 CC 52 74 34 5F 87 43 32 21 36 7B 2A }
$rk1 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Symantec\\InstalledApps"
$rk2 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Sygate Technologies, Inc.\\Sygate Personal Firewall"
$rk3 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\TrendMicro\\PFW"
$rk4 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Zone Labs\\TrueVector"
$rk5 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\F-Secure"
$rk6 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Network Ice\\BlackIce"
$rk7 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\McAfee.com\\Personal Firewall"
$rk8 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\ComputerAssociates\\eTrust EZ Armor"
$rk9 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\RedCannon\\Fireball"
$rk10 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Kerio\\Personal Firewall 4"
$rk11 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\KasperskyLab\\InstalledProducts\\Kaspersky Anti-Hacker"
$rk12 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Tiny Software\\Tiny Firewall"
$rk13 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Look n Stop 2.05p2"
$rk14 = "HKEY_CURRENT_USER\\SOFTWARE\\Soft4Ever"
$rk15 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Norman Data Defense Systems"
$rk16 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Agnitum\\Outpost Firewall"
$rk17 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Panda Software\\Firewall"
$rk18 = "HKEY_LOCAL_MACHINE\\SOFTWARE\\InfoTeCS\\TermiNET"
$c1 = { 86 3A D6 02 } // A crypto constant
$c2 = { 01 E1 F5 05 } // A crypto constant
$code1 = { 8B 00 // mov eax, [eax]
2D 2F 34 21 33 // sub eax, 3321342Fh
} // Code to deobfuscate real storage container length
$stor1 = { CC 00 00 00 05 00 00 00 66 69 6C 65 00 CD 00 00 00 } //Storage record with file string
condition:
( uint16(0)==0x5a4d and filesize < 10MB and (
( 3 of ($s*) ) or
( 12 of ($rk*) ) or
( any of ($e*) ) or
( all of ($c*) and @c2-@c1 < 0x100 ) or
( $code1 ) or
( $stor1 )) ) or
( $lua_magic and 7 of ($s*) )
}
rule apt_fast16_driver {
meta:
author = "SentinelLABS/vk"
last_modified = "2026-04-15"
description = "Catches fast16 driver or related project files"
hash = "07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529"
strings:
$a1 = "@(#)foo.c : "
$a2 = "@(#)par.h : "
$a3 = "@(#)pae.h : "
$a4 = "@(#)fao.h : "
$a5 = "@(#)uis.h : "
$a6 = "@(#)ree.h : "
$a7 = "@(#)fir.h : "
$a8 = "@(#)fir.c : "
$a9 = "@(#)par.h : "
$a10 = "@(#)pae.h : "
$a11 = "@(#)fao.h : "
$a12 = "@(#)uis.h : "
$a13 = "@(#)ree.h : "
$a14 = "@(#)fir.h : "
$a15 = "@(#)myy.h : "
$a16 = "@(#)fic.h : "
$a17 = "@(#)ree.h : "
$a18 = "@(#)ree.c : "
$dev1 = "\\Device\\fast16"
$dev2 = "\\??\\fast16"
$pdb1 = "C:\\buildy\\"
$pdb2 = "driver\\fd\\i386\\fast16.pdb"
$devtype = { 68 7C A5 00 00 } // push 0A57Ch ; DeviceType
$api1 = {50 C6 45 D4 16 C6 45 D5 2B C6 45 D6 12 C6 45 D7 3F C6 45 D8 3F C6 45 D9 3C C6 45 DA 30 C6 45 DB 32 C6 45 DC 27 C6 45 DD 36 C6 45 DE 03 C6 45 DF 3C C6 45 E0 3C C6 45 E1 3F C6 45 E2 53 } // push xored "ExAllocatePool"
$api2 = {C6 45 A8 16 C6 45 A9 2B C6 45 AA 12 C6 45 AB 3F C6 45 AC 3F C6 45 AD 3C C6 45 AE 30 C6 45 AF 32 C6 45 B0 27 C6 45 B1 36 C6 45 B2 03 C6 45 B3 3C C6 45 B4 3C C6 45 B5 3F C6 45 B6 04 C6 45 B7 3A C6 45 B8 27 C6 45 B9 3B C6 45 BA 07 C6 45 BB 32 C6 45 BC 34 C6 45 BD 53} // push xored "ExAllocatePoolWithTag"
$api3 = {C6 45 E4 16 C6 45 E5 2B C6 45 E6 15 C6 45 E7 21 C6 45 E8 36 C6 45 E9 36 C6 45 EA 03 C6 45 EB 3C C6 45 EC 3C C6 45 ED 3F C6 45 EE 53} // push xored "ExFreePool"
$api4 = {C6 45 C0 16 C6 45 C1 2B C6 45 C2 15 C6 45 C3 21 C6 45 C4 36 C6 45 C5 36 C6 45 C6 03 C6 45 C7 3C C6 45 C8 3C C6 45 C9 3F C6 45 CA 04 C6 45 CB 3A C6 45 CC 27 C6 45 CD 3B C6 45 CE 07 C6 45 CF 32 C6 45 D0 34 C6 45 D1 53} // push xored "ExFreePoolWithTag"
condition:
filesize < 10MB and
( uint16(0)==0x5a4d and
( ( 2 of ($pdb*) ) or
( $pdb1 and 1 of ($a*) ) or
( #devtype == 3 and
pe.machine == pe.MACHINE_I386 and
pe.subsystem == pe.SUBSYSTEM_NATIVE) or
any of ($api*) or
2 of ($dev*))) or
( 6 of ($a*))
}
rule clean_fast16_patchtarget {
meta:
author = "SentinelLABS/vk"
last_modified = "2026-04-15"
description = "Detects fast16 patch target software (most probably clean)"
hash = "8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9"
strings:
$el0 = { 48 89 84 24 9C 00 00 00 4B 0F 8F 79 FF FF FF 00 }
$el10 = { D8 E1 D9 5D FC D9 04 00 }
$el12 = { 55 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 00 }
$el13 = { 89 4D C8 8B FB 8B C8 00 }
$el14 = { 8B 4C 24 0C 8B 01 83 F8 63 00 }
$el16 = { 39 2D ?? ?? ?? ?? 0F 84 F4 00 00 00 8B 35 ?? ?? ?? ?? 2B 35 }
$el2 = { 7C 02 89 C6 89 35 ?? ?? ?? ?? 89 B4 24 D0 }
$el23 = { 83 3D ?? ?? ?? ?? 00 0F 84 70 BD FF FF 00 }
$el25 = { BE 07 00 00 00 BF 04 00 00 00 BB 02 00 00 00 00 }
$el26 = { 8B 4D 10 C1 E2 04 8B 19 83 EA 30 8B CB 49 }
$el28 = { 8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00 }
$el3 = { 0F 8F A5 00 00 00 A1 ?? ?? ?? ?? 83 F8 14 7D 0D }
$el30 = { 8B 5D B0 0F 85 ?? ?? ?? ?? 8D 34 9D ?? ?? ?? ?? 8D 14 9D 00 0F 8E 1B 03 00 00 D9 05 }
$el31 = { 8B 45 44 6B 00 04 D9 05 ?? ?? ?? ?? D8 B0 }
$el32 = { E9 7E 04 00 00 8B 74 24 1C 8B 54 24 14 85 }
$el33 = { 83 39 63 0F 85 21 03 00 00 8B EE 85 F6 0F }
$el34 = { 85 DB 8B 55 D4 75 2C 89 35 00 }
$el36 = { 75 18 8D 35 ?? ?? ?? ?? 56 8D 3D 00 }
$el37 = { 8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? EB 0E 83 EC 04 56 57 53 E8 95 00 }
$el39 = { D8 34 85 ?? ?? ?? ?? 8B 44 ?? ?? 8B CA 00 }
$el4 = { 8B 5D 0C 8B 55 08 8B 36 8B 00 }
$el40 = { 8D 04 BD ?? ?? ?? ?? 03 DF 00 }
$el41 = { 8B EE 85 F6 0F 8E ?? ?? ?? ?? 8D 1C BD 00 }
$el42 = { D9 04 9D ?? ?? ?? ?? 83 ED 04 05 10 00 00 00 D8 0D 00 }
$el43 = { 75 2C 89 35 ?? ?? ?? ?? 89 05 ?? ?? ?? ?? 89 15 }
$el45 = { 89 55 F4 8B F9 8B D3 03 FB C1 E2 02 89 35 }
$el46 = { 40 23 72 65 63 24 65 69 69 6E 20 2E 30 24 D9 5D 00 D9 03 D8 0D ?? ?? ?? ?? D8 0D 00 }
$el49 = { DF E0 F6 C4 41 A1 ?? ?? ?? ?? 74 5A }
$el51 = { FF 35 ?? ?? ?? ?? E8 ?? ?? ?? ?? 9D D9 E0 D9 1D ?? ?? ?? ?? 8B 4C }
$el53 = { 6A 46 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? 6A 03 }
$el56 = { D8 05 ?? ?? ?? ?? D9 55 00 9C }
$el59 = { C2 08 00 A1 ?? ?? ?? ?? 8B 0C 85 ?? ?? ?? ?? 89 0E 00 }
$el6 = { 83 EC 04 53 E8 ?? ?? ?? ?? EB 09 83 EC 04 53 00 }
$el61 = { D8 1D ?? ?? ?? ?? DF E0 F6 C4 41 B8 00 00 00 00 75 05 B8 01 00 00 00 85 C0 74 11 6A 29 00 }
$el63 = { 2B DA 89 3C 03 83 3D 00 }
$el68 = { D9 5D C0 8B 4D C0 D9 45 E0 89 0E 00 }
$el70 = { 8B 05 ?? ?? ?? ?? 8B 0D ?? ?? ?? ?? 0F 85 7E 00 00 00 0F AF 15 00 }
$el73 = { B9 01 00 00 00 C1 E7 02 8B BF ?? ?? ?? ?? 8B D7 85 FF 8B 55 30 8B 45 30 D8 C9 8B 75 2C 00 9A 8B 00 00 00 1B 00 90 0F 94 C3 0B D8 33 D2 83 3D 00 }
$el75 = { 2B FB 8B DE C1 E3 02 89 7D A0 03 5D A0 8B 03 F7 F7 DB 0C 02 89 35 }
$el80 = { 0F 0F 94 C0 23 C3 33 D2 }
$el81 = { 8B 55 30 8B 75 2C D8 C9 8B 45 30 00 }
$el83 = { DD 05 ?? ?? ?? ?? 8B 05 ?? ?? ?? ?? 8B 15 ?? ?? ?? ?? 0F AF 05 ?? ?? ?? ?? 8B 1D ?? ?? ?? ?? 0F AF 15 }
$el89 = { 68 28 00 00 00 57 E8 ?? ?? ?? ?? 8B 1D ?? ?? ?? ?? 8B 35 ?? ?? ?? ?? 0F AF 1D ?? ?? ?? ?? 8B 3D ?? ?? ?? ?? 8B 05 }
$el94 = { 8B 75 38 8B 4D 34 D8 C9 8B 00 }
$el96 = { 8B 55 88 8B 5D B0 83 7D 84 01 }
$el97 = { 55 8B EC 83 EC 2C 33 D2 53 56 57 8B }
$el99 = { 55 8B EC 83 EC 2C B9 46 00 00 00 53 56 57 8B 00 }
condition:
filesize < 20MB and
uint16(0) == 0x5A4D and
2 of them
}
rule apt_fast16_patch {
meta:
author = "SentinelLABS/vk"
last_modified = "2026-04-15"
description = "Detects the fast16 patch code. May be present in statically patched files or memory dumps."
hash = "0ff6abe0252d4f37a196a1231fae5f26"
strings:
$p1 = { 55 88 50 53 52 51 8D 64 24 94 DD 34 24 51 E8 ?? ?? ?? ?? 59 81 E9 14 00 00 00 8B 99 50 0F 00 00 83 FB 28 76 04 6A 31 }
$p2 = { 59 81 E9 EE 00 00 00 6A 02 BB B4 05 00 00 01 CB C6 03 EB 43 C6 03 15 8B 44 24 78 83 C0 07 89 81 EC 07 00 00 E9 BF 02 00 00 }
$p3 = { 50 53 52 51 E8 ?? ?? ?? ?? 59 81 E9 78 01 00 00 D9 99 C4 0F 00 00 8D 64 24 94 DD 34 24 FF B1 C4 0F 00 00 6A 02 EB 2D }
condition:
any of them
}