Docker 이미지의 취약점 분석
이 단계에서는 Trivy 를 사용하여 Docker 이미지의 취약점을 분석하는 방법을 배우게 됩니다. Trivy 는 포괄적이고 다재다능한 보안 스캐너입니다. 운영 체제 패키지 (Alpine, RHEL, CentOS, Debian, Ubuntu 등) 및 애플리케이션 종속성 (Bundler, Composer, npm, yarn 등) 의 취약점을 감지할 수 있습니다. 또한 Trivy 는 컨테이너 이미지, 파일 시스템 및 Git 저장소와 같은 다양한 스캔 대상을 지원합니다.
먼저, 분석에 사용할 취약한 Docker 이미지를 가져와 보겠습니다. 일부 취약점이 있는 것으로 알려진 library/ubuntu:18.04 이미지를 사용합니다.
docker pull library/ubuntu:18.04
이미지가 가져와지고 다운로드되고 있음을 나타내는 출력을 볼 수 있습니다.
18.04: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
이제 이미지가 있으므로 Trivy 를 설치해야 합니다. Trivy 는 LabEx 환경에 미리 설치되어 있지 않으므로 다운로드하여 설치합니다. 공식 GitHub 저장소에서 최신 릴리스를 다운로드합니다.
wget https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
이 명령은 Trivy Debian 패키지를 다운로드합니다. 다음과 유사한 출력을 볼 수 있습니다.
--2023-10-27 08:00:00-- https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=... [following]
--2023-10-27 08:00:00-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50000000 (48M) [application/octet-stream]
Saving to: ‘trivy_0.50.1_Linux-64bit.deb’
trivy_0.50.1_Linux-64bit.deb 100%[=================================================>] 47.68M --.-MB/s in 0.5s
2023-10-27 08:00:01 (95.3 MB/s) - ‘trivy_0.50.1_Linux-64bit.deb’ saved [50000000/50000000]
이제 dpkg를 사용하여 다운로드한 패키지를 설치합니다.
sudo dpkg -i trivy_0.50.1_Linux-64bit.deb
설치 프로세스를 나타내는 출력을 볼 수 있습니다.
Selecting previously unselected package trivy.
(Reading database ... 100000 files and directories currently installed.)
Preparing to unpack trivy_0.50.1_Linux-64bit.deb ...
Unpacking trivy (0.50.1) ...
Setting up trivy (0.50.1) ...
Trivy 가 설치되었으므로 이제 library/ubuntu:18.04 Docker 이미지의 취약점을 스캔할 수 있습니다.
trivy image library/ubuntu:18.04
Trivy 가 이미지 스캔을 시작합니다. 취약점 데이터베이스를 다운로드하고 이미지 레이어를 분석하는 데 잠시 시간이 걸릴 수 있습니다. 진행 상황을 보여주는 출력을 볼 수 있으며, 그 다음에는 발견된 취약점에 대한 자세한 보고서가 표시됩니다.
2023-10-27T08:00:05.000+0000 INFO Need to update DB
2023-10-27T08:00:05.000+0000 INFO Downloading DB...
...
2023-10-27T08:00:10.000+0000 INFO Detected OS: ubuntu
2023-10-27T08:00:10.000+0000 INFO Detecting Ubuntu vulnerabilities...
...
library/ubuntu:18.04 (ubuntu 18.04)
===================================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)
┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┐
│ Library/Package │ Vulnerability │ Severity │ Installed Version │ Fixed Version │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┤
│ apt │ CVE-YYYY-XXXX │ HIGH │ 1.6.12 │ 1.6.14 │
│ ... │ ... │ ... │ ... │ ... │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘
출력은 심각도별 (UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL) 로 분류된 총 취약점에 대한 요약을 제공합니다. 그런 다음, 영향을 받는 패키지, 취약점 ID(예: CVE-YYYY-XXXX), 심각도 수준, 설치된 패키지 버전 및 사용 가능한 경우 수정된 버전과 같은 세부 정보와 함께 각 취약점을 나열합니다. 이 보고서는 Docker 이미지의 보안 상태를 이해하고 수정이 필요한 영역을 식별하는 데 도움이 됩니다.