Black Hat USA 2001 - Hit Them Where It hurts: Finding Holes in COTS Software
三句話摘要
2001年黑帽大會演講:在封閉原始碼軟體中進行逆向工程以發現安全漏洞的方法、工具與技術。 在閉源軟體中發現漏洞的最實用策略是自動掃描已知危險函式呼叫模式並有針對性地進行代碼分析,輔以IDA Pro等工具自動化繁瑣工作,能以遠低的時間成本發現足以控制系統的關鍵漏洞。 逆向工程法律框架:歐盟指令允許為互通性和錯誤修復進行逆向,但不允許用於發現漏洞。美國DMCA允許安全測試的逆向工程,但所有知識仍屬軟體作者智慧財產權,發佈漏洞可能被起訴。不同地區法律差異大,從事此工作需謹慎。
重點整理
重點- 1
逆向工程法律框架:歐盟指令允許為互通性和錯誤修復進行逆向,但不允許用於發現漏洞。美國DMCA允許安全測試的逆向工程,但所有知識仍屬軟體作者智慧財產權,發佈漏洞可能被起訴。不同地區法律差異大,從事此工作需謹慎。
- 2
三種漏洞發現方法的權衡:壓力測試高度自動化但難以發現涉及多因素的複雜漏洞;完整追蹤輸入能發現極端複雜問題但需要專家且對大型程式幾乎不可行;掃描特定可疑結構(如危險函式呼叫)最省時但會漏掉創意實作的漏洞。黑帽駭客傾向第三種方法因只需一個漏洞即可,白帽審計必須尋求完全安全。
- 3
常見C/C++漏洞模式:strcpy與strncpy在邊界條件下不正確終止;scanf本質上危險;strncat因size_t參數迴繞導致緩衝區溢位(著名的「差一」漏洞);格式字串錯誤因參數不足或動態格式字串引起。有符號/無符號轉換錯誤最難檢測。
- 4
工具與自動化:IDA Pro提供多架構反組譯、靜態函式庫辨識、強大腳本語言與外掛介面,技術支援優秀。自動掃描可疑函式呼叫與堆疊校正分析能大幅提升效率,讓人可專注在複雜邏輯判斷而非枯燥審查。
實用技巧與重點
乾貨- 法律框架:歐盟允許逆向用於互通性和錯誤修復(不包含漏洞發現);美國DMCA允許安全測試但作者保有智慧財產權;泰國等亞洲國家法律寬鬆
- 三種方法:壓力測試(Fuzz、Perl腳本、EI Retina掃描器);完整追蹤輸入(需Joey級專家);掃描可疑結構(講者採用方法)
- 主要工具:IDA Pro(500美元,支援x86、ARM、i64、PowerPC、DSP等架構);包含靜態連結函式庫辨識、巨集生成、反組譯流程圖、插件介面
- 危險函式呼叫:strcpy、strcat、sprintf、scanf、strncpy、strncat、vprintf、printf
- 自動偵測標記:
- strncat:最大長度參數等於緩衝區大小時不正確終止
- strncpy:動態大小參數需檢查sign-extend與減法
- sprintf/scanf:參數不足、動態格式字串、未受信任輸入
- 符號轉換:unsigned int強轉signed char後可能導致4GB值
- x86彙編檢查重點:堆疊校正(ADD ESP, N)推算參數數量;標準C呼叫約定;MOVSX(符號擴展)與減法前檢查
- 實例:CSM Proxy伺服器(IMAP實作),128位元組堆疊緩衝區+8位元組(幀指標與返回位址)=136位元組即可溢位並控制執行流程
結論
結論“在閉源軟體中發現漏洞的最實用策略是自動掃描已知危險函式呼叫模式並有針對性地進行代碼分析,輔以IDA Pro等工具自動化繁瑣工作,能以遠低的時間成本發現足以控制系統的關鍵漏洞。”
完整解析
詳細逆向工程在軟體安全研究中扮演關鍵角色,但面臨複雜的法律環境。在歐洲,1991年的歐盟指令允許程式設計師為互通性和錯誤修正進行反編譯,但這項保護並未涵蓋漏洞發現階段。美國的DMCA法案包含安全測試例外,允許逆向工程,卻在同時賦予軟體作者對所有衍生知識的智慧財產權,發佈任何發現的漏洞都可能招致訴訟。不同法區的法律差異懸殊,使得從事此工作者必須謹慎評估風險。
在實踐方法論上,講者介紹三種尋找漏洞的策略。第一種壓力測試完全自動化,只需執行腳本後等待結果,適合無需特殊技能的操作人員。然而它的致命弱點在於無法追蹤協議細節——由於廠商罕見遵守RFC標準,每個實作都有獨特方言,測試工具稍有疏漏就會漏掉整個程式碼分支。此外,當涉及多重條件時複雜度呈指數級增長,應用層異常處理更會導致測試工具無法偵測崩潰,最終無法發現依賴特定記憶體狀態的微妙漏洞。第二種完整追蹤輸入方法能發現極端複雜的邏輯缺陷,代價是需要Joey等級的專家花費數週時間。第三種方法——掃描預定義的可疑結構——最具實用性:先自動偵測標準危險函式呼叫,再反向閱讀程式碼驗證,可比完整追蹤快10-20倍。講者坦誠此法會漏掉某些創意實作的缺陷,但對黑帽駭客已足夠,因其只需一個漏洞來控制系統。
常見漏洞的根源可歸納為幾類標準函式的誤用與型別轉換錯誤。strcpy與strncpy在邊界條件下無法正確產生空終止字元,導致資料與緩衝區後方內容連結,進而被其他字串操作展開。更危險的是strncat——當最大長度參數經過減一運算後變負時,會被解釋為40億位元組大小,造成巨大溢位。scanf原型設計有缺陷,且不同編譯器對空終止位置的處理不一致。有符號/無符號轉換錯誤最狡詐:一個編碼為0x80的位元組強轉為int會變成-128,進而導致邊界檢查失敗。格式字串漏洞雖易於自動偵測(檢查參數數量與格式字串動態性),卻擁有駭人威力——利用者可任意讀寫記憶體,甚至在禁止程式碼執行的系統上透過操縱程式邏輯變數達成破壞。
IDA Pro作為逆向工程標準工具,支援幾乎所有處理器架構、包含靜態連結函式庫辨識與自動參數重建、提供強大腳本語言與C/C++插件介面,技術支援更與開發者直通。自動化掃描既讓人類審計員避免枯燥的完整程式碼閱讀,又能發現涉及多重因素的複雜漏洞。講者以CSM Proxy伺服器為例示範實戰:透過IDA的交叉引用功能快速定位29個scanf呼叫中的危險模式,再追蹤參數來源發現其IMAP實作中一個128位元組堆疊緩衝區,僅需136位元組即可完全控制程式流程。這個案例完美展示了結構化漏洞搜尋如何在數小時內發現傳統方法需耗費數週才能找到的關鍵漏洞。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

