روابط عمومی شرکت ایدکو (توزیعکنندهی محصولات کسپرسکی در ایران)؛ سرقت DLL یک تکنیک رایج است که در آن مهاجمها یک کتابخانه (DLL) که توسط یک فرایند قانونی فراخوانی میشود را با نسخهای مخرب جایگزین میکنند. این روش هم توسط سازندگان بدافزارهایی با تاثیر گسترده مثل استیلرها و تروجانهای بانکی و هم توسط گروههای APT و جرایم سایبری پشتِ حملات هدفمند بهکار میرود. در سالهای اخیر تعداد حملات سرقت DLL بهطور چشمگیری افزایش یافته است.
ما این تکنیک و انواع آن، مانند سایدلودینگ DLL، را در حملات هدفمند علیه سازمانهایی در روسیه، آفریقا، کرهی جنوبی و سایر کشورها و مناطق مشاهده کردهایم. Lumma، یکی از فعالترین سارقها سال ۲۰۲۵، از این روش برای توزیع استفاده میکند. عاملان تهدید که به دنبال سوءاستفاده از برنامههای محبوب مثل DeepSeek هستند نیز به سرقت DLL متوسل میشوند. تشخیص حمله جایگزینی DLL آسان نیست زیرا کتابخانه در فضای آدرسرسمی یک فرایند قانونی اجرا میشود. بنابراین از دید راهکار امنیتی، این فعالیت ممکن است شبیه فرایندِ مورد اعتماد بهنظر برسد. تمرکز بیشازحد بر فرایندهای مورد اعتماد میتواند عملکرد کلی سیستم را به خطر بیندازد؛ بنابراین باید بین سطح کافی امنیت و سهولتِ استفاده کافی تعادلی ظریف برقرار کرد.
تشخیص سرقت DLL با مدل یادگیری ماشینی
هوش مصنوعی میتواند جایی کمککننده باشد که الگوریتمهای سادهی تشخیص ناکافیاند. بیست سال است که کسپرسکی دارد از فناوری یادگیری ماشین برای شناسایی فعالیتهای مخرب در مراحل مختلف استفاده میکند. مرکز تخصصی هوش مصنوعی قابلیتهای مدلهای مختلف در کشف تهدیدها را پژوهش، سپس آنها را آموزش و پیادهسازی میکند. همکاران ما در مرکز اطلاعات تهدیدها ازمان پرسیدند آیا میتوان از یادگیری ماشینی برای تشخیص سرقت DLL استفاده کرد و مهمتر اینکه آیا این روش دقت تشخیص را بهبود میبخشد یا نه.
آمادگی
برای تعیین اینکه آیا میتوانیم مدلی را آموزش دهیم که بین بارگذاریهای کتابخانه مخرب و مشروع تمایز قائل شود، ابتدا باید مجموعهای از ویژگیها را تعریف میکردیم که نشانگر قویِ سرقت DLL باشند. ویژگیهای کلیدی زیر را شناسایی کردیم:
- مکان نامناسب کتابخانه. بسیاری از کتابخانههای استاندارد در پوشههای معمول قرار دارند، درحالیکه یک DLL مخرب اغلب در مکان غیرمعمولی یافت میشود، مانند همان پوشهای که اجرایی آن را فراخوانی میکند.
- مکان نامناسب فایل اجرایی. مهاجمها اغلب فایلهای اجرایی را در مسیرهای غیرمعمول ذخیره میکنند، مانند پوشههای موقت یا پوشههای کاربران، بهجای %Program Files%.
- تغییر نام فایل اجرایی. برای فرار از شناسایی، مهاجمها اغلب برنامههای مشروع را با نامهای دلخواه ذخیره میکنند.
- تغییر اندازه کتابخانه و از دست رفتن امضا.
نمونه آموزشی و برچسبگذاری
برای نمونه آموزشی، از دادههای بارگذاری کتابخانه دینامیک استفاده کردیم که سامانههای پردازش خودکار داخلیمان فراهم میکردند — که روزانه میلیونها فایل را پردازش میکنند — و تلمتری ناشناسشده، مانند آنچه بهطور داوطلبانه توسط کاربران کسپرسکی از طریق شبکه امنیتی کسپرسکی ارائه میشود.
نمونه آموزشی در سه دور برچسبگذاری شد. اولش نمیتوانستیم بهطور خودکار برچسبهای رویدادی را که تحلیلگرانمان زده بودند و نشان میداد آیا رویداد حمله سرقت DLL بوده است یا خیر استخراج کنیم. بنابراین از دادههای پایگاهدادههای شهرت فایل استفاده کردیم و بقیه دادهها را بهصورت دستی برچسبگذاری کردیم. آن رویدادهای فراخوانی کتابخانه را که در آنها فرایند قطعاً قانونی و کتابخانه قطعاً مخرب بود بهعنوان سرقت DLL برچسب زدیم. با این حال این برچسبگذاری کافی نبود چون برخی فرایندها مانند «svchost» عمدتاً برای بارگذاری کتابخانههای مختلف طراحی شدهاند. در نتیجه مدلی که روی این داده آموزش دید، نرخ بالایی از مثبتهای کاذب داشت و برای استفاده عملی مناسب نبود.
در دور بعد، کتابخانههای مخرب را بر اساس خانواده فیلتر کردیم و تنها آنهایی را نگه داشتیم که شناختهشده بودند رفتارهای مرتبط با سرقت DLL را نشان دهند. مدلی که روی این داده پالایششده آموزش دید دقت بسیار بهتری نشان داد و اساساً فرضیه ما را تأیید کرد که میتوان از یادگیری ماشینی برای تشخیص این نوع حملات استفاده کرد. در این مرحله، مجموعه آموزشی ما دهها میلیون نمونه داشت. این شامل حدود ۲۰ میلیون فایل پاک و تقریباً ۵۰٬۰۰۰ فایلِ قطعاً مخرب میشد. سپس مدلهای بعدی را بر اساس نتایج پیشینیانشان آموزش دادیم، نتایجی که توسط تحلیلگران تأیید و برچسبگذاریِ بیشتری شده بودند. این فرایند بهطور قابلتوجهی کارایی آموزش ما را افزایش داد.
بارگذاریDLLها: شکلِ طبیعی آنها چگونه است؟
بنابراین ما یک نمونه برچسبخورده با تعداد زیادی رویدادِ بارگذاری کتابخانه از فرایندهای مختلف داشتیم. چگونه میتوانیم یک کتابخانه «پاک» را توصیف کنیم؟ استفاده از ترکیب نام فرایند + نام کتابخانه مسئلهی تغییر نام فرایندها را در نظر نمیگیرد. علاوه بر این، یک کاربر قانونی، نه فقط مهاجم، میتواند فرایندی را تغییر نام دهد. اگر بهجای نام فرایند از هش فرایند استفاده میکردیم، مشکل تغییر نام حل میشد، اما آنگاه هر نسخه از همان کتابخانه بهعنوان یک کتابخانه مجزا در نظر گرفته میشد. در نهایت ما به استفاده از ترکیب نام کتابخانه + امضای فرایندرسیدیم. در حالی که این روش همه کتابخانههای همنام از یک فروشنده را یکسان در نظر میگیرد، بهطور کلی تصویر واقعیتری ارائه میدهد.
برای توصیف رویدادهای بارگذاری ایمن کتابخانه، از مجموعهای از شمارندهها استفاده کردیم که شامل اطلاعاتی درباره فرایندها (فرکانس نام فرایند مشخص برای فایلی با هش معین، فرکانس مسیر فایل مشخص برای فایلی با آن هش و غیره)، اطلاعاتی درباره کتابخانهها (فرکانس مسیر مشخص برای آن کتابخانه، درصد اجراهای قانونی و غیره) و ویژگیهای رویداد (مثلاً اینکه آیا کتابخانه در همان پوشهای است که فایل فراخوان آن قرار دارد) میشد.
نتیجه کار سیستمی بود با چندین تجمیع (مجموعهای از شمارندهها و کلیدها) که میتوانست یک رویداد ورودی را توصیف کند. این تجمیعها میتوانند یک کلید واحد (مثلاً مجموع هش یک DLL یا چندین کلید (مثلاً مجموع هش فرایند + امضای فرایند) را دربر گیرند. بر اساس این تجمیعها، میتوانیم مجموعهای از ویژگیها را استخراج کنیم که رویداد بارگذاری کتابخانه را توصیف میکنند.
بارگذاریDLLها: چگونه سرقت را توصیف کنیم؟
ترکیبهای مشخصی از ویژگیها (وابستگیها) بهطور قوی نشاندهنده سرقت DLL هستند. این وابستگیها میتوانند ساده باشند؛ برای برخی فرایندها، کتابخانه پاکی که فراخوانی میکنند همیشه در پوشهای جدا قرار دارد، در حالی که نسخه مخرب معمولاً در همان پوشهی فرایند قرار میگیرد. وابستگیهای دیگر ممکن است پیچیدهتر و نیازمند برآورده شدن چندین شرط باشند. برای مثال، تغییر نام یک فرایند به خودی خود نشاندهندهی سرقت DLL نیست. اما اگر نام جدید برای اولین بار در دادهها ظاهر شود و کتابخانه در مسیر غیرمعمولی قرار داشته باشد، احتمال بالایی وجود دارد که کتابخانه مخرب باشد.
تکامل مدل
در این پروژه چند نسل از مدلها را آموزش دادیم. هدف اصلی نسل اول این بود که نشان دهد یادگیری ماشین بهطور کلی میتواند برای تشخیص سرقت DLL به کار رود. در آموزش این مدل، از گستردهترین تعریف ممکن از این مفهوم استفاده کردیم.
روند کار مدل به سادهترین شکل ممکن بود:
- دادههای ورودی را گرفتیم و توصیف فراوانی برای مجموعههای انتخابشده کلیدها استخراج کردیم.
- همان دادهها را از بازه زمانی دیگری گرفتیم و مجموعهای از ویژگیها بهدست آوردیم.
- از برچسبگذاری نوع ۱ استفاده کردیم، یعنی رویدادهایی که در آنها فرایند قانونی یک کتابخانه مخرب از مجموعهای مشخص از خانوادهها را بارگذاری کرده بود، بهعنوان سرقت DLL علامتگذاری شدند.
- مدل را روی دادههای حاصل آموزش دادیم.
مدل نسل دوم بر روی دادههایی آموزش داده شد که توسط مدل نسل اول پردازش شده و توسط تحلیلگران تایید شده بودند (برچسبگذاری نوع ۲). بنابراین، دقت برچسبگذاری نسبت به آموزش مدل اول بالاتر بود. علاوه بر این، ویژگیهای بیشتری برای توصیف ساختار کتابخانه اضافه نموده و روند توصیف بارگذاری کتابخانه را کمی پیچیدهتر کردیم.
براساس نتایج مدل نسل دوم، توانستیم چند نوع رایج از مثبتهای کاذب را شناسایی کنیم. برای مثال، نمونه آموزشی شامل برنامههای بالقوه ناخواسته بود. این برنامهها در برخی شرایط ممکن است رفتاری شبیه به سرقت DLL نشان دهند، اما مخرب نیستند و به ندرت جزو این نوع حملات محسوب میشوند. در مدل نسل سوم این خطاها را اصلاح کردیم. ابتدا، با کمک تحلیلگران، برنامههای بالقوه ناخواسته را در نمونه آموزشی علامتگذاری کردیم تا مدل آنها را تشخیص ندهد. دوم، در این نسخه جدید از برچسبگذاری گسترشیافته استفاده کردیم که شامل تشخیصهای مفید از نسلهای اول و دوم میشد. همچنین شرح ویژگیها را با استفاده از روش کدگذاری «وان-هات[1]» — روشی برای تبدیل ویژگیهای دستهای به فرمت دودویی — برای برخی فیلدها توسعه دادیم. همچنین، با افزایش حجم رویدادهای پردازششده توسط مدل در طول زمان، این نسخه نرمالسازی تمام ویژگیها را بر اساس اندازهی جریان داده اضافه کرد.
مقایسه مدلها
برای ارزیابی پیشرفت مدلهای خود، آنها را روی یک مجموعه داده آزمایشی اعمال کردیم که هیچکدام قبلاً با آن کار نکرده بودند. با پیشرفت مدلها، درصد مثبتهای واقعی افزایش یافت. مدل نسل اول تنها در نرخ بسیار بالای مثبتهای کاذب (۱۰⁻³ یا بیشتر) به نتیجه نسبتاً خوبی (۰.۶ یا بالاتر) رسید، در حالی که مدل نسل دوم همین نتیجه را در نرخ مثبت کاذب بسیار پایینتر (۱۰⁻⁵) کسب کرد. مدل نسل سوم با همان نرخ پایین مثبت کاذب، به ۰.۸ مثبت واقعی رسید که نتیجهای خوب محسوب میشود. ارزیابی مدلها بر روی دادههای ورودی با نمره ثابت نشان میدهد که تعداد مطلق رویدادهای جدیدی که بهعنوان سرقت DLL برچسبگذاری شدهاند، از نسلی به نسل بعدی افزایش یافته است. با این حال، ارزیابی مدلها بر اساس نرخ اشتباه مثبت کاذب نیز به ردیابی پیشرفت کمک میکند: مدل اول نرخ خطای نسبتاً بالایی دارد، در حالی که نسلهای دوم و سوم نرخ خطای بهمراتب پایینتری دارند.
کاربرد عملی مدلها
هر سه نسل مدل در سامانههای داخلی ما برای تشخیص موارد احتمالی سرقت DLL در جریانهای داده تلهمتری به کار گرفته میشوند. ما روزانه ۶.۵ میلیون رویداد امنیتی دریافت میکنیم که به ۸۰۰ هزار فایل منحصربهفرد مرتبط هستند. از این نمونهها تجمیعهایی در بازههای زمانی مشخص ساخته، غنیسازی و سپس به مدلها داده میشوند. دادههای خروجی بر اساس مدل و احتمال سرقت DLL تخصیصیافته به رویداد رتبهبندی شده و به تحلیلگران ارسال میشوند. برای مثال، اگر مدل نسل سوم رویدادی را با اطمینان بالا بهعنوان سرقت DLL تشخیص دهد، باید ابتدا مورد بررسی قرار گیرد، در حالی که حکم کمقطعیتتر مدل نسل اول در انتهای اولویت بررسی قرار میگیرد. همزمان، مدلها روی جریان داده جداگانهای که قبلاً ندیدهاند، آزمایش میشوند تا اثربخشی آنها در طول زمان سنجیده شود، زیرا عملکرد تشخیص مدل ممکن است کاهش یابد.
علاوه بر این، اخیراً مدل تشخیص سرقت DLL را در سامانه Kaspersky SIEM گذاشتهایم، اما ابتدا آن را در سرویس Kaspersky MDR آزمایش کردیم. در مرحله آزمایشی، این مدل به شناسایی و جلوگیری از چندین حادثه سرقت DLL در سیستمهای مشتریان ما کمک کرد. مقالهای جداگانه درباره عملکرد مدل یادگیری ماشین در تشخیص حملات هدفمند با سرقت DLL در Kaspersky SIEM و رخدادهای شناساییشده توسط آن نوشتهایم.
نتیجهگیری
بر اساس آموزش و بهکارگیری سه نسل مدلها، آزمایش تشخیص سرقت DLL با استفاده از یادگیری ماشینی موفقیتآمیز بوده است. توانستیم مدلی توسعه دهیم که رویدادهای مشابه سرقت DLL را از سایر رویدادها تشخیص دهد و آن را به سطحی رساندیم که برای استفاده عملی، نه تنها در سیستمهای داخلی ما بلکه در محصولات تجاری، مناسب باشد. در حال حاضر، مدلها در فضای کلود فعالیت نموده و ماهانه صدها هزار فایل منحصربهفرد را اسکن کرده و هزاران فایل مورد استفاده در حملات سرقت DLL را شناسایی میکنند. آنها بهطور منظم گونههای ناشناخته جدیدی از این حملات را کشف میکنند. نتایج مدلها به تحلیلگران ارسال میشود تا آنها را بررسی کرده و بر اساس یافتههای خود قوانین تشخیص جدیدی ایجاد کنند.
[1]One hot codig
کسپرسکی آنلاین (ایدکو)
کسپرسکی اسم یکی از بزرگترین شرکتهای امنیتی و سازنده آنتی ویروس است که برخی از کاربران اشتباهاً این شرکت و محصولات آنتی ویروس آن را با عناوینی نظیر کسپرسکای،کاسپرسکی، کسپراسکای، کسپراسکای، و یا کاسپراسکای نیز میشناسد. همچنین لازم به ذکر است مدیرعامل این شرکت نیز یوجین کسپرسکی نام دارد.