此挑战项目示例版本旨在为参赛者提供一个挑战项目,该项目类似于比赛期间所有挑战项目所存在的相同结构和界面。
该示例已使用以下版本进行开发和测试:
注:本文内容可能会有变动,敬请关注后续更新!
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
工具时会触发清理程序,并且还生成了一个在通过功能测试时修复该漏洞的补丁。