[학습기록] 폐쇄망 네트워크에서 Trivy로 소스코드의 보안 취약점 진단하기
사실 지금까지는 기능의 구현과 성능 최적화에만 집중하면서 보안에 대해서는 크게 신경쓰지 못했습니다.
하지만 최근 대규모 정보유출 사고가 연이어 발생하는 것을 보면서 앞으로는 서비스의 보안성 강화에도 관심을 기울여야 하겠다는 생각이 들었습니다.
그 시작으로 소스코드의 보안 취약점 진단을 검토했습니다.
1. Trivy 소개
Trivy는 컨테이너 이미지, 파일 시스템, Git 저장소, Kubernetes 설정 등 다양한 소프트웨어 구성 요소에서 보안 취약점(CVE)을 찾아주는 오픈소스 기반의 스캐너입니다.

무료로 사용이 가능하며, 설치와 사용법도 매우 간단합니다. 뿐만 아니라, CI/CD 파이프라인에 통합하여 자동화된 보안 검사도 가능하다고 합니다.
2. Trivy 다운로드 및 설치
설치 파일은 Trivy 다운로드 사이트에서 다운로드 받으면 됩니다.
제가 사용하는 개발용PC의 OS는 윈도우10입니다. 그래서 Windows Intel용 설치 파일을 다운로드 받았습니다.
또한, 개발용PC는 회사 보안 정책에 따라 인터넷 접근이 불가능한 폐쇄망 네트워크로 연결되어 있습니다.
그래서 인터넷 접근이 가능한 PC에서 설치 파일을 다운로드 받고, 개발용PC로 반입해서 설치해야 했습니다.
설치 방법은 간단합니다. 다운로드 받은 파일의 압축을 풀고, 원하는 경로로 이동시키면 됩니다.
참고로 제가 설치한 경로는 다음과 같습니다.
c:\trivy_0.68.1_windows-64bit
그리고 조금 편하게 사용하기 위해서 환경변수를 다음과 같이 추가했습니다.
SET TRIVY_HOME=c:\trivy_0.68.1_windows-64bit
SET PATH=%PATH%;%TRIVY_HOME%
3. Trivy 버전정보 확인
명령 프로프트 창을 열고, 다음의 명령을 사용하면 현재 설치되어 있는 Trivy의 버전정보를 확인할 수 있습니다.
c:\trivy_0.68.1_windows-64bit>trivy -v
Version: 0.68.1
제가 사용하는 개발용PC에서 정상적으로 버전정보가 출력되는 것을 확인할 수 있었습니다.
4. Trivy DB 다운로드
Trivy는 DB에 정의된 정보를 참고해서 보안 취약점을 스캔하게 됩니다.
보안 취약점 검사를 시작하기 전에 최신버전의 DB가 존재하는지 확인하고, 필요하면 다운로드 받는 절차가 먼저 수행됩니다.
인터넷 접근이 가능한 일반적인 환경에서는 따로 신경쓰지 않아도 됩니다. DB가 존재하지 않아도 자동으로 다운로드 받아서 설치해주기 때문입니다.
하지만 제가 사용하는 개발용PC는 폐쇄망 네트워크에 연결되어 있기 때문에 자동으로 DB를 설치할 수 없습니다.
그래서 DB도 인터넷 접근이 가능한 PC에서 다운로드 받아서 개발용PC로 반입해야 했습니다.
중요
DB를 다운로드 받을 PC에도 Trivy가 설치되어 있어야 합니다.
DB를 다운로드하기 위한 명령은 버전에 따라 다를 수 있다고 합니다. 0.68.1 버전에서의 명령은 다음과 같습니다.
trivy image --cache-dir=[Trivy DB를 구성할 경로] --download-db-only
–download-db-only 대신 –download-java-db-only를 사용해서 자바코드의 보안취약점 진단에 사용되는 DB를 다운로드 받을 수도 있습니다.
C:\git\anti-phishing>trivy image --cache-dir=%TRIVY_HOME%\trivy_db --download-db-only
2025-12-12T14:22:57+09:00 INFO [vulndb] Need to update DB
2025-12-12T14:22:57+09:00 INFO [vulndb] Downloading vulnerability DB...
2025-12-12T14:22:57+09:00 INFO [vulndb] Downloading artifact... repo="mirror.gcr.io/aquasec/trivy-db:2"
77.74 MiB / 77.74 MiB [--------------------------------------------------------------------] 100.00% 15.40 MiB p/s 5.2s
2025-12-12T14:23:05+09:00 INFO [vulndb] Artifact successfully downloaded repo="mirror.gcr.io/aquasec/trivy-db:2"
5. Trivy DB 구조
Trivy 구조는 아래와 같은 구조로 구성됩니다.
[Trivy DB]
├─ db/
│ ├─ metadata.json
│ ├─ vulnerability.db
├─ java-db/
├─ …
└─ …
다운로드 받은 DB 파일의 압축을 해제하고, 원하는 위치에 파일을 복사해서 사용하면 됩니다.
6. 보안취약점 진단
특정 경로에 위치한 소스코드 파일의 보안 취약점을 검사하기 위해서 다음의 명령어를 사용하면 됩니다.
trivy fs [소스코드가 위치한 경로]
하지만 폐쇄망에서는 DB 다운로드 절차가 생략되도록 아래와 같이 옵션을 추가해서 사용해야 합니다.
trivy fs --cache-dir=[Trivy DB가 구성된 경로] --skip-db-update [소스코드가 위치한 경로]
다음은 실제로 아주 간단한 테스트용 프로젝트를 만들어서 보안취약점 검사를 실행해본 결과입니다.
C:\git\anti-phishing>trivy fs --cache-dir=%TRIVY_HOME%\trivy_db --skip-db-update .
2025-12-12T14:31:22+09:00 INFO [vuln] Vulnerability scanning is enabled
2025-12-12T14:31:22+09:00 INFO [secret] Secret scanning is enabled
2025-12-12T14:31:22+09:00 INFO [secret] If your scanning is slow, please try '--scanners vuln' to disable secret scanning
2025-12-12T14:31:22+09:00 INFO [secret] Please see https://trivy.dev/docs/v0.68/guide/scanner/secret#recommendation for faster secret detection
2025-12-12T14:31:22+09:00 INFO Number of language-specific files num=0
2025-12-12T14:31:22+09:00 WARN [report] Supported files for scanner(s) not found. scanners=[vuln]
2025-12-12T14:31:22+09:00 INFO [report] No issues detected with scanner(s). scanners=[secret]
Report Summary
┌────────┬──────┬─────────────────┬─────────┐
│ Target │ Type │ Vulnerabilities │ Secrets │
├────────┼──────┼─────────────────┼─────────┤
│ - │ - │ - │ - │
└────────┴──────┴─────────────────┴─────────┘
Legend:
- '-': Not scanned
- '0': Clean (no security findings detected)
테스트 프로젝트를 너무 간단하게 만들어서 보안 취약점이 발견되지는 않았습니다.
하지만, 회사에서 실제 개발하고 있는 프로젝트를 검사한 결과에는 JWT토큰이나 API키와 같은 민감정보가 하드코딩되어 있는 부분이 보안 취약점으로 진단되는 것을 확인할 수 있었습니다.