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

甲方安全建设-DevSecOps SCA分析

作者头像
Jumbo
发布于 2024-05-21 12:22:52
发布于 2024-05-21 12:22:52
22200
代码可运行
举报
文章被收录于专栏:中国白客联盟中国白客联盟
运行总次数:0
代码可运行

前言

前文讲到了利用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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于GitLabCI的Python交付流水线实现
首先,我们需要在github中找一个Python项目,如果具有编码能力也可以写一个简单web app。以下项目是一个Flask项目,简单的web应用。这个项目之前使用的是Jenkins完成的持续交付,现在改造成GitlabCI完成。
DevOps云学堂
2020/06/15
1.2K0
前端微服务架构下CI/CD构建单镜像落地方案
之前在团队中分享了qiankun微服务的单镜像的部署方案, 详细解析了单镜像部署的好处,但由于单镜像部署在构建时比较复杂,如果在上线时人工地去构建镜像,将是一个非常复杂,且容易出错的事情。所以本篇文章会介绍一种使用GitLab CI/CD来构建一个微服务单镜像的流水线,并应用于生产, 我称之为 aio 方案 all in one 。五个应用构建到一个docker镜像中。 ​
拿我格子衫来
2022/01/24
7800
前端微服务架构下CI/CD构建单镜像落地方案
CI/CD中SBOM的实用方法第一部分 — CycloneDX
在本文中,我将介绍在CI/CD流水线中实现SBOM生成的实用用例及其益处。本文涵盖了SBOM的概念、其优势、流行格式以及Java和Python项目的实际实现。
云云众生s
2024/03/28
1.4K0
CI/CD中SBOM的实用方法第一部分 — CycloneDX
OWASP Dependency Track — Kubernetes上的组件分析平台
在快节奏的软件开发世界中,有效管理依赖关系对构建安全可靠的应用程序至关重要。在开源软件安全领域获得认可的一款工具是 OWASP Dependency-Track。本文旨在全面介绍 Dependency Track,深入了解其功能、目的以及在 Kubernetes 上部署的方法。
云云众生s
2024/03/28
2630
OWASP Dependency Track — Kubernetes上的组件分析平台
.gitlab-ci.yml关键词完整解析(二)
上次我们介绍了 script, image, artifacts ,tags, cache ,stage ,when ,only/except。 学习了这几个关键词的用法,就不难配置一条简单的流水线。但如果要遇到更加复杂的业务场景,如微服务,流水线继承,多流水线,等复杂场景,那么只靠以上的几个用法是无法实现的。下面我就再给大家讲解其他几个更加复杂的关键词。 这次讲解的关键词有 before_script, after_script, dependencies, environment, extends, include, interruptible ,parallel, rules ,trigger, services
拿我格子衫来
2022/01/23
1.8K0
使用GitLabCI模板库的流水线优化实践
作业分为Build、test、codeanalysis、artifactory、deploy部分,在每个作业中配置了rules功能开关,由变量控制最终作业的运行。
DevOps云学堂
2020/06/02
2.1K0
使用GitLabCI模板库的流水线优化实践
DevSecOps集成CI/CD全介绍
在了解 DevSecOps 之前,我们先来了解一下 DevOps 是什么。DevOps 是文化理念、实践和工具的结合,可提高组织高速交付应用程序和服务的能力。
IT运维技术圈
2022/12/26
2.2K0
DevSecOps集成CI/CD全介绍
CI/CD中SBOM的实用方法第二部分—部署Dependency-Track
本文介绍如何利用OWASP的Dependency-Track存储和分析软件清单,以识别开源组件中的安全漏洞。它指导如何在生产环境中部署Dependency-Track,并总结这个平台的优缺点。
云云众生s
2024/03/28
1K0
CI/CD中SBOM的实用方法第二部分—部署Dependency-Track
基于GitLab实现端到端DevOps流水线实践
创建issue --> 创建特性分支 --> 特性分支提交流水线 --> 合并分支流水线 --> 发布分支流水线
DevOps云学堂
2020/05/27
1.4K0
SCA技术进阶系列(一):SBOM应用实践初探
现代软件都是组装的而非纯自研。随着开源组件在数字化应用中的使用比例越来越高,混源开发已成为当前业内主流开发方式。开源组件的引入虽然加快了软件开发效率,但同时将开源安全问题引入了整个软件供应链。软件组成成分的透明性成为软件供应链安全保障的基础,SBOM(Software Bill of Materials,软件物料清单)作为软件供应链安全治理的重要抓手,其在行业的应用实践速度明显加快。
OpenSCA社区
2023/02/13
1.3K0
GitLabCI/CD: 内置仓库轻松实现代码基线与制品关联
GitLab仓库可以充当各种常见的包管理器的私有或公共仓库中心。可以发布和共享包,这些包可以很容易地作为下游项目的依赖项使用。
DevOps云学堂
2021/10/18
1.2K0
GitLabCI/CD: 内置仓库轻松实现代码基线与制品关联
.gitlab-ci.yml 配置文件详解
git工具文档说明:https://docs.gitlab.com/ee/ci/yaml/gitlab_ci_yaml.html
程序媛夏天
2024/01/18
1.5K0
SonarQube社区版分支插件V1.3.0更新
下载release插件,现在最新版本是1.3.0, 下载后将jar包放到extensions/plugins和lib/common目录中。注意如果使用的其他用户操作需要授权插件给sonarqube权限。此时重启即可。
DevOps云学堂
2020/05/08
3.1K22
SonarQube社区版分支插件V1.3.0更新
GitLab 冷知识:试用 git push 创建 Merge Request
在使用 GitLab 时,创建 Merge Request 是最常用的功能之一,每天有大量的 Merge Request 被 Create、Review、Approve 和 Merge,尽管 GitLab 的产品经理和 UX 设计师们已经尽力的将 UI 设计的简洁易懂好操作,并提供了一些诸如使用 Email、API、Web IDE、VS Code 插件等创建 Merge Request 的功能,但这些操作都逃不过:create new branch ==> git push ==> create merge request 这三步。
郭旭东
2022/12/05
4.8K0
GitLab 冷知识:试用 git push 创建 Merge Request
将Trivy与Gitlab Pipeline集成实现镜像扫描
Trivy是由aquasecurity开发的一个简单的漏洞扫描器,用于扫描容器和其他工件。它主要用于静态分析。适合与流水线的CI阶段集成。Aquasecurity以构建针对容器和管道安全的安全工具而广为人知。Trivy在也可以在github中使用。
DevOps云学堂
2022/04/07
2K0
将Trivy与Gitlab Pipeline集成实现镜像扫描
Gitlab CI/CD 实践六:统一管理 protocol buffer,API 大仓设计与实现
目前公司采用 protocol buffer 作为 IDL,虽然可以根据 API 定义,轻松生成客户端和服务端的代码。但是对于跨项目的接口,会增加项目之间的耦合性。例如A服务对外提供了一个接口,B服务去调用。那么就需要根据A服务的proto文件,生成客户端代码,并拷贝给B。如果联调期间,A服务改动了该接口,还需重复前面的步骤,非常繁琐。
Yuyy
2022/09/08
1.8K0
【手把手实战】花半天时间,轻松打造企业级前端CI/CD工作流
CI/CD 是 Continuous Intergration/Continuous Deploy 的简称,翻译过来就是持续集成/持续部署。CD 也会被解释为持续交付(Continuous Delivery),但是对于软件工程师而言,最直接接触的应该是持续部署。
用户3806669
2021/04/15
1.8K0
【手把手实战】花半天时间,轻松打造企业级前端CI/CD工作流
【产品那些事】什么是软件成分分析(SCA)?
在现代软件开发环境中,开发团队经常会依赖于开源的第三方组件来节省时间和提高效率。这些组件本身是由开源社区(Github、Gitee)贡献者来开发,然而,这也带来了一些潜在的安全风险,特别是涉及到供应链安全(这些组件的开发者队安全队安全方面的了解几乎为0、恶意的供应链投毒风险)和第三方组件的质量问题(存在抄袭、开源许可证合规风险)。
没事就要多学习
2024/09/09
1.1K0
【产品那些事】什么是软件成分分析(SCA)?
gitlab .gitlab-ci.yml 文件赏析
前端 ci https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/ci/frontend.gitlab-ci.yml
拿我格子衫来
2022/01/24
8010
Terraform + Gitlab CI简单集成方案
利用Gitlab CI实现基础设施编排自动化,用户后续针对基础设施的管理使用Gitlab完成,提交基础设施变更后,会出发pr进行Gitlab CI流水线执行,从而实现基础设施DevOPS流程。
每周聚焦
2022/07/06
9960
Terraform + Gitlab CI简单集成方案
相关推荐
基于GitLabCI的Python交付流水线实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验