sbom

소개

직전 Dependency-track 구축 이후, 본격적으로 SBOM 수집을 해보려합니다. 먼저 kubernetes 에 구동되고 있는 Application 들에 대한 SBOM 을 주기적으로 수집하여 Dependency-track 에서 통합 관리 가능하도록 구축하려 합니다.

이를 위해 sbom-operator 를 활용할 것이며, Github repository 와 Dependency-track 을 아래와 같이 연동하여 SBOM 을 통합관리합니다.

sbom-operator
  • sbom-operator 를 kubernetes 에 배포
  • sbom-operator 가 image 분석 후 SBOM 생성
  • 생성된 SBOM 을 Dependency-track API 를 이용하여 SBOM 업로드
  • 생성된 SBOM 을 Github Repository 와도 연동하여 SBOM Push

sbom-operator 란?

sbom-operator 는 Kubernetes Cluster 의 모든 Image 에 사용되는 Package 와 Software 에 대한 SBOM 을 생성해 주는 operator 입니다.

  • Syft 를 기반으로 Image 를 분석하여 SBOM 을 생성해주며,
  • 스캔이 완료되면 annotation 을 남겨 중복 검사를 최소화할수도 있습니다.
  • 생성된 SBOM 을 github repository 와 연동하여 자동으로 sync up 도 가능합니다.

그리고 SBOM 을 cyclonedx 포맷으로도 생성 가능하기 때문에 Dependency-track 과의 연동도 가능합니다.

sbom-operator 설치

Helm-Chart repo 추가

먼저, helm-chart 로 설치하기 위해 repo 를 추가합니다.

helm repo add ckotzbauer https://ckotzbauer.github.io/helm-charts
helm install ckotzbauer/sbom-operator -f your-values.yaml

설치전 helm-chart 의 values 값을 customize 하여 아래 기능도 가능하도록 설정하려 합니다.

  • github repository 와 연동하여 SBOM push
  • dependency-track 과 연동하여 API 로 SBOM 전송

Helm-Chart values.yaml 수정

이를 위해 helm 설치에 이용될 values.yaml 을 clone 하고, 아래와 같이 args , envVars 를 추가해줍니다.

args:
  format: cyclonedx
  targets: git,dtrack
  git-author-email: gogoyeon@gmail.com # change email
  git-author-name: gogoyeon # change name
  git-repository: https://github.com/gogoyeon/sboms # change github repository
  git-path: local-cluster/sboms # change git path
  verbosity: debug
  cron: "0 07 * * * *" # scheduling cron
  dtrack-base-url: http://dtrack-dependency-track-api-server:8080 # dependency-track api-server url
  dtrack-api-key: your-dtrack-api-key # dependency-track api key

envVars:
  - name: SBOM_GIT_ACCESS_TOKEN
    valueFrom:
      secretKeyRef:
        name: "git-token-for-sbom" # secrets name to store git-token
        key: "git-token"  # secrets key

위 설정은 sbom-operator 가 아래와 같은 역할을 수행하는데 사용될 예정입니다.

  • 수집한 SBOM 을 업로드할 github repository 정보 제공.
  • envVars 설정을 통해 github token 참조하기 위한 secrets 정보 제공.
  • cron 으로 SBOM 수집을 위한 스캔 주기 설정.
  • dependency-track 연동을 위한 api endont, api-key 정보 제공.

Dependency-track 의 API-Key 생성

여기서 dependency-track 의 api-key 를 만드는 방법은 아래와 같습니다.

dtrack

API-Key 를 만들기 위한 별도의 Team 을 생성해도 되며, 적절한 Permissions 만 추가해주면 되겠습니다.

Github personal access token 생성

Github Token 생성은 Github Personal access token 생성 페이지 에서 발행 가능합니다.

github-token

Secrets 에 Github Token 저장

그리고 생성된 Githun token 은 secrets 에 git-token-for-sbom 이름으로 저장해줍니다.

kubectl create secret generic git-token-for-sbom --from-literal=git-token=your-git-token-value # change git-token value

아래와 같이 secrets 생성된 것을 확인할 수 있습니다.

secrets

SBOM 저장 위한 Github Repository 생성

sbom-operator 가 만든 SBOM 을 sync up 할 Repository 를 만들어줍니다.

github

위의 helm-chart 의 values.yaml 의 설정값과 repository name 이 일치하여야 합니다. Repo 생성이 완료되면 init commit 을 완료해줍니다.

sbom-operator helm Install

helm install sbom-operator ckotzbauer/sbom-operator -f values.yaml

pods

완료되면 정상적으로 배포된 것을 확인할 수 있습니다. 이제 values.yaml 에서 설정하였던 cron 에 맞게 주기적으로 SBOM 을 생성하여 Github + Dependency-track 에 sync up 을 하게 됩니다.

Github Repository 와 통합 결과

sbom-operator 는 자동으로 설정한 Github Repository 에 SBOM 을 아래와 같이 업로드 하여 관리할 수 있도록 해줍니다.

github

폴더는 알아서 contrainer registry 기반으로 분류하여 sbom 을 저장해줍니다.

Dependency-track 과의 통합 결과

sbom-operator 는 API 를 이용하여 자동으로 Projects 를 만들고, sbom 을 업로드 해줍니다. 사전에 정의하였던 스케줄링에 구동이 되면 kubernetes 내 모든 application 들을 대상으로 스캔 및 분석을 진행하고 생성된 SBOM 을 업로드 합니다.

그 결과 Dependency-track 에서 아래와 같이 수집된 SBOM 기반으로 Components, Vulnerabilities, Licenses 정보들을 확인할 수 있습니다.

Projects 메뉴

kubernetes 내 application project 별로 SBOM 정보를 확인할 수 있습니다. Risk Score, 확인된 취약점, Custom 하게 설정한 Policy 위반사항등을 포함하여 확인이 가능합니다.

dtrack

Project 를 하나씩 들어가서 확인해보면 Project에 포함된 컴포넌트, 취약점을 분리하여 확인이 가능합니다.

dtrack

취약점 감사탭에서는 발견된 취약점에 대해 분석한 코멘트를 남기거나, 오탐처리, 영향없음, 처리완료 등등 분석 결과를 별도로 남길수도 있어 지속적인 취약점 관리가 가능합니다.

dtrack

Components 메뉴

Components 메뉴를 통하면 나의 organization 의 모든 컴포넌트들에 대한 검색을 지원해줍니다. 혹시 0-Day 가 발견된 컴포넌트가 있거나 한다면 그에 맞게 검색을 해서 어느 Project 에 사용이 되고 있는지 등을 확인할 수 있습니다.

dtrack

Vulnerabilities 메뉴

Vulnerabilities 메뉴를 통하면 CVE 등 취약점 기반으로 확인이 가능하며, 존재하지 않은 취약점이 있다면 Create Vulnerability 를 통해 커스텀하게 생성도 가능합니다.

dtrack

Licenses 메뉴

Licenses 메뉴를 통해서는 사용하고 있는 라이선스 목록을 확인할 수 있으며, 라이선스 정책 위반 사항여부를 모니터링 할 수 있습니다.

dtrack

Vulnerability Audit 메뉴

취약점 관리를 위한 통합 화면이라고 보면 될듯합니다. 다양한 필터를 지원하며 분석상태에 대한 필터도 가능합니다. organization 내 발견된 취약점 관리가 어떻게 되고 있는지에 대한 통합 감사가 가능합니다.

dtrack

Policy Management 메뉴

Policy 를 만들어 위반사항을 별도로 관리할 수 있도록 합니다. Conditions 를 설정하여 조직내 수립되어있는 보안정책을 설정하여 위반사항의 존재여부를 별도로 관리할 수 있도록 하고 있습니다.

dtrack

Dashboard

이때까지 확인하였던 사항들을 통합 대시보드로 확인이 가능합니다.

dtrack

결론

kubernetes 에 배포되어있는 application image 기반으로 SBOM 을 수집하여 Dependency-track 으로 관리하는 방안을 전체적으로 살펴 보았습니다.

이외에도 조직에서 사용되고 있는 모든 SBOM 을 수집 및 관리하여 가시성을 확대하는 것이 소프트웨어 공급망 보안에 중요할텐데요.

그러기 위해서는 다양한 Source 로부터 SBOM 수집을 진행해야합니다. Github 과 같은 코드 저장소, 빌드시스템, 어플리케이션 실행파일 등을 통해서 말이지요.

Dependency-track 은 모든 어플리케이션 구성요소에 대해 취약점 관리에 중점을 둔 통합 플랫폼으로서 조직의 모든 컴포넌트들에 대한 가시성을 높이는데 좋은 툴인 것같습니다.

Refs

Series Navigation<< SCA – OWASP Dependency-track 구축

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Back To Top