- SCA – OWASP Dependency-track 구축
- Dependency-track – kubernetes SBOM
• Software Bill of Materials
• Application 에 ... 수집하여 통합 관리 (feat. sbom-operator)
소개
직전 Dependency-track 구축 이후, 본격적으로 SBOM
• Software Bill of Materials
• Application 에 ... 수집을 해보려합니다. 먼저 kubernetes 에 구동되고 있는 Application 들에 대한 SBOM
• Software Bill of Materials
• Application 에 ... 을 주기적으로 수집하여 Dependency-track 에서 통합 관리 가능하도록 구축하려 합니다.
이를 위해 sbom-operator 를 활용할 것이며, Github repository 와 Dependency-track 을 아래와 같이 연동하여 SBOM
• Software Bill of Materials
• Application 에 ... 을 통합관리합니다.
- sbom-operator 를 kubernetes 에 배포
- sbom-operator 가 image 분석 후 SBOM
• Software Bill of Materials
• Application 에 ... 생성 - 생성된 SBOM
• Software Bill of Materials
• Application 에 ... 을 Dependency-track API 를 이용하여 SBOM
• Software Bill of Materials
• Application 에 ... 업로드 - 생성된 SBOM
• Software Bill of Materials
• Application 에 ... 을 Github Repository 와도 연동하여 SBOM
• Software Bill of Materials
• Application 에 ... Push
sbom-operator 란?
sbom-operator 는 Kubernetes Cluster 의 모든 Image 에 사용되는 Package 와 Software 에 대한 SBOM
• Software Bill of Materials
• Application 에 ... 을 생성해 주는 operator 입니다.
- Syft 를 기반으로 Image 를 분석하여 SBOM
• Software Bill of Materials
• Application 에 ... 을 생성해주며, - 스캔이 완료되면 annotation 을 남겨 중복 검사를 최소화할수도 있습니다.
- 생성된 SBOM
• Software Bill of Materials
• Application 에 ... 을 github repository 와 연동하여 자동으로 sync up 도 가능합니다.
그리고 SBOM
• Software Bill of Materials
• Application 에 ... 을 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
• Software Bill of Materials
• Application 에 ... push - dependency-track 과 연동하여 API 로 SBOM
• Software Bill of Materials
• Application 에 ... 전송
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
• Software Bill of Materials
• Application 에 ... 을 업로드할 github repository 정보 제공. envVars
설정을 통해 github token 참조하기 위한 secrets 정보 제공.cron
으로 SBOM
• Software Bill of Materials
• Application 에 ... 수집을 위한 스캔 주기 설정.- dependency-track 연동을 위한 api endont, api-key 정보 제공.
Dependency-track 의 API-Key 생성
여기서 dependency-track 의 api-key 를 만드는 방법은 아래와 같습니다.
API-Key 를 만들기 위한 별도의 Team 을 생성해도 되며, 적절한 Permissions
만 추가해주면 되겠습니다.
Github personal access token 생성
Github Token 생성은 Github Personal access 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 생성된 것을 확인할 수 있습니다.
SBOM 저장 위한 Github Repository 생성
sbom-operator 가 만든 SBOM
• Software Bill of Materials
• Application 에 ... 을 sync up 할 Repository 를 만들어줍니다.
위의 helm-chart 의 values.yaml
의 설정값과 repository name 이 일치하여야 합니다. Repo 생성이 완료되면 init commit 을 완료해줍니다.
sbom-operator helm Install
helm install sbom-operator ckotzbauer/sbom-operator -f values.yaml
완료되면 정상적으로 배포된 것을 확인할 수 있습니다. 이제 values.yaml
에서 설정하였던 cron
에 맞게 주기적으로 SBOM
• Software Bill of Materials
• Application 에 ... 을 생성하여 Github + Dependency-track 에 sync up 을 하게 됩니다.
Github Repository 와 통합 결과
sbom-operator 는 자동으로 설정한 Github Repository 에 SBOM
• Software Bill of Materials
• Application 에 ... 을 아래와 같이 업로드 하여 관리할 수 있도록 해줍니다.
폴더는 알아서 contrainer registry 기반으로 분류하여 sbom
• Software Bill of Materials
• Application 에 ... 을 저장해줍니다.
Dependency-track 과의 통합 결과
sbom-operator 는 API 를 이용하여 자동으로 Projects 를 만들고, sbom
• Software Bill of Materials
• Application 에 ... 을 업로드 해줍니다. 사전에 정의하였던 스케줄링에 구동이 되면 kubernetes 내 모든 application 들을 대상으로 스캔 및 분석을 진행하고 생성된 SBOM
• Software Bill of Materials
• Application 에 ... 을 업로드 합니다.
그 결과 Dependency-track 에서 아래와 같이 수집된 SBOM
• Software Bill of Materials
• Application 에 ... 기반으로 Components, Vulnerabilities, Licenses 정보들을 확인할 수 있습니다.
Projects 메뉴
kubernetes 내 application project 별로 SBOM
• Software Bill of Materials
• Application 에 ... 정보를 확인할 수 있습니다. Risk Score, 확인된 취약점, Custom 하게 설정한 Policy 위반사항등을 포함하여 확인이 가능합니다.
Project
를 하나씩 들어가서 확인해보면 Project에 포함된 컴포넌트, 취약점을 분리하여 확인이 가능합니다.
취약점 감사탭에서는 발견된 취약점에 대해 분석한 코멘트를 남기거나, 오탐처리, 영향없음, 처리완료 등등 분석 결과를 별도로 남길수도 있어 지속적인 취약점 관리가 가능합니다.
Components 메뉴
Components
메뉴를 통하면 나의 organization 의 모든 컴포넌트들에 대한 검색을 지원해줍니다. 혹시 0-Day 가 발견된 컴포넌트가 있거나 한다면 그에 맞게 검색을 해서 어느 Project 에 사용이 되고 있는지 등을 확인할 수 있습니다.
Vulnerabilities
메뉴
Vulnerabilities
메뉴를 통하면 CVE 등 취약점 기반으로 확인이 가능하며, 존재하지 않은 취약점이 있다면 Create Vulnerability
를 통해 커스텀하게 생성도 가능합니다.
Licenses
메뉴
Licenses 메뉴를 통해서는 사용하고 있는 라이선스 목록을 확인할 수 있으며, 라이선스 정책 위반 사항여부를 모니터링 할 수 있습니다.
Vulnerability Audit 메뉴
취약점 관리를 위한 통합 화면이라고 보면 될듯합니다. 다양한 필터를 지원하며 분석상태에 대한 필터도 가능합니다. organization 내 발견된 취약점 관리가 어떻게 되고 있는지에 대한 통합 감사가 가능합니다.
Policy Management 메뉴
Policy 를 만들어 위반사항을 별도로 관리할 수 있도록 합니다. Conditions
를 설정하여 조직내 수립되어있는 보안정책을 설정하여 위반사항의 존재여부를 별도로 관리할 수 있도록 하고 있습니다.
Dashboard
이때까지 확인하였던 사항들을 통합 대시보드로 확인이 가능합니다.
결론
kubernetes 에 배포되어있는 application image 기반으로 SBOM
• Software Bill of Materials
• Application 에 ... 을 수집하여 Dependency-track 으로 관리하는 방안을 전체적으로 살펴 보았습니다.
이외에도 조직에서 사용되고 있는 모든 SBOM
• Software Bill of Materials
• Application 에 ... 을 수집 및 관리하여 가시성을 확대하는 것이 소프트웨어 공급망 보안에 중요할텐데요.
그러기 위해서는 다양한 Source 로부터 SBOM
• Software Bill of Materials
• Application 에 ... 수집을 진행해야합니다. Github 과 같은 코드 저장소, 빌드시스템, 어플리케이션 실행파일 등을 통해서 말이지요.
Dependency-track 은 모든 어플리케이션 구성요소에 대해 취약점 관리에 중점을 둔 통합 플랫폼으로서 조직의 모든 컴포넌트들에 대한 가시성을 높이는데 좋은 툴인 것같습니다.