breachsafe/qureddy

GitHub: breachsafe/qureddy

一款开源的命令行扫描器,用于评估 TLS 和 SSH 服务的后量子密码学就绪状态,帮助识别面向量子计算的密码学薄弱环节。

Stars: 2 | Forks: 2

# BreachSAFE QuReddy [![版本](https://img.shields.io/badge/version-0.2.1-blue?style=flat-square)](https://github.com/breachsafe/qureddy/blob/main/CHANGELOG.md) [![Python](https://img.shields.io/badge/python-3.12-blue?style=flat-square&logo=python&logoColor=white)](https://www.python.org/downloads/) [![许可证: Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue?style=flat-square)](https://github.com/breachsafe/qureddy/blob/main/LICENSE) [![代码风格: Ruff](https://img.shields.io/badge/code%20style-ruff-D7FF64?style=flat-square&logo=ruff&logoColor=black)](https://docs.astral.sh/ruff/) [![类型检查: mypy strict](https://img.shields.io/badge/type%20check-mypy%20strict-blue?style=flat-square)](https://mypy-lang.org/) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/breachsafe/qureddy/badge)](https://securityscorecards.dev/viewer/?uri=github.com/breachsafe/qureddy) QuReddy 是一款基于 Apache 2.0 许可证的命令行扫描器,用于评估 TLS 和 SSH endpoint 的后量子就绪状态。它会记录 endpoint 向客户端暴露的协议和密码学证据,随后报告观测到的就绪状况。 TLS 扫描使用本地的 OpenSSL 3.5 LTS 或更高版本的二进制文件。SSH 扫描会直接读取服务器的明文 KEXINIT 提议,且不需要 OpenSSL。 ## 目录 - [安装](#install) - [使用 Docker 运行](#run-with-docker) - [运行首次 SSH 扫描](#run-the-first-ssh-scan) - [为 TLS 准备 OpenSSL](#prepare-openssl-for-tls) - [运行首次 TLS 扫描](#run-the-first-tls-scan) - [写入 JSON 或 CBOM 输出](#write-json-or-cbom-output) - [解读证据](#interpret-the-evidence) - [退出代码](#exit-codes) - [网络与隐私范围](#network-and-privacy-scope) - [环境要求](#requirements) - [文档与支持](#documentation-and-support) - [贡献](#contributing) - [许可证](#license) ## 安装 使用 `pipx` 安装 PyPI 发行版: ``` pipx install breachsafe-qureddy qureddy --version ``` 预期的版本输出行为: ``` BreachSAFE QuReddy 0.2.1 -- https://www.breachsafe.ai ``` `pipx` 会创建一个隔离的环境,并将 `qureddy` 添加到你的命令 路径中。请参阅[安装与故障排除指南](https://github.com/breachsafe/qureddy/blob/main/docs/how-to/install.md) 获取 macOS、Linux、Windows、虚拟环境、升级和卸载相关的 说明。 ## 使用 Docker 运行 发布镜像内置了经过验证的 OpenSSL runtime,并以非特权用户身份运行: ``` docker pull ghcr.io/breachsafe/qureddy:0.2.0 docker run --rm ghcr.io/breachsafe/qureddy:0.2.0 \ scan tls pq.cloudflareresearch.com --format cbom docker run --rm ghcr.io/breachsafe/qureddy:0.2.0 \ scan ssh github.com --format cbom ``` 请参阅 [Docker 与 GHCR 指南](https://github.com/breachsafe/qureddy/blob/main/docs/how-to/docker.md) 了解摘要锁定、本地构建、输出重定向和发布策略。 ## 运行首次 SSH 扫描 此命令需要通过 TCP 端口 22 访问 `github.com` 的网络权限。它不需要 OpenSSL: ``` qureddy scan ssh github.com ``` 扫描器会观测服务器提供的密钥交换和主机密钥算法。即使报告的状态存在漏洞,成功的扫描也会以 `0` 退出。 ## 为 TLS 准备 OpenSSL TLS 扫描需要带有 `X25519MLKEM768` TLS group 的 OpenSSL 3.5 LTS 或更高版本。不支持 LibreSSL。 在带有 Homebrew 的 macOS 上: ``` brew install openssl@3.5 export QUREDDY_OPENSSL="$(brew --prefix openssl@3.5)/bin/openssl" qureddy scan tls --help ``` Linux 和 Windows 的安装过程因发行版而异。在扫描前确认所选的 二进制文件: ``` openssl version openssl list -tls1_3 -tls-groups ``` 如果 `openssl` 不是目标二进制文件,请设置 `QUREDDY_OPENSSL` 或传递 `--openssl PATH`。[安装指南](https://github.com/breachsafe/qureddy/blob/main/docs/how-to/install.md)记录了 受支持的解析顺序和故障诊断信息。 ## 运行首次 TLS 扫描 此命令需要通过 TCP 端口 443 访问 `pq.cloudflareresearch.com` 的网络权限: ``` qureddy scan tls pq.cloudflareresearch.com ``` TLS 扫描会分别检查混合 TLS 1.3 密钥交换、经典的 TLS 1.3 对照、遗留的 TLS 协议提议,以及叶子证书签名 算法。该扫描不会验证证书信任、吊销状态或远程软件实现。 对于需要 Server Name Indication (SNI) 的 IP 目标: ``` qureddy scan tls 1.1.1.1:443 --sni one.one.one.one ``` ## 写入 JSON 或 CBOM 输出 使用 JSON 查看 QuReddy 的完整扫描结果: ``` qureddy scan ssh github.com --format json > github-ssh.json ``` 使用 CBOM 生成包含已确切观测到的密码学资产的 CycloneDX 1.7 Cryptography Bill of Materials: ``` qureddy scan ssh github.com --format cbom > github-ssh.cdx.json ``` 机器模式会将一份可解析的文档写入标准输出。在没有显式指定 verbosity 标志的情况下,成功的扫描会保持标准错误流为空。 请参阅[生成和验证 CBOM](https://github.com/breachsafe/qureddy/blob/main/docs/how-to/generate-a-cbom.md)、 [JSON 输出](https://github.com/breachsafe/qureddy/blob/main/docs/reference/json-schema.md)和 [CBOM 输出](https://github.com/breachsafe/qureddy/blob/main/docs/reference/cbom.md) 了解具体的契约规范。 ## 解读证据 QuReddy 区分了四种类型的陈述: - 观测记录了 endpoint 的返回内容。 - 本地能力记录描述了扫描器主机的信息,例如其 OpenSSL 版本。 - 发现基于指定的规则对一个或多个观测结果进行解读。 - `unknown` 或 `not_testable` 保留了缺失或失败的观测记录。 ## 退出代码 | 代码 | 含义 | 扫描器 | | --- | --- | --- | | `0` | 扫描完成;检查报告的就绪状态 | TLS 和 SSH | | `2` | 目标连接、握手或解析失败 | TLS 和 SSH | | `3` | 本地 OpenSSL 丢失或不可用 | 仅限 TLS | | `4` | 用法或配置错误 | TLS 和 SSH | | `70` | QuReddy 内部错误 | 进程全局 | 脚本必须根据退出代码进行分支处理,而不能将就绪状态的发现视为进程失败。请参阅[退出代码参考](https://github.com/breachsafe/qureddy/blob/main/docs/reference/exit-codes.md)。 ## 网络与隐私范围 QuReddy 仅连接命令行中指定的目标。TLS 扫描会执行受限的 TLS 握手。SSH 扫描会读取服务器标识和 KEXINIT 提议,而不会进行身份验证或开启 SSH 会话。 扫描器不会更改目标、发送遥测数据、存储扫描历史或联系 BreachSAFE 服务。重定向的 JSON 和 CBOM 文件将保留在操作者的系统上,除非操作者自行将其发送到其他地方。 ## 环境要求 - Python `>=3.12` - macOS、Linux 或 Windows - 指定目标的网络可达性 - 仅 TLS 扫描需要 OpenSSL 3.5 LTS 或更高版本 干净的构建产物矩阵会在 Linux、macOS 和 Windows 上安装 wheel、源码发行版和 pipx 应用程序。平台支持并不暗示每个操作系统的软件包仓库都提供了合适的 OpenSSL 构建版本。 ## 文档与支持 - [文档索引](https://github.com/breachsafe/qureddy/blob/main/docs/README.md) - [CLI 参考](https://github.com/breachsafe/qureddy/blob/main/docs/reference/cli.md) - [安装与故障排除](https://github.com/breachsafe/qureddy/blob/main/docs/how-to/install.md) - [扫描 SSH 或 SFTP](https://github.com/breachsafe/qureddy/blob/main/docs/how-to/scan-ssh.md) - [安全策略与私下披露](https://github.com/breachsafe/qureddy/blob/main/SECURITY.md) - [公开 issue 跟踪器](https://github.com/breachsafe/qureddy/issues) 请勿在公开的 issue 跟踪器中提交安全漏洞。请遵循 [`SECURITY.md`](https://github.com/breachsafe/qureddy/blob/main/SECURITY.md) 进行私下报告。 ## 贡献 请参阅 [`CONTRIBUTING.md`](https://github.com/breachsafe/qureddy/blob/main/CONTRIBUTING.md) 以及 [贡献者文档](https://github.com/breachsafe/qureddy/tree/main/docs/contributors/)。 该仓库强制执行 代码格式化、lint、严格类型检查、测试、安全扫描、依赖 审计、许可证元数据、文件大小策略、CBOM 一致性和发布 构建产物检查。 ## 许可证 Apache License 2.0。请参阅 [`LICENSE`](https://github.com/breachsafe/qureddy/blob/main/LICENSE)、 [`LICENSES/`](https://github.com/breachsafe/qureddy/tree/main/LICENSES/) 和 [`REUSE.toml`](https://github.com/breachsafe/qureddy/blob/main/REUSE.toml)。
标签:Blue Team, GraphQL安全矩阵, Python, SSH, TLS, 动态分析, 后量子密码学, 安全扫描器, 密码学, 手动系统调用, 无后门, 请求拦截, 逆向工具, 防御工具