iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
Security

《Nyahello!從零開始的 30 天 malware 學習日誌》系列 第 27

【Day 27】Malware Behavior:常見惡意程式行為整理

  • 分享至 

  • xImage
  •  

前言

前面幾章主要都在學習「如何分析 Malware」,包含 Static Analysis、Dynamic Analysis、Debugging,以及 Kernel Malware。

從 Chapter 11 開始,重點稍微改變。

這次不是再學一個新的分析工具,而是要開始認識:

Malware 到底會做什麼?

雖然惡意程式種類很多,而且新的攻擊方式一直出現,但許多 Malware 仍然會出現一些共通行為。

例如:

下載其他 Malware
建立 Backdoor
竊取帳號密碼
Keylogging
建立 Persistence
提升權限
隱藏惡意行為

如果熟悉這些常見行為,之後在 IDA Pro 看到某些 API、Strings 或程式結構時,就可以比較快判斷 Malware 可能正在做什麼。

【聲明】由於時間問題本日文章由 AI 生成QQ


Downloaders and Launchers

首先是兩種很常見的 Malware:

  • Downloader
  • Launcher / Loader

Downloader

Downloader 的功能很直接:

從 Internet 下載另一個 Malware,再執行它。

因此 Downloader 本身可能沒有太多惡意功能,真正的 Payload 是之後下載的 Malware。

教材提到一種很典型的組合:

URLDownloadToFileA
        ↓
下載 Malware
        ↓
WinExec
        ↓
執行 Malware

所以分析 Sample 時,如果看到:

URLDownloadToFileA
WinExec

出現在一起,就值得檢查它是不是 Downloader。

Launcher

Launcher 又稱為 Loader。

它的工作是:

安裝或載入 Malware,讓 Malware 現在或未來能夠執行。

和 Downloader 不同的是,Launcher 常常已經包含它要載入的 Malware,不一定需要從 Internet 下載。


Backdoors

Backdoor 是讓攻擊者能夠遠端控制受害電腦的 Malware。

Backdoor 通常包含很多功能,例如:

修改 Registry
建立 Directory
搜尋 File
執行 Command
收集系統資訊

分析 Backdoor 時,可以從 Imports 使用的 Windows API 推測它具備哪些功能。

Backdoor 還需要和攻擊者通訊。

教材中特別提到 HTTP 與 Port 80,原因很簡單:

HTTP 本來就是非常常見的正常流量,因此惡意流量比較容易混在一般 Network Traffic 中。


Reverse Shell

Reverse Shell 是 Backdoor 中很重要的一種功能。

一般情況下,如果攻擊者直接連入 Victim:

Attacker
   ↓
Victim

可能會被 Firewall 或 NAT 阻擋。

Reverse Shell 則反過來:

Victim
   ↓
Attacker

由受感染的電腦主動建立 Connection。

Connection 建立之後,攻擊者就能取得 Shell,並像在本機操作一樣執行 Command。

教材以 Netcat 說明這個概念,而 Windows Malware 也常直接建立 Socket,再啟動:

cmd.exe

基本流程是:

Create Socket
     ↓
Connect
     ↓
CreateProcess
     ↓
cmd.exe
     ↓
stdin / stdout / stderr
     ↓
Socket

因此分析 Malware 時,如果看到 Networking API、CreateProcesscmd.exe 一起出現,就值得檢查是否存在 Reverse Shell。

比較複雜的版本也可能使用:

CreatePipe
CreateThread

建立多執行緒 Reverse Shell,甚至在傳送資料前進一步 Encode。


RAT

RAT 全名:

Remote Administration Tool

同樣可以遠端控制電腦,但是 RAT 通常提供更完整的控制功能。

教材中的架構可以簡化成:

Attacker
   │
   │ Command & Control
   ↓
Victim 1
Victim 2
Victim 3

受感染的 Victim 會主動向控制端 Beacon,再由攻擊者進行控制。

RAT 經常使用:

80
443

等常見 Port 進行通訊。


Botnets

Botnet 則是大量被感染電腦組成的網路。

每一台受感染電腦通常稱為:

Zombie

並受到 Botnet Controller 控制。

Botnet 的目的可能包括:

散播 Malware
發送 Spam
DDoS

RAT vs Botnet

兩者雖然都可以遠端控制受害電腦,但使用方式不同。

RAT 通常比較偏向:

少量 Victim
+
針對性控制

Botnet 則偏向:

大量 Victim
+
同時控制

因此教材把 RAT 和 Targeted Attack 聯繫在一起,而 Botnet 更偏向 Mass Attack。


Credential Stealers

取得系統之後,攻擊者通常會想辦法取得 Credential。

教材將 Credential Stealing 大致分成三類:

攔截登入資訊
取得 Windows 儲存的 Password Hash
記錄使用者輸入

也就是接下來的:

  • GINA Interception
  • Hash Dumping
  • Keylogging

GINA Interception

這是一種 Windows XP 時代的 Credential Stealing 技術。

Windows XP 的 Login Process 使用:

msgina.dll

處理 Authentication。

Windows 也允許 Third-party DLL 加入登入流程。

Malware 就可以利用這個機制,把惡意 DLL 放在:

Winlogon
   ↓
Malicious GINA DLL
   ↓
msgina.dll

如此一來,Username 和 Password 就會先經過 Malware。

教材中的惡意 fsgina.dll 會把登入資訊記錄到:

%SystemRoot%\system32\drivers\tcpudp.sys

其中包含 Username、Domain、Password 等資訊。

分析這類 DLL 時還有一個特徵:

Wlx*

如果看到大量以 Wlx 開頭的 Export Function,就值得懷疑是不是 GINA Interceptor。


Hash Dumping

另一種 Credential Stealing 方法是取得:

LM Hash
NTLM Hash

攻擊者取得 Hash 後,可以嘗試 Offline Cracking,也可能直接進行 Pass-the-Hash。

教材介紹的經典工具是:

pwdump

Pwdump 會透過 DLL Injection,把 DLL 放進:

lsass.exe

中執行。

為什麼選 LSASS?

因為它具有足夠的權限,而且能存取 Authentication 相關資訊。

分析 Pwdump Variant 時,可以注意:

samsrv.dll
advapi32.dll
GetProcAddress

以及與 SAM 操作相關的 Function。

不過教材也特別提醒:

比起花大量時間研究 Malware 到底用哪一個底層 API Dump Hash,更重要的是先搞清楚它取得 Hash 之後要做什麼。

例如:

寫入 Disk?
傳送到 Server?
進行 Pass-the-Hash?

這些資訊對理解 Malware 整體目的可能更重要。


Keystroke Logging

Keylogger 會記錄使用者的 Keyboard Input,例如:

Username
Password
Message
其他輸入內容

教材分成:

Kernel-based Keylogger
User-space Keylogger

Kernel-based Keylogger 可以作為 Keyboard Driver 運作,因此 User Mode 程式比較難發現。

User-space Keylogger 則常使用:

Hooking

常見 API:

SetWindowsHookEx

當 Keyboard Event 發生時通知 Malware。

Polling

不斷詢問 Keyboard 的狀態。

常見 API:

GetAsyncKeyState
GetForegroundWindow

典型流程:

GetForegroundWindow
        ↓
目前使用哪個 Application?
        ↓
GetAsyncKeyState
        ↓
哪個 Key 被按下?
        ↓
檢查 Shift / Caps Lock
        ↓
記錄按鍵
        ↓
Repeat

教材第 9 頁的流程圖就是這種 Polling Keylogger 的典型 Loop:先取得 Foreground Window,再逐一檢查 Keyboard Keys,完成後重新開始。

除了 Imports,也可以從 Strings 判斷 Keylogger。

例如:

[Num Lock]
[PageDown]
[Left]
[Right]
[Up]
[Down]

因為如果 Malware 想完整記錄 Keyboard Input,就必須處理這些特殊按鍵。


Persistence Mechanisms

Malware 成功感染電腦後,通常不希望:

Reboot
   ↓
Malware 消失

所以需要建立:

Persistence

也就是讓 Malware 在重新開機、登入或其他條件發生後再次執行。

教材介紹幾種重要方式。


Registry Persistence

最常見的方法之一就是修改 Registry。

例如:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

不過 Persistence Registry Location 非常多,不需要全部背起來。

實際分析時可以使用:

Autoruns
Procmon

協助尋找。

教材另外介紹三個值得認識的位置。

AppInit_DLLs

設定在:

HKLM\SOFTWARE\Microsoft\
Windows NT\CurrentVersion\Windows

其中的 AppInit_DLLs 可以讓指定 DLL 被載入許多會使用 User32.dll 的 Process。

Winlogon Notify

可以讓 Malware 配合:

Logon
Logoff
Startup
Shutdown
Lock Screen

等 Winlogon Event 載入。

SvcHost DLL

Malware 也可能把自己安裝成由:

svchost.exe

載入的 Service DLL。

這種方法可以讓 Malware 混在 Windows 大量正常 svchost.exe Process 中,比一般 Service 更不顯眼。


Trojanized System Binaries

另一種 Persistence 方法是直接修改正常 Windows Binary。

概念是:

Original System DLL
        ↓
修改 Entry Point
        ↓
Malicious Code
        ↓
載入 Malware
        ↓
跳回 Original Code

教材中的例子修改:

rtutils.dll

原本的 DLL Entry Point 被改成 Jump。

Malicious Code 接著:

LoadLibraryA("msconf32.dll")

載入惡意 DLL。

完成後再回到原本的 DLL Code,因此正常功能仍然可以繼續執行。

這樣使用者可能完全感覺不到 System DLL 已經遭到修改。


DLL Load-Order Hijacking

這個技術利用 Windows 尋找 DLL 的順序。

以教材中的 Windows XP 為例,Application 載入 DLL 時會依序搜尋多個位置。

如果攻擊者可以把:

malicious.dll

放在 Legitimate DLL 之前會被搜尋的位置,就可能讓 Windows:

Application
     ↓
搜尋 DLL
     ↓
先找到 Malicious DLL
     ↓
載入 Malware

而不是原本真正的 DLL。

教材舉例:

explorer.exe

需要載入:

ntshrui.dll

如果攻擊者在較優先搜尋的位置放入同名惡意 DLL,就可能讓 Explorer 先載入 Malware。

惡意 DLL 再載入真正的 DLL,讓程式維持正常運作。

這種方法的特色是:

不一定需要另外建立 Registry Persistence,也不一定要修改原本的 Binary。


Privilege Escalation

Malware 有時候還需要取得更高權限。

例如:

User
 ↓
Administrator
 ↓
SYSTEM

如果目前權限不足,Malware 可能利用 OS Vulnerability 或其他方法進行 Privilege Escalation。

教材特別介紹:

SeDebugPrivilege


SeDebugPrivilege

Windows Process 有自己的 Access Token,用來描述 Process 具備哪些權限。

Malware 可以透過:

OpenProcessToken
LookupPrivilegeValue
AdjustTokenPrivileges

嘗試啟用:

SeDebugPrivilege

典型流程:

GetCurrentProcess
        ↓
OpenProcessToken
        ↓
LookupPrivilegeValue
        ↓
"SeDebugPrivilege"
        ↓
AdjustTokenPrivileges
        ↓
SE_PRIVILEGE_ENABLED

取得這個 Privilege 後,就能進一步操作一些高權限 Process。

所以分析 Malware 時,如果看到:

OpenProcessToken
LookupPrivilegeValue
AdjustTokenPrivileges
SeDebugPrivilege

這組合一起出現,就可以優先懷疑它正在調整 Process Privilege。


User-Mode Rootkits

最後是前幾篇已經接觸過的 Rootkit。

之前看到的 SSDT Hooking 屬於 Kernel Mode。

這一章則介紹兩種 User Mode Hook:

IAT Hooking
Inline Hooking

IAT Hooking

正常情況:

Program
   ↓
IAT
   ↓
Kernel32.dll
   ↓
TerminateProcess

Rootkit 可以修改 IAT Pointer:

Program
   ↓
IAT
   ↓
Rootkit Code
   ↓
TerminateProcess

如此一來,原本要呼叫 API 的程式就會先進入 Rootkit。

教材的例子就是 Hook TerminateProcess,讓 Rootkit 可以干涉 Process Termination。


Inline Hooking

Inline Hooking 更進一步。

IAT Hooking 修改的是:

Function Pointer

Inline Hooking 則直接修改:

Function Code

例如原本:

ZwDeviceIoControlFile
    ↓
Original Code

被修改成:

ZwDeviceIoControlFile
    ↓
JMP
    ↓
Rootkit Code

教材中的 Rootkit 使用一個 7-byte Hook:

mov eax, Rootkit_Function
jmp eax

直接讓 Function 跳到 Malware。

範例 Hook ZwDeviceIoControlFile 後,Rootkit 會先過濾 Network Information,把目的 Port 為:

443

的 Traffic 隱藏,再呼叫真正的 ZwDeviceIoControlFile

因此其他功能仍然可以正常運作,看起來不容易察覺異常。


結語

Chapter 11 最重要的不是背下每一個 API,而是建立:

看到某些特徵,就能聯想到可能的 Malware Behavior。

可以簡單整理成:

URLDownloadToFileA
→ Downloader

Socket + cmd.exe
→ Reverse Shell

SetWindowsHookEx
GetAsyncKeyState
→ Keylogger

LSASS + Credential API
→ Credential Stealing

Run Key / AppInit_DLLs / Service
→ Persistence

OpenProcessToken
AdjustTokenPrivileges
SeDebugPrivilege
→ Privilege Manipulation

IAT 被修改
→ IAT Hooking

API 開頭出現 JMP
→ Inline Hooking

實際分析 Malware 時,不一定需要把每一段 Assembly 都 Reverse 到完全理解。

更重要的是先從:

Imports、Strings、API Calls、Registry、Network、Process 與程式結構

辨認出 Malware 的主要能力,再決定哪些 Function 值得繼續深入分析。

這也是 Chapter 11 和前面幾章最大的不同:前面是在學習怎麼分析 Malware,而這一章開始建立的是看到分析結果之後,怎麼知道 Malware 正在做什麼

參考資料

  • Practical Malware Analysis (Chapter 10)
  • chatGPT

本日貓味

https://ithelp.ithome.com.tw/upload/images/20260922/20183878oWFlJ7G7wU.jpg


上一篇
【Day 26】實戰 WinDbg:Kernel Debugging
下一篇
【Day 28】Anti-Disassembly:反反組譯技術
系列文
《Nyahello!從零開始的 30 天 malware 學習日誌》28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言