컨테이너 이미지 CVE 점검 툴 - Trivy.
https://github.com/aquasecurity/trivy
최신버전 설치 후 컨테이너 이미지, 클러스터 등 CVE 점검 가능
작성일 : 2025/05/23 기준 CSAP 인증에서도 컨테이너 이미지 점검 툴이 따로 없어 Trivy 를 이용해 점검 진행
이미지 점검 방법 : https://trivy.dev/docs/latest/guide/target/container_image/
1
trivy image {이미지이름}
trivy 점검 항목 관련하여 DB 데이터를 인터넷으로 부터 다운로드 받아오기 때문에 폐쇄망에서는 최초 실행 시 connection timed out이 발생함 (DB 구성중)
(※ 추후에도 계속 업데이트가 진행되기 때문에 Trivy 최신 버전과 DB 데이터를 최신으로 다운받아 변경이 필요함)
1
2
3
2025-05-12T11:43:40+09:00 INFO [db] Downloading DB... repository="ghcr.io/aquasecurity/trivy-db:2"
2025-05-12T11:50:13+09:00 FATAL Fatal error init error: DB error: failed to download vulnerability DB: database download error: OCI repository error: 1 error occurred:
* Get "https://ghcr.io/v2/": dial tcp 20.200.245.241:443: connect: connection timed out
DB 데이터를 따로 받아와서 ~/.cache/trivy/db 하위에 미리 trivy.db , metadata.json 파일을 옮겨둔 뒤
trivy image --skip-db-update --offline-scan [이미지명] 로 실행하면 미리 옮겨둔 DB 데이터로 검사를 실행할 수 있다.
폐쇄망에서 Trivy 구성하기
trivy 실행 파일 구성
https://github.com/aquasecurity/trivy/releases/tag/v0.62.1
깃에서 최신버전 trivy 실행 파일을 운영체제에 맞게 다운로드 후 폐쇄망 서버에 업로드 (docker, containerd 등 컨테이너 실행 명령어가 수행 가능한 서버이어야함)
ex)
ubuntu 서버에서 실행 하였으므로 trivy_0.62.1_Linux-64bit.tar.gz 다운로드 후 서버에 업로드
1
2
3
4
5
6
7
8
9
10
11
# 압축 풀기
tar -xvzf trivy_0.62.1_Linux-64bit.tar.gz
# trivy 파일에 실행권한 추가
chmod +x trivy
# /usr/local/bin 폴더로 파일 이동
mv trivy /usr/local/bin
# trivy 가 정상적으로 실행되며 버전이 맞는지 확인
trivy -v
데이터베이스 다운로드 (인터넷망 서버에서)
인터넷망 서버에서 Trivy DB 를 다운받아온다.
oras CLI 명령어 설치 필요
1
2
3
4
5
# Trivy DB 다운로드 (v2 버전 사용)
oras pull ghcr.io/aquasecurity/trivy-db:2 -o db.tar.gz
# Java DB가 필요한 경우 추가 다운로드
oras pull ghcr.io/aquasecurity/trivy-java-db:1 -o javadb.tar.gz
데이터베이스 파일 옮기기
인터넷망에서 다운받아둔 DB 데이터를 폐쇄망으로 업로드한다.
Trivy 기본 캐시 디렉토리에 설치 (~/.cache/trivy/db)
(캐시 디렉토리가 없을 경우 폴더 생성 mkdir -p ~/.cache/trivy/db)
1
2
3
# db.tar.gz 압축 해제 한 뒤 파일만 옮기기
# trivy.db, metadata.json 파일 모두 ~/.cache/trivy/db/ 하위에 복사
# javaDB는 ~/.cache/trivy/java-db 하위에 복사
trivy 오프라인 실행
컨테이너 CLI (docker, containerd 등) 가 설치되지 않은 서버에서 수행 시 오류 발생함
1
2
3
4
5
# --skip-java-db-update 는 java DB를 사용할때만 추가하면 됨
# 기본 실행 예시
trivy image --skip-db-update --skip-java-db-update --offline-scan [이미지명]
# 상세 리포트를 원할 경우
trivy image --skip-db-update --skip-java-db-update --offline-scan -f json -o result.json [이미지명]
사용자 전환 꼬임으로 인한 오류
sudo su 명령 누락 후 일반 사용자로 작업을 하다 보니 ~/.cache 경로의 ~ 경로가 달라서 offline으로 db 파일을 찾지 못하는 문제가 발생했다.
실행에 문제가 발생 할 경우 지금 trivy를 수행하는 계정을 확인하고 ~/.cache/trivy/db 파일을 제대로 업로드 했는지 확인해보자.