جدول محتوا
- بررسی Trusted Installer
- بررسی Protected Processها
- بررسی تکنیک DLL Side Loading
- از کار انداختن سرویس آنتیویروس
- جلوگیری از Load شدن درایور آنتیویروس
- تثبیت دسترسی
بررسی Trusted Installer
قبل از شروع مبحث، با هم ببنیم Trusted Installer چیه؟ از ویندوز 7 به بعد، شرکت مایکروسافت یه built-in user account به نام Trusted Installer به سیستمعامل ویندوز اضافه کرد. این اکانت قابلیت اینو داره که توی خیلی از سرویسها و فایلهای خود سیستمعامل، تغییر ایجاد کنه. در واقع شرکت مایکروسافت این اکانت رو درست کرد تا کسی غیر از خودش نتونه به بخشهای مهم سیستمعامل دسترسی داشته باشه. یکی از استفادههای مهمش هم توی پروسهی بهروزرسانی سیستمعامل هست. مثلا وقتی که برای فایل kernel32.dll بهروزرسانی میاد و میخواد یه بخشیشو تغییر بده فقط این کاربره که دسترسی جایگزین کردن فایل جدید با فایل قدیمی رو داره. هیچکس نمیتونه کارهایی مثل rename یا Delete رو با این فایلها انجام بده. همینطور که تو عکس میبینید اینجا حتی Administrator هم قابلیت Modify رو نداره. ولی Trusted Installer دسترسی Full Control داره. خب حالا فرایند کارش چطوریه؟ ویندوز اومده یه سرویس درست کرده به اسم Trusted Installer. موقعی که این سرویس میاد بالا یه پروسس ایجاد میکنه که قابلیت تغییرات توی بخشهای محافظت شده رو داره. حالا ویندوز از کجا میفهمه که این پروسس دسترسی لازم برای اعمال تغییرات رو داره؟ از روی توکن این پروسس. همونطور که تو تصویر زیر هم میبینید، پروسس Trusted Installer توکن Trusted Installer رو هم داره. از اونجایی که وقتی میخوایم به یه آبجکت دسترسی داشته باشیم، سیستمعامل برای اینکه بدونه ما اجازهی انجام این کار رو داریم یا نه، میاد توکن مارو بررسی میکنه. بر همین اساس، اینجا هم با بررسی توکن TrustedInstaller.exe میفهمه که این پروسس اجازه تغییرات توی فایلهای محافظت شده رو داره. نکتهی مهمی که اینجا باید بهش بپردازیم اینه که سرویس Trusted Installer از نوع Protected نیست (در ادامه توضیح میدم که منظور از Protected چیه( برای همین ما میتونیم بیایم start اش کنیم، Stop اش کنیم و حتی ازش هندل بگیریم. این نقطه آغازیه برای انجام سو استفاده از این سرویس مهم!بررسی Protected Processها
خب حالا که فهمیدیم Trusted Installer چیه و چطوری کار میکنه، لازمه که یه مرور کلی هم روی شیوهی عملکرد Protected Processها داشته باشیم. این پروسسها از ویندوز ویستا به بعد به وجود اومدن. ایده شکل گیریشون هم به این صورت بود که اون زمان هیچ مکانیزمی برای جلوگیری از کپی شدن اطلاعات CD/DVDها وجود نداشت. حتی وقتی میومدن دیتای روی CD رو Encrypt میکردن، باز موقع پخش مجبور بودن دیتای Decrypt شده رو به پروسسی که صدا و تصویر رو توی ویندوز هندل میکرد ارسال کنن. همین جا هم بود که افراد سودجو با خوندن فضای حافظهی کارت صدا یا پخش کنندهی تصویر، اطلاعات رو سرقت میکردند و دوباره روز از نو، روزی از نو. تا اینکه صدای خیلی از شرکتها به اعتراض بلند شد و از مایکروسافت خواستند که یه فکری برای این داستان بکنه و اینجا بود که ایدهی Protected Processها شکل گرفت. به این معنی که وقتی پروسسی به صورت Protected اجرا میشد هیچ Non-Protectedای نمیتونست از اون پروسس هندل قوی بگیره، اون رو ببنده یا حتی داخلش کد Inject کنه. حتی DLLهایی که Sign مایکروسافت نبودند هم نمیتونستند توی این پروسسها اجرا شن. اما اینجا این قابلیت فقط دست مایکروسافت بود و به هیچ شرکت Third-Partyای این امکان رو نداده بود که بتونه از این قابلیت استفاده کنه. تا اینکه ویندوز 8.1 رو عرضه و تو این سیستمعامل قابلیت مذکور رو برای شرکتهای آنتیویروس فراهم کرد. این شرکتها باید درخواست خودشونو ثبت میکردن و اگه مایکروسافت تایید میکرد یک Sign در اختیار اونها قرار میداد که به وسیله اون میتونستن سرویس خودشون رو به صورت Protected اجرا کنن. دیگه اینجا نمیشد دستکاریای روی این سرویسها انجام داد یا اختلالی توی کارشون به وجود آورد. فقط یه هندل بسیار ضعیف میشد از این پروسسها گرفت که اطلاعات محدودی مثل اسم فایل رو برمیگردوند و در نتیجه این هندلها هم بسیار ناکارآمد بودن. حالا اگه یادتون باشه گفتیم سرویس Trusted Installer که یه سرویس خیلی مهم توی ویندوز هست به صورت Protected بالا نمیاد. پس میتونیم ازش هندل بگیریم و هرکاری که میخوایم رو انجام بدیم.بررسی تکنیک DLL Side Loading
یکی از تکنیکهای مورد علاقه بسیاری از APTهای دنیاست و توی گزارشاتی که هر روز منتشر میشه، میبینیم که از طرق مختلف و همچنین توی فازهای مختلف اومدن از این روش استفاده کردن. حالا این روش چطوری کار میکنه؟ ویندوز یه سری قواعد برای بارگذاری DLL توی برنامه داره که در این لینک میتونید جزییاتشو بخونید:https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
نکتهی مهمش اینه که غیر از Known-DLLها، برای اجرای بقیه ماژولهای سیستمی، اولین جایی که سیستم جستجو میکنه، فولدر جاری خودش هست. اینجا نفوذگرها میان یه DLL همنام مثلا Advapi32.dll رو میزارن توی فولدر یه برنامهی شناخته شده مثل Word و در نتیجه سیستم هم اونو اجرا میکنه. حالا اینجا برای جلوگیری از کرش کردن برنامه، نفوذگرها میان تابعهایی که توی DLL اصلی هست رو برمیدارن و توی دل DLL خودشون وارد میکنن. به این صورت هم DLL نفوذگر اجرا میشه، هم DLL اصلی. مزیت این روش هم اینه که DLL مورد نظر شما رو یه برنامه با Sign مایکروسافت اجرا میکنه و به همین دلیل Payload ما از چشم آنتیویروسها و EDRها مخفی میشه. چون پیادهسازیهای زیادی ازش توی اینترنت هست دیگه به جزییات بیشتر دربارهی این موضوع نمیپردازیم و میریم سراغ مبحث بعدی.