TrustSource/ts-scan

GitHub: TrustSource/ts-scan

ts-scan 是一款命令行工具,用于扫描多生态软件依赖、生成与分析 SBOM,并执行漏洞和许可证合规性检查。

Stars: 7 | Forks: 3

![受支持版本](https://img.shields.io/badge/Python-%203.10,%203.11,%203.12-blue) [![OpenSSF 记分卡](https://api.scorecard.dev/projects/github.com/TrustSource/ts-scan/badge)](https://scorecard.dev/viewer/?uri=github.com/TrustSource/ts-scan) ![许可证](https://img.shields.io/badge/License-Apache--2.0-green) # TrustSource Scanner **ts-scan** 扫描器是一款功能强大的命令行工具,专为扫描软件包依赖项、生成软件物料清单 (SBOM) 文件以及分析现有 SBOM 以获取安全性和合规性洞察而设计。它支持多种 SBOM 格式,包括 SPDX 和 CycloneDX,允许用户将其无缝集成到软件供应链工作流中。 ## 描述 **ts-scan** 扫描项目的依赖项,并使用其内部格式或受支持的 SBOM 格式之一(SPDX 或 CycloneDX)存储结果。它目前支持 **PyPI**、**Maven**、**NuGet** 和 **NPM**,但也可以利用 [Syft](https://github.com/anchore/syft) 作为后端,从而扫描 Docker 容器。 收集依赖项后,**ts-scan** 可用于将结果上传到 [TrustSource](https://www.trustsource.io) 应用程序,通过识别已知漏洞对组件进行安全分析,或者对每个软件包进行深入分析。深入分析的目标是提取许可证和版权信息、检测加密算法、识别代码片段,或通过应用其自身的分析器或集成 [scancode-toolkit](https://github.com/aboutcode-org/scancode-toolkit)、[SCANOSS](https://www.scanoss.com) 和 [YARA](https://virustotal.github.io/yara/) 等外部工具来检测恶意软件。 **ts-scan** 可以无缝集成到 CI/CD 管道中,从而实现持续的自动化安全和合规性检查。可以将其配置为在检测到漏洞或法律问题时中断构建,从而在开发过程的早期确保合规性。此外,它还可以与开发人员机器上的 SCM 钩子一起用于预提交检查,或者在发布构建期间远程执行长时间的深入分析。 ## 安装 **ts-scan** 以 *PyPI* 软件包的形式提供。要安装它,您需要安装较新版本的 *Python (>= 3.10)* 和 *pip (>=22.0)*。通常 *pip* 已包含在您的 *Python* 发行版中,但如果没有,请遵循 pip 的[安装说明](https://pip.pypa.io/en/stable/installing/)。 ### 从 PyPI 仓库安装 ``` pip install ts-scan ``` ### 从本地文件夹安装 ``` git clone https://github.com/trustsource/ts-scan.git cd pip install ./ --process-dependency-links ``` ### 作为 Docker 镜像安装 在某些情况下,您可能希望在 Docker 容器内提供 **ts-scan**,例如为了防止版本冲突引起的问题。 #### 构建包含 ts-scan 的 Docker 镜像 (x86-64) ``` cd docker build -t ts-scan . ``` #### 构建包含 ts-scan 的 Docker 镜像 (ARM) ``` cd docker buildx build --platform linux/amd64 -t ts-scan . ``` 原因是,加密扫描器 pyminr 可能无法在 ARM 芯片上安装。 #### 从 Docker 镜像使用 ts-scan 进行扫描 ``` docker run -it --rm -v :/project trustsource/ts-scan scan -o /project/scan.json /project ``` ## 使用方法 **ts-scan** 的功能根据预期目标分为一组命令。以下命令可用: | 命令 | 描述 | |-----------------------|---------------------------------------------------------------------------| | [init](#init) | 初始化一个 TrustSource 项目 | | [scan](#scan) | 扫描软件包依赖项 | | [analyse](#analyse) | 对扫描或 SBOM 文件执行深入分析 | | [check](#check) | 检查软件包是否存在法律问题和漏洞 | | [upload](#upload) | 将扫描和分析结果上传到 TrustSource 应用程序 | | [import](#import) | 将 SPDX 和 CycloneDX 文件直接导入 TrustSource 应用程序 | | [convert](#convert) | 在支持的格式 (TS, SPDX, CycloneDX) 之间转换 SBOM 要显示所有可用命令的列表,请使用: ``` ts-scan --help ``` 要获取有关特定命令的详细信息,请使用: ``` ts-scan --help ``` ## 用户设置 首次执行 **ts-scan** 时,会在主目录 **$HOME/.ts-scan/config** 中创建一个用户设置文件。它包含一个空的 ```[default]``` 配置文件。 用户设置文件可用于存储传递给 **ts-scan** 的任何选项。选项组可以分组到配置文件中。 用户设置文件的一个示例是: ``` [default] api_key="" [dev] api_key="" project_name="TrustSource default Project in the Dev account" ``` 该格式是一个字典,以 snake-case 格式的选项名称作为键,以值作为值。例如,如果项目名称的 **ts-scan** 选项是 ```--project-name```,则用户设置文件中的相应键是 ```project_name```。 执行 **ts-scan** 时,```default``` 配置文件中的所有选项都会作为命令行选项的默认值加载。如果在命令行上显式传递了一个选项,它将覆盖默认值。 要选择配置文件,请使用 ```-p\--profile``` 选项。例如,要使用 ```dev``` 配置文件,请使用: ``` ts-scan -p dev upload MyScan.json ``` 在这种情况下,**ts-scan** 将使用 ```dev``` 配置文件中的 ```api_key``` 和 ```project_name``` 进行上传。 ## Init **init** 命令初始化一个 TrustSource 项目。它在提供的目录中创建一个配置文件,该文件可用于存储项目名称和 API 密钥以供将来使用。这对开发人员特别有用,因为您可能希望避免在每次上传新扫描时都将 API 密钥和项目名称作为命令行参数传递。 要初始化项目,请使用: ``` ts-scan init --project-name --api-key ``` 这两个参数都是可选的,例如,可以只在项目中存储项目名称,而将 API 密钥存储在[用户设置文件](#user-settings)中。 **注意**:项目设置会覆盖用户设置文件,而显式传递的命令行选项会覆盖项目设置。例如,如果在命令行上传递了 API 密钥,它将覆盖存储在项目设置文件中的 API 密钥。 ## Scan **scan** 命令在您的项目中搜索软件包依赖项。 通过提供项目目录或项目文件的路径——取决于包管理器是基于文件的(例如 .NET 解决方案、Maven)还是基于目录的(例如 NPM、Gradle)——ts-scan 会自动检测受支持的软件包管理系统并提取完整的依赖树。扫描结果可以使用内部 TS 格式或受支持的 SBOM 格式之一(SPDX 或 CycloneDX)保存到文件中。 要执行扫描并将结果存储到文件中,请使用: ``` ts-scan scan -o [-f ] ``` ```-f ``` 选项控制输出格式,可以是: * ```ts``` - TrustSource 内部格式(默认) * ```spdx-[tag|json|yaml|xml]``` - SPDX 格式之一,例如 ```spdx-json``` * ```cyclonedx-[json|xml]``` - CycloneDX 格式之一,例如 ```cyclonedx-json``` ### 选项 **ts-scan** 包含一些通用选项以及仅在扫描特定软件包类型时适用的选项。特定于软件包的选项以软件包管理系统的类型为前缀。我们使用 [Package URL Type](https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst) 作为前缀。以下选项适用于大多数受支持的软件包管理系统: * ```--[maven|gradle|npm|nuget|pypi]:ignore``` - 禁用扫描该类型的依赖项 * ```--[maven|gradle|npm|nuget]:executable``` - 指定 PM 可执行文件的路径 * ```--[maven|gradle|npm|nuget]:forward``` - 将参数转发给 PM 的可执行文件 可以使用以下命令打印包括 PM 特定选项在内的完整选项列表: ``` ts-scan scan --help ``` #### 扫描器可执行文件路径 在扫描 Maven、Node 和 NuGet 依赖项时,***ts-scan*** 会调用相应的包管理器可执行文件。例如,为了指定 Maven 可执行文件的路径,请使用以下选项 ``` ts-scan scan --maven:executable /opt/local/bin/mvn ``` #### 将自定义参数转发给扫描器可执行文件 还有一些选项可以将参数转发给包管理器可执行文件。例如,为了将设置文件传递给 Maven,可以使用以下组合: ``` ts-scan scan --maven:foward --settings,customSettings.xml ``` ### 其他选项 * ```--verbose``` - 启用详细模式(包括来自 PM 可执行文件的输出,对调试很有用) * ```--tag ``` - 将 SCM 标签 `````` 存储在扫描中 * ```--branch ``` - 将 SCM 分支 `````` 存储在扫描中 ### 使用 Syft 作为后端进行扫描 **ts-scan** 可以使用 [Syft](https://github.com/anchore/syft) 扫描器作为依赖项扫描的后端。要启用 Syft 扫描器,请使用以下选项: ``` ts-scan scan --use-syft ``` 作为源,您可以指定 Syft 接受的任何类型的源,例如本地文件系统路径。有关受支持格式的更多详细信息,请参阅 [Syft Supported Sources](https://github.com/anchore/syft/wiki/supported-sources)。 在调用 Syft 之前,**ts-scan** 会尝试在默认位置查找 Syft 可执行文件,为了指定自定义位置,请使用以下选项: ``` ts-scan scan --use-syft --syft-path ``` 要将自定义参数直接传递给 Syft: ``` ts-scan scan --use-syft --Xsyft
标签:Cilium, CycloneDX, DevSecOps, Docker扫描, LNA, Maven, NPM, NuGet, PyPI, Python, SBOM生成, SPDX, Web截图, YARA, 上游代理, 云安全监控, 云资产可视化, 容器安全, 数据集, 文档安全, 无后门, 漏洞验证, 自定义DNS解析器, 许可证分析, 请求拦截, 逆向工具, 静态分析