在 Debian 上构建覆盖依赖、代码与运行时的安全扫描流水线
一、方案总览与工具选型
- 建议采用分层扫描,覆盖应用全生命周期:
- 依赖层 SCA:使用 OWASP Dependency-Check(Jenkins 插件或 CLI),发现第三方组件漏洞。
- 代码层 SAST:使用 FindSecBugs(Maven/Gradle 插件),发现常见安全缺陷。
- 容器层:使用 Trivy,扫描镜像中的操作系统与语言依赖漏洞。
- 运行层 DAST:使用 OWASP ZAP,对测试环境进行动态应用安全测试。
- 在 Jenkins 中通过 Declarative Pipeline 编排上述阶段,并接入报告归档、阈值门禁与通知,实现“发现—阻断—修复—复扫”的闭环。
二、在 Debian 上安装与准备
- 安装 Trivy(Debian 软件源)
- 安装依赖与 GPG 公钥,添加 Aquasecurity 仓库,更新索引并安装:
- sudo apt-get update && sudo apt-get install -y wget apt-transport-https gnupg lsb-release
- wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
- echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
- sudo apt-get update && sudo apt-get install -y trivy
- 安装 OWASP ZAP(用于 DAST)
- 在 Debian 构建节点安装 Docker,运行 ZAP 官方镜像执行基线扫描(示例见下文 Pipeline)。
- Jenkins 插件
- 安装 OWASP Dependency-Check 插件(用于 CI/CD 集成与质量门禁)。
- 可选:Warnings Next Generation 插件,用于聚合多工具报告与趋势展示。
三、Jenkins Pipeline 示例
- 一个包含 SCA/SAST/容器/DAST 的示例(可按需裁剪):
- 关键点:
- Dependency-Check 启用阈值门禁(high/critical 阻断)。
- Trivy 输出 HTML/JSON 报告并归档。
- ZAP 对测试环境执行基线扫描,输出 JUnit 报告便于测试视图展示。
- Jenkinsfile
- pipeline {
agent any
environment {
TRIVY_CACHE_DIR = “${WORKSPACE}/.trivycache”
}
stages {
stage(‘Checkout’) {
steps { git branch: ‘main’, url: ‘https://your-repo.com/project.git’ }
}
stage(‘Build’) {
steps { sh ‘mvn clean package -DskipTests’ }
}
stage(‘SCA:Dependency-Check’) {
steps {
dependencyCheck arguments: ‘’’
–scan /target/*.jar
–format HTML --format JSON
–out reports/dependency-check
‘’',
// 质量门禁:发现 HIGH/CRITICAL 即失败
failedTotalHigh: ‘1’,
failedTotalCritical: ‘1’
}
post {
always {
archiveArtifacts artifacts: 'reports/dependency-check//.{html,json}‘, allowEmptyArchive: true
}
}
}
stage(‘SAST:FindSecBugs’) {
when { expression { fileExists(‘pom.xml’) } }
steps { sh ‘mvn org.owasp:findsecbugs-maven-plugin:check’ }
post {
always { junit ‘target/findsecbugs.xml’ }
}
}
stage(‘Container:Trivy Scan’) {
steps {
sh ‘’’
mkdir -p ${TRIVY_CACHE_DIR}
trivy image --cache-dir ${TRIVY_CACHE_DIR}
–format template --template “@contrib/html.tpl”
-o reports/trivy-report.html your-registry/your-app:${BUILD_NUMBER}
trivy image --cache-dir ${TRIVY_CACHE_DIR}
–format json -o reports/trivy-report.json your-registry/your-app:${BUILD_NUMBER}
‘’’
}
post {
always {
archiveArtifacts artifacts: 'reports/trivy-report.‘, allowEmptyArchive: true
}
}
}
stage(‘Deploy to Test’) {
steps {
// 示例:docker-compose 或 kubectl 部署到测试环境
sh ‘docker-compose -f docker-compose.test.yml up -d’
}
}
stage(‘DAST:OWASP ZAP’) {
steps {
sh ‘’’
docker run --rm --network=host
owasp/zap2docker-stable zap-baseline.py
-t http://localhost:8080 -r reports/zap-report.html
‘’’
}
post {
always { junit ‘reports/zap-report.xml’ }
}
}
}
post {
failure {
// 可接入邮件、Slack、企业微信等通知
echo ‘Security scan failed. Check the reports.’
}
}
}
- 说明
- Trivy 支持扫描 容器镜像、文件系统、K8s 配置、Git 仓库 等;在 CI 中建议启用 缓存目录 提升速度。
- Dependency-Check 支持 CLI 与 Jenkins 插件 两种集成方式,插件提供 质量门禁、趋势、报告归档 等能力。
四、结果处理与质量门禁
- 报告归档与展示
- 归档 HTML/JSON 报告(Dependency-Check、Trivy、ZAP),便于审计与留存。
- 使用 JUnit 报告让 ZAP/FindSecBugs 结果进入 Jenkins 测试视图与趋势面板。
- 阈值与阻断
- Dependency-Check 插件参数 failedTotalHigh/failedTotalCritical 控制构建是否失败,实现“严重问题阻断部署”。
- 通知与缺陷跟踪
- 构建失败可接入 邮件/Slack/Webhook 通知安全与开发团队;也可通过脚本解析 HTML 报告,自动创建 JIRA 工单进行修复跟踪与复扫验证。
五、网络与依赖连通性要求
- 运行 OWASP Dependency-Check 时,构建节点需能访问外部漏洞与元数据服务,例如:
- https://nvd.nist.gov、https://search.maven.org/、
https://ossindex.sonatype.org/、https://retirejs.github.io、
https://github.com/advisories、https://registry.npmjs.org、https://www.npmjs.com。
- 若被防火墙/代理拦截,需放行或配置代理,否则会出现“连接失败/获取组件报告失败”等问题。