cbomkit/cbomkit
GitHub: cbomkit/cbomkit
用于扫描源代码生成密码学物料清单并检查合规性的工具集,支持量子安全等策略评估。
Stars: 91 | Forks: 35
# CBOMkit - CBOM 必备工具集
[](https://opensource.org/licenses/Apache-2.0)
[](https://github.com/cbomkit/cbomkit/releases)
CBOMkit 是一套用于处理密码学物料清单(CBOM)的工具。CBOMkit 包括:
- **CBOM 生成**([CBOMkit-hyperion](https://github.com/cbomkit/sonar-cryptography)、[CBOMkit-theia](https://github.com/cbomkit/cbomkit-theia)):通过扫描私有和公开的 git 仓库来查找所使用的密码学算法,从而从源代码生成 CBOM。
- **CBOM 查看器([CBOMkit-coeus](https://github.com/cbomkit/cbomkit?tab=readme-ov-file#cbomkit-coeus))**:可视化已生成或上传的 CBOM,并获取全面的统计数据。
- **CBOM 合规性检查**:根据指定的合规策略评估已创建或上传的 CBOM,并接收详细的合规状态报告。
- **CBOM 数据库**:将 CBOM 收集并存储到数据库中,并通过 RESTful API 暴露这些数据。

## 快速入门
使用 `docker-compose` 启动 CBOMkit。
```
# clone the repository
git clone https://github.com/cbomkit/cbomkit
cd cbomkit
# run the make command to start the docker compose
make production
```
或者,如果您希望使用 podman 而不是 docker,请运行以下命令:
```
# run the make command to start the docker compose using podman
make production ENGINE=podman
```
(这需要通过 `pip3 install podman-compose` 安装 podman-compose)。
后续步骤:
- 输入一个 git URL(如 [https://github.com/keycloak/keycloak](https://github.com/keycloak/keycloak))或一个包 URL(PURL)(如 `pkg:maven/io.quarkus/quarkus-core@3.18.1`)来生成 CBOM
- 通过选择之前扫描的 CBOM 来查看您生成的 CBOM
- 将[示例](example)中的 CBOM 拖放到上传区域进行查看
使用 helm chart 部署到 kubernetes 环境。通过 helm 参数传递域名后缀和 cbomkit 数据库凭据。
```
# clone the repository
git clone https://github.com/cbomkit/cbomkit
cd cbomkit
# deploy using helm
helm install cbomkit \
--set common.clusterDomain={CLUSTER_DOMAIN} \
--set postgresql.auth.username={POSTGRES_USER} \
--set postgresql.auth.password={POSTGRES_PASSWORD} \
--set backend.tag=$(curl -s https://api.github.com/repos/cbomkit/cbomkit/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') \
--set frontend.tag=$(curl -s https://api.github.com/repos/cbomkit/cbomkit/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') \
./chart
```
## 架构
CBOMkit 由三个核心组件组成:Web 前端、API 服务器和数据库。
### 前端和 CBOMkit-coeus
Web 前端作为与 API 服务器交互的用户界面,提供一系列功能,包括:
- 浏览现有的密码学物料清单(CBOM)清单
- 启动新的扫描以生成 CBOM
- 上传现有的 CBOM 进行可视化和分析
#### CBOMkit-coeus
为增强灵活性,前端组件可以作为独立版本部署,称为 CBOMkit-coeus。
此选项允许独立于完整的 CBOMkit 套件进行简化的可视化和合规性分析。
```
# use this command if you want to run only the CBOMkit-coeus
make coeus
```
### API 服务器
API 服务器是 CBOMkit 的核心组件,提供全面的 RESTful API(请参阅 [OpenAPI 规范](openapi.yaml)),具有以下主要功能:
#### 功能
- 获取最近生成的 CBOM
- 从数据库访问存储的 CBOM
- 对用户提供的 CBOM 执行合规性检查
- 对存储的或生成的 CBOM 进行合规性评估
*检索 CBOM 项目标识符的示例查询*
```
curl --request GET \
--url 'http://localhost:8081/api/v1/cbom/pkg:github%2Fkeycloak%2Fkeycloak@'
```
除了 RESTful API 之外,服务器还集成了 WebSocket,支持:
- 通过 Git 仓库扫描启动 CBOM 生成
- 在扫描过程中通过 WebSocket 连接传输实时进度更新
### 合规性
CBOMkit 的一个关键组件是其密码学物料清单(CBOM)的合规性检查机制。
CBOM 结构表示应用程序检测到和使用的密码学资产的层次树。
这种标准化格式有助于开发和实施通用策略,以识别和标记密码学使用中的违规行为。
CBOMkit 目前具有一个基础的 `quantum-safe` 合规性检查。
此初始实现作为概念验证,展示了系统根据定义策略评估密码学组件的能力。
合规性框架设计为可扩展,为以下方面提供了坚实的基础:
- 实现额外的合规性检查
- 增强现有的验证流程
- 集成自定义合规性检查(外部)
#### 外部合规性评估
CBOMkit 支持使用 [Open Policy Agent(OPA)](https://www.openpolicyagent.org)作为外部合规性评估服务。OPA 根据用户使用其声明式策略语言 [Rego](https://www.openpolicyagent.org/docs/policy-language) 编写的策略来评估合规性。
在 CBOMkit 中,您可以通过以下任一方式将 OPA 配置为外部合规性服务:
- 环境变量 `CBOMKIT_OPA_API_BASE`,或
- [application.properties](src/main/resources/application.properties) 中的配置键 `cbomkit.ext-policies.opa-api-base`。
如果指定了任一选项,它必须包含正在运行的 OPA 实例的基本 URL。如果未设置该变量或属性,或者 CBOMkit 无法连接到 OPA,系统将自动回退到其内置的内部合规性服务。
内部合规性服务实现了固定的"quantum-safe 策略"。此内置策略使用算法 OID 和名称的白名单检查非对称算法的量子安全性。
##### OPA 中的策略定义
CBOMkit 提供了一个示例 Rego 策略 [quantum_safe.rego](opa/quantum_safe.rego),它复制了内部合规性服务的行为。
Rego 策略文件以包声明开头,并定义一个或多个规则。所有 CBOMkit 策略必须以以下内容开头:
```
package policies
```
每个规则包括:
- 一个头部,
- 一个条件表达式(逻辑),以及
- 当条件满足时返回的 JSON 对象。
对于合规性评估,OPA 在 CBOM 组件集上执行这些规则。
按照惯例,规则头部应遵循以下格式:
```
.findings contains finding if ...
```
`` 标识正在评估的策略。它必须与通过环境变量 VUE_APP_POLICY_NAME 在 CBOMkit 前端配置的策略名称匹配。
默认情况下,这是"quantum_safe",即 quantum_safe.rego 中包含的预定义策略。
当通过 `make ext-compliance`(见下文)将 CBOMkit 作为 Docker 应用程序运行时,OPA 容器会自动配置此默认策略文件。
###### 结果格式
每个策略必须生成一个名为 `findings` 的 JSON 列表,CBOMkit 期望在 OPA 的评估响应中获得此列表。
每个 finding 对象必须至少包含以下三个属性:
```
{
"bom-ref": "string", # The UUID of the matching component (usually component["bom-ref"])
"result": "string", # One of ["quantum-safe", "quantum-vulnerable", "na", "unknown"]
"rule": "string", # The name of the rule
"property": "string", # Optional: the relevant CBOM property name
"value": "string" or numeric # Optional: the property’s value
}
```
如果 finding 的任何必需属性缺失,评估将失败,CBOMkit 将回退到其内部合规性服务。结果值表示规则的结果。`NA` 表示规则不适用于某个组件(例如,预定义"quantum_safe"策略中的对称算法)。"property"和"value"是可选的,用于在 CBOMkit 界面中呈现合规性详细信息。
###### 评估结果
合规性策略作为定义什么合规或不合规的知识库。如果组件不匹配任何规则,则不会产生 finding;CBOMkit 然后将该组件标记为"unknown"。
如果任何组件被标记为"quantum-vulnerable",则整体合规性状态被视为非量子安全。相反,如果未发现"quantum-vulnerable"组件,或者没有规则匹配因此未生成任何 finding,则认为 CBOM 是量子安全的。
#### 配置
不同的部署配置使用不同的来源进行合规性验证。
| 部署配置 | 合规性检查如何执行? |
|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `coeus` | `quantum-safe` 算法合规性检查在前端内本地实现。这种集成允许立即对基本量子抗性标准进行客户端评估。 |
| `production` | 在标准部署中,核心合规性服务集成到后端服务中。此实现支持通过 RESTful API 执行合规性检查,提供了一种可扩展且集中的密码学策略验证方法。 |
| `ext-compliance` | 在高级部署场景中,合规性评估委托给专用外部服务。API 服务器可以根据需要调用此服务。此配置为 CBOMkit 的前端和 API 维护了标准的用户体验,镜像了 `production` 配置的功能,同时允许在外部执行更复杂或专门的合规性检查。 |
### 凭据处理
当启动对 GitHub 仓库的新扫描时,CBOMkit 会生成一个临时的本地仓库克隆。
前端使用户能够提供 GitHub 凭据(用户名和密码或个人访问令牌)。这些凭据不会被记录或存储;
相反,它们会被直接转发给 [JGit](https://github.com/eclipse-jgit/jgit) 以促进克隆过程。
扫描完成后(无论成功或失败),临时的本地克隆都会被删除。
### 扫描和 CBOM 生成
CBOMkit 利用先进的扫描技术来识别源代码中的密码学使用情况,并生成密码学物料清单(CBOM)。此扫描功能由 [CBOMkit-hyperion(Sonar 密码学插件)](https://github.com/cbomkit/sonar-cryptography)提供,这是 IBM 开发的一个开源工具。
#### 支持的语言和库CBOMkit 当前的扫描能力由 Sonar 密码学插件支持的语言和密码学库定义:
| 语言 | 密码学库 | 覆盖率 |
|----------|-----------------------------------------------------------------------------------------------|----------|
| Java | [JCA](https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html) | 100% |
| | [BouncyCastle](https://github.com/bcgit/bc-java)(*轻量级 API*) | 100%[^1] |
| Python | [pyca/cryptography](https://cryptography.io/en/latest/) | 100% |
| Go | [crypto](https://pkg.go.dev/crypto)(*标准库*) | 100%[^2] |
| | [golang.org/x/cryptography](https://pkg.go.dev/golang.org/x/crypto) | 部分[^3] |
[^1]: 我们仅根据[此规范](https://javadoc.io/static/org.bouncycastle/bctls-jdk14/1.80/specifications.html)覆盖 BouncyCastle *轻量级 API*
[^2]: [`crypto`](https://pkg.go.dev/crypto@go1.25.6#section-directories) 下的所有包都已覆盖,除了 `crypto/x509`
[^3]: 覆盖 `golang.org/x/crypto/hkdf`、`golang.org/x/crypto/pbkdf2` 和 `golang.org/x/crypto/sha3`
虽然 CBOMkit 的扫描能力目前受限于 Sonar 密码学插件,但该插件的模块化设计允许在未来更新中扩展支持其他语言和密码学库。
## 贡献指南
如果您想为 CBOMkit 做出贡献,请查看我们的[贡献指南](CONTRIBUTING.md)。参与其中即表示您预期遵守我们的[行为准则](CODE_OF_CONDUCT.md)。
我们使用 [GitHub issues](https://github.com/cbomkit/cbomkit/issues) 来跟踪请求和错误。对于问题,请使用 [GitHub Discussions](https://github.com/cbomkit/cbomkit/discussions) 开始讨论。
## 许可证
[Apache License 2.0](LICENSE.txt)
标签:AES-256, CBOM, DevSecOps, Docker, Git扫描, IPv6支持, JS文件枚举, Kafka, Maven依赖, NIDS, podman, RESTful API, SBOM, SonarQube插件, 上游代理, 加密算法检测, 域名枚举, 子域名突变, 安全合规, 安全防御评估, 容器化, 密码学, 密码材料清单, 属性图, 幻觉检测, 手动系统调用, 提示词优化, 日志审计, 测试用例, 漏洞评估, 硬件无关, 网络代理, 网络测绘, 请求拦截, 跌倒检测, 软件物料清单, 逆向工具