DEF CON 33 - Go Malware Meets IoT - Challenges, Blind Spots, and Botnets - Asher Davila
三句話摘要
Go語言惡意軟體分析技術與AI輔助逆向工程實戰演講 Go惡意軟體的逆向分析需打破傳統C/C++工具思維,建立Go特化工具鏈(Ghidra Go編譯器、go strings外掛、gore),配合AI輔助加速初期偵察,但最終判斷權必須掌握在人手上——AI加速但不替代驗證。 Go成為恶意软件首選的技術原因:跨平台支持16-17個作業系統、二進制預設靜態編譯導致文件龐大、自包含特性減少外部依賴,使安全掃描器因文件限制而跳過分析,難以逆向工程。
重點整理
重點- 1
Go成為恶意软件首選的技術原因:跨平台支持16-17個作業系統、二進制預設靜態編譯導致文件龐大、自包含特性減少外部依賴,使安全掃描器因文件限制而跳過分析,難以逆向工程。
- 2
Go二進制分析的核心挑戰:靜態鏈接導致函數數量激增(典型案例1800個 vs C的10個),字符串採計數與長度元組存儲而非null終止,標準工具(如strings命令)失效,需Ghidra編譯器選項或NCC Group開發的go strings外掛才能正確識別。
- 3
AI輔助分析的實踐邊界:R2 AI如同Clippy助手提供命令建議而非自動化解决,Ghidra MCP可自動化執行命令序列但在自定義打包器上失效,Sidekick限定於單一函數提問;三款工具均能加速初期偵察但在複雜逆向(如CTF挑戰的自定義密碼)易陷困境。
- 4
混合驗證策略的必要性:演講者手動檢驗AI輸出發現誤判(如錯誤重建的HTTP payload),強調需交叉驗證字符串偏移、地址映射、CVE真假正例,最終人工確認前信息才可用於檢測簽名編寫。
實用技巧與重點
乾貨- 技術數據
- Go首次公開發布:2009年11月
- 支持操作系統數:16-17個
- 靜態二進制示例(Hello World):C版本 16KB,Go版本 2.2MB
- 函數數量對比:Go版本 ~1800個,C版本 10個
- Botana Go發現時間:2021年
- Botana Go針對的漏洞數:30+個
- Botana Go VirusTotal檢測率:66個廠商中41個(62%)
- Go二進制數據峰值:2025年2月-3月
- 工具清單(開源優先)
- 反彙編器/編譯器:Radare2(R2)、Ghidra、Binary Ninja
- AI輔助:R2 AI、R2 MCP、Ghidra MCP、Sidekick(商用)
- 字符串提取:go strings(NCC Group外掛)、gore、go red team
- 命令:aaa(完整分析)、pd(打印反彙編)、fl(列表函數)、px(十六進制轉儲)、izz(字符串搜尋)
- Go特殊結構
- go build info section:所有ELF/Mach-O二進制都有,PE檔案位於data section
- go PC line table:映射程序計數器到源代碼行號,用於函數重建,magic number隨Go版本變更(非固定0xF1FFFF)
- struct func:包含uintptr(函數起點)與name(函數名稱)
- 字符串類型:動態分配(運行時重建)與靜態分配(大型非結構化字符塊)
- 具體案例樣本
- Botana Go:SHA256(未在逐字稿中列出但提及可用)、ELF 64位、動態鏈接、非strip
- PumaBot:目標巴西Pumatronic監控系統、SSH暴力破解、disguised服務名(my$QI而非mySQL)用於持久化
- Goblin EXE反向題:自定義打包程序、Ninja Don't Cry header、版本5資料、失敗採用標準解壓算法
- API設定
- R2 AI provider範例:Gemini、本地模型、自有伺服器
- 模型範例:Gemini 2.5 Pro、R2AI、DK(LLVM IR編譯模式)
- Ghidra MCP設定:GitHub下載、Binary Ninja擴充、Claude本地MCP伺服器配置
- 關鍵字符串指標
- fmt.Println、runtime panic、Go版本號 → 識別Go二進制
- infect_[vendor](如infect_alcatel、infect_dlink)→ 目標列表
- HTTP payload字符串、wget命令、shell代碼 → 命令注入向量
結論
結論“Go惡意軟體的逆向分析需打破傳統C/C++工具思維,建立Go特化工具鏈(Ghidra Go編譯器、go strings外掛、gore),配合AI輔助加速初期偵察,但最終判斷權必須掌握在人手上——AI加速但不替代驗證。”
完整解析
詳細Go語言自2009年開源以來,因其跨平台特性與靜態編譯模式,逐漸被惡意軟體作者青睞。Palo Alto Networks研究團隊在過去一年的內部監測中發現,Go惡意軟體在2025年2月至3月出現明顯峰值,涵蓋botnet、挖礦程式與sleeper植入物等多種類型。這股趨勢反映在野外樣本中——從針對烏克蘭SCADA系統的Frosty(攻擊Modbus協議)、到大規模掃描IoT設備的Botana Go與PumaBot——Go已成為高級威脅的載體。
分析Go惡意軟體的首要困難在於二進制的異常龐大:同一個Hello World程序,C編譯後16KB,Go卻膨脹到2.2MB。這龐大的體積源於Go的靜態鏈接策略——所有標準庫與運行時都被內嵌到二進制中。結果是函數爆炸:同樣的程序,Go包含1800多個函數,C僅10個。標準反彙編工具難以應對,IDA或Ghidra打開時往往需要手動指定Go編譯器選項才能正確解析。更棘手的是字符串處理——Go的字符串不使用C風格的null終止符,而是由指針與長度元組組成,導致strings命令輸出一團亂碼。NCC Group開發的go strings外掛透過八步工序(包括資料段提取、結構推斷)才能把雜訊中的合法字符串篩選出來。
演講者以Botana Go為案例,展示如何在Radare2中交叉參考漏洞編號與payload字符串,發現該惡意軟體針對TP-Link、D-Link、Fiber Home等30多個IoT廠商的已知漏洞執行命令注入攻擊。關鍵發現來自go build info區段——Go二進制預設保留編譯元資料(Go版本、編譯時間、架構),這是C strip後消失的信息。go PC line table更提供函數地址映射,成為重建二進制的關鍵;但務必注意magic number隨Go版本變更,寫自動化工具時不能硬編碼0xF1FFFF。
為了加速分析,研究團隊引入AI輔助工具。R2 AI扮演「Clippy助手」角色,根據用戶查詢(如「這個程序用什麼語言寫的?」)動態建議Radare2命令,或利用Gemini 2.5 Pro進行反彙編到偽代碼的轉譯。Ghidra MCP則走向完全自動化——用戶提交「分析這個二進制」,MCP自動執行disassemble、函數列表、payload重建等步驟,一次性產出攻擊向量與C2地址。Sidekick(Binary Ninja外掛)則聚焦單一函數,用戶逐次提問(「這個函數在做什麼?」「它連接到哪個C2?」),逐步揭示惡意行為。
但三款工具都有侷限。R2 AI在Goblin EXE CTF挑戰中試圖解析自定義打包程序,反覆檢驗標準解壓算法(zlib、LZMA),最終無法突破;Ghidra MCP重建的HTTP payload有時取錯地址參考,需人工驗證;Sidekick容易遺漏重要字符串(如演講者追問C2域名時才補充)。演講者強調,AI的真正價值在於大規模樣本篩選——當每日面對數千個未知惡意軟體時,AI可自動標記明顯特徵(SSH暴力破解、服務持久化)供分析師優先檢視,而非試圖獨立破譯複雜打包。
實戰案例PumaBot揭示的是持久化機制的隱蔽性——該malware偽裝系統服務名稱為「my$QI」而非「mySQL」,混淆人工檢查。通過AI協助與手動驗證相結合,團隊快速確認這是Pumatronic(巴西監控系統製造商)特定品牌的變種,目標明確。這流程總結為:初步AI偵察 → 字符串與地址交叉驗證 → 手動payload重建 → CVE真假正檢驗 → 檢測簽名編寫——缺一不可。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

