@codacy/tools-trivy-0 (英语)
目录
概览
使用 特里维 二进制. 扫描依赖性和硬码机密中的弱点。 使用CLI执行策略,使用两个独立的扫描模式(可变性+秘密).
| 财产 | 数值 |
|---|---|
| 工具标识 | Trivy |
| 编码 UUID | 2fd7fbe0-33f9-4ab3-ab73-e9b62404e2cb |
| 战略 | 国 际 |
| 语文 | 多语种(扫描剂依赖表) |
| 二进制 | trivy |
| 文件图案 | * (自动侦查依赖情况表) |
| 图案计数 | 6(乳房图案) |
伞状图案
Trivy使用伞形图案而不是单个的 CVE图案:
| 模式标识 | 严重性 | 说明 |
|---|---|---|
Trivy_vulnerability_critical | 错误 | 关键脆弱性 |
Trivy_vulnerability_high | 高级 | 高度脆弱性 |
Trivy_vulnerability_medium | 3⁄4 ̄ ̧漯B | 中度脆弱性 |
Trivy_vulnerability_minor | 资讯 | 低脆弱性 |
Trivy_secret | 错误 | 加密机密 |
Trivy_malicious_packages | 错误 | 恶意软件包(通过OSV.dev API) |
与 codacy-trivy
混凝土云分析库 codacy-trivy 多克发动机,所以
本地扫描和上传的仓库必须产生相同的结果
云上扫描寄存器。 此适配器有三块仅存
该行;参考执行为: codacy-trivy
internal/tool/tool.go,而端口则居住在 src/vuln-mapping.ts
(单位:千美元)fallbackSearchForLineNumber, (中文(简体) ), findLeastDisruptiveFixedVersion, (中文(简体) ),
purlPrettyPrint) (中文(简体) ). 只需在文件旁边改变它们.
sourceId ——为什么每期都带有CVE
Codacy通过一个MD5超过四个键得到一个结果的确定UUID:文件名,
模式 id, 线条的文字被剥去,以及 sourceId
(单位:千美元)codacy-worker shared/rules/…/rules/components/ResultUUIDRules.scala) (中文(简体) ).
Trivy报告许多CVE 在一个四重伞模式, 所以两个CVE
在同一个锁文件行 共享这四个键中的三个. 无 sourceId
他们崩溃成一个Codacy的结果. 适配器制作的每期
因此规定:
| 查找 | sourceId |
|---|---|
| 脆弱性 | VulnerabilityID (简历) |
| 秘诀 | 三维的 RuleID |
| 恶意包件 | OSV咨询编号MAL-…(中文(简体) ) |
src/metadata.ts 套装 needsSourceIdUpload: true,这就是为什么
upload 包括 v2 有效载荷中的字段( mirroring)
needs_source_id_upload 在Go CLI的Trivy插件列表中). 适配器无
旗帜完全省略了字段——在云引擎没有的地方发送
将会给同样的发现 一个不同的UUID.
扫描影响所发现的旗帜
脆弱性扫描通过 --detection-priority comprehensive匹配
codacy-trivy是因为 DetectionPriority: PriorityComprehensive它的报告更多
脆弱性——其中一些可能是假阳性因素——确实存在 gO 需要时
标准文献调查结果: 与三维0.70核对,a go.mod 没有它扫描
报告 零 stdlib 脆弱性(6个问题而不是26个小问题)
go 1.20 页:1 删除旗帜会默默地放下所有 Stdlib 查找和
启动... 死密码下的处理程序.
行号分辨率
三次报告 无行 对于脆弱的依赖,所以线被重建:
- 查查包裹
Locations[0].StartLine, (中文(简体) ), 由 PUL 键入 关键是 云发动机用.PkgID是稀有包 Trivy 报告的次要密钥 没有一个PLL. - 在错失或零时,扫描显示的上到下方的第一行 修剪后文本包含软件包名称.
- 仍然没有什么 释放一个 文件级别错误 (单位:千美元)
Line numbers not supported, (中文(简体) ), 被破译为每个文件一个),不是一号线上的问题. 自信的错 地点比诚实的"未知"更糟糕;codacy-trivy做相同的电话 通过mapIssuesWithoutLineNumber。 。 。 .
go.mod 标准库. Trivy报告标准文献脆弱性
名为软件包 stdlib从字面上从未出现在 go.mod三维
文档
使用最小值 toolchain 财务报告和审定财务报表 go 指令,但实际上总是
用途 toolchain 当它存在时 因此扫描返回 toolchain 线条即刻
当它看到一个, 并且只落回 go 读取后的指示行
整个文件。 这不能从Trivy的文档中得出——不要"简化"它.
修正版本
三维的 FixedVersion 是逗号分隔的 列表 每个固定版本
(单位:千美元)"1.9.0, 1.10.0, 2.0.1") (中文(简体) ). 信息只报告破坏最小的一条:
按语义分类,绝对大于已安装版本的最小候选人
版本。 当没有比这更大的候选人时(或者这个计划没有产生——鲁比的) ~>, (中文(简体) ),
马文修饰者,Trivy的生值通过 FixedVersion 实值
空信件读取 (no fix available)。 。 。 .
消息格式, 匹配云引擎逐字记录 :
Insecure dependency {pretty-printed PURL} ({CVE}: {title}) (update to {version})
Insecure dependency {pretty-printed PURL} ({CVE}: {title}) (no fix available)
比较使用 Go 的端口 golang.org/x/mod/semver (单位:千美元)compareSemver(没有)
npm semver:它接受两个组件版本,如 v1.2治疗
无法解析的版本比任何有效版本都低,因此无法解析
计划通过而不是被排序.
已知差异
两者都是故意的 docs/tech-debt.md。 。 。 .
- 修复版本命令.
codacy-trivy排序候选字符串 在此之前 添加v前缀,所以x/mod/semver把它们都看成无效的,比较一下 并回到一个词典上的结节——挑1.10.0结束1.9.0。我们按前缀的值排序,然后返回真正最小的值. - 包裹没有聚氨酯.
codacy-trivy完全摆脱了这些弱点. 我们保留它们,按名称解决线 并把包裹变成name@version因为默默地降低真正的脆弱程度比 与"云"不同的信息. - 密电短信. 我们把秘密的分类附在一起
(单位:千美元)
Possible hardcoded secret: {title} ({category}));云引擎停止在 标题. - 离线扫描.
codacy-trivy套装OfflineScan: true(其容器为: 我们没有,所以Trivy可能解决一些Java/Maven的依赖关系 网络和汇报这些生态系统的更准确的结果。 没有 在此更改: 使本地扫描的准确度降低, 以匹配空格限制 不会是错交易.
DB 更新管理
适配器读了Trivy的 metadata.json (单位:千美元) {cacheDir}/db/metadata.json改为:
确定脆弱性数据库是否仍然新鲜。 这个 NextUpdate 字段
告诉我们Trivy什么时候 期待下一次DB更新.
| 假设 | 行为 |
|---|---|
DB 新鲜 (now < NextUpdate(中文(简体) ) | --skip-db-update --skip-java-db-update 通过了——没有网络检查 |
DB stale (英语:now >= NextUpdate(中文(简体) ) | 常规更新的 Trevy 检查 |
| 第一运行( 无元数据) | Trivy 下载 DB (~ 40MB) |
| 容器模式 | 总是跳过 DB 更新( DB 预封) |
检测恶意包裹
通过查询检测已知的恶意软件包 OSV.dev 批次 API。 。 。 .
弱点扫描输出上的回扣——来自 --list-all-pkgs
与 OpenSSF 恶意软件包索引相参照(MAL-* 身份证.
- 涵盖14个生态系统:npm、PyPI、Go、RubyGems、coxes.io、Nuget、Maven、Packagist、Pub、Hex、CoanCenter、CocoaPods、SwiftURL、Conda
- 每个API呼叫使用10秒超时
- 在 API 失败( 网络出错, 超时) 上, 记录一个警告并跳过 —— 绝不屏蔽核心扫描
- 信件格式 :
Malicious package detected: {name}@{version} ({MAL-ID}). {summary}
容器图像模式
除了仓库扫描之外,适配器执行可选 containerImage 能力
(单位:千美元)src/image.ts),这支持了CLI的 container-scan 财务报告和审定财务报表 upload-sbom 命令。 描述符
广告上 scansContainerImages: true。 。 。 .
| 方法 | 召集 |
|---|---|
scan | trivy image --format json --cache-dir … [--skip-db-update --skip-java-db-update] --scanners vuln [--ignore-unfixed] --severity … --pkg-types … <image> |
generateSbom | trivy image --format cyclonedx|spdx-json --output <path> --cache-dir … <image> |
- 图像引用被重新验证
validateImageReference在它变成一个正弦之前 元素,即使跑者先验证它. --exit-code是故意的,这是故意的 没有 通过了。 发现计数来自解析的JSON,所以任何 非0出局是一个真正的失败——没有像 cli-v2 这样的 stderr heuristics 来决定 是否为 失败了.- 调查结果再利用
describeVulnerability(单位:千美元)src/findings.ts),同样的映射仓库扫描 用途:按严重程度分列的伞状图案,codacy-trivy'消息格式, CVE 为sourceId, (中文(简体) ),UNKNOWN掉下来了 地点是Trivy的Target(OS层或内相显示) 第1行. generateSbom只有在 Trivy 退出 0 时才成功 财务报告和审定财务报表 写入非空文件 .- 每个特丽薇产卵(两种模式)
TRIVY_SKIP_VERSION_CHECK=true和失败的分解 结束summarizeTrivyStderr(单位:千美元)src/trivy-errors.ts)而不是被回放:特瑞的"斯德"(Trivy's stderr is 一个日志流(INFO行,ANSI版本通知,然后是FATAL Go出错- wrap链),以及文本 在240个字符中, 物质会切换出错误, 这在事发前是用来切除的。 洞穴 而不是说--skip-version-check因为一个更古老的全球Trivy会拒绝这个旗帜. test/fixtures/image-scan.json从真实中修剪trivy image运行对手nginx:1.21.0-alpine,加上一个合成UNKNOWN找到和合成图书馆找到.CODACY_TRIVY_IMAGE_IT=1 pnpm test对真实登记册进行选入整合测试.
更新图案
# Re-fetch pattern metadata from the Codacy API
pnpm prefetch
# Commit the result
git add src/patterns.json
更新 Trivy 版本
- 更新
preferredVersion内src/metadata.ts - 如果发布格式改变, 更新下载 URL 模板
- 运行
pnpm test以验证兼容性
发展
pnpm build # Build with tsup
pnpm test # Run tests (requires trivy in PATH or auto-install)
维护者的注释
-
特里维跑道 两个单独的扫描引用:一个是脆弱性(
--scanners vuln --detection-priority comprehensive)和为机密(--scanners secret)) 在vuln扫描输出上发现恶意包回扣(没有额外引用). 扫描的运行取决于启用哪个伞模式 . -
脆弱性数据库在第一次运行时懒散地下载到
--cache-dir ~/.codacy/cache/trivy/. 首先需要上网。 DB 固态通过metadata.json→NextUpdate。 。 。 . -
三角扫描 目录,没有文件列表,也没有包含旗帜。 两次扫描都把寄存器根作为目标,所以
Target,结果被过滤到ctx.targetFiles后来 这个 秘密扫描 也通过--skip-dirs对于每个没有目标文件的目录( )src/scan-scope.ts, (中文(简体) ),computeSkipDirs) (中文(简体) ). 这是没有损失的,因为一个秘密 被报告在它的文件。 在此之前,分析一个文件 走了整个树两次,node_modules包括,在一个大型仓库上花费了几分钟时间。 跑步有两起- 脆弱性扫描从未被检查过. 其发现取决于其他目录中的文件. 纱线工作室的成员
package.json文件决定yarn.lock条目是 dev- only, 所以跳过packages/使Trivy报告依赖性的脆弱性. - 当一个本地人出现时, 便不打探
trivy.yaml正在使用中. 命令行--skip-dirs替换 {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}这个配置skip-dirs而不是加入,所以用户的排除会停止应用.
如果跳过列表不符合Windows命令行,扫描也会被取消.
- 脆弱性扫描从未被检查过. 其发现取决于其他目录中的文件. 纱线工作室的成员
-
脆弱性扫描(以及重新使用其软件包清单的恶意包装检查)是 跳过 当每个目标文件都有源代码或文档扩展名时(
needsVulnScan) (中文(简体) ). 这份清单是一份有意拒绝的名单:其中缺少的扩展只花费了速度,而在允许名单中被遗忘的明显名称则会默默地放弃发现。 永远不要添加数据格式( N).json, (中文(简体) ),.yaml, (中文(简体) ),.toml, (中文(简体) ),.xml, (中文(简体) ),.lock, (中文(简体) ),.txt对它. -
Target改为在匹配前先向前划ctx.targetFiles,因此一个Windows风格的路径永远无法默默地匹配任何事物. -
二进制从 GitHub 版本下载为
.tar.gz存档 . -
脆弱性严重性(CRITICAL/HIGH/MEDIUM/LOW)与相应的总括图样相映射.
-
信件格式、行解析度和
sourceId这些都是对等的关键——见 与codacy-trivy在接触他们之前. -
无法解决线条的弱点变成文件级别
AnalysisError(单位:千美元)kind: "LineNumbersNotSupported"),每个文件一个,而不是1号线的一期. -
恶意包检测使用OSV.dev批量API. 如果失败,它确是优雅的.
-
配置文件: 检查
trivy.yaml在还原根.