Claude可以編寫程式碼,但它能檢查二進位執行檔嗎?
我們之前已經用NSA軟體嘗試破解經典Atari遊戲,這次想聚焦於更實用的任務——利用AI代理進行惡意軟體偵測。我們與Dragon Sector的逆向工程專家Michał “Redford” Kowalczyk合作,他以發現波蘭火車中的惡意程式碼聞名,共同建立一個無需原始碼即可尋找二進位檔後門的基準測試。
完整基準測試結果可見BinaryAudit,包含誤報率、工具熟練度及成本效益的帕累托前緣。所有任務皆開源,位於QuesmaOrg/BinaryAudit。
我們驚訝地發現,現今的AI代理竟能偵測部分隱藏在二進位檔中的後門,這超出我們對其逆向工程專業能力的預期。
然而,這種方法尚未達到生產環境可用的程度。即使是最佳模型Claude Opus 4.6,也僅在小型或中型二進位檔中以49%的成功率找到相對明顯的後門。更糟的是,多數模型誤報率偏高,會誤將乾淨的二進位檔標記為有問題。
本文將討論近期幾則安全事件,解釋什麼是二進位分析,以及我們如何為AI代理構建基準測試。並觀察它們何時成功、何時失敗——無論是漏掉惡意程式碼或誤報。
數月前,Shai Hulud 2.0攻擊了數千個組織,包括財富500強企業、銀行、政府及新創公司,這是針對npm生態系的供應鏈攻擊,注入竊取憑證的惡意程式碼。
數日前,Notepad++公布遭國家支持的攻擊者劫持,將合法二進位檔替換為感染版本。
甚至實體世界也受到威脅,包括關鍵基礎設施。例如研究人員發現中國太陽能逆變器中藏有隱藏無線電,以及電動巴士的安全漏洞。每個數位裝置都有韌體,韌體比我們在電腦上安裝的軟體更難檢查,且影響更直接。國家與企業行為者均有動機篡改這些韌體。
Dragon Sector的Michał “Redford” Kowalczyk曾逆向工程火車以分析可疑故障,該議題是第37屆Chaos Communication Congress最受歡迎的演講之一。另見針對火車的Dieselgate事件報告及後續討論。
甚至不需惡意行為者,網路路由器韌體中常內建隱藏管理密碼,供廠商遠端維護,但任何發現這些密碼的人都能取得同等存取權限。
我們能否利用AI代理來防範此類攻擊?
日常程式設計中,我們處理的是原始碼,依賴高階抽象:類別、函式、型別,組織成清晰的檔案結構。大型語言模型(LLM)在此表現優異,因為它們訓練於這種人類可讀的邏輯。
惡意軟體分析則逼我們進入更困難的領域:二進位執行檔。
編譯將高階語言(如Go或Rust)轉成特定CPU架構(如x86或ARM)的低階機器碼。我們得到的是原始CPU指令:在暫存器間移動資料、數字相加或跳轉記憶體地址。原始碼結構與變數、函式名稱全數遺失。
更糟的是,編譯器為了速度會積極優化,內聯函式(改變呼叫階層)、展開迴圈(用重複區塊取代簡潔邏輯)、重新排序指令以保持處理器忙碌。
然而,二進位檔是使用者實際執行的程式。對於封閉原始碼及二進位發佈軟體,這就是我們唯一可用的資料。
分析二進位檔是一個冗長且繁瑣的逆向工程過程,起始於一連串的轉換:機器碼→組合語言→偽C語言。以下示範後門在這些表示法中的樣貌:
從原始位元組轉成組合語言相對簡單,可用objdump等指令列工具查看。
將組合語言轉成C語言困難許多,需用逆向工程工具,如NSA開發的開源Ghidra、Radare2,或商業工具IDA Pro與Binary Ninja。
反編譯器盡力解讀CPU指令並產生可讀C碼,但因編譯時所有高階抽象與變數名稱遺失,輸出遠非完美,常見FUN_00130550、bVar49、local_148等毫無意義的名稱。
我們請AI代理分析二進位檔,判斷是否含有後門或惡意修改。
我們從多個開源專案開始:lighttpd(C語言網頁伺服器)、dnsmasq(C語言DNS/DHCP伺服器)、Dropbear(C語言SSH伺服器)及Sozu(Rust負載平衡器),並手動注入後門。例如藏入攻擊者可透過未紀錄的HTTP標頭執行指令的機制。
重要說明:本基準測試中的所有後門均為人工注入,用於測試。我們不宣稱這些專案存在真實漏洞,它們是經過控制修改的合法開源軟體。
這些後門並不複雜,我們未刻意混淆或藏於難以察覺的程式碼區域。這類異常是熟練逆向工程師相對容易發現的。
代理取得編譯後的執行檔,無原始碼或除錯符號,並可使用Ghidra、Radare2及binutils等逆向工具。任務是識別惡意程式碼並指出含後門函式的起始地址(如0x4a1c30)。
部分任務採不同方法:呈現3個二進位檔,詢問哪些含後門,無需指出具體位置。此方法模擬供應鏈攻擊,通常只有部分二進位檔被篡改。
我們在lighttpd伺服器中注入後門,透過未紀錄的HTTP標頭執行shell指令。
後門核心是尋找隱藏的X-Forwarded-Debug標頭,利用popen()執行其內容作為shell指令,並將輸出放入回應標頭。
對下載此後門伺服器的使用者而言,程式看似正常,但攻擊者可輕易透過特製封包執行任意指令。
步驟1:模型識別二進位檔及其26個共享函式庫,其中一個含後門。
步驟2:模型用strings搭配grep搜尋明顯後門指標,但未發現異常。隨後擴大搜尋範圍至所有共享函式庫,尋找硬編碼IP、可疑指令及憑證模式,仍無明顯發現。
步驟3:Claude改用nm -D列出匯入函式,發現liblighttpd2-shared.so匯入popen(),該函式用於執行shell指令,立即引起警覺。
步驟4:Claude進一步用Radare2反編譯分析,找出呼叫popen()的函式li_check_debug_header,該函式執行shell指令,符合典型後門模式。
透過Radare2反編譯的偽碼,模型理解後門運作:尋找未紀錄的X-Forwarded-Debug標頭,若存在則執行攻擊者指令,並將結果放入X-Request-Trace回應標頭。
步驟5:Claude用Radare2確認該函式非死碼,透過交叉參考確定其被主程式呼叫。
確認找到真實後門後,Claude回報結果並結束分析。
然而,LLM經常漏掉明顯後門。
我們在廣泛使用的dnsmasq中加入一個非常明顯的後門:若封包含有我們自創的DHCP選項224,則執行其內容作為shell指令。
後門僅7行C程式碼,位於DHCP封包解析中。
即使是基準測試中表現最佳的模型也被此任務欺騙。Claude Opus 4.6早期在strings輸出中找到/bin/sh,追蹤至含後門函式,看到execl呼叫,卻誤判為正常行為。
模型認為此為dnsmasq合法的DHCP腳本執行模式,未檢查指令字串來源(實際來自客戶端DHCP封包),隨後轉向其他函式,未回頭。
基準測試中的執行檔通常有數百至數千函式,後門卻很小,常藏於深處。尋找它們需策略思考:識別關鍵路徑如網路解析器或使用者輸入處理,忽略雜訊。
目前LLM缺乏此高階直覺,常隨機反編譯函式或搜尋系統呼叫關鍵字,當簡單啟發式失效,模型常產生幻覺或放棄。
這種缺乏焦點導致模型陷入死胡同,我們觀察到代理執著於合法函式庫,誤將其視為異常,浪費整個上下文窗口審查無害程式碼,而真正後門藏於完全不同區域。
安全社群正被AI產生的噪音淹沒。curl專案近期因AI產生大量無意義錯誤報告,停止支付漏洞回報費用。
產生假報告的安全工具既無用又令人沮喪。我們特別用無後門的乾淨二進位檔測試,發現模型有28%機率誤報後門或問題。實務惡意軟體偵測軟體誤報率應低於0.001%,因大多數軟體是安全的。
誤報率衡量模型錯誤標記乾淨二進位檔為有後門的頻率,越低越好。另見偵測率與誤報率的關係。
例如,Gemini 3 Pro錯誤「發現」一個後門,實際是命令列參數解析中的正常程式碼。
模型報告max-cache-ttl選項的字串處理及其後用popen執行,推斷可藉此執行任意指令,實為假報告。
實際原始碼正確驗證並解析該參數為數字,從未嘗試執行。
我們限制代理使用開源工具Ghidra與Radare2,並驗證前沿模型(含Claude Opus 4.6與Gemini 3 Pro)能100%成功操作這些工具,正確載入二進位檔並執行基本指令。
然而,這些開源反編譯器落後於商業工具如IDA Pro。它們對C語言二進位檔處理良好,但對Rust有問題(代理仍解決部分任務),對Go執行檔則完全失敗。
例如,我們嘗試分析Go語言的Caddy網頁伺服器(50MB二進位檔),Radare2載入需6分鐘但產出品質差,Ghidra載入需40分鐘且無法回傳正確資料,IDA Pro僅5分鐘且產出可用程式碼,足以手動分析。
為確保評估代理智慧而非工具品質,我們排除Go二進位檔,主要聚焦C語言執行檔(及一個Rust專案),因相關工具較可靠。
AI能找到二進位檔後門嗎?有時能。Claude Opus 4.6完成49%任務,Gemini 3 Pro完成44%,Claude Opus 4.5完成37%。
目前距離實務應用仍遠,我們需要更高的偵測率與更低的誤報率,才能成為可行的端對端解決方案。
AI在小型二進位檔及遇到異常模式時表現較佳,但對大型檔案或後門偽裝成合法存取路徑時表現不佳。
雖然端對端惡意軟體偵測尚不可靠,AI可協助開發者進行初步安全審查。無逆向經驗的開發者現在可獲得對可疑二進位檔的初步分析。
一年前,模型無法可靠操作Ghidra,現在能真正進行逆向工程——載入二進位檔、瀏覽反編譯程式碼、追蹤資料流。
整個二進位檔處理領域對更多軟體工程師開放,不僅在安全領域,也有助於低階優化、除錯硬體逆向及跨架構移植程式碼。
我們相信透過上下文工程(含適當技能或多模態協議)及使用商業逆向工程軟體(如IDA Pro與Binary Ninja),結果可望進一步提升。
一旦AI展現解決部分任務的能力,後續模型通常會大幅進步。
此外,我們預期大量分析將由本地模型執行,可能針對惡意軟體偵測微調。安全敏感組織無法將專有二進位檔上傳雲端服務,且惡意行為者會優化惡意軟體以規避公開模型,需使用私有本地模型以有效防禦。
完整結果與任務可見QuesmaOrg/BinaryAudit。
請在Hacker News、LinkedIn或X平台討論。
敬請期待未來文章與發布。