Trivy 주요 기능
- 다양한 대상 지원: 컨테이너 이미지, 소스 코드, 배포된 애플리케이션 등 다양한 대상에서 취약점을 스캔할 수 있습니다.
- 빠른 스캔 속도: Trivy는 고속 스캐닝 엔진을 사용하여 빠르게 취약점을 식별합니다.
- 정확한 결과: Trivy는 다양한 데이터 소스를 사용하여 정확한 취약점 정보를 제공합니다.
- 사용하기 쉬움: Trivy는 CLI, 웹 인터페이스, API 등 다양한 인터페이스를 제공하여 사용하기 쉽습니다.
Trivy 사용 예시
- trivy image scan
: 컨테이너 이미지에서 취약점을 스캔합니다. - trivy source scan
: 소스 코드에서 취약점을 스캔합니다. - trivy deploy scan
: 배포된 애플리케이션에서 취약점을 스캔합니다.
Trivy 설치
- Debian/Ubuntu (Official)환경에서 설치를 진행한다.
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
Trivy로 검사하기
취약성이 있는 Pod 검사
# 네임스페이스에 있는 Pod 이미지 확인
kubectl -n jeongdo describe pod | grep -i Image: |awk '{print $2}' | sort -u
# 아래와 같은 결과가 나온다.
## gitlab/gitlab-ce:latest
## jenkins/jenkins:jdk17
## nginx:latest
# Pod 이미지 이름을 입력하여 검사결과를 확인한다.
trivy -q image -s HIGH,CRITICAL jenkins/jenkins:jdk17
# 조금 줄여서 보고 싶다면 아래와 같은 옵션을 추가한다.
trivy -q image jenkins/jenkins:jdk17 |grep -iE "High | Critical"
trivy의 검사 결과는 아래와 같이 리포트로 출력된다.
# case 01. 안전한 이미지
$ trivy -q image -s HIGH,CRITICAL amazonlinux:2
amazonlinux:2 (amazon 2 (Karoo))
Total: 0 (HIGH: 0, CRITICAL: 0)
# case 02. 안전하지 않은(?) 이미지
$ trivy -q image -s HIGH,CRITICAL jenkins/jenkins:jdk17
jenkins/jenkins:jdk17 (debian 12.4)
Total: 18 (HIGH: 17, CRITICAL: 1)
┌───────────────────┬────────────────┬──────────┬──────────────┬───────────────────┬────────────────┬───────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │ Title │
├───────────────────┼────────────────┼──────────┼──────────────┼───────────────────┼────────────────┼───────────────────────────────────────────────────────────┤
│ git │ CVE-2023-25652 │ HIGH │ affected │ 1:2.39.2-1.1 │ │ git: by feeding specially crafted input to `git apply │
│ │ │ │ │ │ │ --reject`, a path... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2023-25652 │
│ ├────────────────┤ │ │ ├────────────────┼───────────────────────────────────────────────────────────┤
│ │ CVE-2023-29007 │ │ │ │ │ git: arbitrary configuration injection when renaming or │
│ │ │ │ │ │ │ deleting a section from a... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2023-29007 │
├───────────────────┼────────────────┤ │ │ ├────────────────┼───────────────────────────────────────────────────────────┤
│ git-man │ CVE-2023-25652 │ │ │ │ │ git: by feeding specially crafted input to `git apply │
│ │ │ │ │ │ │ --reject`, a path... │
│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2023-25652 │
(이하생략)
Certified Kubernetes Security Specialist(CKS) Exam 기출문제
실제 시험에서도 Trivy 도구를 활용하여 취약한 이미지를 사용하는 Pod를 제거하는 문제가 출제된다.
위와 같은 방법으로 취약한 이미지를 찾아 해당되는 Pod를 제거하는 방식으로 문제풀이를 한다.
만일, 실습을 하고 싶다면 아래 사이트를 추천한다.