خلاصه اجرایی

نمای کلی

تحقیق 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
MD5dbe51eabebf9d4ef9581ef99844a2944
SHA1de584703c78a60a56028f9834086facd1401b355
SHA2569a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525
نوعPE32 executable for MS Windows 4.00 (console), Intel i386
زمان لینک2005-08-30 18:15:06 UTC

بررسی دقیق‌تر یک ماشین مجازی Lua 5.0 تعبیه‌شده و یک محفظۀ بایت‌کد رمزگذاری‌شده را نشان می‌دهد که نقطۀ ورود سرویس آن را باز می‌کند.

توسعه‌دهندگان محیط Lua را با این قابلیت‌ها گسترش داده بودند:

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
MD50ff6abe0252d4f37a196a1231fae5f26
SHA25607c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
نوع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 اشاره می‌کند. این فایل ۲۵۰ کیلوبایتی فهرست کوتاهی از نام درایورهاست که برای علامت‌گذاری ایمپلنت‌های احتمالی روی یک ماشین هدف به‌عنوان «دوستانه» یا برای «عقب‌کشیدن» و جلوگیری از برخورد با عملیات هکری دولت-ملت‌های رقیب استفاده می‌شد.

اسکرین‌شات از مقاله Crysys Lab درباره تحلیل افشای ShadowBrokers
اسکرین‌شات از مقاله Crysys Lab درباره تحلیل افشای ShadowBrokers.

راهنمایی مربوط به یک درایور خاص، یعنی fast16، هم منحصربه‌فرد است و هم بسیار غیرمعمول.

رشته موجود در svcmgmt.exe پیوند جرم‌شناسانۀ کلیدی این تحقیق را فراهم کرد. مسیر PDB امضاهای رفع تداخل عملیاتی افشاشده در سال ۲۰۱۷ را که اپراتورهای NSA از آن استفاده می‌کردند، به یک ماژول «حامل» چندحالته مبتنی بر Lua که در سال ۲۰۰۵ کامپایل شده بود، و در نهایت به محمولۀ پنهان آن پیوند می‌دهد: درایور هسته‌ای طراحی‌شده برای خرابکاری دقیق.

svcmgmt.exe؛ معماری حامل

جزء اصلی fast16، یعنی svcmgmt.exe، به‌عنوان یک ماژول حامل بسیار سازگارپذیر عمل می‌کند و براساس آرگومان‌های خط فرمان حالت عملیاتی خود را تغییر می‌دهد.

در داخل، svcmgmt.exe سه محمولۀ متمایز را نگه می‌دارد؛ از جمله بایت‌کد رمزگذاری‌شدۀ Lua که پیکربندی، منطق انتشار و هماهنگی، ConnotifyDLL کمکی و درایور هسته‌ای fast16.sys را مدیریت می‌کند.

ترکیب محموله Carrier
ترکیب محمولۀ حامل.

توسعه‌دهندگان با جدا کردن یک لفاف اجرایی نسبتاً پایدار از محموله‌های رمزگذاری‌شده و مأموریت‌محور، چارچوبی قابل استفاده مجدد و محفظه‌بندی‌شده ساختند که می‌توانست برای محیط‌های هدف و اهداف عملیاتی مختلف سازگار شود، در حالی که باینری حامل بیرونی در کارزارهای مختلف عمدتاً ثابت می‌ماند.

Wormletها و معماری اولیۀ گریز

اوایل دهۀ ۲۰۰۰ شاهد شمار زیادی کرم شبکه‌ای بود. بیشتر آن‌ها را علاقه‌مندان می‌نوشتند، سریع پخش می‌شدند و محمولۀ معناداری نداشتند یا بسیار کم داشتند. fast16 از همان دوره می‌آید، اما الگوی کاملاً متفاوتی را دنبال می‌کند که نشان‌دهندۀ منشأ آن به‌عنوان ابزار سطح دولتی است. این نخستین کرم شبکه‌ای ثبت‌شده مبتنی بر Lua است و با مأموریتی بسیار مشخص ساخته شده بود.

حامل طوری طراحی شده بود که مانند مهمات خوشه‌ای در قالب نرم‌افزار عمل کند و بتواند چند محمولۀ کرم‌پذیر را حمل کند؛ محموله‌هایی که در داخل با عنوان wormlet شناخته می‌شدند. ماژول svcmgmt.exe این گام‌ها را انجام می‌دهد:

  1. پیکربندی را آماده می‌کند و مسیر محموله، جزئیات سرویس و محدوده‌های IP هدف را تعریف می‌کند.
  2. مقادیر پیکربندی را برای لایه C به رشته‌های wide-character تبدیل می‌کند.
  3. امتیازها را ارتقا می‌دهد، فایل اجرایی حامل را به‌عنوان سرویس SvcMgmt نصب می‌کند و سپس آن را آغاز می‌کند.
  4. در صورت فعال بودن گزینه پیکربندی، ایمپلنت درایور هسته‌ای fast16.sys را مستقر می‌کند.
  5. wormletها را آزاد می‌کند. در این پیکربندی خاص، فقط یک جایگاه wormlet با یک SCM wormlet پر شده است که به‌دنبال سرورهای شبکه می‌گردد، محموله را از طریق یک share شبکه‌ای کپی می‌کند و آن سرویس راه‌دور را آغاز می‌کند.
  6. این فرایند را تا رسیدن به آستانۀ شکست یا شرط کشتن بیرونی، با خوابیدن به‌اندازۀ تأخیر اولیه پیکربندی‌شده میان موج‌ها، بی‌پایان تکرار می‌کند.

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
MD5410eddfc19de44249897986ecc8ac449
SHA2568fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
زمان لینک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، قرار می‌دهد. در ورود، این کارها را انجام می‌دهد:

درایور با 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 روی فایل‌های اجرایی تمرکز می‌کند. یک فایل زمانی هدف معتبر است که دو معیار را داشته باشد:

  1. نام فایل با .EXE پایان یابد.
  2. بلافاصله پس از آخرین سرآیند بخش PE، یک رشته ASCII قابل چاپ با آغاز Intel وجود داشته باشد.

این منطق گزینش به فایل‌های اجرایی کامپایل‌شده با کامپایلر Intel C/C++ اشاره دارد؛ کامپایلری که غالباً فراداده‌های خود را در همین ناحیه قرار می‌داد. این نشان می‌دهد توسعه‌دهندگان می‌دانستند نرم‌افزار هدفشان با این toolchain ساخته شده است.

برای فایل‌هایی که این معیارها را دارند، درایور در حافظه یک تغییر در سرآیند PE انجام می‌دهد. دو بخش اضافی، .xdata و .pdata، تزریق می‌کند و آن‌ها را با بایت‌هایی از بخش کد اصلی پر می‌کند؛ در نتیجه شمار بخش‌ها افزایش می‌یابد و یک نسخۀ پاک از کد نگه داشته می‌شود. هدف احتمالاً افزایش پایداری در عین امکان وصله‌کردن گسترده بوده است، هرچند بدون شناسایی باینری‌های هدف اصلی، این فقط یک فرضیۀ آگاهانه می‌ماند.

وصله‌کردن قاعده‌محور و خراب‌سازی ممیز شناور

موتور وصله‌کردن یک ابزار پیمایش و تغییر مینیمال، بهینه‌شده برای کارایی و حالت‌مند است. این موتور با مجموعه‌ای از ۱۰۱ قاعده پیکربندی شده که هرکدام منطق تطبیق الگو و جایگزینی دارند. برای حفظ کارایی، موتور:

بیشتر الگوهای وصله‌شده با کد استاندارد x86 برای ربودن یا اثرگذاری بر جریان اجرا مطابقت دارند. یک بلوک تزریق‌شده متفاوت است: دنباله‌ای بزرگ‌تر و پیچیده از دستورهای Floating Point Unit یا FPU که به محاسبات دقیق و scale کردن مقدارها در آرایه‌های داخلی اختصاص دارد. این کد یک تابع محاسباتی مستقل است و به ربایش جریان کد یا هر نوع تزریق کد مخرب معمول دیگر ارتباطی ندارد.

برای فهمیدن اینکه درایور انتظار دیدن چه چیزی را داشت، پژوهشگران قواعد وصله‌کردن را به امضاهای YARA هگزادسیمال تبدیل کردند و آن‌ها را روی یک corpus بزرگ و متناسب با همان دوره اجرا کردند. نتایج نرخ اصابت بسیار پایینی نشان داد: کمتر از ده فایل با دو یا چند الگو تطبیق داشت. اما همین تطبیق‌ها یک مضمون روشن داشتند: ابزارهای محاسبات دقیق در حوزه‌های تخصصی مانند مهندسی عمران، فیزیک و شبیه‌سازی فرایندهای فیزیکی.

وصله FPU در fast16.sys برای خراب کردن کنترل‌شدۀ این روال‌ها نوشته شده بود تا خروجی‌های جایگزین تولید کند. این موضوع fast16 را از قلمرو ابزار جاسوسی عمومی خارج و وارد دسته خرابکاری راهبردی می‌کند. چارچوب می‌توانست با وارد کردن خطاهای کوچک اما نظام‌مند در محاسبات جهان فیزیکی، برنامه‌های پژوهش علمی را تضعیف یا کند کند، سامانه‌های مهندسی را در گذر زمان فرسوده سازد یا حتی به آسیب فاجعه‌بار کمک کند.

چنین عملیات خرابکاری‌ای با راستی‌آزمایی محاسبات روی سامانه‌ای جداگانه خنثی می‌شد. اما در محیطی که چند سامانه همان شبکه و وضعیت امنیتی را به اشتراک می‌گذاشتند، حامل کرم‌پذیر ماژول درایور مخرب را روی آن سامانه‌ها نیز مستقر می‌کرد و احتمال اینکه یک محاسبۀ مستقل از خروجی خراب‌شده متفاوت باشد را کاهش می‌داد.

در زمان انتشار این پژوهش، SentinelLABS هنوز نتوانسته همۀ باینری‌های هدف را شناسایی کند تا ماهیت خرابکاری مورد نظر را بفهمد. پژوهشگران از مشارکت جامعۀ گسترده‌تر امنیت اطلاعات استقبال کرده‌اند و قواعد YARA را برای شکار این الگوها در پیوست آورده‌اند.

موتور وصله‌کردن داده

حتی پس از تحلیل عمیق، درایور fast16 فریبنده‌وار ساده به نظر می‌رسد. زیر این کد حداقلی، یک موتور قاعده‌محورِ درون‌حافظه‌ای قرار دارد که هنگام خوانده‌شدن فایل‌های اجرایی از دیسک، بی‌صدا کد را وصله می‌کند.

این موتور به مجموعه‌ای فشرده از کمی بیش از صد قاعدۀ تطبیق الگو و یک dispatch table کوچک تکیه دارد تا فقط بایت‌هایی را بررسی کند که احتمالاً مهم هستند. بیشتر الگوها با دستورهای معمول x86 متناظرند، اما یکی برجسته است: بلوکی بزرگ‌تر از کد ممیز شناور یا FPU که به محاسبات دقیق اختصاص دارد. این روال تزریق‌شده مقدارها را در سه آرایۀ داخلی که به تابع داده می‌شوند scale می‌کند و محاسبات را ظریف تغییر می‌دهد.

محاسبات مبتنی بر FPU تزریق‌شده
محاسبات مبتنی بر FPU تزریق‌شده.

بدون دانستن باینری‌ها و بارهای کاری دقیقی که وصله می‌شدند، نمی‌توان به‌طور کامل مشخص کرد این آرایه‌ها چه چیزی را نشان می‌دهند؛ فقط می‌توان گفت هدف دستکاری نتایج عددی بود، نه دسترسی غیرمجاز، انتشار بدافزار یا دیگر اهداف معمول بدافزاری.

هدف‌های وصله

بهترین سرنخ‌ها درباره قربانیان مورد نظر از تطبیق این الگوها با corpusهای نرم‌افزاری بزرگ و متناسب با همان دوره به دست می‌آید. قوی‌ترین هم‌پوشانی‌ها به سه مجموعۀ مهندسی و شبیه‌سازی دقیق از نیمۀ دهۀ ۲۰۰۰ اشاره دارند: LS-DYNA 970، PKPM و پلتفرم مدل‌سازی هیدرودینامیک MOHID؛ همگی برای سناریوهایی مانند آزمون تصادف، تحلیل سازه و مدل‌سازی محیطی استفاده می‌شوند.

به‌ویژه LS-DYNA در گزارش‌های عمومی درباره نقض‌های مشکوک ایران در بخش T برجام، در مطالعه‌های مربوط به مدل‌سازی رایانه‌ای مرتبط با توسعه جنگ‌افزار هسته‌ای، ذکر شده است.

استفاده از کد LS-DYNA برای پژوهش روی محموله‌های انفجاری برنامه AMAD ایران
استفاده از کد LS-DYNA برای پژوهش روی محموله‌های انفجاری برنامه AMAD ایران.

ردپاهای کامپایلر و تبار

پژوهشگران هنگام تلاش برای فهم تبار این مجموعۀ غیرمعمول از اجزا، به یک نکته عجیب برخوردند. رشته‌هایی با قالب @(#)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 از سال ۱۹۷۶ ادامه داشته است.

MD51d2f32c57ae2f2013f513d342925e972
SHA12fa28ef1c6744bdc2021abd4048eefc777dccf22
SHA2565966513a12a5601b262c4ee4d3e32091feb05b666951d06431c30a8cece83010
اندازه فایل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

MD5af4461a149bfd2ba566f2abefe7dcde4
SHA1586edef41c3b3fba87bf0f0346c7e402f86fc11e
SHA25609ca719e06a526f70aadf34fb66b136ed20f923776e6b33a33a9059ef674da22
اندازه فایل7716864 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections
زمان لینک2011-08-26 10:58:17 UTC

ماژول‌های CAD سازۀ ساختمان در PKPM

MD549a8934ccd34e2aaae6ea1e6a6313ffe
SHA13ce5b358c2ddd116ac9582efbb38354809999cb5
SHA2568b018452fdd64c346af4d97da420681e2e0b55b8c9ce2b8de75e330993b759a0
اندازه فایل11849728 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 4 sections
زمان لینک2005-12-01 08:35:46 UTC
MD5e0c10106626711f287ff91c0d6314407
SHA1650fc6b3e4f62ecdc1ec5728f36bb46ba0f74d05
SHA25606361562cc53d759fb5a4c2b7aac348e4d23fe59be3b2871b14678365283ca47
اندازه فایل16355328 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 5 sections
زمان لینک2012-07-07 08:47:11 UTC

موتور تحلیل سازه SATWE در PKPM

MD52717b58246237b35d44ef2e49712d3a2
SHA1d475ace24b9aedebf431efc68f9db32d5ae761bd
SHA256bd04715c5c43c862c38a4ad6c2167ad082a352881e04a35117af9bbfad8e5613
اندازه فایل9908224 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections
زمان لینک2011-01-12 06:37:39 UTC
MD5daea40562458fc7ae1adb812137d3d05
SHA11ce1111702b765f5c4d09315ff1f0d914f7e5c70
SHA256da2b170994031477091be89c8835ff9db1a5304f3f2f25344654f44d0430ced1
اندازه فایل8454144 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 7 sections
زمان لینک2012-11-29 03:10:12 UTC
MD52740a703859cbd8b43425d4a2cacb5ec
SHA1ca665b59bc590292f94c23e04fa458f90d7b20c9
SHA256aeaa389453f04a9e79ff6c8b7b66db7b65d4aaffc6cac0bd7957257a30468e33
اندازه فایل16568320 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 5 sections
زمان لینک2014-12-30 03:23:43 UTC
MD5ebff5b7d4c5becb8715009df596c5a91
SHA1829f8be65dfe159d2b0dc7ee7a61a017acb54b7b
SHA25637414d9ca87a132ec5081f3e7590d04498237746f9a7479c6b443accee17a062
اندازه فایل8089600 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections
زمان لینک2009-04-22 01:46:46 UTC
MD5cb66a4d52a30bfcd980fe50e7e3f73f0
SHA1e6018cd482c012de8b69c64dc3165337bc121b86
SHA25666fe485f29a6405265756aaf7f822b9ceb56e108afabd414ee222ee9657dd7e2
اندازه فایل9219072 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 8 sections
زمان لینکN/A

فایل‌های CAD اضافی PKPM

MD5075b4aa105e728f2b659723e3f36c72c
SHA1145ef372c3e9c352eaaa53bb0893749163e49892
SHA256c11a210cb98095422d0d33cbd4e9ecc86b95024f956ede812e17c97e79591cfa
اندازه فایل6852608 bytes
نوع فایلPE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections
زمان لینک2012-06-18 10:01:54 UTC
MD5cf859f164870d113608a843e4a9600ab
SHA1952ed694b60c34ba12df9d392269eae3a4f11be4
SHA2567e00030a35504de5c0d16020aa40cbaf5d36561e0716feb8f73235579a7b0909
اندازه فایل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 نمی‌تواند هدف را به‌طور قطعی شناسایی کند و از مشارکت جامعۀ گسترده‌تر پژوهشی برای کمک به فهم آثار مورد نظر از حمله به این نرم‌افزار استقبال کرده است.

MD5f4dbbb78979c1ee8a1523c77065e18a5
SHA19e089a733fb2740c0e408b2a25d8f5a451584cf6
SHA256e775049d1ecf68dee870f1a5c36b2f3542d1182782eb497b8ccfd2309c400b3a
اندازه فایل5443584 bytes
نوع فایلPE32 executable for MS Windows 4.00 (console), Intel i386, 3 sections
زمان لینک2002-10-18 09:29:54 UTC

شاخص‌های آلودگی

نامfast16.sys
MD50ff6abe0252d4f37a196a1231fae5f26
SHA192e9dcaf7249110047ef121b7586c81d4b8cb4e5
SHA25607c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529
نامconnotify.dll
MD5410eddfc19de44249897986ecc8ac449
SHA1675cb83cec5f25ebbe8d9f90dea3d836fcb1c234
SHA2568fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9
نامsvcmgmt.exe
MD5dbe51eabebf9d4ef9581ef99844a2944
SHA1de584703c78a60a56028f9834086facd1401b355
SHA2569a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525

قواعد 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
}