名称: 依赖扫描 描述: 扫描项目依赖以查找已知漏洞、过时包和许可证合规问题。支持漏洞扫描(CVE检测)、SBOM生成、许可证合规检查以及跨多个生态系统(npm、pip、cargo、go、maven等)的供应链安全分析。触发关键词:依赖扫描、漏洞、CVE、Snyk、Dependabot、Renovate、npm audit、cargo audit、pip-audit、safety、过时包、SBOM、软件物料清单、许可证合规、供应链、安全公告、传递依赖、锁定文件。 允许工具: Read, Grep, Glob, Bash
依赖扫描
概述
此技能专注于识别项目依赖中的安全漏洞、过时包和许可证合规问题。涵盖多种包生态系统(JavaScript/Node.js、Python、Rust、Go、Ruby、Java、.NET、PHP),并提供修复指导、SBOM生成和供应链安全分析。
何时使用
- 扫描依赖以查找CVE和安全公告
- 检查过时或未维护的包
- 生成软件物料清单(SBOM)
- 验证许可证合规性和兼容性
- 分析供应链风险和传递依赖
- 设置自动化依赖更新(Dependabot、Renovate、Snyk)
- 调查来自GitHub/GitLab的安全警报
- 在生产部署前审计依赖
说明
1. 识别依赖
- 解析清单文件(package.json、requirements.txt等)
- 构建完整的依赖树
- 识别直接与传递依赖
- 检查幻影依赖
2. 漏洞扫描
- 检查CVE数据库
- 识别严重级别
- 查找受影响版本
- 检查可用补丁
3. 评估风险
- 评估可利用性
- 检查活跃利用
- 评估对应用的影响
- 优先修复
4. 报告和修复
- 记录所有发现
- 提供升级路径
- 建议替代方案
- 创建修复计划
5. 语言特定扫描
JavaScript/Node.js:
- 使用
npm audit或yarn audit进行漏洞扫描 - 检查
package-lock.json或yarn.lock以确保可重复性 - 考虑
npm-check-updates进行升级分析 - 使用
license-checker进行许可证合规
Python:
- 使用
pip-audit或safety进行CVE扫描 - 检查
requirements.txt和Pipfile.lock - 使用
pip-compile配合--generate-hashes以确保完整性 - 考虑
pipdeptree进行依赖可视化
Rust:
- 使用
cargo audit进行RustSec公告检查 - 检查
Cargo.lock以确保可重复构建 - 使用
cargo outdated进行版本分析 - 考虑
cargo deny进行策略执行
Go:
- 使用
govulncheck进行漏洞扫描 - 检查
go.sum以确保模块完整性 - 使用
go list -m all枚举依赖 - 考虑
nancy进行OSS Index检查
6. SBOM生成
生成软件物料清单以实现供应链透明:
CycloneDX:
npm install -g @cyclonedx/cyclonedx-npm && cyclonedx-npm --output-file sbom.jsoncargo install cargo-cyclonedx && cargo cyclonedxpip install cyclonedx-bom && cyclonedx-py
SPDX:
- 使用
syft(通用工具):syft . -o spdx-json > sbom.spdx.json - 使用
trivy用于容器镜像:trivy image --format spdx-json myimage:tag
目的: 跟踪所有组件以进行漏洞管理、许可证合规和事件响应。
7. 许可证合规检查
确保所有依赖具有兼容的许可证:
自动化工具:
- Node.js:
npx license-checker --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC' - Rust:
cargo deny check licenses - Python:
pip-licenses - 通用:
fossology、scancode-toolkit
许可证类别:
- 宽松许可证:MIT、Apache-2.0、BSD(通常安全)
- 弱Copyleft:MPL、LGPL(检查链接要求)
- 强Copyleft:GPL、AGPL(可能需要源代码披露)
- 未知/缺失:使用前调查
最佳实践
- 定期扫描: 自动化每日/每周扫描
- 锁定文件: 使用锁定文件以确保可重复性
- 最小依赖: 仅包含所需内容
- 验证来源: 使用受信任的注册表
- 审查更新: 不要盲目更新
- 许可证合规: 确保兼容许可证
- SBOM: 维护软件物料清单
示例
示例1:按生态系统的扫描命令
# JavaScript/Node.js
npm audit
npm audit --json > audit-report.json
npm outdated
npx npm-check-updates
# Python
pip-audit
safety check
pip list --outdated
pip-compile --generate-hashes
# Rust
cargo audit
cargo outdated
cargo deny check
# Go
go list -m all | nancy sleuth
govulncheck ./...
# Ruby
bundle audit
bundle outdated
# Java/Maven
mvn dependency-check:check
mvn versions:display-dependency-updates
# .NET
dotnet list package --vulnerable
dotnet list package --outdated
# PHP
composer audit
composer outdated
示例2:GitHub Actions依赖扫描
name: 依赖扫描
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: "0 6 * * *" # 每天凌晨6点
jobs:
dependency-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 运行Trivy漏洞扫描器
uses: aquasecurity/trivy-action@master
with:
scan-type: "fs"
scan-ref: "."
format: "sarif"
output: "trivy-results.sarif"
severity: "CRITICAL,HIGH"
- name: 上传Trivy扫描结果
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: "trivy-results.sarif"
- name: 设置Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
- name: 运行npm audit
run: |
npm ci
npm audit --audit-level=high
- name: 检查过时包
run: npm outdated || true
- name: 许可证检查
run: npx license-checker --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC'
snyk-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 运行Snyk检查漏洞
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
示例3:依赖分析报告模板
# 依赖安全报告
**生成日期:** 2024-01-15
**项目:** my-application
**总依赖:** 245(42直接,203传递)
## 摘要
| 严重级别 | 数量 | 状态 |
| -------- | ---- | ---------------- |
| 关键 | 2 | 需要行动 |
| 高 | 5 | 需要行动 |
| 中 | 12 | 建议审查 |
| 低 | 8 | 监控 |
## 关键漏洞
### CVE-2024-1234 - lodash中的远程代码执行
- **包:** lodash@4.17.20
- **严重级别:** 关键(CVSS 9.8)
- **受影响版本:** < 4.17.21
- **修复版本:** 4.17.21
- **路径:** my-app > express > lodash
- **描述:** 原型污染漏洞允许RCE
- **修复:** `npm update lodash`
### CVE-2024-5678 - sequelize中的SQL注入
- **包:** sequelize@6.28.0
- **严重级别:** 关键(CVSS 9.1)
- **受影响版本:** < 6.29.0
- **修复版本:** 6.29.0
- **路径:** my-app > sequelize
- **描述:** 通过原始查询方法导致的SQL注入
- **修复:** `npm update sequelize`
## 许可证合规
| 许可证 | 数量 | 合规性 |
| ------------ | ---- | ---------------- |
| MIT | 180 | 已批准 |
| Apache-2.0 | 45 | 已批准 |
| BSD-3-Clause | 15 | 已批准 |
| GPL-3.0 | 3 | 需要审查 |
| 未知 | 2 | 需要调查 |
## 建议
1. **立即行动:** 更新lodash和sequelize以修复关键漏洞
2. **短期:** 审查GPL许可依赖的兼容性
3. **长期:** 启用Dependabot/Renovate进行自动化更新
示例4:Renovate配置
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:base", ":semanticCommits", ":preserveSemverRanges"],
"schedule": ["before 6am on Monday"],
"vulnerabilityAlerts": {
"enabled": true,
"labels": ["security"]
},
"packageRules": [
{
"matchUpdateTypes": ["major"],
"labels": ["major-update"],
"automerge": false
},
{
"matchUpdateTypes": ["minor", "patch"],
"matchCurrentVersion": "!/^0/",
"automerge": true,
"automergeType": "pr",
"platformAutomerge": true
},
{
"matchPackagePatterns": ["^@types/"],
"automerge": true,
"groupName": "类型定义"
},
{
"matchDepTypes": ["devDependencies"],
"automerge": true,
"groupName": "开发依赖"
}
],
"prConcurrentLimit": 5,
"prHourlyLimit": 2
}