تحلیل حافظه که تو این نوشته، منظورم Memory Forensics هست، یکی از پیشرفته ترین و سخت ترین قسمت های تحلیل امنیت و فارنسیکه چون واقعاْ نیاز به دانش های متفاوت از جمله امنیت، شبکه و ساختار سیستم و حافظه داره. تو این نوشته تصمیم گرفتم یه مقدار در مورد تحلیل حافظه و ابزار خیلی قوی و جالب Volatility بنویسم. البته که این تحلیل خیلی مقدماتیه و تحلیل های خیلی پیشرفته تری میشه باهاش انجام داد.
واسه اینکه بفهمیم چه اتفاقاتی برای یه سیستم آلوده به بدافزار در یک زمان خاص افتاده، یا واسه پیدا کردن یک سری ادله امنیتی و بررسی یه سری وقایع خاص که خیلی وقتا لاگی ازشون نمونده و خیلی موارد دیگه نیازه تا روی حافظه موقت (Volatile) تحلیل صورت بگیره تا ببنیم چیا توش هست. در کل حافظه، خیلی چیز جالبیه، می شه توش چیزایی پیدا کرد که هیچ جای دیگه نمیشه پیدا کرد.
یه فریم ورک متن باز جالب که واسه تحلیل حافظه نوشته شده. این ابزار را با استفاده از پایتون نوشتن و کلی ماژول خیلی خوب واسه کارای تحلیل حافظه داره.
این ابزار را می تونید از لینک زیر دانلود کنید.
واسه اینکه باهاش کار کنید خودش یه سری image هم واسه نمونه گذاشته که ما هم تو این نوشته از یکیشون به اسم Cridex استفاده می کنیم و تحلیل حافظه انجام میدیم.
این نمونه ها را میشه از اینجا دانلود کرد.
https://github.com/volatilityfoundation/volatility/wiki/Memory-Samples
اولین کاری که با یه image توی تحلیل باید انجام بدیم اینه که ببینیم مربوط به چه سیستمیه و اطلاعات کلی ازش بدست بیاریم.
ابزار Volatility یه پلاگین به اسم imageinfo داره که میشه باهاش این اطلاعات را در آورد. با f- هم بهش میگیم از چه dumpی این اطلاعات را میخوایم
volatility -f cridex.vmem imageinfo
بعد از اجرای دستور بالا نتیجه اش اینطوری میشه
از نتیجه بالا معلوم شد که سیستم یه WinXPSP2x86 است. خب حالا می تونیم از پروفایل سیستم عامل مربوط به این سیستم استفاده کنیم و شروع کنیم به تحلیل اون سیستم. واسه این کار از Profile=WinXPSP2x86-- استفاده کنیم و بهش بگیم که سیستم عاملش WinXPSP2x86
حالا بریم سراغ اینکه ببینیم چه پراسس هایی اون موقعی که از دامپ (dump) گرفتن داشتن اجرا میشدن. واسه این کار میشه از پلاگین pslist استفاده کرد.
volatility -f cridex.vmem --profile=WinXPSP2x86 pslist
نتیجه اجرای دستور بالا اینطوری میشه
البته بجای pslist میشه از pstree هم استفاده کرد. که نتیجه اش اینطوری میشه
تو لیست بالا یه پراسس به اسم reader_sl.exe هست که یه مقدار عجیب به نظر میرسه. PPID اش هم ۱۴۸۴ که همون PID مربوط explorer.exe است.
قبل از اینکه بریم سراغ تحلیل عمیق تر این دو تا پراسس میشه از پلاگین خیلی مفید psxview هم استفاده کرد. این پلاگین لیست پراسس هایی که حین اجرا مخفی شدن را هم نشون میده.
خب با توجه به اینکه دو تا ستون pslist و psscan مقدار False نداریم، این نشون میده پراسس مخفی نداریم.
برگردیم به تحلیل قبلیمون. بعد از اینکه پراسس های در حال اجرا را دیدیم، خوبه که بریم سراغ کانکشن های در حال اجرا و سوکت های باز روی اون سیستم. واسه این کار میشه از سه تا پلاگین زیر استفاده کرد
پلاگین connscan یه اسکنر که واسه نمایش کانکشن های TCP استفاده می شه. بعد اجراش روی image نتیجه اش اینطوری میشه:
پلاگین sockets واسه نمایش سوکت های باز استفاده می شه. بعد اجراش روی image نتیجه اش اینطوری میشه:
پلاگین netscan هم که توی این مثال نمیشه استفاده اش کرد برای نمایش کانکشن ها و سوکت های باز سیستم عامل های vista و بعد از اون استفاده میشه
با یه نگاه به خروجی پلاگین connscan میشه فهمید، ۲ تا کانکشن از نوع TCP هست که از پراسس شماره ۱۴۸۴ داره ازشون استفاده می کنه که خب این PID متعلق به explorer.exe است. از بین این دوتا کانکشن یکیشون هنوز بازه. چطور فهمیدیم؟ از خروجی پلاگین sockets. اونی که روی پورت ۱۰۳۸ است هنوز توی لیست sockets هست و با ۴۱.۱۶۸.۵.۱۴۰ روی پورت ۸۰۸۰ ارتباط می زنه.
دوتا پلاگین اول یعنی cmdscan که تاریخچه دستورات زده شده را از طریق اسکن کردن واسه _COMMAND_HISTORY میکشه بیرون و consoles که همین کار را با اسکن کردن واسه _CONSOLE_INFORMATION می کنه خروجی نشون نداشتن. ولی cmdline که آرگومان های خط فرمان پراسس ها رو نشون میده، خروجی زیر را نشون داد.
الان مسیر کامل پراسس هایی که از طریق پراسس های ۱۴۸۴ و ۱۶۴۰ اجرا شدن را داریم. ۱۶۴۰ هم مربوط به همون reader_sl.exe است. توی خروجی cmdline وقتی نگاه می کنیم (مسیرش را ببینید) میبینیم این پراسس که بوسیله explorer.exe ران شده بوده، قرار بوده یه adobe reader ساده باشه ولی الان داره به بیرون کانکشن میزنه و یه سری کارا می کنه.
از اونجایی که این پراسس داره مشکوک میزنه بهتره ازش یه خروجی اجرایی (exe) بگیریم و بعد بریم واسه تحلیل بیشترش با استفاده از پلاگین های procdump و memdump .
با p- شماره پراسس (PID) و با dump-dir-- هم مسیر خروجی را بهش میدیم.
با پلاگین procdump خروجی exe را میگیریم با memdump هم یه دامپ قابل آدرس دهی از مموری میگیره
و بعدش میشه با دستور strings شروع به تحلیل این دامپ و بررسی ارتباطش با پراسس شماره ۱۴۶۰.
تو این خروجی قشنگ میشه دید که این پراسس داره با متد POST یه سری دیتا به ۴۱.۱۶۸.۵.۱۴۰ میفرسته که این یعنی احتمالاْ داره Data Exfilteration انجام میده.
بیشتر که این فایل دامپ را بررسی می کنیم و میریم پایین تر به یه سری دیتاهای جالب می رسیم.
با این داده هایی که از خروجی Strings گرفتیم معلوم شد با لیستی از دامین های بانک ها توش هست که خب بیشتر به این مشکوک میشیم که یه بدافزار باشه. واسه مطمئن تر شدن، میتونیم فایل exe که خروجی گرفتیم را به یه سری sandbox مثل virustotal و HybridAnalysis بدیم ببینیم نتیجه اش چی میشه. البته میشه آنالیز Static هم کرد و دید پشت فایل exe چه کدهایی هست ولی فعلاْ همون راه sandbox را میریم.
خروجی HybridAnalysis
از خروجی های بالا هم مشخص شد که این فایل به عنوان به تروجان توی این Sandbox ها شناخته شد. بنابراین با توجه به این خروجی ها و تحلیل های بالا، سیستمی که این image از حافظه اش گرفته شده آلوده به بدافزاره. البته بیشتر از این هم میشه تحلیل کرد و IOC برای این بدافزار و عملکردش درآورد که برای مراکز عملیات امنیت و SIEM ها بسیار مفید باشه.
منبع:https://medium.com/@zemelusa/first-steps-to-volatile-memory-analysis-dcbd4d2d56a1