در تحلیلهای اخیر، یک نمونه بدافزار پیچیده شناسایی شده است که از یک لودر چندمرحلهای (Multi-stage Loader) برای دور زدن سیستمهای شناسایی استفاده میکند. این بدافزار با ترکیب تکنیکهای Obfuscation و تزریق Shellcode، لایههای متعددی از رمزنگاری را ایجاد کرده است تا تحلیل آن را برای متخصصان امنیت دشوار کند.
مراحل تحلیل و مهندسی معکوس
این بدافزار در ابتدا به صورت Python Bytecode (با پسوند .pyc) ظاهر میشود. برای تحلیل این مرحله، ابتدا کد بایت به زبان پایتون تبدیل شد. در این مرحله مشخص شد که کد از ابزار Kramer برای مبهمسازی استفاده کرده است. با استفاده از یک ابزار Deobfuscator و بهینهسازی آن، موفق شدیم کد منبع پایتون را بازیابی کنیم.
کد پایتون بازیابی شده حاوی یک رشته Base64 بود که با الگوریتم RC4 رمزنگاری شده بود. پس از رمزگشایی، اولین Shellcode شناسایی شد که توسط ابزار Donut تولید شده بود. ابزار Donut فایلهای اجرایی یا اسمبلیهای .NET را به Shellcodeهای مستقل از مکان (Position-independent) تبدیل میکند.
لایه دوم: تحلیل laZzzy
پس از استفاده از ابزار donut_decryptor، یک فایل اجرایی شناسایی شد که توسط laZzzy بستهبندی شده بود. laZzzy یک لودر Shellcode است که از ترکیب AES-CBC و یک لایه XOR برای مخفیسازی Payload استفاده میکند.
- تکنیک تزریق: این ابزار برخلاف Donut، یک فایل PE کامل تولید میکند.
- استخراج Payload: به دلیل نبود ابزار عمومی برای استخراج استاتیک از laZzzy، یک ابزار سفارشی به نام
laZzzy_dumpتوسعه یافت تا بدون نیاز به Debugger یا اجرای پویا، Payload را استخراج کند.
مرحله نهایی و Payload اصلی
پس از استخراج Shellcode از لایه laZzzy، مجدداً از donut-decryptor استفاده شد تا لایه نهایی، یعنی یک .NET DLL، بازیابی شود. در این مرحله نهایی، تحلیلگر میتواند با استفاده از ابزارهایی مانند dnSpy یا ILSpy، کد C# را Decompile کرده و رفتار نهایی بدافزار را تحلیل کند.
نتیجهگیری فنی
این طراحی چندلایه به مهاجم اجازه میدهد تا اثر انگشت (Signature) بدافزار را تغییر داده و تحلیلهای پویا و استاتیک را مختل کند. با این حال، این تحلیل نشان میدهد که با درک ساختار لودرها و استفاده از تحلیل استاتیک دقیق، میتوان حتی بدون اجرای بدافزار در محیط Sandbox، به Payload نهایی دست یافت.