CVEs
CVEs (Common Vulnerabilities and Exposures)
CVE가 무엇이고 Docker Hardened Images가 어떻게 완화하는지, 스캔하는 방법을 알아볼게요.
출처: 문서
본문
CVE란 (What are CVEs?)
CVE는 소프트웨어나 하드웨어의 공개적으로 공개된 사이버 보안 결함이에요. 각 CVE는 고유 식별자(예: CVE-2024-12345)를 받고 표준화된 설명을 포함해, 조직이 일관되게 취약점을 추적·해결할 수 있게 해줘요.
Docker 맥락에서 CVE는 종종 기본 이미지나 애플리케이션 의존성의 문제에 관한 것이에요. 이 취약점은 사소한 버그부터 원격 코드 실행이나 권한 상승 같은 중대한 보안 위험까지 다양할 수 있어요.
CVE가 중요한 이유 (Why are CVEs important?)
CVE를 완화하기 위해 Docker 이미지를 정기적으로 스캔·업데이트하는 것은 안전하고 규정을 준수하는 환경을 유지하는 데 중요해요. CVE를 무시하면 다음을 포함한 심각한 보안 침해로 이어질 수 있어요:
- 무단 접근: 익스플로잇이 공격자에게 시스템에 대한 무단 접근을 줄 수 있어요.
- 데이터 유출: 민감한 정보가 노출되거나 도난당할 수 있어요.
- 서비스 중단: 취약점을 이용해 서비스를 방해하거나 가동 중단을 일으킬 수 있어요.
- 규정 준수 위반: 알려진 취약점을 해결하지 않으면 산업 규정·표준을 위반할 수 있어요.
Docker Hardened Images가 CVE 완화에 도움을 주는 방식 (How Docker Hardened Images help mitigate CVEs)
Docker Hardened Images(DHI)는 처음부터 CVE의 위험을 최소화하도록 만들었어요. 보안 우선 접근을 채택함으로써 DHI는 CVE 완화에서 몇 가지 이점을 제공해요:
- 줄어든 공격 표면: DHI는 distroless 접근으로 빌드되어 불필요한 구성 요소와 패키지를 제거해요. 전통적인 이미지보다 최대 95% 작은 이 감소는 잠재적 취약점 수를 제한해 공격자가 불필요한 소프트웨어를 악용하기 어렵게 해요.
- 더 빠른 CVE 해결: 엔터프라이즈급 SLA로 Docker가 유지 관리하는 DHI는 알려진 취약점을 해결하도록 지속적으로 업데이트돼요. 중요·높음 심각도 CVE는 빠르게 패치되어 수동 개입 없이 컨테이너가 안전하게 유지돼요.
- 선제적 취약점 관리: DHI를 사용함으로써 조직은 취약점을 선제적으로 관리할 수 있어요. 이미지에는 CVE 및 Vulnerability Exposure(VEX) 피드가 포함되어, 팀이 잠재적 위협에 대해 정보를 유지하고 신속히 필요한 조치를 취하게 해줘요.
이미지에서 CVE 스캔 (Scan images for CVEs)
Docker 이미지에서 CVE를 정기적으로 스캔하는 것은 안전한 컨테이너 환경을 유지하는 데 필수적이에요. Docker Scout가 Docker Desktop과 Docker CLI에 통합되어 있지만, Grype와 Trivy 같은 도구가 대체 스캔 기능을 제공해요. 다음은 각 도구로 Docker 이미지에서 CVE를 스캔하는 방법이에요.
Docker Scout
Docker Scout는 Docker Desktop과 Docker CLI에 통합돼 있어요. 취약점 인사이트, CVE 요약, 해결 지침에 대한 직접 링크를 제공해요.
Docker Scout로 DHI 스캔
Docker Scout로 Docker Hardened Image를 스캔하려면 다음 명령을 실행하세요:
$ docker scout cves dhi.io/<image>:<tag> --platform <platform>
예시 출력:
v SBOM obtained from attestation, 101 packages found
v Provenance obtained from attestation
v VEX statements obtained from attestation
v No vulnerable package detected
...
더 자세한 필터링과 JSON 출력은 Docker Scout CLI 참조를 참고하세요.
Grype
Grype는 NVD와 배포판 권고 같은 취약점 데이터베이스에 대해 컨테이너 이미지를 검사하는 오픈소스 스캐너예요.
Grype로 DHI 스캔
Grype를 설치한 후 이미지를 풀하고 스캔 명령을 실행해 Docker Hardened Image를 스캔할 수 있어요. Grype는 먼저 VEX 증명을 파일로 내보내야 해요:
$ docker pull dhi.io/<image>:<tag>
$ docker scout vex get dhi.io/<image>:<tag> --output vex.json
$ grype dhi.io/<image>:<tag> --vex vex.json
예시 출력:
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY EPSS% RISK
libperl5.36 5.36.0-7+deb12u2 (won't fix) deb CVE-2023-31484 High 79.45 1.1
perl 5.36.0-7+deb12u2 (won't fix) deb CVE-2023-31484 High 79.45 1.1
perl-base 5.36.0-7+deb12u2 (won't fix) deb CVE-2023-31484 High 79.45 1.1
...
Trivy
Trivy는 컨테이너와 기타 아티팩트용 오픈소스 취약점 스캐너예요. OS 패키지와 애플리케이션 의존성의 취약점을 감지해요.
Trivy로 DHI 스캔
Trivy를 설치한 후 이미지를 풀하고 스캔 명령을 실행해 Docker Hardened Image를 스캔할 수 있어요:
$ docker pull dhi.io/<image>:<tag>
$ trivy image --scanners vuln --vex repo dhi.io/<image>:<tag>
예시 출력:
Report Summary
┌──────────────────────────────────────────────────────────────────────────────┬────────────┬─────────────────┬─────────┐
│ Target │ Type │ Vulnerabilities │ Secrets │
├──────────────────────────────────────────────────────────────────────────────┼────────────┼─────────────────┼─────────┤
│ dhi.io/<image>:<tag> (debian 12.11) │ debian │ 66 │ - │
├──────────────────────────────────────────────────────────────────────────────┼────────────┼─────────────────┼─────────┤
│ opt/python-3.13.4/lib/python3.13/site-packages/pip-25.1.1.dist-info/METADATA │ python-pkg │ 0 │ - │
└──────────────────────────────────────────────────────────────────────────────┴────────────┴─────────────────┴─────────┘
VEX로 알려진 비-악용 가능 CVE 필터링 (Use VEX to filter known non-exploitable CVEs)
Docker Hardened Images는 이미지의 런타임 동작과 관련 없는 취약점을 식별하는 서명된 VEX(Vulnerability Exploitability eXchange) 증명을 포함해요.
Docker Scout나 Trivy를 사용할 때 이 VEX 문은 이전 예시로 자동 적용되며 수동 구성이 필요 없어요.
지원하는 도구를 위해 VEX 증명을 수동으로 검색하려면:
$ docker scout vex get dhi.io/<image>:<tag> --output vex.json
[!NOTE] 이미지가 로컬 기기에 있으면 이미지 이름에
registry://를 붙여야 해요. 예:dhi.io/python:3.13대신registry://dhi.io/python:3.13을 사용.
예를 들어:
$ docker scout vex get dhi.io/python:3.13 --output vex.json
이것은 지정된 이미지의 VEX 문을 포함하는 vex.json 파일을 만들어요. 그런 다음 VEX를 지원하는 도구와 함께 이 파일을 사용해 알려진 비-악용 가능 CVE를 걸러낼 수 있어요.