基于开源工具实现软件成分分析SCA
字数 1928 2025-08-27 12:33:43

基于开源工具实现软件成分分析(SCA)教学文档

1. SCA概述

1.1 什么是SCA

SCA(Software Composition Analysis)即软件成分分析,通过分析源码提取项目依赖的第三方组件及其版本、许可证等信息,生成软件物料清单(SBOM, Software Bill-of-Materials)。根据SBOM可以:

  • 分析项目是否使用了存在已知漏洞的组件
  • 当其他组件爆出漏洞时可快速排查受影响项目
  • 管理软件供应链安全

1.2 SCA实现思路

  1. 多语言支持:必须支持Java、GO、Python、NodeJs等主流语言
  2. 文件分析:通过分析各语言的依赖描述文件提取组件信息
    • Java: pom.xml
    • Go: go.mod
    • Python: requirements.txt
    • NodeJs: yarn.lock
  3. DevOps集成:能够柔和地接入现有DevOps工具链
  4. 漏洞库来源:需要整合多个漏洞数据库(OSSIndex、NVD、Npm、Cpe等)

2. 开源工具介绍

2.1 CycloneDX

OWASP基金会下的轻量级软件物料清单标准工具:

  • 生成JSON或XML格式的软件成分清单
  • 支持大部分常见语言
  • 提供多种工具及lib库

2.2 Dependency-Track

OWASP基金会下的风险分析工具:

  • 接收SBOM文件自动分析项目风险
  • 支持下载漏洞库
  • 提供丰富的API
  • 可简单嵌入CI/CD流程

3. 环境搭建

3.1 Dependency-Track部署

使用Docker方式部署,配置docker-compose.yml:

version: '3.7'
volumes:
  dependency-track:
  postgres-volume:
services:
  db:
    image: postgres
    environment:
      - POSTGRES_USER=dtrack_postgres_user
      - POSTGRES_PASSWORD=dtrack_postgres_passwd
      - POSTGRES_DB=dtrack
    volumes:
      - 'postgres-volume:/var/lib/postgresql/data'
    restart: always
  dtrack-apiserver:
    image: dependencytrack/apiserver
    depends_on:
      - db
    environment:
      - ALPINE_DATABASE_MODE=external
      - ALPINE_DATABASE_URL=jdbc:postgresql://db:5432/dtrack
      - ALPINE_DATABASE_DRIVER=org.postgresql.Driver
      - ALPINE_DATABASE_USERNAME=dtrack_postgres_user
      - ALPINE_DATABASE_PASSWORD=dtrack_postgres_passwd
    deploy:
      resources:
        limits:
          memory: 12288m
        reservations:
          memory: 8192m
    restart_policy:
      condition: on-failure
    ports:
      - '8288:8080'
    volumes:
      - 'dependency-track:/data'
    restart: unless-stopped
  dtrack-frontend:
    image: dependencytrack/frontend
    depends_on:
      - dtrack-apiserver
    environment:
      - API_BASE_URL=http://10.1.1.70:8288
    ports:
      - "8188:8080"
    restart: unless-stopped

部署完成后:

  1. 访问http://your-ip:8188
  2. 使用默认账号admin/admin登录
  3. 初次运行需等待漏洞库下载完成

4. 软件成分分析实践

4.1 Java项目分析

  1. 工具安装:使用cyclonedx-maven-plugin
  2. 示例项目cachecloud
  3. 生成SBOM
    mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
    
  4. SBOM内容:包含组件名称、版本、purl、描述、licenses等信息
  5. 上传分析
    • 在Dependency-Track中创建项目
    • 上传生成的bom.xml文件

4.2 Go项目分析

  1. 工具安装:使用cyclonedx-gomod
    go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latest
    
  2. 示例项目goploy
  3. 生成SBOM
    cyclonedx-gomod mod -json -output goploy.bom.json goploy
    
  4. 上传分析:将生成的goploy.bom.json上传到Dependency-Track

4.3 Python项目分析

  1. 工具安装:使用cyclonedx-python
    pip install cyclonedx-bom
    
  2. 示例项目Mobile-Security-Framework-MobSF
  3. 生成SBOM
    cyclonedx-bom -r -i requirements.txt --format=json -o mobsf.bom.json
    
  4. 上传分析:将生成的mobsf.bom.json上传到Dependency-Track

5. 集成到DevOps流程

5.1 Jenkins插件方式

  1. 安装插件Dependency-Track插件
  2. 配置API Key
    • 在Dependency-Track中创建Team并记录API Key
    • 在Jenkins中添加Secret text类型的凭据
  3. 配置插件
    • 在Manage Jenkins -> Configure System中配置Dependency-Track URL和API Key
  4. 项目配置
    • 在Source Code Management中添加Git仓库
    • 在Build中添加生成SBOM的命令
    • 在Post-build Actions中添加"Publish BOM to Dependency-Track"

5.2 Pipeline脚本方式

pipeline {
    agent any
    stages {
        stage('Start') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Build') {
            steps {
                git 'https://github.com/sohutv/cachecloud.git'
                sh "mvn -DskipTests=true clean package"
            }
        }
        stage('Generating SBOM with Cyclonedx') {
            steps {
                sh 'mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom'
            }
        }
        stage('dependencyTrackPublisher') {
            steps {
                withCredentials([string(credentialsId: 'dtrack', variable: 'API_KEY')]) {
                    dependencyTrackPublisher artifact: 'target/bom.xml', 
                                          projectName: 'my-project', 
                                          projectVersion: '12', 
                                          autoCreateProjects: true, 
                                          dependencyTrackApiKey: API_KEY, 
                                          synchronous: false
                }
            }
        }
    }
}

6. 最终效果

通过CycloneDX + Dependency-Track实现:

  1. 分析项目中第三方组件漏洞
  2. 快速定位受影响范围
  3. 推动业务线进行漏洞修复
  4. 实现软件供应链安全管理

7. 参考资源

  1. CycloneDX Maven插件: https://github.com/CycloneDX/cyclonedx-maven-plugin
  2. CycloneDX Go插件: https://github.com/CycloneDX/cyclonedx-gomod
  3. CycloneDX Python插件: https://github.com/CycloneDX/cyclonedx-python
  4. Dependency-Track Jenkins插件: https://plugins.jenkins.io/dependency-track/
  5. Pipeline参数文档: https://www.jenkins.io/doc/pipeline/steps/dependency-track/
基于开源工具实现软件成分分析(SCA)教学文档 1. SCA概述 1.1 什么是SCA SCA(Software Composition Analysis)即软件成分分析,通过分析源码提取项目依赖的第三方组件及其版本、许可证等信息,生成软件物料清单(SBOM, Software Bill-of-Materials)。根据SBOM可以: 分析项目是否使用了存在已知漏洞的组件 当其他组件爆出漏洞时可快速排查受影响项目 管理软件供应链安全 1.2 SCA实现思路 多语言支持 :必须支持Java、GO、Python、NodeJs等主流语言 文件分析 :通过分析各语言的依赖描述文件提取组件信息 Java: pom.xml Go: go.mod Python: requirements.txt NodeJs: yarn.lock DevOps集成 :能够柔和地接入现有DevOps工具链 漏洞库来源 :需要整合多个漏洞数据库(OSSIndex、NVD、Npm、Cpe等) 2. 开源工具介绍 2.1 CycloneDX OWASP基金会下的轻量级软件物料清单标准工具: 生成JSON或XML格式的软件成分清单 支持大部分常见语言 提供多种工具及lib库 2.2 Dependency-Track OWASP基金会下的风险分析工具: 接收SBOM文件自动分析项目风险 支持下载漏洞库 提供丰富的API 可简单嵌入CI/CD流程 3. 环境搭建 3.1 Dependency-Track部署 使用Docker方式部署,配置docker-compose.yml: 部署完成后: 访问 http://your-ip:8188 使用默认账号 admin/admin 登录 初次运行需等待漏洞库下载完成 4. 软件成分分析实践 4.1 Java项目分析 工具安装 :使用 cyclonedx-maven-plugin 示例项目 : cachecloud 生成SBOM : SBOM内容 :包含组件名称、版本、purl、描述、licenses等信息 上传分析 : 在Dependency-Track中创建项目 上传生成的bom.xml文件 4.2 Go项目分析 工具安装 :使用 cyclonedx-gomod 示例项目 : goploy 生成SBOM : 上传分析 :将生成的goploy.bom.json上传到Dependency-Track 4.3 Python项目分析 工具安装 :使用 cyclonedx-python 示例项目 : Mobile-Security-Framework-MobSF 生成SBOM : 上传分析 :将生成的mobsf.bom.json上传到Dependency-Track 5. 集成到DevOps流程 5.1 Jenkins插件方式 安装插件 : Dependency-Track插件 配置API Key : 在Dependency-Track中创建Team并记录API Key 在Jenkins中添加Secret text类型的凭据 配置插件 : 在Manage Jenkins -> Configure System中配置Dependency-Track URL和API Key 项目配置 : 在Source Code Management中添加Git仓库 在Build中添加生成SBOM的命令 在Post-build Actions中添加"Publish BOM to Dependency-Track" 5.2 Pipeline脚本方式 6. 最终效果 通过CycloneDX + Dependency-Track实现: 分析项目中第三方组件漏洞 快速定位受影响范围 推动业务线进行漏洞修复 实现软件供应链安全管理 7. 参考资源 CycloneDX Maven插件: https://github.com/CycloneDX/cyclonedx-maven-plugin CycloneDX Go插件: https://github.com/CycloneDX/cyclonedx-gomod CycloneDX Python插件: https://github.com/CycloneDX/cyclonedx-python Dependency-Track Jenkins插件: https://plugins.jenkins.io/dependency-track/ Pipeline参数文档: https://www.jenkins.io/doc/pipeline/steps/dependency-track/