旋风DX 生成器

这个工具创建了一个有效且兼容的 CyproneDX 软件Bill-Of-Matrials (SBOM) , 包含 c/c++, 节点.js, php, python, 红宝石, 生锈, java,. Net, dart, haskell, elixir, 和 Go 项目的所有项目依赖性集合, 其格式为 XML和JSON. CirponDX 1.4是一种轻量级SBOM规格,易于被创建,人和机可读取,易解析.
当使用插件时,cdxgen可以为Linux docker图像甚至运行Linux或Windows操作系统的VMs生成一个SBoM.
支持的语言和软件包格式
| 语文/格式 | 软件包格式 | 过渡性依赖性 |
|---|---|---|
| 节点.js | npm-shrink wrap.json, packet-lock.json, pnpm-lock.yaml, 纱线.lock, 匆忙.js, 弓箭手.json, .min.js | 对,但.min.js除外 |
| 贾瓦 | maven (pom.xml [1]), gradle (built.gradle,.kts), scala (sbt), bazel (英语) | 是的,除非pom.xml因无母体或出错而手动解析 |
| 密码 | 作曲家.lock | 对 |
| 蟒蛇 | setup.py, requireds.txt [2], Pipfile.lock, 诗歌.lock, bdist wheel,.whl,.egg-info | 只有Pipfile.lock和诗歌.lock |
| 离开 | 二进制,去.mod,去.sum,Gopkg.lock | 是, 二进制除外 |
| 红宝石 | Gemfile.lock, 宝石谱 | 只用于 Gemfile.lock |
| 生锈 | 二进制, cargo.toml, cargo.lock | 仅供 Cargo.lock使用 |
| .Net (中文(简体) ) | .csproj, packages.config, project.assets.json [3], packages.lock.json,.nupkg | 仅用于项目.assets.json, packages.lock.json |
| 镖 | (原始内容存档于2017-03-27) (英语). pubspect.lock, pubspect.yaml | 仅用于阴极.lock |
| 哈斯凯尔 | {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}你觉得呢 | 对 |
| 精灵 | 混合. 锁定 | 对 |
| c/c++ 数 | conan.lock, conanfile.txt (韩语) | 是的,只给Conan.lock |
| 血浆 | Clojure CLI (deps.edn), 莱宁根 (project.clj) (英语) | 是的,除非由于缺少cljure cli或leiningen命令而手动解析文件 |
| docker / comic 图像 | 所有支持的语言。 Linux OS 套件, 有插件 [4] | 基于锁定文件的最佳努力 |
| GitHub 动作 | .github/工作流量/*.yml | 不详 |
| 链接 | 所有支持的语言。 带有插件的 Linux OS 包 [5] | 基于锁定文件的最佳努力 |
| 窗口 | 所有支持的语言。 最佳操作软件包 [5] | 基于锁定文件的最佳努力 |
| 詹金斯插件 | .hpi 文件 | |
| 螺旋图 | . 亚姆尔 | 不详 |
| 斯卡福尔 | . 亚姆尔 | 不详 |
| 悬念化 | . 亚姆尔 | 不详 |
| Tekton 任务 | . 亚姆尔 | 不详 |
| 库伯涅斯 | . 亚姆尔 | 不详 |
| 马文缓存 | (单位:千美元) | 不详 |
| SBT 缓存 | $HOME/.ivy2/cache/**/*.jar | 不详 |
| 缓存 | $HOME/caches/modules-2/files-2.1/**/*.jar | 不详 |
| 赫尔姆指数 | USHOME/.cache/helm/仓库/**/*.yaml | 不详 |
| 多克编曲 | docker-compose *.yml. 中国植物物种信息数据库. 图像也将被扫描. | 不详 |
| 谷歌云构建配置 | 积云.yaml | 不详 |
| 打开API | (原始内容存档于2013-10-12). openapi *.json, openapi *.yaml | 不详 |
| 普里瓦多 | privado.json (英语) | 将列入数据和服务信息。 采用通用模式. |
注:
- 解析 pom.xml 需要 Apache maven 3.x
- gradle或gradlew需要分析gradle项目
- 剖析 scala sbt 项目需要 sbt 。 目前仅支持scala 2.10 + sbt 0.13.6+和 2.12 + sbt 1.0+.
- 或者,使用 sbt- dependency- lock 创建锁定文件 插件
脚注:
- [1] - 对于多模块应用程序,BOM文件可以包括可能不包含在被打包的战争或耳朵文件中的组件.
- [2] - 使用pip冻结来提高基于要求.txt的解析的准确性.
python -m pip freeze > requirements.txt - [3] - 执行点网或核子还原以生成工程. assets.json. 如果没有此文件, cdxgen 将不包括间接依赖性 .
- [4] - 见插件部分
- [5] --由Osquery提供动力. 见插件部分
自动使用检测
对于 node.js 项目,锁文件最初被解析,所以SBOM将包含所有依赖性,包括dev依赖性. 然后使用由bayl-parser提供动力的AST解析器来检测被导入并被非测试代码使用的包. 此类进口包将自动拥有其 scope 设置为 required 在结果的 SBoM 中。 通过传递论据 --no-babel,可以禁用此分析。 范围财产将依据 dev 属性在锁定文件中.
这个属性后来可用于各种目的. 譬如说, 扫描 使用此属性来确定脆弱性的优先次序。 遗憾的是,这种依赖轨道的工具不包括这一特点,因此可能过度报告CVE.
通过传递论据 --required-only,可以限制SBoM只包含有范围"需要"的包,通称生产或非生产依赖. 与 --no-babel 将此列表限制在基于 dev 属性在锁文件中是虚假的.
为了去, go mod why 命令用于识别所需的软件包。 对于php,作曲锁文件用于区分所需(packages)和可选(packages-dev).
使用量
安装
sudo npm install -g @appthreat/cdxgen
您也可以使用 Cdxgen 容器图像
docker run --rm -it -v /tmp:/tmp -v $(pwd):/app:rw -t ghcr.io/appthreat/cdxgen -r /app
获取帮助
$ cdxgen -h
Options:
-o, --output Output file for bom.xml or bom.json. Default console
-t, --type Project type
-r, --recurse Recurse mode suitable for mono-repos [boolean]
-p, --print Print the SBoM as a table [boolean]
-c, --resolve-class Resolve class names for packages. jars only for now.
[boolean]
--deep Perform deep searches for components. Useful while
scanning live OS and oci images. [boolean]
--server-url Dependency track or AppThreat server url. Eg:
https://deptrack.appthreat.io
--api-key Dependency track or AppThreat server api key
--project-group Dependency track or AppThreat project group
--project-name Dependency track or AppThreat project name. Default use
the directory name
--project-version Dependency track or AppThreat project version
--project-id Dependency track or AppThreat project id. Either
provide the id or the project name and version together
--required-only Include only the packages with required scope on the
SBoM. [boolean]
--fail-on-error Fail if any dependency extractor fails. [boolean]
--no-babel Do not use babel to perform usage analysis for
JavaScript/TypeScript projects. [boolean]
--generate-key-and-sign Generate an RSA public/private key pair and then
sign the generated SBoM using JSON Web
Signatures. [boolean]
--server Run cdxgen as a server [boolean]
--server-host Listen address [default: "127.0.0.1"]
--server-port Listen port [default: "9090"]
--version Show version number [boolean]
-h Show help [boolean]
示例
最小的例子.
cdxgen -o bom.json
注:
cdxgen总是按照CirponDX 1.4的规格,以xml和json两种形式出产硼. json是推荐格式.
为了一个java项目。 这样可以自动检测出马文、格来尔或斯布特 并相应构建出波姆
cdxgen -t java -o bom.json
将 SBoM 作为表单打印 -p 参数.
cdxgen -t java -o bom.json -p
递归生成所有语言的单 BOM 通关 -r 参数.
cdxgen -r -o bom.json
通用 SBoM
通过传递类型 -t universal,cdxgen可能会被迫通过扫描所有包件,容器和库伯内特斯的出货单来机会性地收集尽可能多的组件和服务. 由此产生的SBoM可能有上千多个组件,因此需要在使用传统的SCA工具之前进行额外的分解.
SBoM 服务器
输入 cdxgen 与 --server 参数以服务器模式运行。 默认情况下, 它会听取端口 9090 可随参数定制 --server-host 财务报告和审定财务报表 --server-port。 。 。 .
cdxgen --server
或使用容器图像.
docker run --rm -it -v /tmp:/tmp -p 9090:9090 -v $(pwd):/app:rw -t ghcr.io/appthreat/cdxgen -r /app --server
使用卷曲或您最喜欢的工具将参数传递到 /sbom 路线.
扫描本地路径
curl "http://127.0.0.1:9090/sbom?path=/Volumes/Work/sandbox/vulnerable-aws-koa-app&multiProject=true&type=js"
扫描一个 git repo
curl "http://127.0.0.1:9090/sbom?url=https://github.com/HooliCorp/vulnerable-aws-koa-app.git&multiProject=true&type=js"
你可以开始辩论.
curl -H "Content-Type: application/json" http://localhost:9090/sbom -XPOST -d $'{"url": "https://github.com/HooliCorp/vulnerable-aws-koa-app.git", "type": "nodejs", "multiProject": "true"}'
多克编曲
git clone https://github.com/AppThreat/cdxgen.git
docker compose up
Privado.ai 支持软件
在通用模式下, cdxgen 可以查找任意 普里瓦多 扫描报告并用数据(流量和分类)、终点和泄漏信息来丰富SBoM。 这种SBoM将有助于遵守隐私并使用案件.
Invoke privado 扫描以生成此报告,然后以显示的通用模式引用 cdxgen .
privado scan --enable-javascript <directory>
cdxgen -t universal <directory> -o bom.json
战争文件支持
cdxgen可以从给定的战争文件中生成一个BOM文件.
# cdxgen -t java app.war
cdxgen app.war
解析类名
有时需要解决罐子文件中包含的类名. 通过一个可选的论据 --resolve-class,可以获取 cdxgen 创建单独的映射文件,将罐名(包括版本)作为键名和类名列表作为值.
cdxgen -t java --resolve-class -o bom.json
这将创建一个 bom.json.map 文件与罐 - 类名称映射。 参见 这些 实例 学习结构.
吊销许可证
cdxgen可以自动查询maven或npm等公共注册,或微分解包许可证. 这是一个耗时的操作, 默认已禁用 。 要启用, 设置环境变量 FETCH_LICENSE 改为 true 如所示.
export FETCH_LICENSE=true
依赖树
cdxgen 可以保留树的依赖性 dependencies 属性用于少数支持的软件包显示。 目前仅限于:
- 软件包锁.json
- 纱线. lock
- pnpm-lock.yaml (英语)
- 马文 (pom.xml)
- 摇摆
环境变量
| 变量 | 说明 |
|---|---|
| SCAN DEBUG MODE (中文(简体) ) | 设定调试以启用调试消息 |
| (原始内容存档于2018-10-21). GITHUB TOKEN | 指定 GitHub 令牌, 在查询许可证和回放信息时防止交通塑造 |
| MVN CMD 游戏机 | 设定覆盖 maven 命令 |
| MVN 目标 | 设定传递更多参数, 如配置文件或设置以创建 |
| 母亲的呼声 | 指定母体家园 |
| (原始内容存档于2018-09-26) (英语). GRADLE CACHE DIR | 指定格勒缓存目录。 类名解析有用 |
| GRADLE MULTI PROJECT 模型 | 为 Gradle 多项目应用程序设定此变量 。 不要使用重复模式 . |
| 格莱德 目标 | 设定将 profile 或设置等附加参数传递给 gradle 。 例如: -- configation runtimeClassPath |
| 格莱德·霍米 | 指定 gradle 家 |
| (简体中文) | 设定覆盖 gradle 命令 |
| (简体中文) | 默认cdxgen使用任务"依赖"来收集软件包. 设定覆盖任务名称 . |
| SBT CACHE DIR (英语) | 指定 sbt 缓存目录 。 类名解析有用 |
| (法语) | 设定为真从注册处获取许可信息 。 npm 和 golang 仅此而已 |
| 用 语 | 设定为 true 为 golang 项目生成 BOMs , 使用 go. sum 作为依赖源的 truth, 而不是 go. mod |
| CDXGEN TIMEOUT MS (英语) | 已知处决涉及maven、 gradle 或 sbt 的默认超时 |
| 巴泽尔-目标 | 巴泽尔目标要建了 默认 : 全部( 如: // java- maven) |
| CLJ CMD (中文(简体) ) | 设置以覆盖 clujure cli 命令 |
| LEIN CMD (英语) | 设定覆盖来宁根命令 |
| SBOM SIGN ALGORITHM (英语) | 签名算法. 一些有效值为RS256,RS384,RS512,PS256,PS384,PS512,ES256等 |
| SBOM SIGN PRIVATE KEY (英语) | 用于签名的私钥 |
| SBOM SIGN PUBLIC KEY (英语) | 可选的 包含在 SBoM 签名中的公钥 |
与 GitHub 动作合并
使用 GitHub 动作 自动生成并上传到服务器。 参见 nodejs.yml 在此重播一个实例.
与 Google 云建集成
使用这个 自定义构建器 并参考读取的指令.
插件
cdxgen可以通过外部的二进制插件来扩展支持更多的SBoM使用大小写. 这些现已作为可选的附属物安装.
sudo npm install -g @appthreat/cdxgen-plugins-bin
Docker / OCI 容器支持
docker 类型根据存在值自动检测,例如 sha256 或者说 docker.io 前缀等.
cdxgen odoo@sha256:4e1e147f0e6714e8f8c5806d2b484075b4076ca50490577cdf9162566086d15e -o /tmp/bom.json
也可以通过 -t docker 为简单的标签。 只有 latest 如果未指定标记, 则将拉出标记 .
cdxgen shiftleft/scan-slim -o /tmp/bom.json -t docker
也可以通过容器图像的.tar文件.
docker save -o /tmp/slim.tar shiftleft/scan-slim
podman save -q --format oci-archive -o /tmp/slim.tar shiftleft/scan-slim
cdxgen /tmp/slim.tar -o /tmp/bom.json -t docker
注:
- 只有应用程序相关包由cdxgen收集. 对OS已安装软件包的支持即将到来.
无根模式下的Podman
在 Linux 上, 请不要忘记启动 API 访问所需的 pockman 套接字 .
systemctl --user enable --now podman.socket
systemctl --user start podman.socket
podman system service -t 0 &
为活系统生成 SBoM
您可以通过传递参数来使用 cdxgen 生成 SBoM 用于活系统或 VM 用于遵守和脆弱性管理目的 -t os。 。 。 .
cdxgen -t os
此特性由 Osquery 提供动力,即 已安装 和二进制插件一起。 cdxgen 将尝试于机会性地尝试使用该程序检测尽可能多的组件、app和扩展 默认查询。这一过程需要几分钟,并产生一个包含上千个组件的 SBoM 文件.
SBoM 签名
cdxgen可以签名生成的SBoM json文件来提高真实性和非校验能力. 要启用此选项, 请设置以下环境变量 .
- SBOM SIGN ALGORITHM:算术. 示例:RS512
- SBOM SIGN PRIVATE KEY: RSA 私人密钥的位置
- SBOM SIGN PUBLIC KEY:可选. RSA 公钥的位置
要生成测试的公/私密密钥对, 您可以通过传递参数运行 cdxgen --generate-key-and-sign。生成的json文件将有一个属性叫做 signature 可用于验证. jwt.io (英语) 是一个已知的可用于此种签字验证的地点.

自动服务检测
cdxgen可以自动检测YAML列表中的服务名称,如多克-编译或库伯涅特或斯卡福德列表等. 这些居民将居住在 services 属性在生成的 SBoM 中。 请通过提交任何不准确的检测问题来帮助改进这一特征.
转换为 SPDX 格式
使用 旋风DX CLI 用于高级使用的工具,例如转换、diff和合并.
许可证
根据Apache 2.0许可证的规定,允许修改和再分配。 见 自由主义 完整许可证存档.
解析支持
开发者可以通过 不对 频道.