本仓库实现了一个针对 OpenSSL 中 X.509 证书验证行为的规范驱动型变异测试实验。
该实验基于以下变异算子:
MUT-BC-SS-01
该算子修改 BasicConstraints 扩展:
CA:TRUE → CA:FALSE
目标是评估证书验证是否正确地强制执行 RFC 5280 要求,并研究与 CVE-2021-3450 所代表的漏洞类别相关的行为。
MUT-BC-SS-01/
│
│
├── configs/
│ ├── ca.cnf
│ └── leaf.cnf
│
├── src/
│ └── poc.c
| └── poc_fixed.c
│
├── check_prerequisites.sh
├── install_openssl111h.sh
├── environment.sh
├── generate_certs.sh
├── build.sh
├── run.sh
├── build_version3.sh
├── run_version3.sh
│
│
└── README.md
本实验创建了以下证书链:
根 CA (CA:TRUE)
│
▼
变异中间证书 (CA:FALSE)
│
▼
子叶证书
变异证书被有意配置为:
basicConstraints = CA:FALSE
同时仍用于签署另一张证书。
验证框架评估 OpenSSL 是否正确拒绝了这一无效证书链。
该实验已在 Linux 系统上测试,使用了以下工具:
git clone https://github.com/dedellix/MUT-BC-SS-01.git
cd MUT-BC-SS-01
chmod +x *.sh
./check_prerequisites.sh
此脚本检查所需的软件包,并自动安装任何缺失的依赖项。
所需软件包包括:
./install_openssl111h.sh
该脚本会下载、构建并在本地安装 OpenSSL 1.1.1h,安装位置为:
$HOME/openssl-1.1.1h-install
不会修改系统级的 OpenSSL 文件。
./environment.sh
该脚本配置:
LD_LIBRARY_PATH
并验证是否正确加载了所需的 OpenSSL 库。
./generate_certs.sh
生成如下证书:
并将它们存储在:
certs/
./build.sh
./build_version3.sh
编译:
src/poc.c
并生成:
./poc
位于项目根目录。
./run.sh
./run_version3.sh
或者直接运行:
./poc
要完全删除生成的工件:
rm -rf certs
rm -f poc
要删除本地的 OpenSSL 安装:
rm -rf $HOME/openssl-1.1.1h-install
rm -rf tls-test
要清除环境变量:
unset LD_LIBRARY_PATH
unset OPENSSL111H