Docker: Trivy와 Copa로 이미지 취약점 패치하기
도커 컨테이너 이미지에는 종종 기본 운영 체제 패키지에서 상속된 보안 취약점이 포함되어 있습니다. 이미지를 처음부터 다시 빌드하는 대신 Trivy를 사용하여 취약점을 스캔하고 Copa를 사용하여 직접 패치할 수 있습니다. 이 튜토리얼은 이 두 강력한 오픈 소스 도구를 사용하여 Ubuntu, Debian, RHEL, CentOS, Fedora 시스템에서 컨테이너 취약점을 식별하고 수정하는 방법을 보여줍니다.
이 튜토리얼에서 배우게 될 내용:
- Ubuntu/Debian에 Trivy 취약점 스캐너 설치 방법
- Copa 컨테이너 패칭 도구 설치 방법
- 운영 체제 취약점에 대해 Docker 이미지를 스캔하는 방법
- 컨테이너 취약점을 자동으로 패치하는 방법
- 패치된 이미지가 취약점이 없는지 확인하는 방법
기사 요약: Trivy를 사용하여 Docker 이미지를 취약점 검사하고 Copa를 사용하여 자동으로 패치하세요.
| 단계 | 명령/동작 |
|---|---|
| 1. 이미지 스캔 | |
| 2. JSON 보고서 내보내기 | |
| 3. BuildKit 시작 | |
| 4. 패치 이미지 | |
1단계: Trivy 취약점 스캐너 설치
Trivy는 Aqua Security에서 개발한 오픈 소스 취약점 스캐너입니다. OS 패키지, 애플리케이션 종속성 및 컨테이너 이미지의 취약점을 감지합니다.
우분투/데비안
-
의존성 설치: 먼저 저장소를 추가하는 데 필요한 wget 및 gnupg 패키지를 설치하세요:
$ sudo apt-get install wget gnupg -y Trivy GPG 키 추가: Trivy 리포지토리 서명 키를 다운로드하고 추가하세요:
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/nullTrivy 저장소 추가: 공식 Trivy 저장소를 소스 목록에 추가하세요:
$ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.listTrivy 설치: 패키지 목록을 업데이트하고 Trivy를 설치하세요:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
Trivy 저장소 추가: Trivy 저장소 파일을 생성하세요:
# sudo tee /etc/yum.repos.d/trivy.repo << 'EOF' [trivy] name=Trivy repository baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key EOFTrivy 설치: dnf 또는 yum을 사용하여 설치하세요:
# sudo dnf install trivy -y
버전을 확인하여 설치를 검증하세요:
$ trivy --version2단계: Copa 패칭 도구 설치
Copa(Copacetic)는 전체 재빌드 없이 컨테이너 이미지를 직접 패치하는 CNCF 샌드박스 프로젝트입니다. Trivy와 같은 스캐너의 취약점 보고서를 사용하여 보안 업데이트를 적용합니다. Copa는 모든 리눅스 배포판에서 작동하는 단일 바이너리로 배포됩니다.
Copa 바이너리 다운로드: 공식 Copa GitHub 릴리스 페이지에서 미리 빌드된 바이너리를 다운로드하세요:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gz아카이브 압축 풀기: 다운로드한 tarball을 풀어주세요:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
Copa 설치: 바이너리를 시스템 경로로 이동하세요:
$ sudo mv copa /usr/local/bin/ 설치 확인: Copa가 올바르게 설치되었는지 확인하세요:
$ copa --version
3단계: 컨테이너 이미지의 취약점 스캔
패치를 적용하기 전에 컨테이너 이미지의 취약점을 식별해야 합니다. 다음 단계에서는 linuxconfig/instantprivacy를 예시로 사용하며, 이를 자신의 이미지 이름으로 교체하면 됩니다.
컨테이너 이미지 가져오기: 스캔하려는 이미지를 다운로드하세요:
$ sudo docker pull linuxconfig/instantprivacy취약점 스캔: OS 수준 취약점을 스캔하려면 Trivy를 실행하세요.
--ignore-unfixed플래그는 수정 가능한 패치가 없는 취약점을 제외합니다:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyJSON 보고서 내보내기: Copa는 스캔 결과를 JSON 형식으로 요구합니다:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
4단계: Copa로 컨테이너 이미지 패치
Copa는 컨테이너 이미지에 패치를 적용하기 위해 BuildKit을 사용합니다.
BuildKit 컨테이너 시작: 권한 있는 컨테이너로 BuildKit 실행:
$ sudo docker run --detach --rm --privileged \ -p 127.0.0.1:8888:8888/tcp \ --name buildkitd \ --entrypoint buildkitd \ moby/buildkit:v0.11.4 \ --addr tcp://0.0.0.0:8888-
BuildKit 실행 확인: 컨테이너가 정상적으로 시작되었는지 확인하세요:
$ sudo docker ps 컨테이너 이미지 패치: Copa를 사용하여 보안 패치를 적용하세요.
-t플래그는 패치된 이미지의 태그를 지정합니다:$ sudo copa patch \ -i docker.io/linuxconfig/instantprivacy \ -r instantprivacy.json \ -t patched \ -a tcp://0.0.0.0:8888Copa는 보안 업데이트를 다운로드하고 패치가 적용된 새로운 이미지 레이어를 생성합니다. 패치된 이미지는
linuxconfig/instantprivacy:patched로 태그됩니다.
단계 5: 패치된 이미지 확인
패치된 이미지를 스캔: 모든 취약점이 해결되었는지 확인하세요:
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patched패치된 이미지 테스트: 패치된 이미지가 정상적으로 작동하는지 확인하세요:
$ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched $ export http_proxy="http://localhost:8118" $ curl api.ipify.org 45.84.107.174정리: 완료되면 BuildKit 컨테이너를 중지합니다:
$ sudo docker stop buildkitd
결론
Trivy를 사용하여 Docker 컨테이너 이미지의 보안 취약점을 성공적으로 스캔하고 Copa를 사용하여 자동으로 패치했습니다. 이 방법은 이미지를 처음부터 다시 빌드하는 것보다 빠르며, 단일 패치 레이어만 추가하여 원본 이미지 구조를 유지합니다. 운영 환경에서는 이러한 도구를 CI/CD 파이프라인에 통합하여 배포 전에 컨테이너 이미지를 자동으로 스캔하고 패치하도록 하세요. 자세한 내용은 공식 Trivy 문서와 Copa 프로젝트 웹사이트를 참조하세요.
자주 묻는 질문
- Copa는 어떤 유형의 취약점을 수정할 수 있나요? Copa는 OS 수준 패키지 취약점(예: Debian, Ubuntu, Alpine, RHEL 패키지)만 수정할 수 있습니다. npm 패키지, Python pip 모듈, Go 모듈과 같은 애플리케이션 수준 의존성은 수정할 수 없습니다. 이러한 경우에는 업데이트된 의존성을 사용하여 애플리케이션을 다시 빌드해야 합니다.
- 왜 Copa를 실행하려면 BuildKit이 필요합니까? Copa는 BuildKit의 차이(diff) 및 병합(merge) 기능을 사용하여 패치된 파일만 포함하는 새로운 이미지 레이어를 생성합니다. BuildKit은 저수준 이미지 조작을 처리하는 권한 있는 컨테이너로 실행됩니다. BuildKit 없이 Copa는 컨테이너 파일 시스템에 패치를 적용할 수 없습니다.
- 개인 레지스트리의 이미지를 패치할 수 있나요? 네, Copa는 개인 레지스트리를 지원합니다. 패치 명령을 실행하기 전에
docker login으로 인증해야 합니다. Copa는 필요할 경우 기본 이미지를 가져오고 패치된 결과를 푸시하기 위해 Docker 자격 증명을 사용합니다. - Copa가 모든 취약점을 패치하지 못하면 어떻게 되나요? 일부 취약점은 아직 수정 패치가 제공되지 않을 수 있습니다. Trivy의
--ignore-unfixed옵션은 이러한 취약점을 보고서에서 제외합니다. Copa는 이용 가능한 수정 패치가 있는 모든 취약점을 패치할 것입니다. 수정 패치를 기다리고 있는 취약점을 포함한 모든 취약점을 확인하려면--ignore-unfixed없이 Trivy를 다시 실행하세요. - Copa를 최신 버전으로 업데이트하는 방법은? Copa GitHub 릴리스 페이지에서 최신 버전을 다운로드한 후
/usr/local/bin/에 있는 바이너리를 교체하세요. 현재 버전은copa --version명령으로 확인할 수 있습니다.





