前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >甲方安全建设-DevSecOps SCA分析

甲方安全建设-DevSecOps SCA分析

作者头像
Jumbo
发布2024-05-21 20:22:52
930
发布2024-05-21 20:22:52
举报
文章被收录于专栏:中国白客联盟中国白客联盟

前言

前文讲到了利用DependencyTrack对代码进行SCA分析,但是当时是通过手动上传BOM并在UI上进行展示查阅,对于安全左移DevSecOps来说,必然需要在应用编码、构建阶段就对其进行安全分析,如果发现安全风险则禁止构建和部署。编码阶段可以使用类似IDEA插件来实现,本文将通过CI流水线来实现SCA分析。

Gitlab流水线介绍

本文不去讲解如何搭建Gitlab和对应的CI,只讲如何实现SCA的流水线。Gitlab的CI流水线可以在项目中创建一个.gitlab-ci.yml的文件,在里面控制好相应的步骤,如build、deploy,然后分别设置每个步骤都所需步骤。通过dependencies可以设置流水线所需要的前置步骤,来完成必要的顺序执行。其中详细步骤中,script可以使用shell代码,当不想流水线继续时,可以使用exit 1返回非0的状态码,这样流水线就会结束且不会往后执行。

根据https://docs.dependencytrack.org/usage/cicd/文档,可以在上传bom时自动创建项目,省去创建项目的前置步骤。笔者没有发现DependencyTrack有手动分析bom的API接口,看起来是上传bom后自动分析的,因此需要在流水线中上传bom后等待一点时间,给其分析的时间,bom越大分析时间越长,使用DependencyTrack API时,需要注意赋予BOM_UPLOAD、PROJECT_CREATION_UPLOAD、VULNERABILITY_ANALYSIS权限。

测试

首先以python项目为例,使用cyclonedx-bom完成bom的生成。然后在requirements.txt存放一个不存在漏洞的软件包:

这时候触发gitlab流水线是没问题的:

但是如果存放存在漏洞的软件包时,流水线停在了sca,不再往build执行:

这样可以杜绝漏洞风险包上线。

附 流水线

代码语言:javascript
复制
stages:            
  - sbom            
  - sca            
  - build            
           
variables:            
  DT_API_KEY: keykeykeyjjjjjjj            
  DT_SERVER_URL: http://www.chinabaiker.com:8081            
           
# 生成 SBOM 的阶段            
generate_sbom:            
  stage: sbom            
  image: python:3.9            
  before_script:            
    - pip install cyclonedx-bom -i https://pypi.tuna.tsinghua.edu.cn/simple/            
  script:            
    - cyclonedx-py requirements -o bom.xml            
  artifacts:            
    paths:            
      - bom.xml            
           
# 进行 SCA 扫描的阶段            
sca_scan:            
  stage: sca            
  image: ubuntu:latest            
  dependencies:            
    - generate_sbom            
  script:            
    - apt-get update -y            
    - apt-get install jq curl -y            
    - echo 111111            
    - echo ${DT_SERVER_URL}            
    - >            
      UPLOAD_RESPONSE=$(curl -s -X POST "${DT_SERVER_URL}/api/v1/bom" \            
        -H "Content-Type: multipart/form-data" \            
        -H "X-Api-Key: ${DT_API_KEY}" \            
        -F "projectName=${CI_PROJECT_NAME}" \            
        -F "projectVersion=${CI_COMMIT_REF_NAME}" \            
        -F "bom=@bom.xml"\            
        -F "autoCreate=true")            
    - echo 111111            
    - echo ${DT_SERVER_URL}            
    - echo ${UPLOAD_RESPONSE}            
    - >            
      PROJECT_ID=$(curl "${DT_SERVER_URL}/api/v1/project/lookup?name=${CI_PROJECT_NAME}&version=${CI_COMMIT_REF_NAME}" \            
        -H "Content-Type: application/json" \            
        -H "X-Api-Key: ${DT_API_KEY}"  | jq -r '.uuid')            
    - echo ${PROJECT_ID}            
    - sleep 30  # 等待扫描结果生成            
    - |            
      RESULT=$(curl "${DT_SERVER_URL}/api/v1/finding/project/${PROJECT_ID}"   -H "Content-Type: application/json" -H "X-Api-Key: ${DT_API_KEY}")            
      HIGH_CRITICAL_RESULT=$(echo $RESULT | jq '[.[] | select(.vulnerability.severity == "HIGH" or .vulnerability.severity == "CRITICAL")]')            
      echo ${HIGH_CRITICAL_RESULT}            
      HIGH_CRITICAL_COUNT=$(echo $RESULT | jq '[.[] | select(.vulnerability.severity == "HIGH" or .vulnerability.severity == "CRITICAL")] | length')            
      if [ "$HIGH_CRITICAL_COUNT" -gt 0 ]; then            
        echo "High severity vulnerabilities found: $HIGH_COUNT"            
        exit 1            
      else            
        echo "No high severity vulnerabilities found."            
      fi            
           
           
  allow_failure: false            
  only:            
    - branches            
           
# 构建阶段            
build:            
  stage: build            
  script:            
    - echo "Building project..."            
  dependencies:            
    - sca_scan            
  only:            
    - branches            
           

总结

本文讲解了利用DependencyTrack完成Devsecops中的SCA分析,保证了代码安全。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 中国白客联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • Gitlab流水线介绍
      • 总结
      相关产品与服务
      Elasticsearch Service
      腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档