보안 스캐너가 무기가 될 때: Trivy 공급망 공격에서 얻은 교훈
Source: Dev.to
개요
2026년 3월 19일, 위협 그룹 TeamPCP가 aquasecurity/trivy-action GitHub Action의 75개 태그를 탈취했습니다. 공격자가 제어한 코드는 조용히 실행되었으며 정상적으로 동작하는 것처럼 보였고, 자격 증명을 유출했습니다. 이 침해는 5일 동안 감지되지 않다가 2026년 3월 24일에 발견되었습니다.
중요 경고: 2026년 3월 19일부터 3월 24일 사이에 trivy-action 또는 setup-trivy를 고정된 커밋 SHA 없이 실행한 CI/CD 파이프라인이 있다면, 해당 파이프라인에서 접근 가능한 모든 비밀이 유출된 것으로 간주하십시오.
공격 요약
- 벡터: TeamPCP가 Aqua Security의 유지보수자 계정을 표적 피싱으로 탈취하고, 릴리스 태그를 강제 푸시하여 악성 커밋을 가리키게 했습니다. 이 커밋에는 WAVESHAPER.V2라는 크로스‑플랫폼 원격 접근 도구가 포함되어 있습니다.
- 지속성: 악성 바이너리는 정식 Trivy 스캔을 실행하고 결과를 전달한 뒤, 메모리 내에서만 동작하며 자체 삭제되었습니다. 작업 공간에 예상치 못한 파일이 남지 않았습니다.
- 탐지 난이도:
- 스캔 결과가 그럴듯해 보였습니다.
- GitHub Actions 로그도 정상으로 보였습니다.
- 오직 네트워크 아웃바운드 모니터링만이
142.11.206.73와sfrclak.com에 대한 C2 콜백을 신뢰성 있게 탐지할 수 있었습니다.
교훈
레이어 1: 가변 참조
- 태그와 버전 문자열은 가변적인 포인터이며 무결성을 보장하지 않습니다.
- 전체 커밋 SHA만이 불변이며 암호학적 보증을 제공합니다.
레이어 2: 설계상 높은 신뢰
- 보안 스캐너는 광범위한 파일 시스템 접근이 필요하므로, 손상된 버전은 러너가 보유한 모든 자격 증명을 유출할 수 있습니다.
레이어 3: 평판에 의한 신뢰
- 팀들은 종종 공급업체 평판에 기반해 액션을 신뢰하고, 정확한 바이너리나 커밋을 검증하지 않아 잘못된 안보감을 가집니다.
완화 권고 사항
불변 SHA로 액션 고정
# Before: mutable tag reference
- uses: aquasecurity/trivy-action@v0.29.0
# After: pinned to immutable commit SHA
- uses: aquasecurity/trivy-action@a2901b0d1cf3ff4857f5cdf63e42e26d35cfa5e1
Cosign으로 바이너리 검증
- 실행 전에
cosign을 사용해 스캐너 바이너리 서명을 검증하고, 인증서 식별자와 OIDC 발급자를 확인하십시오.
작업 권한 제한
- 각 작업에 최소한의 권한만 부여합니다.
- 보안 스캔 작업에 무관한 자격 증명(예: 클라우드 제공자 키)을 주입하지 마십시오.
아웃바운드 연결 모니터링
- StepSecurity harden‑runner와 같은 도구를 배포해 CI/CD 실행 중 네트워크 아웃바운드를 감시하고 제어합니다.
- 모든 러너에서 아웃바운드 로깅을 활성화해 의심스러운 콜백을 포착합니다.
로컬‑우선 스캔 방식 채택
- 코드를 CI에 올리기 전에 로컬에서 Trivy(또는 기타 보안 도구)를 실행합니다.
- 이렇게 하면 자격 증명 노출이 개발자 워크스테이션에만 제한되고 전체 파이프라인으로 확산되지 않습니다.
즉각적인 대응 조치 (영향을 받은 경우)
- 접근 가능했을 수 있는 모든 비밀을 교체하십시오:
GITHUB_TOKEN및 모든 Personal Access Token.- 컨테이너 레지스트리 자격 증명(Docker Hub, GHCR, ECR, GCR, ACR).
- 클라우드 제공자 자격 증명(AWS, GCP, Azure).
- Kubernetes 서비스‑계정 토큰.
- 네트워크 로그를 감사하여 침해 징후(
142.11.206.73또는sfrclak.com으로의 연결) 를 확인합니다. - 워크플로우의 모든 액션을 불변 커밋 SHA로 고정합니다.
- 서명(예: Cosign)으로 스캐너 바이너리를 검증합니다.
- 작업 권한을 최소한으로 제한합니다.
- 보안 스캔 작업에서 무관한 비밀을 분리합니다.
- 모든 CI 러너에서 아웃바운드 모니터링을 활성화합니다.
- CI 파이프라인에서 노출을 줄이기 위해 로컬‑우선 사전 커밋 스캔을 고려합니다.