13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] Aqua Security

  • [보안] Trivy, Aqua Security, Snyk: 컨테이너 보안 스캐너 비용 및 기능 분석

    [보안] Trivy, Aqua Security, Snyk: 컨테이너 보안 스캐너 비용 및 기능 분석

    안녕하세요, 13년차 서버실 지킴이입니다. 🤓

    요즘 인프라 이야기에서 컨테이너(Container)를 빼놓을 수 없죠? Docker(도커)와 Kubernetes(쿠버네티스)가 대세가 되면서 개발 속도는 엄청나게 빨라졌지만, 그만큼 보안(Security)에 대한 고민도 깊어졌습니다. 제가 직접 여러 환경을 구축하고 운영하면서 느낀 건데, ‘개발 속도만 빠르면 장땡이지!’ 했다가 크게 데인 적이 한두 번이 아니거든요. 😅

    특히 컨테이너 이미지는 한 번 만들면 여러 환경에서 재사용되기 때문에, 이미지 안에 숨겨진 취약점은 나중에 큰 사고로 이어질 수 있습니다. 그래서 오늘은 컨테이너 이미지의 취약점을 미리 스캔하고 관리해주는 도구들, 그중에서도 Trivy, Aqua Security, Snyk 세 가지 솔루션의 비용(Cost)과 기능(Feature)을 제 경험을 바탕으로 심층 분석해보려고 합니다. 어떤 도구가 우리 환경에 가장 적합할지 함께 고민해보시죠!

    ⚠️ 면책 조항: 본 글은 보안 학습과 본인이 관리하는 시스템의 방어를 위한 교육 목적입니다. 타인의 시스템에 대한 무단 접근이나 공격은 불법이며 법적 처벌 대상이 될 수 있습니다. 모든 실습은 반드시 허가된 환경에서만 진행해주세요.

    컨테이너 보안 스캔 워크플로우 다이어그램: 개발부터 CI/CD, 스캐너를 통한 취약점 발견까지

    컨테이너 보안 스캐너는 개발-배포 파이프라인의 핵심 방어선입니다.

    컨테이너 보안 스캐너, 왜 필요할까요? (Concept Explanation)

    쉽게 말해, 컨테이너 보안 스캐너(Container Security Scanner)는 우리가 만든 도커 이미지(Docker Image) 안에 혹시 모를 취약점(Vulnerability)이나 잘못된 설정(Misconfiguration)이 없는지 꼼꼼히 검사해주는 도구입니다. 운영체제 라이브러리, 애플리케이션 종속성(dependencies), 심지어 설정 파일까지 싹 다 뒤져서 알려진 문제점들을 찾아주죠.

    이런 스캐너가 중요한 이유는 다음과 같거든요:

    • 조기 발견 및 수정(Early Detection & Remediation): 개발 단계에서 미리 취약점을 찾아서 고치면, 나중에 운영 환경에서 문제가 터지는 것보다 훨씬 적은 비용과 노력으로 해결할 수 있어요.
    • 규정 준수(Compliance): 특정 산업군에서는 보안 규정 준수가 필수인데, 스캐너를 활용하면 이런 요구사항을 더 쉽게 만족시킬 수 있거든요.
    • DevSecOps(데브섹옵스) 구현: 개발(Dev), 보안(Sec), 운영(Ops)을 통합하는 DevSecOps 문화에서 보안 스캐닝은 CI/CD 파이프라인에 필수적으로 통합되어야 할 요소입니다.

    Trivy로 컨테이너 이미지 스캔하기 (Hands-on Implementation)

    자, 그럼 제가 홈랩에서 가장 즐겨 쓰는 오픈소스 스캐너인 Trivy(트리비)를 직접 써보면서 어떻게 동작하는지 알아볼까요? Trivy는 Aqua Security에서 만든 오픈소스 취약점 스캐너인데, 빠르고 사용하기 쉽다는 장점 때문에 많은 개발자/운영자들에게 사랑받고 있습니다. 저도 처음엔 ‘이거 정말 공짜 맞아?’ 싶을 정도로 만족하며 쓰고 있거든요. 👍

    1. Trivy 설치

    macOS 기준으로 Homebrew(홈브루)를 사용하면 아주 간단하게 설치할 수 있습니다.

    
    # Trivy 설치 (macOS 예시)
    brew install aquasecurity/trivy/trivy
    
    # 설치 확인
    trivy --version
    # Output 예시:
    # Version: 0.49.1
    # ...
    

    다른 운영체제나 Docker 컨테이너로 실행하는 방법은 Trivy 공식 문서를 참고해주세요!

    2. Docker 이미지 스캔

    이제 설치된 Trivy로 특정 Docker 이미지를 스캔해볼까요? 저는 안정적인 버전의 Nginx(엔진엑스) 이미지를 예시로 사용하겠습니다. `nginx:1.21.6`은 비교적 널리 알려진 버전이라, 학습 데이터 컷오프 이전에도 충분히 존재했던 이미지입니다.

    
    # Nginx 1.21.6 이미지 스캔
    trivy image nginx:1.21.6
    

    명령어를 실행하면 Trivy가 해당 이미지의 레이어들을 분석하고, 발견된 취약점들을 severity(심각도)별로 정리해서 보여줄 겁니다. 처음엔 이게 뭔가 싶었는데, 자세히 보면 CVE(Common Vulnerabilities and Exposures) 번호와 함께 어떤 패키지에 어떤 문제가 있는지, 그리고 권고되는 해결책까지 친절하게 알려줘요. 정말 편하더라고요!

    Trivy 컨테이너 이미지 스캔 결과 예시: 심각도별 취약점 목록과 해결책

    Trivy 스캔 결과는 심각도와 함께 취약점 정보, 해결책을 명확하게 보여줍니다.

    삽질 경험: 너무 많은 경고, 어떻게 다루지? (Troubleshooting & Best Practices)

    Trivy를 처음 써봤을 때, ‘와, 세상에 이렇게 취약점이 많았다고?!’ 하면서 놀랐던 기억이 있습니다. 특히 공식 이미지인데도 CRITICAL(치명적), HIGH(높음) 등급의 경고가 수십 개씩 쏟아져 나오는 걸 보고 멘붕이 오기도 했었죠. 🤯

    여기서 중요한 포인트! 모든 경고를 당장 다 해결할 수는 없습니다. 중요한 건 우선순위(Priority)를 정하고, 우리 서비스에 미치는 영향(Impact)을 분석하는 겁니다.

    1. 미해결 취약점 필터링 (`–ignore-unfixed`)

    간혹 어떤 취약점은 아직 패치(patch)가 나오지 않아 해결할 수 없는 경우가 있습니다. 이런 경우까지 경고로 계속 뜨면 노이즈가 너무 심해져요. 이럴 땐 `–ignore-unfixed` 옵션을 사용해서 아직 수정되지 않은 취약점은 제외하고 볼 수 있습니다.

    2. 심각도별 필터링 (`–severity`)

    모든 MEDIUM(중간)이나 LOW(낮음) 레벨의 취약점을 당장 해결하기는 어렵습니다. 보통은 CRITICAL이나 HIGH 레벨부터 우선 처리하는 게 일반적이거든요. `–severity` 옵션으로 원하는 심각도만 지정해서 볼 수 있어요.

    
    # CRITICAL, HIGH 심각도의 미해결 취약점 제외 스캔
    trivy image --severity HIGH,CRITICAL --ignore-unfixed nginx:1.21.6
    

    이렇게 옵션을 조합해서 사용하면, 정말 중요한 취약점만 집중해서 볼 수 있고, 불필요한 노이즈를 줄여서 실제 액션으로 이어질 가능성이 훨씬 높아지더라고요. 제가 직접 해보니, 이 필터링 작업이 엄청 중요하더라고요. 삽질 좀 했습니다 ㅎㅎ

    스캔 결과 해석 및 후속 조치 (Verification & Results)

    Trivy 스캔 결과는 보통 다음과 같은 정보를 포함합니다.

    • CVE ID: 고유한 취약점 식별 번호 (예: CVE-2023-XXXX)
    • Severity: 취약점의 심각도 (CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN)
    • Package: 취약점이 발견된 패키지 이름 및 버전
    • Installed Version: 현재 이미지에 설치된 패키지 버전
    • Fixed Version: 취약점이 해결된 패키지 버전 (이 버전 이상으로 업데이트해야 함)
    • Title/Description: 취약점에 대한 간략한 설명

    스캔 결과를 보고 나면 어떻게 해야 할까요?

    1. 가장 먼저 Fixed Version 확인: 해당 패키지를 Fixed Version 이상으로 업데이트할 수 있는지 확인하고, Dockerfile(도커파일)을 수정해서 이미지를 다시 빌드(rebuild)합니다.
    2. 영향 분석: 패치 적용이 어렵다면, 해당 취약점이 우리 서비스에 실제로 어떤 영향을 미칠 수 있는지 심층 분석합니다. 예를 들어, 특정 포트가 외부에 노출되지 않는다면 일부 네트워크 관련 취약점은 우선순위가 낮아질 수 있겠죠.
    3. 예외 처리(Suppression): 불가피하게 당장 해결할 수 없거나, 우리 서비스에 영향이 없다고 판단되면, 문서화된 근거를 가지고 해당 취약점을 일시적으로 무시(suppress)할 수 있습니다. 하지만 이는 최후의 수단이며, 지속적으로 재평가해야 합니다.

    이런 과정을 통해 저는 ‘보안은 개발의 한 부분’이라는 것을 다시 한번 깨달았습니다. 단순히 스캔만 하고 끝내는 게 아니라, 결과를 이해하고 적절한 조치를 취하는 것이 중요하더라고요.

    Trivy, Aqua Security, Snyk 컨테이너 보안 솔루션 기능 및 비용 모델 비교 인포그래픽

    세 가지 컨테이너 보안 스캐너의 핵심 기능과 비용 모델을 한눈에 비교할 수 있습니다.

    Trivy, Aqua Security, Snyk: 비용 및 기능 비교 (Cost & Feature Analysis)

    이제 Trivy 외에 다른 상용 솔루션인 Aqua Security와 Snyk는 어떤 특징을 가지고 있는지, 그리고 비용(Cost) 측면에서는 어떻게 다른지 비교해보겠습니다. 이들은 단순 취약점 스캔을 넘어, 더 넓은 범위의 컨테이너 보안(Container Security) 기능을 제공합니다.

    컨테이너 보안 스캐너 주요 솔루션 비교

    제가 직접 사용해보고, 또 주변 동료들의 경험담을 들으면서 느낀 점들을 바탕으로 비교표를 만들어봤습니다.

    항목 Trivy Aqua Security (Aqua Cloud Native Security Platform) Snyk (스닉)
    주 사용 목적 개발/CI/CD 단계의 빠른 취약점 스캔 및 SBOM 생성 엔터프라이즈급 통합 Cloud Native 보안 플랫폼 (스캔, 런타임, 네트워크, 워크로드 보호 등) 개발자 중심의 코드, 종속성, 컨테이너, IaC 보안 및 취약점 자동 수정 제안
    라이선스 오픈소스 (Apache 2.0) 상용 솔루션 (유료 구독) 상용 솔루션 (유료 구독, 제한적 무료 플랜 제공)
    통합 용이성 CLI, Docker, Kubernetes, CI/CD 파이프라인 (GitHub Actions, GitLab CI 등) CI/CD, Kubernetes, Cloud Platform, Registry 등 전방위 통합 IDE, Git Repositories, CI/CD, Container Registries 등 개발자 워크플로우 중심 통합
    스캔 범위 OS 패키지, 프로그래밍 언어 종속성, IaC(Infrastructure as Code), 설정 파일, SBOM 이미지, 컨테이너, 서버리스, Kubernetes, 런타임 환경, 클라우드 자산 등 광범위 코드, 오픈소스 종속성, 컨테이너 이미지, IaC 설정
    부가 기능 SBOM(Software Bill of Materials) 생성, 이미지 서명 검증 런타임 보호, 네트워크 방화벽, KSPM(Kubernetes Security Posture Management), 데이터 보호, 통합 대시보드 및 보고서 자동 취약점 수정 제안, 라이선스 준수 검사, 코드 보안, 개발자 교육 자료
    비용 모델 무료 (오픈소스) 구독 기반 (스캔 대상 이미지 수, 보호하는 노드/워크로드 수, 사용량 기반 등 복합적) 구독 기반 (개발자 수, 월별 테스트 횟수, 프로젝트 수 등 복합적)

    비용 측면에서 보면, Trivy는 오픈소스이므로 직접 운영하는 데 드는 인프라 비용 외에는 무료입니다. 하지만 Aqua Security나 Snyk 같은 상용 솔루션은 기업 규모와 사용량에 따라 상당한 구독료가 발생할 수 있습니다. 예를 들어, 수백 개의 컨테이너 이미지를 관리하고 수십 대의 Kubernetes 노드에서 런타임 보호까지 필요하다면, 연간 수천만 원에서 억대까지도 비용이 들 수 있더라고요. 물론 이 금액은 제품마다, 계약 조건마다 천차만별입니다. 제가 특정 가격을 확언할 수는 없지만, ‘오픈소스와 상용 솔루션의 가격 차이는 크다’는 점은 분명합니다.

    따라서 컨테이너 보안 스캐너를 선택할 때는 단순히 기능만 볼 것이 아니라, 우리 조직의 규모, 예산, 기존 인프라와의 통합 용이성, 그리고 필요한 보안 범위 등을 종합적으로 고려해야 합니다. 무조건 비싼 솔루션이 좋다고 할 수는 없거든요. “우리 팀은 개발 속도가 생명인데, 보안 스캐너 때문에 속도가 느려지면 안 돼!” 같은 고민도 충분히 할 수 있습니다. 이럴 땐 Snyk처럼 개발자 워크플로우에 녹아드는 솔루션이 더 효과적일 수 있고요.

    Trivy, Aqua Security, Snyk 장단점 및 추천 사용 사례 요약 비교

    Trivy, Aqua Security, Snyk 각 솔루션의 장단점과 추천 사용 시나리오를 요약한 비교표입니다.

    마무리: 우리에게 맞는 컨테이너 보안 스캐너는? (Conclusion)

    오늘은 컨테이너 보안의 중요한 축인 Trivy, Aqua Security, Snyk 세 가지 솔루션에 대해 기능과 비용(Cost) 관점에서 자세히 알아봤습니다. 제가 직접 써보고, 삽질하면서 느낀 점들을 솔직하게 공유해드렸는데요.

    결론적으로 어떤 도구를 선택할지는 여러분의 상황에 따라 달라집니다.

    • 작은 프로젝트, 개인 홈랩, 또는 제한된 예산으로 기본적인 취약점 스캔을 시작하고 싶다면? ✅ Trivy가 최고의 선택입니다. CLI 기반으로 가볍게 시작하고, CI/CD에 통합하기도 쉽습니다.
    • 개발 초기 단계부터 보안을 녹여내고 싶고, 개발자 중심의 자동화된 워크플로우와 코드 레벨의 빠른 피드백이 중요하다면? 💡 Snyk를 고려해보세요. IDE 통합과 자동 수정 제안 기능이 개발 생산성을 해치지 않으면서 보안을 강화하는 데 도움을 줄 겁니다.
    • 대규모 엔터프라이즈 환경에서 통합적인 Cloud Native 보안 플랫폼이 필요하고, 취약점 스캔을 넘어 런타임 보호, 네트워크 보안, 규정 준수까지 전방위적인 관리가 필요하다면? 🚀 Aqua Security가 적합합니다. 물론 그만큼 비용 투자는 필요하겠죠.

    어떤 도구를 선택하든 중요한 건, 보안은 한 번 하고 끝나는 게 아니라 지속적인 관심과 개선이 필요하다는 점입니다. 스캐너는 도구일 뿐, 그 결과를 이해하고 적절한 조치를 취하는 것이 가장 중요합니다. 여러분의 컨테이너 환경이 더욱 안전해지기를 바라며, 다음 글에서는 컨테이너 런타임 보안에 대해 더 자세히 다뤄볼게요. 궁금한 점이 있다면 언제든 댓글 남겨주세요! 😉

  • [보안] Trivy 이미지 스캔 시 흔히 발생하는 오류와 해결 방법

    [보안] Trivy 이미지 스캔 시 흔히 발생하는 오류와 해결 방법

    [컨테이너 보안] Trivy 이미지 스캔 오류 해결, 삽질 끝에 찾은 해법

    안녕하세요, 13년차 인프라 엔지니어 ’13년차의 서버실’ 주인장입니다. 오늘은 컨테이너 보안의 필수 도구인 Trivy를 사용하다가 흔히 겪을 수 있는 오류들과 제가 직접 삽질하며 찾아낸 해결 방법들을 공유해 보려고 합니다. 사실 처음에는 Trivy가 ‘딱 이거다!’ 싶을 정도로 간편하고 강력해 보였거든요. 그런데 막상 CI/CD 파이프라인에 물려서 쓰려니 예상치 못한 오류들이 툭툭 튀어나오더라고요. 꽤나 골머리를 앓았는데, 저와 같은 경험을 하신 분들이 분명 있을 거라 생각합니다. 혹시 Trivy 이미지 스캔 오류 때문에 밤잠 설치고 계신가요? 그렇다면 이 글이 큰 도움이 될 겁니다.

    ⚠️ 면책 문구: 본 글은 보안 학습과 본인이 관리하는 시스템의 방어를 위한 교육 목적입니다. 타인의 시스템에 대한 무단 접근이나 공격은 불법이며, 법적 처벌 대상이 될 수 있습니다. 모든 기술 활용은 윤리적이고 합법적인 범위 내에서 이루어져야 합니다.

    Trivy 컨테이너 이미지 보안 스캔의 전체적인 흐름을 보여주는 다이어그램입니다.

    Trivy, 컨테이너 보안의 든든한 파수꾼

    Trivy(트리비)는 Aqua Security에서 개발한 오픈소스 취약점 스캐너예요. 컨테이너 이미지뿐만 아니라 파일 시스템, Git 레포지토리, Kubernetes 클러스터, 심지어 IaC(Infrastructure as Code) 설정 파일까지 다양한 대상에서 취약점이나 설정 오류를 찾아내죠. 쉽게 말해, 우리가 만든 컨테이너 이미지가 혹시 모를 보안 구멍을 가지고 있지는 않은지, 혹은 개발 과정에서 실수로 취약한 라이브러리를 사용하진 않았는지 꼼꼼하게 검사해 주는 도구라고 보시면 됩니다.

    요즘처럼 컨테이너 기반의 애플리케이션 개발이 대세인 시대에, DevSecOps(데브섹옵스)는 선택이 아닌 필수가 되었어요. 개발 초기 단계부터 보안을 고려하지 않으면 나중에 훨씬 큰 비용과 시간을 들여야 하는 상황이 생기거든요. Trivy는 이런 DevSecOps를 실현하는 데 아주 효과적인 도구입니다. CI/CD 파이프라인에 Trivy를 통합하면, 이미지가 빌드되자마자 자동으로 취약점을 스캔하고, 문제가 발견되면 배포를 막거나 경고를 줄 수 있어요. 제가 홈랩에서 여러 프로젝트를 진행할 때도 Trivy 덕분에 심각한 보안 문제를 미리 잡아낼 수 있었던 경험이 꽤 많습니다.

    Trivy, 직접 설치하고 스캔해보기

    Trivy 설치도 진짜 간단해요. 저는 주로 macOS 환경에서 Homebrew를 사용하는데, 다른 OS에서도 금방 설치할 수 있습니다. 우분투 서버에서 apt를 이용하기도 하고, Docker 컨테이너로 실행하기도 하는데, 정말 편하더라고요!

    
    # macOS (Homebrew)
    brew install aquasecurity/trivy/trivy
    
    # Debian/Ubuntu (권장)
    curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
    
    # Docker 컨테이너로 실행 (가장 유연함!)
    docker run --rm aquasecurity/trivy:latest --help
    

    설치가 완료되었으면, 이제 간단한 이미지 스캔을 해볼까요? 저는 보통 Nginx 공식 이미지를 많이 사용하는데, 이걸로 한번 테스트해봅시다.

    
    trivy image nginx:latest
    

    이 명령어를 실행하면 Nginx 이미지의 취약점들이 주르륵 나올 거예요. 처음에는 결과가 너무 많아서 당황할 수도 있는데, CRITICAL(치명적)이나 HIGH(높음) 등 심각도가 높은 것들부터 우선적으로 살펴보는 게 좋습니다. 저도 처음엔 수많은 결과에 압도돼서 뭘 먼저 봐야 할지 몰라 헤맸던 기억이 나네요. 하하.

    CI/CD 파이프라인에 Trivy가 통합된 워크플로우 다이어그램

    CI/CD 파이프라인 내 Trivy 스캔 단계를 시각적으로 보여주는 다이어그램입니다.

    ⚠️ 삽질 경험담: Trivy 이미지 스캔 시 흔히 겪는 오류와 해결책

    자, 이제 본론입니다. 제가 13년 동안 서버실에서 겪었던 수많은 삽질 중, Trivy 관련해서 가장 기억에 남는 오류들과 그 해결 방법들을 공유해 드릴게요. 정말 이거 때문에 밤샘도 몇 번 했었습니다. 여러분은 저처럼 고생하지 마시라고 자세히 알려드립니다.

    1. Docker 데몬 연결 오류 (`failed to analyze image: analyze image failed: …`)

    Trivy가 컨테이너 이미지를 스캔하려면 Docker 데몬(Daemon)에 접근할 수 있어야 합니다. 그런데 이 데몬이 제대로 실행되지 않았거나, Trivy를 실행하는 사용자에게 접근 권한(Permission)이 없을 때 이 오류가 발생하곤 해요.

    • 문제 상황: Error: failed to analyze image: analyze image failed: GET http://unix/v1.24/images/nginx:latest/json: dial unix /var/run/docker.sock: connect: permission denied
    • 원인: Docker 소켓 파일(/var/run/docker.sock)에 대한 권한 부족 또는 Docker 데몬 미실행.
    • 해결 방법:
      1. Docker 데몬 실행 확인: sudo systemctl status docker 명령으로 Docker 서비스가 활성화되어 있는지 확인합니다. 만약 실행 중이 아니라면 sudo systemctl start docker로 시작하세요.
      2. 사용자에게 Docker 그룹 권한 부여: 현재 사용자를 docker 그룹에 추가하여 소켓 파일에 접근할 수 있도록 합니다.
      3. 
        sudo usermod -aG docker $USER
        newgrp docker  # 또는 로그아웃 후 다시 로그인
        

    2. 이미지 Pull 오류 (`failed to analyze image: analyze image failed: GET https://registry-1.docker.io/v2/…`)

    Trivy는 스캔하기 전에 대상 이미지를 로컬로 가져옵니다(Pull). 이때 프라이빗 레지스트리(Private Registry)에 접근해야 하거나, 네트워크 방화벽(Firewall) 등의 문제로 이미지를 가져오지 못할 때 발생해요.

    • 문제 상황: Error: failed to analyze image: analyze image failed: GET https://registry-1.docker.io/v2/my-private-repo/my-image/manifests/latest: denied: requested access to the resource is denied
    • 원인: 레지스트리 인증 정보 누락, 네트워크 문제(프록시, 방화벽), 이미지 이름 오타.
    • 해결 방법:
      1. 레지스트리 로그인: 프라이빗 레지스트리인 경우 docker login <your-registry> 명령으로 로그인 정보를 Trivy가 사용할 수 있도록 해줍니다.
      2. 네트워크 설정 확인: 기업 환경에서는 프록시 서버(Proxy Server)를 통해 인터넷에 접속해야 하는 경우가 많아요. Trivy는 HTTP_PROXY, HTTPS_PROXY 환경 변수를 지원하므로 이를 설정해 주세요.
      3. 
        export HTTP_PROXY="http://proxy.example.com:8080"
        export HTTPS_PROXY="http://proxy.example.com:8080"
        trivy image my-private-repo/my-image:latest
        
      4. 방화벽 규칙 검토: 필요한 포트(예: 443, 80)가 열려 있는지 확인합니다.

    3. 취약점 데이터베이스(DB) 초기화 오류 (`failed to initialize vulnerability DB: …`)

    Trivy는 최신 취약점 정보를 스캔하기 위해 자체 데이터베이스를 사용합니다. 이 DB를 업데이트하거나 초기화하는 과정에서 문제가 생기면 스캔을 시작할 수 없어요.

    • 문제 상황: FATAL: failed to initialize vulnerability DB: failed to download vulnerability DB: failed to download DB from ...
    • 원인: 네트워크 연결 불량, Trivy DB 서버 접근 불가, 디스크 공간 부족.
    • 해결 방법:
      1. 네트워크 연결 확인: Trivy DB를 다운로드하는 URL(보통 GitHub 또는 Aqua Security CDN)에 접근 가능한지 ping이나 curl로 확인합니다.
      2. 디스크 공간 확인: df -h 명령으로 Trivy가 설치된 디렉토리(보통 ~/.cache/trivy)의 디스크 공간이 충분한지 확인해요.
      3. 수동 DB 업데이트 시도: 문제가 지속되면 DB를 수동으로 업데이트해 보세요.
      4. 
        trivy sbom --download-db-only
        

    4. WSL2 환경에서 Docker Desktop 없이 Trivy 사용 시 주의사항

    Windows Subsystem for Linux (WSL) 2 환경에서 Docker Desktop을 사용하지 않고 Trivy를 실행할 때, 저도 처음엔 이게 뭔가 싶었는데 이런 오류 메시지를 만날 수 있어요.

    • 문제 상황: FATAL: Trivy is not supported on Windows Subsystem for Linux (WSL) without Docker Desktop. Please install Docker Desktop or run Trivy in a container.
    • 원인: Trivy가 이미지 스캔을 위해 WSL2의 호스트 Docker 데몬에 접근해야 하는데, Docker Desktop이 설치되어 있지 않아 데몬을 찾지 못하는 경우예요.
    • 해결 방법:
      1. Docker Desktop 설치: 가장 권장되는 방법입니다. Docker Desktop을 설치하면 WSL2와 원활하게 통합되어 Trivy가 Docker 데몬을 쉽게 사용할 수 있어요.
      2. WSL2 내에 Docker Engine 직접 설치: 좀 더 복잡하지만, WSL2 배포판 안에 직접 Docker Engine을 설치하고 실행하는 방법도 있습니다. 이 경우 sudo service docker start 등으로 데몬을 수동으로 시작해야 할 수 있어요.
      3. Trivy를 Docker 컨테이너로 실행: 이 방법은 호스트의 Docker 데몬에 의존하지 않고 Trivy 자체를 컨테이너 안에서 실행하는 방식이라 유용합니다.
      4. 
        docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasecurity/trivy:latest image nginx:latest
        

    이 외에도 `–skip-update` 옵션을 사용하여 DB 업데이트를 건너뛸 수 있지만, 이는 오래된 취약점 정보로 스캔하게 되므로 꼭 필요한 경우가 아니면 권장하지 않아요. 보안은 최신 정보가 생명이니까요!

    오류 해결 후, 스캔 결과 검증 및 해석

    숱한 삽질 끝에 드디어 Trivy 스캔이 성공적으로 완료되었다면, 이제 그 결과를 제대로 해석하는 것이 중요합니다. Trivy는 기본적으로 콘솔에 결과를 출력하지만, JSON, SARIF 등 다양한 포맷으로도 출력할 수 있어서 CI/CD 파이프라인에서 자동화된 분석에 아주 유용하게 쓰여요.

    
    trivy image --format json -o results.json my-image:latest
    
    Trivy 컨테이너 이미지 취약점 스캔 결과 예시

    Trivy 스캔 결과 보고서의 심각도별 취약점 목록을 시각화한 이미지입니다.

    결과를 볼 때는 다음 기준들을 중점적으로 살펴보세요.

    항목 설명 해석 및 권고
    Severity (심각도) CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN CRITICAL, HIGH는 즉시 조치 필요. 심각한 보안 위협으로 이어질 수 있어요.
    Vulnerability ID (취약점 ID) CVE-YYYY-XXXXX 등의 고유 식별자 해당 ID로 NVD(National Vulnerability Database) 등에서 상세 정보를 검색하면 돼요.
    Installed Version (설치된 버전) 현재 이미지에 포함된 패키지 버전 취약점이 발견된 패키지의 버전입니다.
    Fixed Version (수정된 버전) 취약점이 패치된 패키지 버전 이 값이 존재한다면, 해당 버전으로 업데이트해야 해요. Fixed Version이 없으면 대안을 찾아야 합니다.
    Title (제목) 취약점에 대한 간략한 설명 취약점의 내용을 빠르게 파악할 수 있어요.

    특히 Fixed Version이 존재하는지 여부가 중요합니다. 만약 Fixed Version이 있다면 해당 패키지를 업데이트하는 것으로 대부분의 취약점을 해결할 수 있어요. 예를 들어, Nginx 이미지에서 OpenSSL 취약점이 발견되고 Fixed Version이 특정 버전이라면, Dockerfile에서 Nginx를 빌드할 때 OpenSSL을 해당 버전으로 명시하거나, 베이스 이미지를 최신으로 업데이트하는 등의 조치를 취하면 됩니다.

    Dockerfile 예시:

    
    FROM debian:bullseye-slim
    
    # 보안 패치를 포함한 패키지 업데이트
    RUN apt-get update && apt-get install -y --no-install-recommends \
        openssl \
        && rm -rf /var/lib/apt/lists/*
    
    # ... 나머지 Dockerfile 내용 ...
    

    또한, Trivy가 너무 많은 취약점을 보고하여 혼란스러울 때는 .trivyignore 파일을 활용하여 의도적인 False Positive(오탐)를 무시할 수도 있어요. 하지만 정말 필요한 경우에만 사용해야 하며, 신중하게 결정해야 합니다.

    마무리하며: 지속적인 관심이 최고의 보안입니다

    오늘은 Trivy 이미지 스캔 시 흔히 발생하는 오류와 해결 방법에 대해 제가 직접 겪었던 경험을 바탕으로 이야기해 봤습니다. 컨테이너 보안은 한 번 설정해두면 끝나는 게 아니라, 새로운 취약점이 끊임없이 발견되므로 지속적인 관심과 관리가 필요해요. Trivy는 이런 지속적인 보안 관리를 위한 훌륭한 도구임이 분명합니다.

    Trivy 오류 유형 및 해결 방법 요약 인포그래픽

    Trivy 사용 중 발생할 수 있는 주요 오류 유형과 그 해결책을 요약한 인포그래픽입니다.

    만약 여러분의 CI/CD 파이프라인에서 Trivy가 자꾸 에러를 뿜어낸다면, 이 글에서 제시된 해결 방법들을 하나씩 적용해 보세요. 대부분의 문제는 Docker 데몬 권한, 네트워크 설정, 또는 Trivy DB 업데이트 문제에서 비롯됩니다. 특히, Docker 데몬 연결 문제와 레지스트리 인증 문제는 제가 가장 많이 마주쳤던 케이스들이니, 이 부분들을 먼저 확인해 보시는 것을 추천합니다.

    저도 여전히 홈랩에서 새로운 기술을 실험하며 삽질을 거듭하고 있습니다. 그 과정에서 얻은 소중한 경험들은 앞으로도 ’13년차의 서버실’ 블로그를 통해 꾸준히 공유해 드릴게요. 다음번에는 Trivy를 이용한 Kubernetes 클러스터 보안 스캔에 대한 이야기를 다뤄볼까 합니다. 그때까지 모두 안전한 컨테이너 환경을 만드시길 바랍니다! 궁금한 점이 있다면 언제든지 댓글로 남겨주세요!