در قسمت اول این مقاله در مورد Fileless Malware و به مقایسه آن با نرم افزارهای قدیمی پرداختیم، همچنین در مورد وب سایت های مخرب صحبت شد و به تعدادی از آن ها اشاره گشت. در این قسمت به ادامه مطلب در مورد Ghostها در Fileless Attack می پردازیم.
پيش از آن كه Code Injection به طور مفصل مورد بحث قرار گیرد، يادگيری نحوه بارگيری فرآيند در حافظه بسيار مهم است. در اين مقاله به همه موارد داخلی Process Memory یا حافظه فرآيند با جزئيات پرداخته نخواهد شد، اما در عوض، به منظور درك Code Injection به اين اجزای مهم و حياتی خواهيم پرداخت. تصویر زیر نمودار Process Memory Internalها را نشان میدهد.
وقتی فرآیندی شروع می شود، بخشی از حافظه به آن اختصاص میيابد. به طور پیش فرض، در اين فرآيند از حافظه به صورت WCX يا Page_Execute_WriteCpy محافظت ميشود. WCX «دسترسی به اجرا، حالت Readonly يا نوشتن بر نسخه كپی نمای Mapشده از Mappping Objectهاي يك فايل را ميسر ميسازد». همانطور که در تصویر نشان داده شده است، فرآیند شامل اجزای مختلفی است، که اجزای اساسی آن عبارتند از:
Dynamic Linked Libraries ياDLL: این قسمت نشاندهنده Libraryهای مشترك ياDLLهايی است که يا به صورت ارادی و يا به اجبار در Adress Space بارگيری میشوند.
Block Environment Block يا BEP: ساختاری دارای مزايای فراوان که به كاربر میگوید از كجا میتواند چند مورد از آيتمهای ديگر، از جملهDLLها، Heapها و متغيرهای محيط را بيابد. این بخش همچنین شامل آرگومانهای خط فرمان فرآیند، دایرکتوری فعلی آن و شيوههای استاندارد مديريت آن است.
Executable: فرایند Executable شامل بدنه اصلی کد و متغیرهای خواندن/ نوشتن برای برنامه كابردی است. این دادهها ممکن است روی دیسک، فشردهسازی یا رمزگذاری شود، اما پس از آن كه در حافظه Load میشود، حافظه آن را Unpack نموده و امكان بازگردانی متن به صورت Plain به ديسك را فراهم میكند.
Process Environmental Block يا PEB: شامل اطلاعات فراداده يك فرآيند مانند محل قرارگیری پرونده در دیسک، محل آدرس حافظه و اطلاعات ماژولهای Loadشده است.
LoadOrderList: ترتيب ماژولهايی را كه در يك فرآيند Load میشوند، رديابی ميكند.
MemoryOrderList: ترتيب ظاهر شدن ماژولها در لايه حافظه مجازی يك فرآيند
InitOrderList: ترتيب ماژولها را به ترتيب راهاندازی اوليهشان رديابی میكند.
برخی از بدافزارها میتوانند در حين دسترسی به Windows Kernel، اتصال خود را با Doubly-link-list استاندارد قطع نمايند تا فرآيند خود را از ديد ابزارهای امنيتی استاندارد مخفی سازند.
Process Hollowing
Process Hollowing يك ترفند Code Injection است که در آن بدافزار یک روند قانونی را در حالت تعلیق ایجاد میکند. سپس آدرس حافظه فرآیند مجاز آزاد شده و كد مخرب جايگزين آن میگردد. وقتی رشته فرآیند از سر گرفته میشود، كد مخرب غلط انداز را به عنوان یک فرآیند مجاز اجرا میکند.
Process Hollowing انواع مختلفی دارد اما مفهوم مورد استفاده همه آنها يكسان است. تصویری که در شکل زیر نشان داده شده است جریان معمول ترفند Process Hollowing را نشان میدهد.
همانطور که در نمودار نشان داده شده است، فرآيند بدافزار نمونه جدیدی از یک پروسه مجاز را در حالت تعلیق یا CREATE_SUSPENDED ایجاد میکند. در این حالت، دستور svchost.exe را در حالت تعلیق آغاز مینمايد. حالت تعلیق امكان دستكاری آدرس حافظه فرآيند قانونی را فراهم میكند. سپس حفاظت از حافظه را ازحالت WCX يا Page_Execute_WriteCopy به حالت RWX يا Page_Execute_ReadWrite تغییر میدهد. دلیل این تغییر اين است كه اگر حفاظت حافظه از نوع WCX باشد، بدافزار نمیتواند بخش جديدی از حافظه را تخصيص دهد. بنابراین، اين حفاظت بايد به حالت RWX يا Page_Execute_ReadWrite تغییر یابد. در ادامه، بدافزار با جمع آوری اطلاعات فراداده ازPEB، آدرس اصلی حافظه فرآیند قانونی را جمعآوری میکند که بعداً آزادسازی میشود تا بخش مذكور از آدرس حافظه را خالی نمايد. در اين مرحله که آدرس حافظه فرآیند قانونی، آزادسازی و Hollow میشود، بدافزار Block جدیدی از حافظه را تخصيص داده و سپس کد مخرب را در آن قسمت از حافظه کپی يا به آن Inject میکند. مرحله آخر ادامه فرآيند است كه طی آن امكان اجرا شدن برای كد مخرب كه در ظاهر فرآيندی قانونی است فراهم میگردد.
Reflective DLL Injection
اين ترفند Injection شامل کد مخربی است که Dynamic Link library يا DLL را در فرآیند هاست Load میکند و بنابراین نیازی به نوشتن DLL در دیسک نخواهد بود. این روش زمانی به كار میرود كه قرار باشد DLL از حافظه Load شود و نه از ديسك Metasploit’s Meterpreter.
در اين ترفند، در اولين مرحله، فرآيند بدافزار يا Injector خود را به فرآيند قانونی نهايی متصل و اطلاعات را جمعآوری میكند. سپس WCX يا Page_Execute_WriteCopy را به RWX يا Page_Execute_ReadWrite تغيير میدهد تا امکان تخصیص حافظه در فرآیند هدف را فراهم کند. در ادامه، يک Block جدید از حافظه را به فرآیند مورد نظر اختصاص میدهد و محتوای مخرب DLL را به آن Inject میكند. سپس فرآيند بدافزار به فرآیند هدف دستور میدهد تا محتویات مخرب DLL را اجرا کند. اين فرآيند بايد قابليت ReflectiveLoader را فرا خواند تا DLL مخرب را در حافظه Map نموده و سپس اجرا نمايد. سپس موقعيت مكانی فعلی DLL مخرب را در حافظه پردازش میکند تاHeader های آن بهدرستی جداسازی و اجرا شوند.
حملات مبتنی بر Script در Fileless Attack
در Fileless Attack حملات مبتنی برScript، ترفندی بدون فايل است كه ازScript ها برای اجرای مستقیم در حافظه استفاده میکند. سپس Script ها توسط برنامههای كاربردی موجود در لیست سفید مانندPowerShell ،Cscript ،Wscript ،MSHTA و برنامههای ديگر تفسیر میشوند. اين حملات ممكن است كاملا بدون فايل نباشند، چراكه در ابتدا به صورت پيوست و از طريق ايميل وارد سيستم كاربر میشوند. در پاسخ به اين كه چرا این حملات در گروه حملات «بدون فايل» قرار میگیرند، بايد گفت زیرا وقتی فايل پیوست یا سند باز میشود، با اجرای مستقیم Script تعبیه شده در حافظه، به صورت «بدون فايل» درمیآيند. Script اوليه به عنوان دانلودكننده عمل میكند تا به وبسايت مخربی متصل شده و Script ديگری يا يك Binary دانلود كند تا Payload نهايی خود را اجرا كند. همه چيز در حافظه و بدون قرار دادن فايل در ديسك انجام میشود. فايل اصلی که برای ورود استفاده میشود معمولاً خود تخريبی انجام می دهد تا هیچ اثری در دیسک باقی نماند. علاوه بر این، Scriptها برای مهاجمان بسیار جذاب هستند زیرا می توان به راحتی آنها را مبهم یا رمزگذاری نمود تا از شناسایی راهكارهای امنيتی فرار كنند. تصویر زیر نمونهای از یک سند Phishing را نشان میدهد که از Macro برای راهاندازی Scriptهای مخرب PowerShell در دستگاه استفاده میکند.
اگر Macro فعال باشد، بلافاصله Script را اجرا میکند.
ترفند Living off the Land
Living off the Land ترفندی است که طی آن، حمله از ابزارهای مدیریت سیستم و ابزارهای داخلی در سیستم سوءاستفاده میكند که «زنجيرهای از حملات» را در بر میگيرد. اين ترفند از این ابزارهای داخلی/مديريت برای ایجاد فعالیتهای مخرب در شبکه سازمان استفاده میکند. اگر حملهای از ترفندهای Living off the Land استفاده كند، يعنی تهدید از قبل در شبکه سازمان موجود بوده است که به آن حالت Post-exploitationمی گویند. یکی از بدافزارهای قابل توجه که از اين ترفند استفاده می کند، باج افزار Petya /NonPetya است که از PsExec و WMIC برای جابجایی فرعی و ابزاری به نام Mimikatz برای برداشتن اطلاعات اعتباری به منظور افزایش امتیاز استفاده میکند. با اين حال، به هنگام مقابله با حملات هدفگذاریشدهAPT ، تشخيص ترفند Living off the Land دشوارتر خواهد بود، چرا كه شامل مهاجمی واقعی است و این مهاجم يك انسان است و اقدامات مخرب را انجام می دهد.
مقاومت بدون فايل در Fileless Attack
تهدیدهای بدون فايل که عمدتا با ایجاد نقاط Load كه در آن Payloadها میتوانند مجددا راهاندازی شوند، از ترفندهای مختلف و منحصربهفردی استفاده میکنند، این نوع حملات با کاشت کدهای مخرب در ابزارها و برنامههای داخلی Windows مانند رجیستری سیستم، Windows Task Scheduler ،Windows Management Instrumentation Service اين كار را انجام میدهند، لازم به ذکر است برای مقاومت بدون فايل از روشهای مختلفی استفاده میشود. ترفندهای مذكور به دليل محبوبيت بيشتر در ميان حملات بدون فايل مورد بحث قرار خواهند گرفت.
رجیستری سیستم در ذخیره ديتابيسها و تنظیمات در ویندوز استفاده میشود، مهاجمان میتوانند یک Script مخرب در رجیستری ذخیره کنند که با شروع کار سیستم یا باز شدن فايلهای خاص فعال شود.
Windows Task Scheduler ممکن است برنامهها یا Scriptها را در یک زمان از پیش تعیینشده راهاندازی کند. در خصوص بدافزار بدون فايل، تسكهايی برنامهريزیشده ايجاد میشوند تا بدافزار را به اجرا درآورند. مهاجمان همچنین میتوانند تسكهايی زمانبندیشده را به گونهای تنظیم كنند تا مجددا فعال شوند و همچنينEntryهای رجيستریای ايجاد كنند تا سيستم را مجددا به صورت خودكار آلوده سازند. Windows Management Instrumentation Service يا WMI یکی از مولفههای اصلی ویندوز است که معمولاً برای کارهای مدیریتی روزمره مانند استقرارScrip های خودكارسازی، اجرای یک فرآیند/برنامه در یک زمان مشخص، كسب اطلاعات مربوط به برنامههای كاربردی يا سختافزارهای نصبشده، نظارت بر تغییرات در یک پوشه، نظارت بر فضای دیسک و موارد ديگر به كار میرود. هرچند اگر به دست يك مجرم سايبری بيفتد، او از آن به گونهای مخرب استفاده خواهد كرد.
جرمشناسی حملات بدون فايل
حمله بدون فايل ممكن است مخفیانه باشد، اما کاملاً نامرئی نیست. اگر كاربر بداند كجا را بايد جستوجو كند، هنوز سرنخ های زیادی وجود دارد که بتوان از دستگاهي مشکوک استخراج کرد. حملات واقعی بدون فايل با استفاده از سیستم عامل های 64 بيتی ویندوز 10 و 32 بيتی ويندوز 7 در محیط مجازی بسته شبیهسازی میشوند و از ابزارهای جرمشناسی SANS 508 برای بررسی استفاده میكنند.
تشخیص ترفندهای Code Injection
در تشخیص ترفندهای Code Injection، از ابزاری به نام Volatility استفاده میشود. Volatility یک ابزار تجزیه و تحلیل حافظه منبعباز است که از سيستمعاملهای ویندوز، Linux، مك و حتی اندرويد پشتيبانی میكند. همچنین میتواند تصاویر VMware، تصاویر Virtual Box و … را تجزيه و تحليل كند.
Process Hollowing
نمونه های بدافزار مورد بررسی براي Code Injection از نوع ترفند Process Hollowing، باجافزار SOREBRECT و DRIDEX banking Trojan هستند. با استفاده از ابزار تجزیه و تحلیل حافظه Volatility، تصویر دستگاه آلوده كه در حافظه ثبت شده است، با دقت مورد تجزیه و تحلیل قرار میگیرد تا ترفندهای Injection مورد استفاده این بدافزار شناسایی شود.
باجافزار Sorebrect
مشخص شده است که باج افزار SOREBRECT از طریق PsExec پیادهسازی میشود تا از طریق شبکه سازمان منتشر شود.
بررسی خصوصیات فرآیند مشکوک svchost.ex نشان داده است كه اين فرآيند بر اساس مسير فايلش قانونی به نظر ميیرسد. همچنين کاوش عمیق در تصویر حافظه بهدستآمده به كمك ابزار Volatility نشان میدهد كه از دستور «vol.py pslist | grep -i svchost» برای فیلتر کردن كامل فرآيند svchost.exe استفاده میشود، و این دستور اختلافاتی را در رابطه بين Parent و Child نشان داده است. فرآیند Parent پیش فرض «svchost.exe» باید «services.exe» باشد. با استفاده از اين خروجی میتوان ناهنجاری را مشخص كرد. همه فرآيندهای svchost.exe دارای فرآیند Parent از نوع PPID 692 هستند، به جز فرآيند خاص svchost.exe (PID 4692) که فرآیند Parent آن از نوع PPID 4656 است.