該存儲庫實現了一種工具來驗證是否確保補丁以跟踪等效性(PATE)。
目的是證明應用於二進製文件的安全補丁僅刪除不良行為,或者以其他方式為補丁的開發人員精確地表徵它們。驗證者支持PowerPC和Aarch32二進製文件(目前需要靜態鏈接的精靈二進製文件)。
最快入門的方法是構建Docker映像並通過Docker使用該工具。有關更深入的構建說明,請參見下面的開發部分。
首先,使用命令構建Docker映像:
Docker Build - Platform Linux/AMD64。 -t pate
接下來,在一個示例上運行驗證者:
docker run -rm -rm -it -platform linux/amd64 -v“ $(pwd)”/tests/tests/intects/packet/exe:/target pate -original/target/packet.exe.exe-patched/patched/targeted/target/target/packet.packet.packet.patched.exe -s parse_packe_packet_packet_packet_packet_packet_packet
驗證者接受以下命令行參數:
-H, - 幫助顯示此幫助文本
-o, - 原始EXE原始二進制
-p, - 修補的EXE修補二進制
-b, - BlockInfo FileName Block信息與二進製文件有關
-s, - 使用此符號從函數中從功能分析開始分析
-d, - nodiscovery不要基於
呼叫。
- 固定器ARG smt求解器用於解決驗證
狀況。 CVC4,YICES或Z3之一
(默認:YICES)
- 進入QUAL ARG ARG的超時驗證單個目標秒
(默認:300)
- 她的timeT arg arg arg在幾秒鐘內驗證啟發式目標的超時
(默認:10)
- 原始的nvill hints arg
解析代碼發現的砧座規範
提示
- 斑點的嵌入刺激
解析代碼發現的砧座規範
提示
- 原始培訓義gr
解析包含概率功能的JSON文件
名稱/地址提示
- 繪製的雜化義gr
解析包含概率功能的JSON文件
名稱/地址提示
- 原始csv功能刺激arg
解析包含功能名稱/地址的CSV文件
提示
- 繪製的csv功能性hints arg
解析包含功能名稱/地址的CSV文件
提示
- 原始-BSI Hints Arg Parse一個包含功能名稱/地址的JSON文件
提示
-patched-bsi hints arg parse一個包含功能名稱/地址的JSON文件
提示
- 不涉及識別的矮人不會從矮人的信息中提取元數據
二進制
-v, - 冗長grogity arg登錄輸出的詳細性(默認:info)
-Save-Macaw-CFGS dir保存金剛鸚鵡CFGS到提供的目錄
- 解決方案互動文件
在符號期間保存與SMT求解器的交互
執行此文件
- 座艙 - 薩森文件
將有趣的證明結果保存到JSON中的文件
格式
- 文件文件文件一個文件以將調試日誌保存到
-e, - errormode arg agr verifier錯誤處理模式
(默認:throwonanyfailure)
-r, - Rescopemode ARG變量撤退故障處理模式
(默認:ThroneQrescopeFailure)
- 劃分未命名的函數跳過無符號的功能
- 分支對照流
<epreced>
- 靶標-Equiv-regs arg計算的等效條件足以
在給定的寄存器上建立平等
TopLevel入口點返回。 <epreced>
- 加載ELF時
- json-toplevel在JSON-OUTPUT模式下運行Toplevel(交互式模式)
僅有的)
- 加載時,僅閱讀僅段落arg arg arg arm標記段為僅讀取(0索引)
精靈
- 訂閱文件名將金剛鸚鵡CFG保存到提供的目錄
- Assume-stack-Scope添加有關堆棧框架範圍的其他假設
在功能通話中(不安全)
- 埃尼爾 - 瓦恩斯arg不要提出任何給定的警告類型
- 始終通過假設來解決分類器 - 返回始終可以解決分類器失敗
如果可能的話,功能將返回。
快速啟動部分描述了使用Docker容器在測試案例上運行驗證者的命令。本節將涵蓋其他方案的一些有用命令。
如果您有驗證者docker映像的tar文件,則可以使用命令安裝它:
Docker Load -I/Path/to/pate.tar
之後,通過Docker運行驗證者:
docker run -rm -rm -it-platform linux/amd64 pate - -help
為了利用帶有Docker的驗證者,將本地文件系統上的目錄映射到Docker容器中以保存輸出文件很有用。假設您的原始和修補的二進製文件分別為original.exe和patched.exe :
mkdir verifierdata
CP Original.exe Patched.exe VerifierData/
docker run -rm -rm -it-platform linux/amd64
-v`pwd`/verifierdata`:/verifierdata pate
-original /verifierdata/original.exe
-patched /verifierdata/patched.exe
-Proof-Summary-Json /VerifierData/Report.json
-log-file /verifierdata /pate.log
-Save-Macaw-CFGS /verifierdata /cfgs
此命令將在兩個二進製文件上運行驗證程序,然後將您放入讀取版循環中,您可以在其中交互式探索驗證者的輸出。
默認情況下,驗證者開始從正式的程序入口點驗證。這通常不是很有用(對於具有大型_start的複雜二進製文件而言,這會給我們的代碼發現帶來問題)。此外,對於已知(或至少預期的)影響範圍的變化,僅分析受影響功能的速度明顯更快。相反,要指定一個分析入口點,傳遞-s <function_symbol>選項將從與給定符號相對應的函數啟動分析。請注意,這需要為二進製文件提供函數符號(作為嵌入式調試符號,或以一種提示格式分別提供函數符號)。
雖然不健全,但有時將功能調用視為no-op是有用的。例如,忽略沒有改變並且不可能對正確性產生影響的大型功能(例如,來自受信任庫的大型加密功能)可以顯著提高性能。要使用此功能,請使用--blockinfo選項將配置文件傳遞給驗證者,以確保配置文件包括以下指令:
忽略原始 - 函數= [<address>,...] 忽略斑點 - 函數= [<address>,...]
每個列表是要忽略的函數地址列表。儘管這兩個列表是單獨指定的,但幾乎應該肯定應該在兩個二進製文件之間“對齊”(即,忽略原始二進製文件中的函數可能意味著修補了二進制中的相應功能也需要忽略)。
驗證者通過兩種方式受益於矮人元數據:
為了將矮人的元數據注射到沒有它的情況下(例如,剝離的二進製文件),我們建議使用矮人寫的工具。作為通過其docker映像使用dwarf-writer的一個例子,假設在砧式JSON格式( target-binary.exe )中存在目標( target-binary.exe.json )和元數據:
Docker Load -i矮人 - 沃特 - docker.tar
mkdir矮人
cp target-binary.exe target-binary.exe.json dwarfwriterdata/
docker run -rm -rm -It -V`PWD`/dwarfwriterdata:/dwwarfwriterdata dwarf -writer
-anvill /dwarfwriterdata/target-binary.exe.json
/dwarfwriterdata/target-binary.exe
/dwarfwriterdata/target-binary-dwarf.exe
這將產生用DwarfWriterData/target-binary-dwarf.exe中的矮人元數據註釋的二進製版本。
如果您擁有llvm-dwarfdump工具,則可以使用它來檢查生成的矮元素。 pate驗證者將自動利用矮元數據提示,除非被指示忽略它們。
驗證者將兩個二進製文件作為輸入:原始二進制和一個修補二進制。假設是將某些面向安全性的補丁應用於原始二進製文件,該補丁在很大程度上保留了其行為,但可能會解決一些不良行為。然後,驗證者試圖證明這兩個二進製文件表現出相同的可觀察行為。如果不能,它會產生一個差分摘要,該摘要描述了修補二進製表現出與原始行為不同的條件。這使補丁開發人員能夠了解其補丁對程序語義的影響,並評估影響是否僅限於他們預期的執行路徑。
驗證者不需要用戶手動提供的規範;相反,它將原始程序視為所需的行為規範。這種佈置使PATE成為關係驗證者,因為它將修補的二進制與原件相關聯。驗證符基於許多現有庫,用於二進制代碼發現和程序的象徵性執行(包括機器代碼程序)。粗略地,驗證者通過:
PATE工具用Haskell編寫,需要GHC編譯器(我們使用9.6測試)和Cabal Build工具進行編譯。可以通過以下方式從源頭構建:
git clone [email protected]:galoisinc/pate.git CD PATE git subsodule Update-開機 CP Cabal.Project.Dist Cabal.Project Cabal配置PKG:PATE ./pate.sh--螺旋
驗證者需要在PATH中提供SMT求解器。默認值為yices z3和cvc4也可能起作用,但未定期對PATE進行測試。
該材料基於國防高級研究項目局(DARPA)和海軍信息戰中中心(NIWC Pacific)在合同編號N66001-20-C-4027下支持的工作。本材料中表達的任何意見,發現和結論或建議都是作者的意見,不一定反映了DARPA和NIWC太平洋的觀點。