문제 상황
adoptopenjdk/openjdk11:jre
이미지를 기반으로 자바 애플리케이션 Docker 이미지를 빌드하던 중, 보안 스캐너에서 CRITICAL 등급의 SQLite 관련 취약점(CVE)이 지속적으로 발견되었습니다.
보안 점검 도구(Trivy 등)로 스캔한 결과, libsqlite3-0
라이브러리에서 발생하는 취약점이 주기적으로 보고되었고, 빌드 파이프라인이 이를 이유로 차단되는 상황이었습니다.
원인 분석
adoptopenjdk/openjdk11:jre
는 Debian/Ubuntu 계열 기반으로 제작되어 있으며, 기본적으로 sqlite3
와 libsqlite3-0
패키지를 포함하고 있습니다.
문제는 다음과 같습니다.
- 해당 이미지는 최신 보안 패치 적용 주기가 느립니다.
- 저희 애플리케이션에서는 SQLite를 전혀 사용하지 않음에도 불구하고, 불필요하게 포함되어 있었습니다.
- 이로 인해 사용하지 않는 패키지에서 취약점이 발생하고, 보안 검사에 계속 걸렸습니다.
해결 방법
SQLite를 사용하지 않는 환경이므로, Dockerfile에 불필요한 SQLite 관련 패키지를 제거하는 명령을 추가했습니다.
RUN apt-get -y purge sqlite3 libsqlite3-0 || true \
&& apt-get -y autoremove --purge || true
명령 설명
apt-get -y purge sqlite3 libsqlite3-0
SQLite 실행 파일과 라이브러리를 완전히 삭제합니다.apt-get -y autoremove --purge
더 이상 사용하지 않는 의존성 패키지도 함께 삭제합니다.|| true
패키지가 없을 경우에도 빌드가 실패하지 않도록 예외 처리합니다.
적용 전/후 비교
적용 전 (취약점 발견)
libsqlite3-0 3.31.1-4ubuntu0.3 CRITICAL
CVE-2025-XXXX ... (설명)
적용 후 (취약점 제거)
No vulnerabilities found
적용 후 효과
- SQLite 관련 CRITICAL 취약점이 모두 제거되었습니다.
- 사용하지 않는 라이브러리를 삭제해 이미지 크기가 소폭 감소했습니다.
- 빌드 파이프라인 보안 검사 통과율이 향상되었습니다.
추가 권장 사항
- SQLite를 사용하는 경우라면 제거 대신 최신 보안 패치 버전으로 업그레이드해야 합니다.
- 장기적으로는 Eclipse Temurin이나 Distroless와 같이 보안 패치가 신속히 적용되는 베이스 이미지로 교체하는 것이 좋습니다.
- CI/CD 파이프라인에 Trivy, Grype 같은 보안 스캐너를 포함시켜 주기적으로 취약점을 점검하는 습관을 들이는 것이 필요합니다.
반응형
'개발 (Development) > Docker' 카테고리의 다른 글
[Docker] Docker 환경에서 yarn 설치 시 인증서 오류 해결 (0) | 2025.06.01 |
---|---|
[Docker] on-premise 환경에서 Docker Compose의 Build 문제 해결 (0) | 2025.06.01 |
[Docker] Alpine 이미지 SSL 인증 오류 해결 (certificate verify failed) (0) | 2025.06.01 |
[Docker] Docker 컨테이너 생성과 삭제 이력 추적하는 방법 (0) | 2025.04.26 |
[Docker] Dockerfile에서 chown이 동작하지 않을 때, 의외의 원인과 해결법 (0) | 2025.04.19 |