此挑戰項目範例版本旨在為參賽者提供一個挑戰項目,該項目類似於比賽期間所有挑戰項目所存在的相同結構和介面。
此範例已使用以下版本進行開發和測試:
註:本文內容可能會有變動,請關注後續更新!
src/
- 這是挑戰專案的原始碼,Linux 核心 6.1.54 進行了以下修改:
net/tipc/crypto.c
重新引入 CVE-2021-43267net/tipc/crypto.c
、 net/tipc/tipc_test.c
添加了針對易受攻擊功能的 kunit 測試test_harnesses/
資料夾中新增了 AIxCC 特定線束。run.sh
- 為 CRS 提供標準化介面以與挑戰專案互動的腳本。
build.sh
- 定義挑戰專案建置流程的腳本。
project.yaml
- 一個 yaml 文檔,詳細介紹了挑戰專案的許多重要方面。
exemplar_only/
- 此資料夾包含僅隨 exemplar 版本提供的補充信息,不應期望在比賽期間提供此資訊。
blobs/
- 此資料夾包含一個名為sample_solve.bin
的文件,當傳遞到測試工具時應觸發注入的漏洞。patches/
- 這是包含兩個範例補丁的資料夾。good_patch.diff
- 消除漏洞並維護功能。bad_patch.diff
- 消除漏洞但不維護功能。gen_blob.py
- 這是一個幫助程式腳本,供使用者為所提供的測試工具產生二進位 blob。run_internal.sh
- 這是在 docker 環境中執行以處理請求的腳本。setup.sh
- 這是用於建置 docker 映像的依賴項安裝腳本。test_blob.py
- 這是一個腳本,用於根據目標線束測試接收到的資料 blob。 要測試範例,首先透過執行以下命令來建立基礎 docker 映像。
docker build . -t exemplar-cp-linux:base --target=exemplar-cp-linux-base
建置後,可以透過run.sh
腳本實現與容器的基本互動。
run.sh
腳本提供了一個標準化接口,該接口在所有競賽 CP 中保持一致。在建立軟體之前,您必須從其原始碼儲存庫中提取原始程式碼:
./run.sh pull_source
此命令會覆蓋src/
資料夾中目前的所有內容,從而允許載入原始程式碼的新副本。
./run.sh build [patch file]
build
命令使用可選的生成補丁檔案來建立挑戰專案。原始碼是透過安裝到src/
資料夾的 docker 磁碟區建置的。測試工具二進位檔案被建置並儲存在out/
資料夾中。並可用於分析。
注意: build
指令將建置src/
的目前工作狀態,以及對 Dockerfile 的任何修改。如果您想測試補丁,建議您使用pull_source
命令和乾淨的 Dockerfile 建立狀態的乾淨副本。
./run.sh run_pov < blob_file > < harness_id >
run_pov
指令針對指定的線束 ID 運行提供的二進位資料 blob 檔案。有效的線束 ID 列在project.yaml
檔案中。
./run.sh run_tests
run_tests
指令執行挑戰專案中的功能測試。截至目前, run_tests
指令將保留src/
目錄的原始狀態。
假設您想要提取原始程式碼,按原樣建立它,並分析生成的 Linux 測試二進位檔案和利用二進位檔案。
./run.sh pull_source
./run.sh build
file out/linux_test_harness
file src/arch/x86/boot/bzImage
然後,您針對測試工具執行資料 blob 檢查消毒劑觸發器。要測試您自己的輸入數據,請將 exemplar_only 二進位檔案替換為您自己的檔案。
./run.sh run_pov exemplar_only/blobs/sample_solve.bin linux_test_harness | grep -i ' pov|trigger '
驗證消毒劑觸發器後,您可以直接透過src/
目錄修改原始程式碼,嘗試修補漏洞。
sed -i ' 2310,2312d ' src/net/tipc/crypto.c
./run.sh build
./run.sh run_pov exemplar_only/blobs/sample_solve.bin linux_test_harness | grep -i ' pov|trigger '
./run.sh run_tests
您發現您刪除了消毒劑觸發器,但功能測試失敗。您創建更好的解決方案並產生補丁檔案。您提取原始程式碼的乾淨副本,以根據原始來源正確測試補丁,然後重新執行 pov 和功能測試。若要測試您自己的補丁,請將 exemlar_only 補丁替換為您自己的檔案。
./run.sh pull_source
./run.sh build exemplar_only/patches/good_patch.diff
./run.sh run_pov exemplar_only/blobs/sample_solve.bin linux_test_harness | grep -i ' pov|trigger '
./run.sh run_tests
現在您已經產生了一個資料 blob,該資料 blob 在傳遞到linux_test_harness
工具時會觸發清理程序,並且還產生了一個在通過功能測試時修復該漏洞的修補程式。