*هشدار: قبل از شروع به مطالعه، قهوه خود را آماده کنید!
در این نوشته رفتار مموری بدافزار ZeusBot با استفاده از ابزار Volatility بررسی شده است. ابتدا بهتر است خلاصه ای بر این بدافزار ذکر شود.
بدافزارZeus، بدافزاری از خانواده تروجانها است که در نسخههای مختلف سیستم عامل ویندوز اجرا میگردد. با وجود اینکه این بدافزار دارای قابلیتهای بسیار زیادی میباشد، ولی معمولاً برای سرقت اطلاعات مربوط به بانکها مورد استفاده قرار میگیرد. از این بدافزار برای نصب باجافزار CryptoLocker نیز استفاده شده است.
این بدافزار معمولاً با استفاده از تکنیکهای فیشینگ و یا دانلود از منابع نامطئن سیستمهای هدف را آلوده میکند. بعدها بدافزار Gameover Zeus نیز که از همین خانواده است، مطرح گردید که از ساختار ارتباطی P2P استفاده میکند. از آنجا که این بدافزار به سختی قابل شناسایی است، به همین دلیل بزرگترین شبکه bot در اینترنت را تشکیل داده است.
همانطور که در توضیحات به آن اشاره شد، این بدافزار از ساختار P2Pبرای ارتباطات خود استفاده کرده و رفتار Botnet دارد. ابتدا از لینک زیر میتوان فایل zeus.vmem را دانلود کرد.
http://malwarecookbook.googlecode.com/svn-history/r26/trunk/17/1/zeus.vmem.zip
زمانی که از Volatility v2 استفاده می شود، در گام نخست باید پروفایل مموری بدست آید. بدین منظور ابتدا با استفاده از دستور imageinfo اطلاعات بیشتر از آن بدست آماده است.
vol.py -f zeus.vmem imageinfo
بعد از بدست آوردن پروفایل، پروسس های اجرایی برروی سرور با استفاده از دستور pslist بررسی می شوند. همانطور که مشاهده می شود، در نگاه اول مورد خاصی از Parent-Childe، تعداد و نام مشکوک مشاهده نمی شود.
vol.py -f zeus.vmem --profile=WinXPSP2x86 pslist
باتوجه به اینکه میدانیم این بدافزار ارتباطات مشکوک دارد، در نتیجه از پلاگین connscan استفاده کرده تا ارتباطات شبکه ای آن مشخص شود. همانطور که مشخص است، پروسس 856 به آدرس 193.104.41.75:80 متصل شده است.
vol.py -f zeus.vmem --profile=WinXPSP2x86 connscan
به منظور بررسی بیشتر، آدرس فوق در Virus Total بررسی می شود.همانطور که مشهود است تعداد 62/70 آنتی ویروس مختلف، این آدرس را متعلق به بدافزار Zeus و مخرب میدانند.
حال به بررسی بیشتر پروسس 856 پرداخته می شود. همانطور که از دستور pslist مشخص شد، 856 مربوط به svchost.exe بوده که از طریق services.exe اجرا شده است. تا اینجا همچنان مورد مشکوکی نیست. به منظور بررسی Parent-Child پروسس ها از دستور psscan استفاده شده و با خروجی گرفتن Dot به صورت گرافیکی به بررسی مابقی پروسس ها پرداخته می شود.
vol.py -f zeus.vmem --profile=WinXPSP2x86 psscan --output=dot --output-file=zeus.dot
dot -Tps zeus.dot -o zeus.ps
در خروجی گرافیکی پروسس ها، موردی جهت شناسایی رفتار مشکوک مشاهده نمی شود.
باتوجه به اینکه پروسس 856 سر نخ ما در این بررسی است، CommandLineهای مرتبط با این پروسس بررسی شده که مورد مشکوکی مشاهده نمی شود.
vol.py -f zeus.vmem --profile=WinXPSP2x86 cmdline -p 856
همچنین با استفاده از dlllist، تمامی آرگومان های فراخوانی شده توسط این پروسس مشاهده می شود. همانطور که مشخص است مسیر مشکوکی در بین آنها یافت نشده است.
vol.py -f zeus.vmem --profile=WinXPSP2x86 dlllist -p 856
تا به اینجا، تنها سرنخ موجود پروسس svchost.exe بوده که رفتار مشکوکی از نظر ساختار پروسس ها، دستورات و روند اجرایی ندارد. زمانی که در بررسی های اولیه موردی مشاهده نمی شود، به بررسی خود پروسس می پردازیم که ممکن است این پروسس آلوده شده باشد. از جمله رایج ترین حملات در این زمینه Process Hollowing می باشد.
با این حال، با استفاده از پلاگین malfind، جهت شناسایی رفتار مخرب این پروسس، روند فانرنزیک ادامه داده شده است. جهت تحلیل malfind باید این نکته خاطر نشان شود، مواردی مشکوک بوده که در هدر آنها MZ مشاهده و در بخش Vad Tag، مقدار PAGE_EXECUTE_READWRITE مشاهده شود. به صورت معمول، پروسس های ویندوز به صورت PAGE_EXECUTE_WRITE اجرا می شوند و در صورت مشاهده آن، مشخص است که این پروسس آلوده شده است.
خروجی malfind نشان میدهد پروسس 856 آلوده شده است.
vol.py -f zeus.vmem --profile=WinXPSP2x86 malfind -p 856
جهت بررسی بیشتر باید ابتدا پروسس از مموری Dump گرفته شده و سپس با استفاده از Sandbox بیشتر بررسی شود.
vol.py -f zeus.vmem --profile=WinXPSP2x86 procdump -p 856 -D zeus
جهت تحلیل بیشتر، فایل در Virus Total قرار داده شده است. همانطور که مشخص است رفتار این پروسس به صورت Process Injection, Create New Process و Spawn Process می باشد که فرضیه Process Hollowing را قوی تر میکند.
همچنین در تحلیل آن مشخص شد برخی از رجیستری ها نیز تغییر پیدا کرده اند.
به منظور مشاهده Hiveهای مموری، پلاگین hivelist استفاده می شود.
vol.py -f zeus.vmem --profile=WinXPSP2x86 hivelist
سپس با پلاگین dumpregistry، این موارد استخراج می شود.
vol.py -f zeus.vmem --profile=WinXPSP2x86 dumpregistry -D zeus
یکی از کارهای بدافزارها، همیشگی کردن دسترسی خود می باشد. حال باتوجه به اینکه Hiveهای رجیستری استخراج شده اند، برخی از مسیرهای مهم مانند Winlogon بررسی می شود. اگر بعد افزار در این مسیر تغییری ایجاد کرده باشد، سبب می شود تا دسترسی خود را دائمی کرده و با هر دفعه بالا آمدن سیستم، اجرا شود.
با استفاده از دستور Strings میتوان Hiveهایی که مقدار winlogon دارند را مشاهده کرد.
strings -f -a -el * | grep -i winlogon
سپس با استفاده از ابزار Registry Explorer، مقدار رجیستری بررسی می شود. همانطور که مشاهده می شود در قسمت Userinit، پروسس sdra64.exe مشاهده شده که نشان دهنده رفتار مخرب و Persistence توسط این بدافزار می باشد.
به منظور بررسی بیشتر برخی از مسیرهای رایج رجیستری نیز بررسی شود تا رفتار مشکوک مشاهده شود. مسیر زیر در صورتی که تغییر کند، سبب می شود بدافزار بتواند، دانلودهای خود را مخفی کند. همانطور که مشاهده می شود این مسیرتغییر پیدا کرده است.
vol.py -f zeus.vmem printkey -K "Microsoft\Windows\CurrentVersion\Internet Settings\Cache\Paths"
همچنین مسیر نتورک نیز تغییر پیدا کرده است.
vol.py -f zeus.vmem printkey -K "Microsoft\Windows NT\CurrentVersion\Network"
با توجه به موارد پیدا شده در رجیستری، نیاز است وابستگی های پروسس مانند Handles بررسی شود. این بررسی باعث می شود تا در صورتیکه اگر پروسس دیگری آلوده شده باشد، شناسایی شود.
جهت بررسی ابتدا Mutantهای پروسس 856 بررسی شود. Mutex Object باعث می شود تا از دسترسی چندین Threads به یک Object به اشتراک گذاری شده، ممانعت شود. همانطور که مشخص است پس از بررسی موارد مجاز، در سایت fortiguard مشاهده شد _AVIRA_2018 غیر مجاز بوده و برروی مموری لود شده است.
vol.py -f zeus.vmem --profile=WinXPSP2x86 handles -p 856 -t mutant
حال بررسی می شود آیا پروسس دیگری نیز آلوده شده است یا خیر. همانطور که مشاهده می شود، از طریق پروسس 856، پروسس های 608، 632 و 936 آلوده شده اند.
vol.py -f zeus.vmem --profile=WinXPSP2x86 handles -p 856 -t Process
برای اطمینان از پلاگین malfind مجدد استفاده شده تا موارد مشکوک شناسایی شود. مشاهده می شود پروسس های 936و 632آلوده شده اند(Code Injection).
vol.py -f zeus.vmem --profile=WinXPSP2x86 malfind -p 936,608,632
بدین منظور، با استفاده از Base Address، بخش های VAD با استفاده از vaddump بررسی می شود.
vol.py -f zeus.vmem --profile=WinXPSP2x86 vaddump -b 0x8d0000 -D zeus
با استفاده از دستور file، مشاهده می شود، svchost فایل اجرایی بوده و باید در Sandbox بیشتر بررسی شود.
file zeus/winlogon.exe.66f0978.0x008d0000-0x0090ffff.dmp
file zeus/svchost.exe.63c5560.0x008d0000-0x008f5fff.dmp
با توجه به اینکه خروجی handles نشان میداد،سه پروسس آلوده شده اند، سناریو API Hooking برررسی می شود. در سناریو API Hooking، مهاجم API Callهای ویندوز را تغییر میدهد. همانطور که مشاهده می شود، تابع ntdll.dll!NTCreateThread در آدرس 0x7c90d7d2 بوده که به آدرس 0xb73b47، تغییر(JMP) و Hook داشته است.
vol.py -f zeus.vmem --profile=WinXPSP2x86 apihooks -p 936,856,632
یکی از جداول مهم کرنل IDT بوده که مسئول Interrupt و Exceptionها در CPU و هدف بسیاری از Rootkitها می باشد. در این جدول تمامی خروجی ها باید به سمت ntoskrnl.exe اشاره کرده و مواردی که UNKNOWN باشند، نشان دهنده آلوده شدن جدول IDTمی باشد.
vol.py -f zeus.vmem --profile=WinXPSP2x86 idt | grep -iv ntoskrnl.exe
در گام آخر، به بررسی userassist پرداخته می شود. userassist جدول برنامه های اجرایی ویندوز را نشان می دهد. همانطور که مشاهده می شود، در Desktop فایلی با نام Zeus_binary_*.exe قرار داده شده است.
vol.py -f zeus.vmem --profile=WinXPSP2x86 userassist
در این نوشته به بررسی رفتار بدافزار ZeusBot در مموری پرداخته شد. همانطور که مشاهده شد این بدافزار رفتارهای مخربی را در سطح مموری داشته است. از این نوشته میتوان سرنخ روند بررسی بدافزارهای بیشتری را بدست آورد. همچنین جهت بررسی بیشتر پیشنهاد می شود Process Hollowing نیز بررسی شود.