تکنیک Antivirus Bypass گروه APT27 با استفاده از DLL Side-Loading
مقاله
  • ۲۴ شهریور ۱۴۰۱
  • Learning Road Map
  • ۵ دقیقه خواندن

تکنیک Antivirus Bypass گروه APT27 با استفاده از DLL Side-Loading

آکادمی راوین

پیش‌گفتار

گروه APT27 که در مقالات مختلف با نام‌های دیگری مانند Emissary Panda، Bronze Union، TG-3390 وLucky Mouse  هم شناخته می‌شود، یک گروه هکری منتصب به کشور چین است. بر اساس مدارک به دست آمده، این گروه فعالیت خود را از ۱۰ سال پیش (سال ۲۰۱۰ میلادی) شروع کرده و حملات آن اغلب با هدف جاسوسی و سرقت اطلاعات طراحی و اجرا شده‌اند. گروه APT27 در طی سال‌های فعالیت خود، کشورهای مختلفی را در اروپا، آسیا و خاورمیانه هدف قرار داده است که از بین آن‌ها می‌توان به برخی کشورهای منطقه مانند امارات متحده عربی، عربستان سعودی و مغولستان اشاره کرد. همچنین قربانیان این گروه‌، اغلب در حوزه‌هایی مانند دولتی، هوا و فضا، دفاعی، فناوری، انرژی و تولید فعالیت داشته‌اند.

به نظر می‌رسد در موج جدید حملات این گروه که از سال 2019 میلادی آغاز شد، کشور ایران نیز هدف حملات آن قرار گرفته است. به همین دلیل در آکادمی راوین تصمیم گرفتیم تا روش‌ها و ابزارهای مورد استفاده‌ی APT27 را طی مقالاتی کوتاه بررسی و تحلیل کنیم.

در این مقاله به بررسی یکی از روش‌های مورد استفاده در  برخی تیم‌های APT و از جمله APT27 می‌پردازیم که در آن با بهره‌برداری از یکی از رفتارهای سیستم‌عامل ویندوز در Load کردن DLLها، آنتی‌ویروس‌ها را دور زده و بدافزار خود را بر روی سامانه‌ی قربانی اجرا می‌کنند. این روش به DLL Side-Loading معروف شده است.

 

شرحی بر DLL Side-Loading

یکی از متداول‌ترین روش‌های مورد علاقه‌ی تولیدکنندگان بدافزار برای اجرای کدهای مخرب خود در سامانه‌ها، استفاده از آسیب‌پذیری‌های موجود است. برای مثال در سال‌های اخیر تعداد زیادی از این بدافزارها از آسیب‌پذیری‌های موجود در Adobe Flash، Java و افزونه‌های مربوط به Browserها برای اجرای خود بهره گرفته‌اند. با به‌روزرسانی این آسیب‌پذیری‌ها، بدافزارنویسان به دنبال آسیب‌پذیری‌های جدید خواهند بود و این بازی کماکان ادامه دارد. در برخی اوقات رفتار خود سیستم‌عامل‌ها نیز می‌تواند مورد سواستفاده‌ی این توسعه دهندگان قرار گیرد.

سیستم‌عامل ویندوز مانند بسیاری از سیستم‌عامل‌های دیگر به نرم‌افزارها اجازه می‌دهد تا DLLهای مورد نظر خود را در runtime اجرا کنند.  نرم‌افزارها محل DLL را با روش‌هایی مانند تعیین آدرس کامل آن، استفاده از DLL Redirection یا با استفاده از Manifest مشخص می‌کنند. اگر هیچ‌کدام از این روش‌ها استفاده نشده باشند، ویندوز با جستجو در مجموعه‌ای از پیش تعریف شده از دایرکتوری‌ها، DLL مورد نظر را پیدا می‌کند. مهاجمین سایبری از سال‌ها قبل با قراردادن DLL مخرب خود در یکی از این دایرکتوری‌ها از این قابلیت جستجوی ویندوز سواستفاده می‌کردند. در این روش ویندوز فایل DLL‌مخرب را پیش از نسخه‌ی قانونی آن پیدا و اجرا می‌کند.

روش DLL side-loading نیز یک نوع کمتر متداول از همین تکنیک می‌باشد که در برخی از حملات سایبری سال‌های اخیر از آن استفاده شده است. این روش در واقع از ویژگی  side-by-side (SXS یا WinSXS) ویندوز استفاده بهره می‌برد. این ویژگی با بارگذاری DLLها از یک دایرکتوری مشترک، به مدیریت تداخل یا DLLهای با نسخه‌ی یکسان کمک می‌کند.

در حالت کلی حملات search-order hijacking از مسیر جستجوی DLL مربوط به یک فایل اجرایی برای لود کردن DLL تقلبی یا آلوده با استفاده از رکورد DLLهای معتبر، بهره می‌برند. این رکورد، فهرستی از DLLهای معتبر در سامانه را شامل می‌شود که در کلید رجیستری زیر ذخیره شده است:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerKnownDLLs

اما در حمله‌ی DLL Side-Loading از SxS Assembly برای لود کردن DLL مخرب از فهرست SxS که در کلید رجیستری زیر قرار دارد استفاده می‌شود:

%TEMP%RarSFX%%ALLUSERS PROFILE%SXS

%TEMP%RarSFX%%ALLUSERS PROFILE%WinSxS

 

جزییات WinSxS

مانیفست‌های WinSxS که به صورت XML در فایل‌های اجرایی تعبیه شده، توصیف وابستگی‌ها و کتابخانه‌های مورد استفاده‌ی هر برنامه را در خود ذخیره کرده است. در واقع مانیفست‌ها شامل متادیتای کتابخانه و منابع هستند. WinSxS به گونه‌ای طراحی شده است که به برنامه‌نویسان قابلیت انعطاف‌پذیری بالایی در به‌روزرسانی باینری‌ها (تنها با جایگزین کردن فایل‌های باینری قدیمی در یک محل) می‌دهد.‌ برخی از مزایای WinSxS‌به شرح زیر است:

  • کاهش احتمال ایجاد تداخل نسخه (Version Conflicts) در DLLها
  • با اشتراک‌گذاری چندین نسخه از اسمبلی‌های ویندوز یا COM، این قابلیت را ایجاد می‌کند تا به‌طور هم‌زمان اجرا شوند
  • پیکربندی‌های اسمبلی (Assembly Configurations) را بر اساس پیکربندی گلوبال یا مبتنی بر نرم‌افزار ، پس از استقرار به‌روزرسانی می‌کند

در شکل زیر یک اسمبلی Side-by-Side متداول نمایش داده شده است:

یک مشکل امنیتی روش فوق این است که به‌جز متادیتای موجود در مانیفست (Manifest) اعتبارسنجی دیگری درباره‌ی DLL لود شده انجام نمی‌دهد. این موضوع ممکن است سبب شود تا ناخواسته مجوزهای یک نرم‌افزار معتبر را به یک بدافزار نیز بدهد. این مطلب در شکل زیر نمایش داده شده است.

با توجه به موارد ذکر شده، بد‌افزارها می‌توانند با قرار گرفتن در کنار یک فایل اجرایی معتبر، آنتی ویروس‌ها را دور زده و بدون شناسایی شدن، در سامانه‌ی قربانی اجرا شوند.

برای کسب اطلاعات بیشتر در خصوص روش‌های شناسایی این تکنیک و راهکارهای پیشنهادی برای مقابله با این تهدیدات سایبری، می‌توانید سند  DLL SIDE-LOADING منتشر شده توسط شرکت FireEye را مطالعه کنید. مطلبی که مطالعه کردید، ترجمه‌ی بخشی از همین سند است.

 

در ویدیوی زیر روش استفاده‌ی تیم APT27 از این تکنیک در نرم‌افزارهای plugin_host.exe و python33.dll نمایش داده شده است.