위협 행위자 'TeamPCP'의 소행으로 추정되는 대규모 공급망 공격이 2026년 3월 19일부터 Aqua Security의 Trivy 취약점 스캐너와 최소 두 개의 다른 프레임워크를 손상시켰습니다. 공격자들은 GitHub의 저장소 태그 기능을 악용하여 CI/CD 파이프라인을 탈취하고 자격 증명 탈취 악성코드를 주입했습니다. 이 캠페인은 신뢰할 수 있는 보안 도구를 광범위한 자격 증명 탈취 수단으로 변질시켰으며, 3대 주요 클라우드 제공업체 모두의 기밀 정보를 노렸습니다.
Microsoft Defender for Cloud 팀은 보안 블로그에서 "이 활동은 이후 Checkmarx KICS 및 LiteLLM을 포함한 추가 프레임워크로 확장되었습니다"라며 각 공격 단계의 핵심 체인이 유사하게 유지되었다고 언급했습니다. "각 공격 파동은 손상된 프로젝트 테마에 맞춘 새로운 C2 도메인을 사용했습니다."
공격자들은 aquasecurity/trivy-action GitHub 저장소의 77개 버전 태그 중 76개를 강제로 푸시(force-push)하고 aquasecurity/setup-trivy의 태그 7개 전체를 악성 코드로 리디렉션했습니다. 악성 Trivy 바이너리 버전 0.69.4도 공식 채널에 게시되었습니다. 악성코드는 AWS, GCP, Azure의 클라우드 자격 증명과 Kubernetes 비밀번호를 scan.aquasecurtiy[.]org와 같은 유사 도메인으로 유출했습니다.
이번 공격은 신뢰할 수 있는 보안 및 개발 도구를 내부 위협으로 바꾸어 놓았으며, 손상된 버전을 사용하여 자동화된 CI/CD 파이프라인을 운영하는 모든 조직에 상당한 위험을 초래하고 있습니다. 광범위한 자격 증명 수집에 집중한 것은 공격자의 목표가 후속 공격을 위해 클라우드 인프라에 대한 광범위한 액세스 권한을 얻는 것임을 시사하며, 전체 피해 범위는 여전히 조사 중입니다.
가변 태그가 무기가 된 경위
이번 공격은 Git의 핵심 설계 특징인 가변 태그(mutable tags)를 악용했습니다. 기본적으로 특정 소프트웨어 버전을 가리키는 레이블인 태그는 저장소에 대한 푸시 권한이 있는 사람이라면 누구나 다시 할당할 수 있습니다. 위협 행위자는 탈취한 자격 증명을 사용하여 trivy-action의 기존 버전 76개와 setup-trivy의 모든 버전을 악성 페이로드가 포함된 새 커밋을 가리키도록 재태깅했습니다.
버전 태그를 통해 이러한 액션을 참조하는 하위 CI/CD 워크플로는 다음 실행 시 공격자의 코드를 자동으로 가져오게 되었으며, GitHub 사용자 인터페이스에는 개발자에게 알릴 수 있는 가시적인 변경 사항이 나타나지 않았습니다. 또한 공격자는 커밋 ID를 위조하여 악성 커밋이 합법적인 것처럼 보이게 했는데, 이는 이전의 다른 공급망 공격에서도 확인된 전술입니다. 이 방법은 일반적인 버전 확인을 우회하며 악성코드가 조용히 확산되도록 합니다.
다단계 자격 증명 탈취
CI/CD 러너 내에서 실행되면 악성코드는 광범위한 자격 증명 수집 작업을 시작했습니다. 호스트 머신을 식별한 후, Python 기반 스틸러는 환경 변수와 인스턴스 메타데이터 서비스를 모두 쿼리하여 AWS, GCP, Microsoft Azure의 자격 증명을 검색했습니다.
악성코드는 클라우드 키에서 멈추지 않았습니다. Kubernetes 비밀번호를 열거 및 유출하고, 파일 시스템에서 설정 파일 내 API 키를 검색했으며, Slack 및 Discord 웹훅 URL을 수집했습니다. 탈취된 데이터는 tpcp.tar.gz 아카이브로 암호화되어 HTTP POST를 통해 공격자가 제어하는 서버로 전송되었습니다. 침해 사실을 숨기기 위해 악성코드는 합법적인 Trivy 스캐너를 실행하여 파이프라인이 예상되는 출력과 함께 성공적으로 완료되도록 했습니다.
완화 조치 및 영향받는 버전
조직은 즉시 CI/CD 파이프라인을 감사하고 영향받는 도구의 검증된 안전 버전을 실행하고 있는지 확인해야 합니다. 가변적인 버전 태그 대신 불변의 커밋 SHA로 액션을 고정하는 것이 가장 중요한 예방 조치입니다.
Microsoft는 다음과 같은 영향받는 제품 및 사용해야 할 최소 안전 버전 표를 제공했습니다.
| 제품 | 구성 요소 | 안전 버전 |
|---|
| Trivy | Trivy 바이너리 | v0.69.2 – v0.69.3 |
| trivy-action | v0.35.0 |
| setup-trivy | v0.2.6 |
| LiteLLM | litellm | v1.82.6 이하 |
| Checkmarx | checkmarx.cx-dev-assist | 1.10.0 이상 |
| checkmarx.ast-results | 2.56.0 이상 |
| ast-github-action | 2.3.33 |
| kics-github-action | 2.1.20 |
보안 팀은 침해 지표를 추적할 수도 있습니다. Microsoft Defender 고객은 고급 헌팅 쿼리를 사용하여 악성 명령, 공격자 도메인으로의 의심스러운 DNS 쿼리, Kubernetes 비밀번호 열거를 찾을 수 있습니다. 예를 들어, 다음 쿼리는 TeamPCP 공격과 관련된 명령줄을 식별하는 데 도움이 될 수 있습니다.
CloudProcessEvents | where ProcessCommandLine has_any ('scan.aquasecurtiy.org','checkmarx.zone','tpcp.tar.gz')
이번 사건은 소프트웨어 공급망의 취약성을 상기시키는 중요한 계기입니다. 투자자들에게는 엄격한 검증 프로세스 없이 오픈 소스 소프트웨어에 크게 의존하는 기업의 운영 및 재무적 리스크를 시사합니다. 손상된 도구를 사용하는 것으로 밝혀진 기업은 상당한 복구 비용, 잠재적인 데이터 유출 책임 및 고객 신뢰 상실에 직면할 수 있으며, 이는 주가 성과에 영향을 미칠 수 있습니다. 반면, 이번 사건은 팔로알토 네트웍스(PANW)나 크라우드스트라이크(CRWD)와 같이 공급망 보안 및 클라우드 워크로드 보호를 전문으로 하는 사이버 보안 기업들에게 호재가 될 수 있습니다.
본 기사는 정보 제공 목적으로만 작성되었으며 투자 조언을 구성하지 않습니다.