مقدمه
برای تحلیل بدافزار یه محیط ایزوله لازم داری که توش بتونی بدون ترس از خراب کردن سیستم اصلیت، فایل مشکوک رو اجرا کنی و رفتارش رو ببینی. حداقل چیزی که نیاز داری: یه VM ویندوزی برای اجرای بدافزار، یه VM لینوکسی برای دیدن ترافیک شبکهش، و یه شبکهی isolated که این دو رو به هم وصل کنه ولی به اینترنت واقعی نه.
یه نکته هم بگم: توزیعهایی مثل Kali یا همین REMnux که پایین معرفی میکنم، میانبر خوبین برای کسی که نمیخواد هر بار دهها ابزار رو تک تک نصب کنه. ولی همیشه امکان نصب و کانفیگ کردن تک تک ابزار ها به تنهایی روی هر توزیع و نوع Lab برای این جور کارها هست.
سیستم اصلی من در زمان نوشتن این پست Arch هست و virtualization رو با QEMU/KVM انجام میدم. اگه با VirtualBox راحتتری، اون هم جواب میده - فقط مسیر این راهنما رو با QEMU جلو میبرم.
QEMU/KVM و Virt-Manager
sudo pacman -S qemu-full libvirt virt-manager dnsmasq iptables-nft edk2-ovmf
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt,kvm $(whoami)
بعدش لاگاوت/لاگین کن وگرنه گروههای جدید اعمال نمیشن.
یه شبکهی NAT پیشفرض به اسم default تو virt-manager هست، ولی برای این لب بهتره یه شبکهی isolated جدا بسازی - نمیخوای بدافزار راه اینترنت پیدا کنه.
شبکه Isolated
Edit < Connection Details < Virtual Networks > +
- اسم:
malware-lab - Mode: Isolated
- IPv4: فعال،
192.168.100.0/24، DHCP خاموش - IPv6: خاموش
این شبکه فقط بین دو VM ارتباط برقرار میکنه، به اینترنت نه.
VM ویندوز
ISO ویندوز 10/11 رو بگیر و یه VM بساز: حداقل 4GB رم، 2 هسته، 60GB دیسک، روی شبکهی malware-lab. نصب کن، یه حساب local بساز.
آپدیت و Defender رو خاموش کن
آپدیت از مسیر Settings > Update & Security > Pause updates، یا رجیستری:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 1 /f
Defender از PowerShell (Administrator):
Set-MpPreference -DisableRealtimeMonitoring $true
Set-MpPreference -DisableIOAVProtection $true
Set-MpPreference -DisableScriptScanning $true
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender" -Name DisableAntiSpyware -Value 1 -PropertyType DWORD -Force
FLARE-VM
مجموعهی کامل ابزار تحلیل بدافزار روی ویندوز، از Mandiant:
Set-ExecutionPolicy Unrestricted -Force
(New-Object System.Net.WebClient).DownloadFile('https://raw.githubusercontent.com/mandiant/flare-vm/main/install.ps1', "install.ps1")
.\install.ps1
چند ساعت طول میکشه و چندبار ریبوت میشه،
اگه نمیخوای کل FLARE-VM رو نصب کنی و فقط چندتا ابزار خاص لازم داری، با Chocolatey یا winget هم میشه:
اصلاح: از scoop + winget استفاده کنید
winget install -e --id Wireshark.Wireshark
winget install -e --id Microsoft.Sysinternals.ProcessExplorer
winget install -e --id Microsoft.Sysinternals.ProcessMonitor
IP استاتیک
Network Settings > Change adapter options > Ethernet > IPv4
- IP:
192.168.100.10 - Subnet:
255.255.255.0 - Gateway: خالی
- DNS:
192.168.100.20(همون REMnux)
REMnux
دیستروی لینوکسی مخصوص تحلیل بدافزار. اگه با VirtualBox میری، فایل OVA مستقیم بالا میاد و کارت تمومه. با QEMU یکی از این دو راه رو برو:
روش ۱: تبدیل OVA به QCOW2
wget https://docs.remnux.org/install-distro/get-virtual-appliance
tar -xvf remnux-v7-focal.ova
qemu-img convert -f vmdk -O qcow2 remnux-v7-focal-disk1.vmdk remnux.qcow2
تو virt-manager: New VM > Import existing disk image، دیسک رو همین qcow2 بده، OS رو Ubuntu 20.04 بگیر، 4GB رم، 2 هسته، روی شبکه malware-lab.
روش ۲: نصب دستی روی Ubuntu 20.04
ISO Ubuntu 20.04 رو بگیر، VM بساز (4GB رم / 2 هسته / 60GB دیسک / شبکه malware-lab)، نصب کن، بعد:
wget https://remnux.org/remnux-cli
mv remnux-cli remnux
chmod +x remnux
sudo mv remnux /usr/local/bin
sudo remnux install
این آخری حدود یه ساعت طول میکشه. بعدش ریبوت.
IP استاتیک
sudo nmtui
Edit a connection > Wired:
- Manual، Address
192.168.100.20/24، Gateway خالی - DNS موقتاً
8.8.8.8بزن (فقط برای آپدیت)
آپدیت
remnux update && remnux upgrade
بعد از آپدیت، DNS رو پاک کن یا بزار 127.0.0.1 - چون میخوایم بعداً INetSim خودش DNS جعلی بده، نه گوگل.
Guest Tools
ویندوز: VirtIO drivers رو نصب کن (virtio-win.iso از fedorapeople) و بعدش spice-guest-tools از سایت spice-space.
REMnux:
sudo apt install qemu-guest-agent
sudo systemctl enable --now qemu-guest-agent
تست شبکه
الان باید دو VM با این آیپیها داشته باشی:
- ویندوز:
192.168.100.10 - REMnux:
192.168.100.20
از ویندوز پینگ بزن:
ping 192.168.100.20
جواب نداد؟ فایروال رو چک کن، هم سمت ویندوز هم لینوکس.
ایده اینه که REMnux نقش DNS و سرور قلابی شبکه رو بازی میکنه - ویندوز فکر میکنه به اینترنت وصله، ولی هرچی request بفرسته رو REMnux جواب میده.
INetSim
شبیهساز سرویسهای اینترنتی (HTTP, DNS, SMTP و غیره). کانفیگ:
sudo nano /etc/inetsim/inetsim.conf
service dns
dns_default_ip 192.168.100.20
start_service dns
start_service http
start_service https
start_service smtp
start_service ftp
اجرا:
sudo inetsim
لاگها میرن تو /var/log/inetsim/ - هرچی بدافزار درخواست بده اینجا ثبت میشه.
یه نکتهی مهم: برای اینکه INetSim بتونه روی پورت DNS گوش بده، باید systemd-resolved رو خاموش کنی:
sudo systemctl disable --now systemd-resolved
و /etc/resolv.conf خود REMnux رو بزار nameserver 8.8.8.8 (وگرنه خودش گیج میشه).
Snapshot
قبل از هر اجرای بدافزار، حتماً snapshot بگیر.
تو virt-manager: VM رو خاموش کن، View > Snapshots > + ، اسمش رو بزار clean-state.
یا از ترمینال:
virsh snapshot-create-as --domain windows-malware-lab --name "clean-state" --description "Clean Windows before analysis"
virsh snapshot-create-as --domain remnux-lab --name "clean-state" --description "Clean REMnux before analysis"
برگشت به حالت پاک:
virsh snapshot-revert --domain windows-malware-lab --snapshotname "clean-state"
تحلیل استاتیک
یعنی بدون اجرا کردن، فقط با نگاه کردن به فایل بفهمی چه خبره.
file malware.exe
md5sum malware.exe
sha256sum malware.exe
هش رو تو VirusTotal یا MalwareBazaar سرچ کن - شاید یکی قبلاً شناساییش کرده.
strings malware.exe | less
strings -e l malware.exe | less
دنبال URL، IP، اسم فایل، کلید رجیستری بگرد - خیلی وقتا بدافزارهای ساده همینجوری لو میرن.
تو ویندوز با DIE (Detect It Easy) ببین packed هست یا نه. PEStudio برای import/export table و sectionها. اگه میخوای عمیقتر بری، IDA Free یا Ghidra برای دیساسمبل.
چیزایی که باید دنبالشون باشی:
- Import table: چه API هایی صدا زده میشه؟ (CreateProcess, WriteFile, RegSetValue, socket - اینا معمولاً سیگنال بد هستن)
- Strings مشکوک: URL، IP، اسم فایل
- اگه packed بود، اول باید unpack بشه وگرنه تحلیل بیفایدهست
- Section با entropy بالا = احتمالاً packed یا encrypted
تحلیل دینامیک
حالا واقعاً اجراش میکنیم و میبینیم چیکار میکنه.
قبل از اجرا:
- Snapshot بگیر (دوباره میگم چون مهمه)
- Process Monitor و Process Explorer رو باز کن
- روی REMnux:
sudo wiresharkوsudo inetsimرو اجرا کن - اگه FLARE-VM داری، روی ویندوز
FakeNet-NG.exeهم اجرا کن
بعد بدافزار رو اجرا کن و چند دقیقه صبر کن، ببین چیکار میکنه.
Process Monitor
فیلتر بزار رو همون process. سه چیز مهمه:
- File: چه فایلی ساخته/خونده/نوشته شده - مخصوصاً Temp, AppData, Startup
- Registry: کلید Run چیزی اضافه شده؟ (یعنی میخواد persistence بسازه)
- Network: چه connection برقرار شده
Process Explorer
Process tree رو ببین - کی چی رو spawn کرده. DLL های load شده رو چک کن. اگه شک داری، راستکلیک > Properties > Strings رو بزن و memory string ها رو ببین.
Wireshark روی REMnux
کل ترافیک رو capture کن. چه protocol (HTTP/DNS/IRC/custom)، چه domain/IP صدا زده شده، چه data رفت و برگشت. pcap رو نگهدار، بعداً با NetworkMiner یا tcpdump هم میشه دوباره نگاش کرد.
لاگ INetSim
tail -f /var/log/inetsim/service.log
هر request - HTTP، DNS، هرچی - همینجا ثبت میشه. این معمولاً سریعترین راه برای فهمیدن کجا میخواد کانکت بشه.