现代软件开发中,开源组件已占据代码库的 70% 以上,每一个引入的依赖都是"你没写但仍需负责的代码"。Log4Shell、xz-utils 后门等事件证明,一个存在漏洞的传递依赖包可以在代码库中潜伏数月,直到攻击者先发现它。软件成分分析(SCA)的核心目标,就是在代码交付前持续、自动化地识别这些风险。
本教程以 Mend CLI 为例,从环境准备到 CI/CD 集成,完整演示一次开源组件安全扫描的实操流程。
一、Mend CLI 环境准备
1.1 前置条件
运行 Mend CLI SCA 扫描前,需满足以下条件:
- 下载并安装 Mend CLI(支持 Linux / macOS / Windows)
- 完成 Mend CLI 登录认证
- 确保 Mend CLI 对应用源代码文件系统有读取权限
- 以管理员身份运行 Mend CLI
重要说明:Mend SCA 不会将完整源代码上传到云端,仅存储理解漏洞可达性所需的最少信息,确保代码隐私安全。
1.2 支持的包管理器生态
Mend CLI 原生支持 30+ 种包管理器,覆盖主流开发语言:
- Java:Maven、Gradle
- JavaScript/TypeScript:npm、Yarn
- Python:pip、Conda、uv(2026 年 5 月新增)
- .NET:NuGet
- Go:Go Modules
- Ruby:RubyGems
- Rust:Cargo
Mend CLI 会自动为每种语言确定最优解析参数,无需手动配置解析规则。
1.3 三种扫描方式对比
Mend SCA 提供三种扫描机制,适用于不同场景:
| 扫描方式 | 定位 | 适用场景 |
|---|---|---|
| Mend CLI | 新一代推荐扫描器 | CI/CD 管道、桌面扫描、同时支持 SCA + SAST + 容器扫描 |
| Unified Agent | 传统扫描器 | 已集成到遗留 CI/CD 流程的项目 |
| Repository Integration | 仓库级集成 | 持续监测、自动 PR、无需修改 CI/CD 配置 |
推荐选择:新项目直接使用 Mend CLI;已有 Unified Agent 集成的项目可平滑迁移;需要持续监测且不想改动 CI/CD 的场景可用 Repository Integration。
二、执行首次 SCA 扫描
2.1 触发扫描
进入项目根目录,执行以下命令触发 SCA 扫描:
bash
mend dep
注:
mend dep是当前推荐命令(dependencies的缩写)。旧版mend sca命令仍向后兼容,但建议尽早切换。
2.2 扫描执行流程
Mend CLI 在显示扫描结果前,会经历两个默认步骤:
| 步骤 | 说明 |
|---|---|
| Scanning | Mend CLI 扫描目录中的 SCA 漏洞和恶意包 |
| Retrieving | 发现漏洞后,Mend CLI 向 Mend Application 获取漏洞详情,为扫描摘要做准备 |
扫描过程中,控制台会实时显示进度。如果配置了 Mend AI 扫描,SCA 扫描结束后会显示"Mend AI scan running"条目。
2.3 提升扫描性能的环境变量
可选设置环境变量 MEND_PULL_GIT_HISTORY 为 true,可改善 Mend AI 扫描性能和缓存利用率:
bash
export MEND_PULL_GIT_HISTORY=true
mend dep
三、解读扫描结果
3.1 结果呈现方式
Mend CLI 扫描结果以结构化表格形式直接在控制台输出,同时在 Mend Application 平台提供可视化 Dashboard。关键信息包括:
- 漏洞组件名称及版本:识别存在 CVE 或 MSC(恶意包)的组件
- 严重性评级:基于 CVSS 4.0 评分,标注 Critical / High / Medium / Low
- EPSS 评分:显示漏洞在现实世界中被利用的概率
- 可达性状态:标记漏洞函数是否被应用代码实际调用
- 依赖类型:标明是直接依赖还是传递依赖,以及根库信息
- 策略违规:标注违反组织安全策略的组件
3.2 优先级排序逻辑
Mend SCA 的优先级排序结合三个维度,帮助安全团队从海量告警中聚焦真正需要处理的风险:
- CVSS 4.0 严重性:评估漏洞的技术影响程度
- EPSS 利用概率:衡量漏洞在野外被实际利用的可能性
- 可达性分析:追踪应用代码到漏洞函数的调用路径,不可达漏洞被标记降级
三者交叉后,一个 CVSS 9.0 但不可达且 EPSS 极低的漏洞,优先级会显著低于一个 CVSS 7.0 但可达且 EPSS 较高的漏洞。
3.3 自动标签关联
Mend AppSec Platform 会为扫描和项目自动分配 sourceUrl 标签,适用于 Unified Agent、Mend CLI 和仓库集成扫描。这对于将不同扫描绑定到同一项目特别有用。
扫描的 Git 仓库还会自动获得 branch、commit 和 sourceUrl 标签。例外:当本地 Git 仓库处于 detached HEAD 状态时,不会分配 branch 标签。
四、集成到 CI/CD 管道
4.1 典型集成工作流
Mend SCA 在 CI/CD 中的典型集成流程覆盖完整 SDLC:
编码阶段(IDE) :开发者在 IDE 中引入新依赖时,Mend 插件即时检查组件漏洞状态和许可证信息
提交阶段(SCM Hook) :代码提交到 GitHub / GitLab / Bitbucket 时,Repository Integration 自动触发扫描
构建阶段(CI/CD):Mend CLI 在管道中执行全面扫描(SCA + SAST + 容器镜像)
发布阶段(Policy Gate) :根据预定义策略,Mend 放行、告警或阻断构建。例如阻止包含 Critical 级可达漏洞的版本进入制品仓库
持续监测:即使代码无变更,新漏洞披露时 Mend 会重新评估已有项目风险并通知安全团队
4.2 策略门禁配置建议
在 CI/CD 中集成 SCA 时,策略门禁配置直接影响团队接受度:
- 严重性阈值:建议初始设置阻断 Critical,告警 High,忽略 Low/Medium
- 宽限期:为已有依赖中新发现的 Critical CVE 设置 14 天修复宽限期
- 例外管理:建立误报或可接受风险的例外流程,设置例外有效期
- 可达性过滤:启用可达性分析,不可达漏洞不阻断构建
实践提示:如果每次扫描都因任何 Medium 级别发现而失败构建,工程师会在数周内绕过或静默该检查。先定义策略再自动化。
五、常见问题 Q&A
Q1:Mend CLI 和旧版 Unified Agent 有什么区别?
Mend CLI 是新一代扫描器,自动为每种语言确定最优解析参数,同时原生支持 SCA + SAST + 容器扫描,无需单独配置。Unified Agent 是传统扫描器,适合已集成到遗留流程的项目。新项目建议直接使用 Mend CLI。
Q2:Mend SCA 扫描会上传源代码吗?
不会。Mend SCA 仅存储理解漏洞可达性所需的最少信息,不会上传完整源代码到云端。
Q3:可达性分析支持哪些语言?
可达性分析对 Java 生态的支持最为成熟。对其他语言的覆盖深度可能有所不同,建议在正式使用前针对目标语言生态进行测试验证。
Q4:如何处理自动修复引入的兼容性问题?
自动升级依赖版本时可能在特定构建环境中引入兼容性问题。建议对关键项目设置人工审核门禁,对于可能引入 Breaking Change 的升级保留人工审核步骤,已知安全的版本升级可配置自动合并。
Q5:Mend SCA 能否检测恶意包?
可以。Mend Supply Chain Defender 在包引入阶段检测可疑的恶意行为,包括名称混淆(typosquatting)、依赖劫持、投毒等攻击方式,阻止恶意包进入代码库和制品仓库。
Q6:Mend CLI 支持哪些 SBOM 格式?
支持 CycloneDX 和 SPDX 两种国际标准格式。2026 年 6 月新增源文件级细粒度 SBOM 导出,可包含未匹配源文件、CVE、许可证和版权信息,满足 CRA 和 EO 14028 的合规要求。