tlsfuzzer/tlsfuzzer

GitHub: tlsfuzzer/tlsfuzzer

一款用于 SSL/TLS 协议实现的测试套件与模糊测试框架,通过验证错误处理和协议合规性来保障实现的安全性与正确性。

Stars: 626 | Forks: 137

[![GitHub CI](https://github.com/tlsfuzzer/tlsfuzzer/actions/workflows/ci.yml/badge.svg)](https://github.com/tlsfuzzer/tlsfuzzer/actions/workflows/ci.yml) [![Read the Docs](https://img.shields.io/readthedocs/tlsfuzzer)](https://tlsfuzzer.readthedocs.io/en/latest/) [![Coverage Status](https://coveralls.io/repos/tlsfuzzer/tlsfuzzer/badge.svg?branch=master)](https://coveralls.io/r/tlsfuzzer/tlsfuzzer?branch=master) # tlsfuzzer tlsfuzzer 是一个用于 SSLv2、SSLv3、TLS 1.0、TLS 1.1、TLS 1.2 和 TLS 1.3 实现的测试套件。它目前处于早期开发阶段,因此不提供 API 稳定性保证。虽然它使用模糊测试(fuzzing)技术进行测试 (对传入的输入进行随机化),但脚本的编写方式通常旨在 验证正确的错误处理:与典型的 fuzzer 不同,它不仅 检查被测系统是否崩溃,还会检查其是否 返回了正确的错误消息。 您可以在 `scripts/` 目录中找到用于测试许多漏洞的现成脚本( [ROBOT](https://robotattack.org/)、 [DROWN](https://drownattack.com/) 等) 以及通用标准符合性( [RFC 5246](https://tools.ietf.org/html/rfc5246)、 [RFC 7627](https://tools.ietf.org/html/rfc7627)、 [RFC 7905](https://tools.ietf.org/html/rfc7905) 等)。 ## 依赖项 您需要: * Python 2.6 或更高版本,或 Python 3.6 或更高版本 * [tlslite-ng](https://github.com/tlsfuzzer/tlslite-ng) 0.8.1 或更高版本(请注意,`tlslite` 将*无法*使用,并且 它们彼此冲突) * [ecdsa](https://github.com/warner/python-ecdsa) python 模块(tlslite-ng 的依赖项,应会 随其自动安装),为获得最佳性能,请至少使用 0.15 版本 或者,为了使加密计算显著加快,您可能 需要安装以下库(详情请参阅 tlslite-ng 和 python-ecdsa 的 README 文件): * m2crypto * gmpy 要获取 `pip`(如果您的 python 安装中尚未包含它),请下载 [get-pip.py](https://bootstrap.pypa.io/get-pip.py) 并运行 (或者参阅 [USAGE.md](https://github.com/tlsfuzzer/tlsfuzzer/blob/master/USAGE.md) 了解不需要安装软件包的替代配置): ``` python get-pip.py ``` 然后安装 tlslite-ng: ``` pip install --pre tlslite-ng ``` (如果您之前已经安装过,请使用 `--upgrade --pre`) 下载 tlsfuzzer: ``` git clone https://github.com/tlsfuzzer/tlsfuzzer.git ``` ## 用法 安装所有依赖项后,请确保: * 您位于项目的目录中(在 git clone 之后,只需执行 `cd tlsfuzzer`) * 您想要测试的服务器正在同一台计算机上运行 (localhost) * 服务器正在侦听 4433 端口 * 并且服务器将使用数据回复 HTTP 查询(回复有效的 HTTP 响应是可选的) 然后,您可以运行 [`scripts`](https://github.com/tlsfuzzer/tlsfuzzer/tree/master/scripts) 目录中的其中一个测试,如下所示: ``` scripts/test-invalid-compression-methods.py ``` 如果测试有额外要求,它将把它们输出到控制台。没有打印错误 意味着满足了所有预期(因此,对于具有不良数据的测试, 服务器拒绝了我们的消息)。 所有脚本还接受 `--help` 以打印帮助消息(特定 脚本支持的所有选项的说明),`-h` 用于指定 被测服务器的主机名或 IP 地址,`-p` 用于指定 要测试的服务的端口。 有关更多 信息以及如何解释脚本报告的错误和失败,请参阅 [USAGE.md](https://github.com/tlsfuzzer/tlsfuzzer/blob/master/USAGE.md)。 您可以在 [tlsfuzzer.readthedocs.io](https://tlsfuzzer.readthedocs.io) 找到该项目的更详细文档。 使用 tlsfuzzer 测试时序侧信道攻击(Lucky13、padding oracle 攻击和基于时序的 Bleichenbacher oracle)的内容在 [TIMING.md](https://github.com/tlsfuzzer/tlsfuzzer/blob/master/TIMING.md) 文档中进行了描述。 ## 被测服务器配置 通常,被测服务器只需要一个 RSA 证书, 您可以使用以下 OpenSSL 命令创建它: ``` openssl req -x509 -newkey rsa -keyout localhost.key -out localhost.crt -subj \ /CN=localhost -nodes -batch ``` **注意**:tlsfuzzer 仅验证 TLS 层面的行为,它不会对 证书执行任何检查(例如主机名验证、CA 签名或 密钥用法)。但是,它确实会验证服务器在 TLS 消息上所做的签名 (例如在 Server Key Exchange 或 Certificate Verify 消息中) 是否与服务器发送的证书匹配。 更详细的说明,包括如何从源代码构建不同的框架, 可以在 [服务器设置](https://github.com/tlsfuzzer/tlsfuzzer/wiki/Server-setup) wiki 页面中找到。 服务器配置示例: ### OpenSSL 要测试 OpenSSL,在典型的 `s_server` 命令行中 传递一个额外的 `-www` 选项就足够了: ``` openssl s_server -key localhost.key -cert localhost.crt -www ``` ### GnuTLS 要测试 GnuTLS 服务器,您需要告诉它表现为 HTTP 服务器, 另外,不要要求客户端证书: ``` gnutls-serv --http -p 4433 --x509keyfile localhost.key --x509certfile \ localhost.crt --disable-client-cert ``` ### NSS 要测试 Mozilla NSS 库服务器,您首先需要创建一个 包含服务器证书的数据库: ``` mkdir nssdb certutil -N -d sql:nssdb --empty-password openssl pkcs12 -export -passout pass: -out localhost.p12 -inkey localhost.key \ -in localhost.crt -name localhost pk12util -i localhost.p12 -d sql:nssdb -W '' ``` 最后,启动支持 TLSv1.0 及更高版本协议、DHE 密码以及上述证书的服务器: ``` selfserv -d sql:./nssdb -p 4433 -V tls1.0: -H 1 -n localhost ``` ### 高级配置 更高级和复杂的配置以及如何从源代码编译 上述服务器的说明,可在 wiki 页面 [服务器设置](https://github.com/tlsfuzzer/tlsfuzzer/wiki/Server-setup) 上找到。 ## 贡献 请参阅 [CONTRIBUTING.md](https://github.com/tlsfuzzer/tlsfuzzer/blob/master/CONTRIBUTING.md) 文档,了解有关如何设置开发环境、对更改进行健全性 检查以及更改需要遵循的要求的说明。 您可能还需要阅读 [VISION.md](https://github.com/tlsfuzzer/tlsfuzzer/blob/master/VISION.md) 以了解有关该项目计划范围的更多信息。 在与社区其他成员互动时,贡献者应遵守项目的 [行为准则](https://github.com/tlsfuzzer/tlsfuzzer/blob/master/CODE_OF_CONDUCT.md)
标签:Maven, Python, TLS, 安全测试, 攻击性安全, 无后门, 漏洞验证, 逆向工具, 防御工具, 防御绕过