보안 스캐너가 무기가 될 때: Trivy 공급망 공격에서 얻은 교훈

발행: (2026년 4월 8일 AM 02:06 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

개요

2026년 3월 19일, 위협 그룹 TeamPCPaquasecurity/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.73sfrclak.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(또는 기타 보안 도구)를 실행합니다.
  • 이렇게 하면 자격 증명 노출이 개발자 워크스테이션에만 제한되고 전체 파이프라인으로 확산되지 않습니다.

즉각적인 대응 조치 (영향을 받은 경우)

  1. 접근 가능했을 수 있는 모든 비밀을 교체하십시오:
    • GITHUB_TOKEN 및 모든 Personal Access Token.
    • 컨테이너 레지스트리 자격 증명(Docker Hub, GHCR, ECR, GCR, ACR).
    • 클라우드 제공자 자격 증명(AWS, GCP, Azure).
    • Kubernetes 서비스‑계정 토큰.
  2. 네트워크 로그를 감사하여 침해 징후( 142.11.206.73 또는 sfrclak.com 으로의 연결) 를 확인합니다.
  3. 워크플로우의 모든 액션을 불변 커밋 SHA로 고정합니다.
  4. 서명(예: Cosign)으로 스캐너 바이너리를 검증합니다.
  5. 작업 권한을 최소한으로 제한합니다.
  6. 보안 스캔 작업에서 무관한 비밀을 분리합니다.
  7. 모든 CI 러너에서 아웃바운드 모니터링을 활성화합니다.
  8. CI 파이프라인에서 노출을 줄이기 위해 로컬‑우선 사전 커밋 스캔을 고려합니다.
0 조회
Back to Blog

관련 글

더 보기 »