업데이트
이 연구는 2023년 10월 Elastic Security Labs에서 처음 공개한 GHOSPULSE의 2 단계에 대한 업데이트를 다루고 있습니다.
핵심 사항
- GHOSPULSE는 PNG 파일의 IDAT 청크를 사용하는 방식에서 픽셀 구조 내에 암호화된 구성과 페이로드를 삽입하는 방식으로 전환했습니다.
- 최근의 캠페인은 Windows 키보드 단축키를 통해 악성 명령을 실행하는 캡차 검증과 같은 창의적인 사회 공학 기법으로 피해자를 속입니다.
- Elastic Security는 YARA 규칙을 개선하고 구성 추출기 도구를 업데이트하여 이전 버전과 새 버전의 GHOSPULSE를 모두 감지하고 분석할 수 있도록 했습니다.
서문
호스트펄스 멀웨어 제품군(하이재크로더 또는 데이터로더라고도 함)은 2023년에 발견된 이후 지속적으로 진화하여 점점 더 발전된 기술로 탐지를 회피하고 있습니다.
이전 버전에서 GHOSTPULSE는 Elastic Security Labs의 이전 글에서 자세히 설명한 것처럼 악성 페이로드를 숨기기 위해 PNG 파일의 IDAT 청크를 악용했습니다. 하지만 최근 분석 결과 알고리즘에 중대한 변화가 있음을 발견했습니다. 최신 버전의 GHOSPULSE는 이제 IDAT 청크에서 페이로드를 추출하는 대신 이미지의 픽셀을 파싱하여 구성과 페이로드를 검색합니다. 이 새로운 접근 방식은 픽셀 구조에 직접 악성 데이터를 삽입하는 것입니다.
이 연구 간행물에서는 이 새로운 픽셀 기반 알고리즘을 살펴보고 업데이트된 탐지 규칙이 적용된 이전 IDAT 청크 기법과 비교합니다.
서문
최근에는 하팡랩에서도 조사한 주제인 호스트펄스를 로더로 사용하는 룸마 스틸러와 관련된 여러 캠페인을 목격했습니다. 이러한 캠페인은 창의적인 사회 공학적 전술로 인해 눈에 띕니다. 피해자는 속아서 보안 문자의 유효성을 검사하지만, 웹사이트는 일반적인 프로세스 대신 일련의 Windows 키보드 단축키를 실행하도록 지시합니다. 이러한 바로가기는 악성 자바스크립트에 의해 클립보드에 복사된 명령을 트리거합니다. 그러면 PowerShell 스크립트가 실행되어 GHOSTPULSE 페이로드를 다운로드하고 실행함으로써 감염 체인이 시작됩니다.
이전 버전의 GHOSPULSE에서는 다중 파일 패키지의 일부로 제공되었습니다. 이 패키지에는 일반적으로 정상 실행 파일, 실행 파일에 의해 로드되는 감염된 DLL, 암호화된 구성을 저장하는 PNG 파일이 포함되어 있습니다.
하지만 최신 버전에서 GHOSPULSE는 배포를 간소화했습니다. 이제 전체 패키지는 단일 파일로 구성되며, 리소스 섹션에 PNG 파일이 포함된 정상적이지만 손상된 실행 파일입니다.
기술적 분석
업데이트된 2단계 멀웨어는 Windows API 이름 확인에 동일한 해싱 알고리즘을 사용하는 등 이전 구조의 대부분을 유지합니다. 그러나 가장 중요한 변화는 이제 멀웨어가 페이로드와 배포를 위한 중요한 지침을 모두 포함하는 구성을 찾는 방식에 있습니다.
다음은 두 구현의 의사 코드를 보여주는 스크린샷입니다:
이전 버전에서 GHOSPULSE는 PNG 파일을 파싱하여 암호화된 데이터 덩어리를 구문 분석하고, 이를 청크로 나누어 순차적으로 저장했습니다. 멀웨어의 파싱 프로세스는 간단했습니다. 파일 내에서 특정 마커(이 경우 IDAT 문자열)를 검색하는 것이었습니다. 일단 발견되면 멀웨어는 문자열 뒤에 오는 4바이트 태그를 확인합니다. 이 태그가 예상 값과 일치하면 암호화된 청크가 추출됩니다. 이 프로세스는 전체 암호화된 페이로드가 수집될 때까지 이후 발생하는 모든 IDAT 문자열에 대해 계속됩니다.
새 버전에서는 암호화된 구성이 이미지의 픽셀에 저장됩니다. 이 악성 코드는 표준 Windows API를 사용하여 각 픽셀의 RED, GREEN, BLUE (RGB) 값을 순차적으로 추출하여 바이트 배열을 구성하고, GdiPlus(GDI+ ) 라이브러리를 사용합니다. 바이트 배열이 구축되면 멀웨어는 복호화에 필요한 XOR 키를 포함하여 암호화된 GHOSPULSE 구성이 포함된 구조의 시작 부분을 검색합니다. 16바이트 블록으로 구성된 바이트 배열을 반복하는 방식으로 이를 수행합니다. 각 블록에서 첫 번째 4 바이트는 CRC32 해시를 나타내고, 다음 12 바이트는 해시할 데이터입니다. 이 멀웨어는 12 바이트의 CRC32를 계산하여 해시와 일치하는지 확인합니다. 일치하는 항목이 발견되면 암호화된 호스트펄스 구성의 오프셋, 크기, 4바이트 XOR 키를 추출한 다음 XOR 복호화합니다.
다음 다이어그램은 이 프로세스를 시각적으로 보여줍니다:
업데이트된 구성 추출기
이러한 결과를 바탕으로 설정 추출기를 업데이트하여 두 버전의 GHOSPULSE를 모두 지원하도록 했습니다. 이 도구는 PNG 파일을 입력으로 받아 임베드된 페이로드를 출력합니다. 업데이트된 도구는 실험실 릴리즈 리포지토리에서 찾을 수 있습니다.
야라로 호스트 펄스 감지하기
원래의 호스트 펄스 야라 규칙은 여전히 감염의 마지막 단계를 방지하며 Elastic Defend에 내장되어 있습니다. 업데이트된 샘플은 다음 YARA 규칙을 사용하여 탐지할 수 있으며, 향후 릴리즈에서 Elastic Defend에 포함될 예정입니다.
Elastic Security는 이 활동을 식별하기 위해 호스트 펄스 야라 규칙을 업데이트했습니다:
rule Windows_Trojan_GHOSTPULSE_1 {
meta:
author = "Elastic Security"
creation_date = "2024-10-15"
last_modified = "2024-10-15"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "GHOSTPULSE"
threat_name = "Windows.Trojan.GHOSTPULSE"
license = "Elastic License v2"
strings:
$stage_1 = { 49 63 D0 42 8B 0C 0A 41 03 CA 89 0C 1A 8B 05 ?? ?? ?? ?? 44 03 C0 8B 05 ?? ?? ?? ?? 44 3B C0 }
$stage_2 = { 48 89 01 48 8B 84 24 D8 00 00 00 48 8B 4C 24 78 8B 49 0C 89 08 C7 44 24 44 00 00 00 00 }
condition:
any of them
}
rule Windows_Trojan_GHOSTPULSE_2 {
meta:
author = "Elastic Security"
creation_date = "2024-10-10"
last_modified = "2024-10-10"
os = "Windows"
arch = "x86"
category_type = "Trojan"
family = "GHOSTPULSE"
threat_name = "Windows.Trojan.GHOSTPULSE"
license = "Elastic License v2"
strings:
$a1 = { 48 83 EC 18 C7 04 24 00 00 00 00 8B 04 24 48 8B 4C 24 20 0F B7 04 41 85 C0 74 0A 8B 04 24 FF C0 89 04 24 EB E6 C7 44 24 08 00 00 00 00 8B 04 24 FF C8 8B C0 48 8B 4C 24 20 0F B7 04 41 83 F8 5C }
condition:
all of them
}
결론
요약하자면, 2023년 출시 이후 GHOSTPULSE 멀웨어 제품군은 진화해 왔으며, 이번 업데이트는 가장 중요한 변화 중 하나입니다.
공격자의 혁신이 계속됨에 따라 방어자는 이러한 위협을 효과적으로 완화하기 위해 업데이트된 도구와 기술을 활용하여 적응해야 합니다. 새롭게 개발한 구성 추출 도구를 공유하게 되어 기쁘게 생각합니다. 이 도구는 구버전과 최신 버전의 GHOSPULSE를 분석할 수 있도록 설계되었습니다. 이 도구는 진화하는 위협을 이해하고 이에 대응할 수 있는 향상된 기능을 제공하여 연구자와 사이버 보안 전문가에게 힘을 실어줍니다. 사이버 위협의 환경이 변화함에 따라 효과적인 보호를 위해서는 협업과 혁신이 여전히 필수적입니다.
관찰
모든 관측값은 ECS 및 STIX 형식으로도 다운로드할 수 있습니다.
이 연구에서는 다음과 같은 관찰 가능성에 대해 논의했습니다.
| 관측 가능합니다. | 유형 | 이름 | 참조 |
|---|---|---|---|
57ebf79c384366162cb0f13de0de4fc1300ebb733584e2d8887505f22f877077 | SHA-256 | Setup.exe | 호스트펄스 샘플 |
b54d9db283e6c958697bfc4f97a5dd0ba585bc1d05267569264a2d700f0799ae | SHA-256 | Setup_light.exe | 호스트펄스 샘플 |
winrar01.b-cdn[.]net | 도메인 이름 | 인프라 호스팅 GHOSTPULSE 샘플 | |
reinforcenh[.]shop | 도메인 이름 | 루마스테일러 C2 | |
stogeneratmns[.]shop | 도메인 이름 | 루마스테일러 C2 | |
fragnantbui[.]shop | 도메인 이름 | 루마스테일러 C2 | |
drawzhotdog[.]shop | 도메인 이름 | 루마스테일러 C2 | |
vozmeatillu[.]shop | 도메인 이름 | 루마스테일러 C2 | |
offensivedzvju[.]shop | 도메인 이름 | 루마스테일러 C2 | |
ghostreedmnu[.]shop | 도메인 이름 | 루마스테일러 C2 | |
gutterydhowi[.]shop | 도메인 이름 | 루마스테일러 C2 | |
riderratttinow[.]shop | 도메인 이름 | 루마스테일러 C2 |
