مقدمه

برای تحلیل بدافزار یه محیط ایزوله لازم داری که توش بتونی بدون ترس از خراب کردن سیستم اصلیت، فایل مشکوک رو اجرا کنی و رفتارش رو ببینی. حداقل چیزی که نیاز داری: یه 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

تحلیل دینامیک

حالا واقعاً اجراش می‌کنیم و می‌بینیم چیکار می‌کنه.

قبل از اجرا:

  1. Snapshot بگیر (دوباره میگم چون مهمه)
  2. Process Monitor و Process Explorer رو باز کن
  3. روی REMnux: sudo wireshark و sudo inetsim رو اجرا کن
  4. اگه 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، هرچی - همینجا ثبت میشه. این معمولاً سریع‌ترین راه برای فهمیدن کجا می‌خواد کانکت بشه.