温馨提示×

Jenkins在Debian上如何进行安全漏洞扫描

小樊
35
2025-12-07 00:50:02
栏目: 网络安全

在 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.govhttps://search.maven.org/https://ossindex.sonatype.org/https://retirejs.github.iohttps://github.com/advisorieshttps://registry.npmjs.orghttps://www.npmjs.com
    • 若被防火墙/代理拦截,需放行或配置代理,否则会出现“连接失败/获取组件报告失败”等问题。

0