
Sha1-Hulud가 다시 우리의 생활 속으로 파고들어 이전보다 더 빠르게 확산되며 큰 피해를 일으키고 있습니다. 영화 듄(Dune) 시리즈의 거대 웜 이름에서 따온 이 공격은 전 세계 조직에 큰 영향을 미치고 있습니다. 2025년 9월 16일 처음 대규모 확산이 확인된 이후, Sha1-Hulud는 다음과 같은 기법을 사용해 빠르고 강력하게 전파될 수 있음을 보여주었습니다.
- npm 패키지 개발자의 GitHub 자격 증명을 악용해 인기 npm 패키지를 무기화. 현재 약 800개의 감염된 패키지가 보고되었으며, 이 중 상당수가 널리 사용되는 패키지입니다.
- 손상된 npm 패키지가 다운로드·설치되면 GitHub, NPM 패키지 리포지터리, AWS 및 Azure와 같은 클라우드 제공업체의 자격 증명을 탈취.
- 탈취한 자격 증명을 공개 GitHub 리포지터리에 게시. 현재까지 25,000개 이상의 리포지터리가 생성되었습니다.
- 수집된 자격 증명을 활용해 더 많은 NPM 패키지의 손상을 초래.
이번 변종에는 다음과 같은 새로운 행동도 포착되었습니다.
- 유용한 자격 증명을 취득하지 못한 경우, 해당 머신의 사용자 홈 디렉터리 데이터 삭제
- GitHub 리포지터리의 디스커션(Discussion) 기능을 이용하여, 코드 실행을 위해 자체 호스팅된 GitHub 작업 러너로 손상된 호스트에서 C2 명령을 실행.
- 탈취한 자격 증명을 저장하는 git 리포지터리에 새로운 이름 규칙 사용. 예를 들어, ‘aoy7angy5kwcq64fb7’과 같은 UUID 형태의 이름 및 ‘Sha1-Hulud: The Second Coming’과 같이 다른 내용 설명 부여.
탐지 지점 및 필요한 로그
적절한 지점에서 로그를 수집하고 있다면 SHA1-Hulud를 탐지할 수 있는 기회는 다양합니다.
GitHub
GitHub Enterprise 감사 로깅은 필수입니다. 다음과 같은 경우 탐지할 수 있습니다.
- 임의의 UUID 이름과 ‘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 문서를 참고하세요.
기법: 유출된 시크릿이 임의의 UUID 이름으로 ‘Sha1-Hulud: The Second Coming’이라는 설명과 함께 신규 공개 리포지터리에 업로드됨
Step Security의 분석에 따르면 SHA1-Hulud는 “호스트의 특징 정보를 수집하고, 클라우드 볼트를 뒤져 시크릿을 찾은 뒤, 모든 시크릿을 JSON 블롭 형태로 새로운 공용 리포지터리에 임의의 UUID 이름과 ‘Sha1-Hulud: The Second Coming’이라는 설명으로 유출한다.”고 합니다.
쿼리: 유출된 자격 증명으로 만들어진 리포지터리 찾기
This query will return new git repositories created over the time period specified. As mentioned above, the name of the repository will be a random string such as “aoy7angy5kwcq64fb7” and its description could be “Sha1-Hulud: The Second Coming.” Ideally, we could search for the description, but the GitHub create-repo.create logs do not include the repository description. You will need to scan the output for repository names that are UUIDs, perhaps refining your search for repositories with names of 18 or more characters.
_index=sec_record_audit metadata_product="GitHub Enterprise Audit" normalizedAction="create"
| where metadata_deviceEventId = "create-repo.create"
| count by user_username, repository
기법: 손상된 호스트에서 ‘SHA1HULUD’ 이름의 자체 호스팅 러너를 생성해 C2 명령을 실행
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)의 파일 삭제 건수 집계
아래 쿼리는 사용자 홈 디렉터리에서 발생한 파일 삭제 이벤트를 찾기 위해 Microsoft Sysmon (Event ID 23, 26) 로그를 검색합니다.
_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 (Event ID 23) 또는 Microsoft Object Access Auditing (Event 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 파이프라인, 클라우드 환경까지 모두 포함해야 합니다. 포괄적인 로그 수집은 각 로그 소스의 관점에 맞는 탐지 규칙을 효과적으로 적용할 수 있게 해주며 복잡한 공격을 조기에 발견할 가능성을 극대화합니다.


