跳到正文
創業邦·· 1 小時前精選AI 評分76

Claude 對 123 個開源程式碼庫的 239 個測試入口完成形式化驗證,1.8 億行證明通過核驗

Claude狂写1.8亿行证明!万亿次测试漏掉的Bug,被AI一锅端

AI 導讀

Anthropic 與 Theorem Labs 對 123 個開源程式碼庫的 239 個測試入口進行形式化驗證,1.8 億行 Rocq 證明通過機器核驗,並找出多個漏洞。

推薦理由

文章比較模糊測試與形式化驗證,並交代驗證覆蓋編譯後機器碼的方式及執行環境限制,呈現其找出隨機測試難以觸及漏洞的技術路徑。

正文 · 繁體中文

編者按:本文來自微信公眾號 新智元(ID:AI_era),編輯:編輯部,創業邦經授權轉載。

全球軟件的bug,要被Claude端掉了?

短短48小時,全球就爆了27起重大網絡攻擊,現在人們都在瘋傳,「最暗十月」來了。

一早,Anthropic前沿紅隊團隊聯手Theorem Labs發佈了一份重量級報告——

他們讓Claude深入到底層彙編指令(RISC-V),向真實的生產級開源代碼庫發起總攻。

短短幾週,Claude拿下了123個開源代碼庫中的239個測試入口的形式化驗證,狂飆1.8億行Rocq數學證明代碼,全部通過機器核驗!

谷歌平台跑了上萬億次都沒撞出來的隱秘漏洞,連同潛伏十餘年的高危邏輯死角,甚至x86處理器硬件本身的真實缺陷,在這場大清剿中悉數現形。

更誇張的是,在一個熱門的PDF閲讀器中,Claude一週挖出的安全漏洞,直接頂得上它通常一整年的報告量。

這一次,Claude把找Bug、修Bug和驗證修復連成一條流程,展開了一場「數學級」Bug清掃。

席捲全球的網絡安全危機,或許真的有救了。

萬億次測試漏掉的Bug,被數學逼了出來

過去十年,開源世界最倚重的防線之一,是谷歌在2016年推出的OSS-Fuzz。

這套方法叫模糊測試,往程序入口裏成批灌半隨機的輸入,看哪一個能把程序搞崩。它累計跑了上萬億次測試。

但模糊測試終究是在迷宮裏碰運氣。它的輸入通常被限制在1MB以內,只要還有一條路沒走過,那裏的Bug就能一直藏下去。

研究團隊這回把測試入口改寫成了一道數學命題,在設定條件下,小於64MiB的任意輸入,都不會觸發約定的崩潰,包括斷言失敗和ASan內存檢測工具能捕捉的錯誤。

Claude要做的,就是證明它。一次跑通不算數,規定範圍內的每一種輸入、每一條能走到的路徑,都必須被證明不會觸發上述錯誤。

證明一旦卡住,要麼是Claude還沒找到證法,要麼是程序裏真有Bug。找到Bug後,Claude會自己打補丁,然後接着往下證。

於是,那些躲在測試夠不着的角落裏的Bug,現形了。

某個解壓器裏藏着一處計數器下溢,會把數據寫到內存邊界之外,可只有喂進約20MB、排布又很罕見的輸入才會觸發。

研究團隊稱,光是嘗試證明的過程,就揪出了數百個Bug。

測試和證明到底差多少,研究人員在Claude用Rust寫的Python解釋器裏,故意埋了7個Bug。

隨機測試放跑了其中5個,最後證明一個都沒放過。

狂跑391行代碼,63萬行證明

這批證明,做在了最底層。

Claude證明的對象,是編譯之後真正在CPU上運行的RISC-V機器碼。源代碼和編譯出來的程序未必完全一致,只有證到機器指令,證明的才是實際跑起來的那個程序。

為此,Theorem先把RISC-V指令和Linux進程的行為寫成了數學模型,目前的證明就建立在這套模型之上,限定在單線程、靜態鏈接、固定內存預算的環境中。

證到這一層,工程量開始爆炸。JSON解析庫cJSON的一個解析入口只有391行C代碼,Claude為它寫了63萬行Rocq證明。

膨脹上千倍,是因為證明要覆蓋整個進程。C程序的啓動、內存分配器、printf、內存檢測工具自己的運行時,全都要一併證明,和cJSON本身有關的只佔十分之一。

整個項目裏,Claude累計寫了約10億行證明,最後約1.8億行通過了檢查。其中超一半,是Claude給自己寫的工具自動生成的。

最後把關的,是Rocq證明檢查器,它按邏輯規則逐步驗算,一份證明要花30分鐘到幾個小時的CPU時間。檢查器確認的是證明符合規範,人類仍要審查規範和機器模型是否對應真實需求。

模型寫得再流暢,過不了檢查器,就一行都不算數。寫出這樣規模的證明,放在過去是一個不敢想的工程量。

傳奇微內核seL4,寫代碼只用了2人年,給它做完形式化驗證卻花了整整20人年。所以幾十年來,這種級別的安全保證,只有空客飛控這類人命關天的代碼才用得起。

而這一次,123個開源庫,Claude只用了幾週。

Claude給芯片寫了一套數學,順手揪出硬件Bug

要説Claude證明能挖得有多深,看一眼cpp-httplib就知道了。

為了排除遞歸太深、撐爆棧內存的可能,Claude追進了C++標準庫libc++的紅黑樹,在機器碼上證明這棵樹的高度始終被壓在對數級別。樹的高度受控,銷燬時的遞歸層數才有上限,才能繼續證明棧空間不會被耗盡。

它先把zlib壓縮格式的標準寫成形式化規範,再證明Linux內核自帶的zlib實現完全符合它。

這一回,證明做在了x86機器碼上。而x86指令集的數學模型,是Claude完全自主寫出來的。

這套模型準到什麼程度呢?在模型裏一條指令一條指令地單步推演,能在Linux內核上把Ubuntu的用戶態完整啓動起來。

寫模型的過程中,Claude找出了x86官方參考文檔裏的數百處錯誤,還發現了少量藏在CPU硬件本身裏的Bug。

從軟件一路證到芯片,AI已經在幫人類重新核對整台計算機的地基。

證明速度兩個月翻一番,1.34億美元的驗證路線圖

形式化驗證最大的門檻是貴,一份證明往往要燒掉數億token。如今這筆賬,正在飛快變小。

Anthropic用36個小型驗證任務做了測試,Opus 5.5完成其中一半所需的token,比Opus 5少了約40%。

Theorem測了今年5月到9月發佈的7款前沿模型,驗證速度大約每兩個月翻一番。

而且,證明可以複用。

Agent們共享工作區之後,同一組任務少花了17%的token。libcups、freerdp、libzmq這幾個八竿子打不着的項目,共用了運行庫等底層代碼,因此大段證明都是從別人證好的部分抄過來,改一改就用上了。

順着這個思路,Theorem算了一筆以Nix軟件生態為樣本的總賬。

在Nix軟件生態裏,只要9MB的共享基礎庫,就是三分之二機器碼的全部依賴。光是OpenSSL一個庫,就出現在近1.6萬個軟件包的運行依賴裏。

按今天的價格,把OpenSSL證穿一次約22萬美元,攤到每個下游軟件包,只要14美元左右。

Theorem推算,如果驗證能力保持兩個月翻倍,並按每年1億美元的預算推進,到2027年底,總成本約1.34億美元,就有望把Nix生態95%的機器碼納入證明。

作為對照,GovAI估計,全球網絡犯罪相關損失、應對和防禦支出,每年合計約5000億美元。

全球網安至暗48小時,讓數學來兜底

Linux內核是全世界測試得最狠的軟件之一,9月的一份Debian內核安全公告,就列出了1000多個漏洞。前沿大模型已經能把幾個看似無害的小Bug,串成一條致命的攻擊鏈。

找Bug的AI越來越強,靠人類一個個打補丁,已經追不上它的速度。

論文作者之一Aengus Lynch寫道,「對互聯網來説,這是一段可怕的日子。我相信,這是一束希望之光。」

他還相信,終有一天,Theorem會把所有關鍵軟件都形式化驗證一遍。

現在,首批25個庫、60個入口的證明已經在GitHub公開,任何人都能下載下來,親手驗算一遍。

寫代碼的機器越來越多,人類也正在把一條路走通,讓支撐數字世界的關鍵代碼,都帶上一份數學證明。

參考資料:https://x.com/AnthropicAI/status/2113390212911083894?s=20

本文為專欄作者授權創業邦發表,版權歸原作者所有。文章系作者個人觀點,不代表創業邦立場,轉載請聯繫原作者。如有任何疑問,請聯繫editor@cyzone.cn。

來源:創業邦 · cyzone.cn