@appthreat/cdxgen

中文文档
7.0.5发布于 2023/02/02Apache-2.0CommonJS近 30 天下载 1万

从源代码或容器图像创建 CirponDX 软件

此软件包已被标记为弃用

Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

中文使用文档
文档目录28 节
  1. 支持的语言和软件包格式
  2. 自动使用检测
  3. 使用量
  4. 安装
  5. 获取帮助
  6. 示例
  7. 通用 SBoM
  8. SBoM 服务器
  9. 扫描本地路径
  10. 扫描一个 git repo
  11. 多克编曲
  12. Privado.ai 支持软件
  13. 战争文件支持
  14. 解析类名
  15. 吊销许可证
  16. 依赖树
  17. 环境变量
  18. 与 GitHub 动作合并
  19. 与 Google 云建集成
  20. 插件
  21. Docker / OCI 容器支持
  22. 无根模式下的Podman
  23. 为活系统生成 SBoM
  24. SBoM 签名
  25. 自动服务检测
  26. 转换为 SPDX 格式
  27. 许可证
  28. 解析支持

旋风DX 生成器

cdxgen logo

这个工具创建了一个有效且兼容的 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.

支持的语言和软件包格式

语文/格式软件包格式过渡性依赖性
节点.jsnpm-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 (英语) 是一个已知的可用于此种签字验证的地点.

SBoM signing

自动服务检测

cdxgen可以自动检测YAML列表中的服务名称,如多克-编译或库伯涅特或斯卡福德列表等. 这些居民将居住在 services 属性在生成的 SBoM 中。 请通过提交任何不准确的检测问题来帮助改进这一特征.

转换为 SPDX 格式

使用 旋风DX CLI 用于高级使用的工具,例如转换、diff和合并.

许可证

根据Apache 2.0许可证的规定,允许修改和再分配。 见 自由主义 完整许可证存档.

解析支持

开发者可以通过 不对 频道.

版本与发布记录

@appthreat/cdxgen 共发布 221 个版本,首次发布于 2020/01/01;过去 12 个月发布了 0 个版本。

版本发布日期距今
7.0.5latest2023/02/023 年前
7.0.42023/02/013 年前
7.0.32023/01/313 年前
7.0.22023/01/283 年前
7.0.12023/01/263 年前
7.0.02023/01/263 年前

关于 @appthreat/cdxgen 的常见问题

@appthreat/cdxgen 是什么?

从源代码或容器图像创建 CirponDX 软件注意:该包已被作者标记为弃用——Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

如何安装 @appthreat/cdxgen?

在项目目录运行 npm install @appthreat/cdxgen,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 cdxgen,可以用 npx cdxgen 直接运行。

@appthreat/cdxgen 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/appthreat__cdxgen 是否存在。

@appthreat/cdxgen 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@appthreat/cdxgen 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=12.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@appthreat/cdxgen 可以商用吗?

@appthreat/cdxgen 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@appthreat/cdxgen 的下载量有多少?

根据 npm 官方下载统计,@appthreat/cdxgen 在 2026/10/07 – 2026/11/05 这 30 天内被下载 10,424 次,日均约 347 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@appthreat/cdxgen 还在维护吗?

最新版本 7.0.5 发布于 2023/02/02(3 年前);至今共发布 221 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/01/01。作者已将其标记为弃用,新项目建议寻找替代方案。