محمد حسن پزشکیان
عاشق امنیت و نفوذ ، رد تیم و دوستدار بزن بکش :)

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها

در این مقاله میخوایم به بررسی تکنیک هایی که بدافزار نویس ها استفاده میکنن برای حفظ دسترسی بدافزارشون رو باهم بررسی میکنیم که برای تیم های آبی مرجع خوبیه که با این تکنیکا آشنا بشن و برای تیم های قرمزم شروع خوبیه که بفهمن چیکار باید بکنن ولی به اینا نباید بسنده کنن :)

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

اگر یه بدافزار روی سیستم بیاد و نویسندش به بحث Persistence توجه نکنن بعد یه ریبوت ساده بدافزار فعال نمیشه و عملا بی فایده میشه ، واسه همین بدافزار نویس ها سراغ تکنیک های متعددی میرن که بدافزارشون بعد ریستارت یا همون ریبوت سیستم باز خودشو اجرا کنه و بتونه ادامه بده به فعالیتش

قبل اینکه به خوندن ادامه بدید بدک نیست این مقاله رو بخونید :

مقاله : معرفی پردازش های مهم ویندوز برای امنیت کار ها

Windows Registry

ریجستری ویندوز یکی از اصلی ترین جاهاییه که بدافزارا سراغش میرن ، ریجستری یک بخشیه که تنظیمات سیستم و کاربرا رو تو خودش ذخیره میکنه ، نکته ای که هست اینه که بعد ریبوت سیستم یکی از جاهایی که میتونه برنامه هارو بالا بیاره ریجستریه حالا بریم سراغ  برخی از مکان هایی که ممکنه بدافزارا توش برن برای ریجستری

NTUSER.DAT\Software\Microsoft\ Windows\CurrentVersion\Run
HKCU\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows
*\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
*\HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
*\HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
*\HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

در ادامه بیشتر کار میکنیم با ریجستری برنامه های مهم و در ادامه ریجستری رو بیشتر بررسی میکنیم

Task Scheduling

بحث بعدی برنامه زمان بندی ویندوز یا Task Scheduling ویندوز هست که توش بدافزار میاد و مشخص میکنه که خب بعد خاموش روشن دوباره اجرا بشه دیگه، میتونیم با دستور schtasks اینکارو بکنیم 

schtasks /create /tn svchost /tr C:\Users\<victimuser>\AppData\Local\<Name>\svchost.exe /sc ONSTART /f

دستور بالا میاد و یه تسک برنامه ریزی شده رو سیو میکنه و میگه برنامه در زمان بوت بیاد بالا (ONSTART) ، یه بدافزاری هم ک آدرسشو دادیم اجرا میشه و دیگه

این تسک ها در C:\Windows\System32\Tasks ذخیره میشن و با نرم افزارهایی مثل autoruns میشه رصدشون کرد

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها

نکته : در بحث شناسایی بدافزارهایی که اقدام به Perstistence میکنن استفاده از نرم افزار Autoruns خیلی موثره

Startup Folders

یکی دیگه از جاهایی که ممکنه دسخوش حمله بدافزارا بشه بحث استارتاپ و برنامه هاییه که تو استارتاپ میاد بالا ، وقتی یوزری لاگین میکنه قبل رویت دستکاپ یه سری برنامه ها میان بالا ، به اون مرحله میگن استارتاپ

پوشه startup به دو بخش تقسیم میشه : user-level و system-level ، اگر برنامه ای توی پوشه user-level قرار بگیره ، موقع استارتاپ فقط برای یک یوزر اجرا میشه (یوزر همون پوشه ای که توشه) ولی اگر توی پوشه system-level قرار بگیره برای تمامی یوزرا اجرا میشه

یکی از راه هایی که میشه این پردازش هارو شناسایی کرد از طریق دستور shell:startup در ران هست

پوشه system-level startup هم مسیرش اینه :

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

پوشه user-level startup هم مسیرش اینه :

C:\Users\<Username>\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup


WinLogon 

این برنامه مسئول logon/logoff - shutdown -startup - و قفل صفحس ، من در یک مقاله پردازش های مهمی که بدافزار نویسا بهش حمله میکنن رو جدا توضیح دادم :

مقاله : معرفی پردازش های مهم ویندوز برای امنیت کار ها

این پردازش هم برای بحث حفظ دسترسی عالیه ، بدافزارا با تغییر  registry entries میان و بدافزار خودشونم اضافه میکنن به userinit.exe این پردازش توسط winlogon اجرا میشه و مسئول اجرای اسکریپتای مورد نیاز سیستمه ، حالا این userinit قصه ما در اینجای ریجستری کنترل میشه :

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها

اگر بعد اون کاما "," آدرس فایل مخربی بیاد با userinit اجرا میشه (ببینید بحث Persistence اینطوریه که شما همزمان با پردازش اصلی یه پردازش فرعی رو اجرا میکنید ، مثلا فک کنید دونفر میخوان وارد یه سازمان بشن ، نفر اول احراز شدست ولی نفر دوم مجور ورود نداره ، وقتی میخوان وارد شن نفر اول به نگهبانی میگه که نفر دوم با منه و باهم وارد میشن ، همین فرایندو ما توی بحث Persistence داریم)

userinit مسئول استارت shell یوزره موقعی که یوزر لاگین کرد ، که منظور از شل همون explorer.exe هست و این مقدارم توسط یه ریجستری ولیو دیگه کنترل میشه به نام shell این آدرس

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها


AppInit_DLLs

کنترل میکنه که چه dll ای لود بشه برای هر پردازشی که از کتابخونه user32.dll استفاده کنه و چون تقریبا دومین کتابخونه پر استفاده ویندوزه و اکثر توابع توشه میتونه برای بحث حفظ سطح دسترسی استفاده بشه

دوتا مکان ریجستری وجود داره :

  HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows
 HKLM\Software\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\Windows

بر اساس داکیومنت های مایکرسافت این مقدار به صورت پیشفرض غیرفعاله از ویندوز 8 به بعد اگر سیستم از secure boot استفاده کنه

DLL Search Order

میرسیم به یه جای بسیار حساس و خوب دیگه ، dll ها یا با اپلیکیشن جدیدی که روی سیستم میاد نصب میشن یا توی ویندوز به صورت پیشفرض هستن ، هروقت یه پردازش تو ویندوز میخواد یه dll ای رو لود کنه ، ویندوز یه سری سلسله مراتب خاص برای اینکار داره ، جستجوی dll قانونمنده و صف خاصی داره و از همین رو میتونه توسط بدافزار نویسا جعل بشه :

اول ویندوز میره سراغ dll هایی که توی memory لود شدن ، بعد میره سراغ dll هایی که شناخته شدن (KnownDLLs) در مسیر زیر

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها

بعد میره سراغ دایرکتوری یا پوشه ای که برنامه از تو اون لود شده (پوشه خود برنامه)

بعد میره سراغ دایرکتوری سیستمی "C:\Windows\System32"

بعد "C:\Windows\System"

بعد "C:\Windows"

بعد سراغ دایرکتوری فعلی ای که توش درحال فعالیته

آخر سر دایرکتوری ای که متغییر های محلی توشه "PATH environment variable"

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها

معمولا دوتای اولی بیشتر بهشون حمله میشه !


Windows Service

سرویس درواقع برنامه هایین که در پس زمینه اجرا میشن (در ریجستری هم مقادیرشون ثبت میشن) و درواقع کاربر با سرویس ها مستقیم ارتباط ندارن ، بدافزارا میتونن به عنوان سرویس اجرا بشن تا به Persistence برسن

به این صورت به این هدف میرسن که بدافزار رو به عنوان یه فایل اجرایی مستقل اجرا کنن (standalone executable) یا به عنوان dll که لود میشه داخل svchost.exe یا درایور هسته (kenrel driver)

از خط فرمان و دستور sc میشه استفاده کرد یا محیط گرافیکی services.msc مثلا ما یه بدافزار به اسم اسکایپ میسازیم که اجرا بشه

sc create Skype binPath = C: Windows system32 Skype skype.exe start= auto && sc start Skype

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها

و میتونیم توسط  services.ms در ران چک کنیم ، سرویس ها در این مسیر ریجستری ان :

HKLM\SYSTEM\CurrentControlSet\Services

سرویس ها در ویندوز از کانتینر svchost.exe استفاده میکنن ، در واقع svchost مسئول گروهی از سرویساست ، با استفاده از svchost مدیریت سرویس هارو به آسونی مدیریت میکنه ، بدافزارام از کانتینر استفاده svchost.exe میکنن برای اجرای بدافزارشون به عنوان سرویس مخصوصا بدافزار های DLL ای !!

معرفی تکنیک های ماندگاری مورد استفاده بدافزار ها

حالا مثلا میریم سراغ  netsvcs به عنوان مثالی از گروه سرویس ها در svchost.exe ، اگر دوبار کلیک کنیم روی مقدارش میتونیم کل سرویسای که زیر نظر این گروه اجرا میشن رو ببینیم ، میریم سراغ schedule 

تنظیمات services در این بخش ریجستریه :

HKLM\SYSTEM\CurrentControlSet\Services\Schedule
 
آدرس image سینتکسش اینطوریه :  SystemRoot%\System32\svchost.exe –k GroupName%

سرویس باید یک مقدار پارامتر داشته باشه و یه مقدار Service DLL ، این ها میان و کانفیگ و مسیر فایل سرویس رو معلوم میکنن که قراره لود بشه ، و بدافزارام این مقادیرو ادیت میکنن برای کارای خبیث :)

برای شکار این حملات این مقاله خیلی میتونه کمکتون کنه :

مقاله : معرفی پردازش های مهم ویندوز برای امنیت کار ها

امید وارم براتون مفید بوده باشه ، اگر سوالی بود در خدمتم ;)



محمد حسن پزشکیان
محمد حسن پزشکیان

عاشق امنیت و نفوذ ، رد تیم و دوستدار بزن بکش :)

کارشناس تست نفوذ سنجی ، علاقه مند به امنیت تهاجمی و رد تیمینگ | عضو انجمن بین المللی ورزش های رزمی کشور آلمان و دارای احکام بین المللی و داخلی کمربند مشکی در سبک های کیوکوشین ، هاپکیدو ، کیک بوکسینگ و چند تام قهرمانی کشوری

نظرات