
Sha1-Hulud 웜이 다시 우리 삶 속으로 파고들었으며, 빠르게 확산되어 그 어느 때보다 큰 피해를 입히고 있습니다. 듄(Dune) 시리즈의 유명한 벌레에서 이름을 따온 이 공격은 전 세계 여러 조직에도 영향을 미치고 있습니다. 2025년 9월 16일 대규모 확산이 처음 보고된 이후, 이 웜은 다음과 같은 기법을 사용해 높은 파급력으로 빠르게 전파될 수 있음을 보여 주고 있습니다.
- npm 패키지 개발자의 GitHub 자격 증명이 탈취된 것을 악용하여 널리 사용되는 npm 패키지를 악성 코드화합니다. 현재 약 800개의 감염된 패키지가 보고되었으며, 이들 중 상당수가 널리 사용되고 있습니다.
- 감염된 npm 패키지가 다운로드 및 설치되면 GitHub, NPM 패키지 리포지터리, AWS 및 Azure 같은 클라우드 제공업체의 자격 증명을 수집합니다.
- 수집된 자격 증명은 공개 GitHub 리포지터리에 게시됩니다. 이 글을 쓰는 현재 25,000개 이상의 리포지터리가 생성되었습니다.
- 수집된 자격 증명을 활용해 더 많은 NPM 패키지를 추가로 침해합니다.
이번 변종에는 다음과 같은 새로운 행동도 포착되었습니다.
- 유용한 자격 증명을 취득하지 못한 경우, 해당 머신의 사용자 홈 디렉터리 데이터 삭제
- 손상된 호스트에서 C2 명령을 실행하기 위해 GitHub 리포지터리의 토론(Discussions)을 활용하고, 코드 실행에는 자체 호스팅된 GitHub Actions 러너를 사용함.
- 탈취된 자격 증명을 포함하는 git 리포지터리에 새로운 이름 규칙을 적용함: 예를 들어 ‘aoy7angy5kwcq64fb7’과 같은 무작위 문자열을 이름으로 사용하고, ‘Sha1-Hulud: The Second Coming’과 같은 다양한 설명을 포함함.
탐지 기회 및 필요한 로그
적절한 지점에서 로그를 수집하고 있다면 SHA1-Hulud를 탐지할 수 있는 기회는 다양합니다.
GitHub
GitHub Enterprise 감사(Audit) 로깅은 필수입니다. 탐지 기회에는 다음이 포함됩니다.
- 무작위 문자열로 이름이 지정되고 설명이 ‘Sha1-Hulud: The Second Coming’으로 설정된 새 공개 리포지터리 생성
- 이름이 ‘SHA1HULUD’인 자체 호스팅 러너 등록
- GitHub 디스커션을 사용하거나 이와 상호작용하는 GitHub 작업 워크플로 생성
엔드포인트
엔드포인트에서의 탐지를 위한 핵심적인 로그 소스에는 파일 및 프로세스 모니터링이 포함됩니다(프로세스 모니터링에는 명령줄 감사를 포함해야 함). 탐지 기회에는 다음이 포함됩니다.
- setup_bun.js 사전 설치 스크립트의 실행을 보여 주는 프로세스 활동
- 손상된 NPM 패키지를 다운로드하거나 설치하는 파일 활동
- 영향을 받은 기기에서 사용자 홈 디렉터리 내 파일을 빠르게 삭제하는 활동
- GitHub Actions용 로컬 러너 설치와 관련된 프로세스 활동
클라우드 서비스 제공업체
주요 로그 소스에는 AWS CloudTrail 로그와 Microsoft Entra ID 로그가 포함됩니다. 클라우드 로그를 통한 주요 탐지 기회는 Trufflehog와 같은 도구를 사용하여 클라우드 자격 증명이 수집되는 상황을 탐지하는 것입니다.
SHA1-Hulud 멀웨어 분석은 계속 진행 중이므로 새로운 정보가 나올 수 있어 관련 분석 자료를 주기적으로 다시 확인하는 것이 좋습니다.
이제 이를 탐지할 수 있는 몇 가지 주요 방법을 살펴보겠습니다.
Sumo Logic Cloud SIEM 고객을 위한 관련 쿼리 및 기본 제공 규칙
GitHub 기반 탐지
이러한 탐지는 GitHub 활동에 중점을 두며, GitHub Enterprise 감사 로깅이 필요합니다. GitHub Enterprise 감사 로그를 수집하는 방법은 Sumo Logic 문서를 참조하세요.
기법: 유출된 비밀 정보가 무작위 문자열로 이름이 지정된 새 공개 리포지터리에 업로드되며, 설명은 ‘Sha1-Hulud: The Second Coming’으로 설정됨
Step Security의 분석에 따르면 SHA1-Hulud는 “호스트의 특징 정보를 수집하고, 클라우드 볼트를 뒤져 비밀 정보를 찾습니다. 이후 이러한 모든 비밀 정보는 무작위 UUID 이름의 새 공개 리포지터리에 JSON 블롭 형태로 업로드되며 설명은 ‘Sha1-Hulud: The Second Coming’으로 설정됩니다.”
쿼리: 유출된 자격 증명으로 만들어진 리포지터리 찾기
이 쿼리는 지정된 기간 내에 새롭게 생성된 git 리포지터리를 반환합니다. 앞서 언급했듯이 리포지터리 이름은 ‘aoy7angy5kwcq64fb7’과 같은 임의의 문자열일 수 있으며, 설명은 ‘Sha1-Hulud: The Second Coming’처럼 되어 있을 수 있습니다. 이상적으로는 설명을 기준으로 검색할 수 있으면 좋겠지만, GitHub의 create-repo.create 로그에는 리포지터리 설명이 포함되지 않습니다. 따라서 출력 결과를 검토하면서 임의의 문자열 형태의 리포지터리 이름을 찾아야 하며, 이름 길이가 18자 이상인 리포지터리로 검색 조건을 구체화하는 것이 좋습니다.
_index=sec_record_audit metadata_product="GitHub Enterprise Audit" normalizedAction="create"
| where metadata_deviceEventId = "create-repo.create"
| count by user_username, repository
기법: 손상된 호스트에서 C2 명령을 실행하기 위해 ‘SHA1HULUD’라는 이름의 새로운 자체 호스팅 러너 생성
wiz.io의 분석에 따르면 SHA1-Hulud는 “감염된 머신을 ‘SHA1HULUD’라는 이름의 자체 호스팅 러너로 등록한다.”고 합니다.
쿼리: 자체 호스팅 러너 등록 검토
이 쿼리는 지정된 기간 내에 등록된 자체 호스팅 러너를 반환합니다. 위의 리포지터리 생성 쿼리와 마찬가지로 GitHub 로그에는 러너 이름이라는 유용한 정보가 하나 누락되어 있습니다. 따라서 리포지터리, 사용자 이름, 사용자 에이전트 문자열 등의 기타 메타데이터에서 비정상적인 활동이 있는지 스캔해야 합니다.
_index=sec_record_audit metadata_product="GitHub Enterprise Audit"
| where metadata_deviceEventId = "create-repo.register_self_hosted_runner"
| count by repository, user_username
엔드포인트 기반 탐지
기법: npm 사전 설치 스크립트를 통한 악성코드 설치
StepSecurity 분석에 따르면 손상된 npm 패키지는 사전 설치 스크립트를 통해 SHA1-Hulud를 설치합니다. “공격은 npm이 패키지를 설치하는 순간 시작되며, package.json의 해당 항목에 의해 트리거된다”고 합니다.
{
"scripts": {
"preinstall": "node setup_bun.js"
}
}
쿼리: SHA1-Hulud 사전 설치 스크립트의 명령줄 탐색
아래 쿼리는 SHA1-Hulud 사전 설치 스크립트의 명령줄과 일치하는 프로세스 생성 레코드를 검색합니다.
_index=sec_record_endpoint action="ProcessCreate"
| where commandLine matches /node\s+setup_bun\.js/
기법: 사용자 홈 디렉터리에서 쓰기 가능한 파일 삭제
Koi의 분석에 따르면, “멀웨어가 인증에 실패하거나 지속성을 확보하지 못하면 피해자의 홈 디렉터리 전체를 파괴하려 합니다. 구체적으로는 현재 사용자가 소유한 홈 폴더 내의 모든 쓰기 가능한 파일을 삭제합니다.”
쿼리: 사용자의 홈 디렉터리에서의 파일 삭제 수(Windows)
아래 쿼리는 사용자 홈 디렉터리에서 발생한 파일 삭제 이벤트를 찾기 위해 이벤트 ID 23 또는 26(파일 삭제 이벤트)에 해당하는 Microsoft Sysmon 로그를 검색합니다.
_index=sec_record_endpoint
| where metadata_deviceeventId = "Microsoft-Windows-Sysmon/Operational-23" or metadata_deviceeventid = "Microsoft-Windows-Sysmon/Operational-26"
| where changetarget matches /C:\\Users.*/
| count by device_hostname
참고: 이상적으로는 관심 대상 파일 활동을 Microsoft Sysmon(이벤트 ID 23)이나 Microsoft 개체 액세스 감사(이벤트 ID 4600 및 4663)와 같은 로그 소스를 통한 파일 시스템 모니터링으로 탐지하는 것이 가장 좋습니다. 그러나 관심 있는 디렉터리가 감사 대상으로 구성되어 있어야 합니다. 다시 말해 모든 파일 활동이 로그로 남는다고 보장하기는 어렵습니다. 따라서 다른 로그 소스 유형에 의존해야 할 수도 있습니다. 이 경우 Koi의 게시물에서 언급된 명령줄을 검색해 볼 것입니다.
쿼리: 홈 디렉터리에서 파일 삭제를 나타내는 명령줄(Windows)
아래 쿼리는 SHA1-Hulud가 사용하는 것으로 알려진 명령줄(정규식 기반)과 일치하는 프로세스 생성 로그를 검색합니다.
_index=sec_record_endpoint action="ProcessCreate"
| where commandLine matches /del\s+\/F\s+\/Q\s+\/S\s+C:\\Users/
클라우드 기반 탐지
기법: Trufflehog을 사용한 클라우드 자격 증명 수집
Aikido 분석에 따르면, “이 악성코드는 이후 자동화 도구(TruffleHog)를 사용해 비밀번호, API 키, 클라우드 토큰, GitHub 또는 NPM 자격 증명 같은 민감 정보를 검색한다”고 합니다.
규칙: Trufflehog 사용 및 클라우드 비밀 정보 열거 탐지용 Sumo Logic 규칙
Sumo Logic은 Trufflehog 사용을 포함하여 비밀 정보 수집 활동을 탐지하기 위한 여러 SIEM 규칙을 제공합니다. 예시는 다음과 같습니다.
– Trufflehog AWS 자격 증명 검증 탐지: MATCH-S00925
– 최초 탐지 IP 주소 실행 Trufflehog AWS 자격 증명: FIRST-S00086
– AWS CloudTrail – 비 Amazon IP에서 비밀값 획득: MATCH-S00246
– AWS Secrets Manager 일람표: MATCH-S00825
권장 대응 및 복구 단계
Panther Labs, StepSecurity, Aikido 등에서 제공하는 여러 참고 자료에는 시크릿 키 로테이션, 자체 호스팅 러너 삭제, npm 패키지 사용 내역 감사, CI/CD 로그 검토, 리포지터리 생성 이력 검토 등과 같은 상세 조치 방안이 소개되어 있습니다.
맺음말
SHA1-Hulud 공격은 조직 내에서 사용되는 다양한 기술(엔드포인트뿐만 아니라 CI/CD 파이프라인과 클라우드 환경 포함)을 포괄하는 종합적인 로깅의 중요성을 다시 한번 상기시켜 주는 사례입니다. 포괄적인 로깅을 통해 로그 소스의 관점에서 가장 적합한 탐지 규칙을 활용할 수 있으며, 이를 통해 복잡한 공격을 조기에 탐지할 가능성을 극대화할 수 있습니다.



