COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
abuse.ch에서 채집한 Storm-1865 ClickFix 캠페인 페이로드 분석. PE32+ DLL이 호출돼도 4중 anti-analysis(디버거 회피, 환경 식별, geofencing, direct syscall)로 silent exit하는 LummaStealer 변종의 정적 동적 fingerprint와 한국 ClickFix 사례 3건, 행위 기반 Sigma 룰 3종.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
abuse.ch에서 booking exe, gotextileltd-com, nisuwyyyqsafdas-com 태그가 붙은 ZIP 샘플 하나를 분석 환경에 풀었다. 내부에서 떨어진 본체는 PE32+ DLL x86-64. ZIP째 자동 분석을 돌렸을 때는 호출자가 없어 DLL이 깨어나지 않았고, 다음 차례에 rundll32.exe로 직접 호출해 두 번째 분석을 돌렸다. 호출됐는데 본 행위는 일어나지 않았다. C2 응답 없이, 페이로드 다운로드 없이, 데이터 수집 없이 조용히 종료됐다.
대신 짧은 실행 시간 안에 네 단계의 anti-analysis 신호가 차곡차곡 발화했다. PE checksum 불일치, VEH 등록, 직접 syscall 추정 네트워크 시도, language 레지스트리 geofencing. 빌더가 export 104개를 무작위 영문자열로 회전시켜 시그니처 매칭을 차단한 위에, 실행 흐름까지 분기마다 환경을 검증하는 LummaStealer 계열 변종의 전형이다.
이 글은 그 DLL 한 개의 정적·동적 분석을 합쳐 Storm-1865로 추적되는 Booking.com 사칭 ClickFix 캠페인 의 큰 그림 안에서 한국 환경이 무엇을 봐야 하는지 정리한다.
Microsoft가 추적하는 위협 활동 그룹 Storm-1865 는 2024년 12월부터 Booking.com 사칭 메일 을 통한 신용카드 절도·계정 탈취 캠페인을 운영해 왔다. 호스피탈리티 산업(호텔·여행사·예약 관리자)을 직접 표적한다.
핵심은 사용자가 자기 손으로 실행시킨다 는 점이다. 자동 다운로드가 아니라 사용자 동의 + 사용자 키 입력 + Windows 기본 유틸리티(mshta.exe, powershell.exe)로 실행되므로, EDR이 차단할 명분이 약하다.
이 캠페인이 자주 떨어뜨리는 페이로드는 LummaStealer다. Microsoft Digital Crimes Unit, FBI, Europol이 2025년 5월에 LummaStealer 인프라를 압수했다. 압수 규모는 2,300개 도메인 + 1,000개 악성 도메인 + 90개 Telegram 채널 + Steam 프로필. 그러나 수 주 안에 재부활 했다(Trend Micro 보고). 2026년 들어 활동량이 다시 증가했고(Bitdefender), ClickFix와 가짜 CAPTCHA가 주력 유포 경로로 굳었다.
Storm-1865 자체는 글로벌 호스피탈리티 표적이지만, ClickFix 기법은 이미 한국에서 별개 캠페인으로 관측됐다.
ClickFix는 단일 캠페인의 기법이 아니라 2025~2026년 가장 빠르게 확산 중인 사회공학 패턴 이고, 한국은 이미 그 표적군에 들어 있다.
| 항목 | 값 |
|---|---|
| 외부 파일 | 77e6fbbdaaef4f661534.zip (1,594,874 bytes, AES 암호화) |
| ZIP SHA-256 | 1831455ab404b144...54663d61 |
| 내부 본체 | 77e6fbbdaaef4f6615341b9ab86519decc2c6d8646d6d3164380de8f008e9f99.exe |
| 본체 SHA-256 | 77e6fbbdaaef4f...8e9f99 |
| 본체 실제 형식 | PE32+ DLL (GUI) x86-64 |
| 본체 크기 | 3,126,784 bytes (3 MB) |
| 컴파일러 | MSVC 16.00 (Microsoft Visual C/C++) |
| Build timestamp | 2026-04-18 |
| Imphash | f418e835c2fb79101e806fd56041f826 |
| 디지털 서명 | 없음 |
| YARA 매칭 | 자체 룰 0건 (신규 변종 또는 빌더 회전 결과) |
내부 본체는 .exe로 떨어지지만 PE 헤더가 DLL 이다. DLL은 자기 혼자 실행되지 않는다. rundll32.exe, regsvr32.exe, 또는 호출 측 PowerShell 스크립트가 export 함수를 직접 호출해야 동작이 시작된다.
이 DLL이 export하는 함수는 104개, 그런데 모두 다음과 같은 무작위 영문자열이다.
1ZnQSdxhbrvqZ0G2SeUQzoEMb99
2EcyXzca3MsfPc2EzqMcG
3lLlLnsElUBkKHsaHIxk
4BYAUUnzFC0dRvsv
4imJVy4EOl1B72VR14xgDlch
...
DLL 자체의 내부 이름(exported_dll_name)도 같은 패턴이다 — pKjabpuWih2yCjBV6pYY8iW5llFlgUt.dll. 30자 무작위.
이건 빌더가 컴파일 시점마다 export 이름을 자동 회전시키는 흔적 이다. 시그니처 매칭으로 변종을 잡으려는 AV·EDR 룰을 회피하는 표준 기법이다. 결과적으로 export 이름 기반 IOC는 거의 무용지물이고, 클러스터링은 imphash·strings 패턴·CAPA 능력 fingerprint 같은 빌더가 회전시키지 못하는 차원 에 의존해야 한다.
PE 헤더에는 두 개의 체크섬 값이 있다.
| 값 | 의미 | 본 샘플 |
|---|---|---|
reported_checksum | PE 헤더에 기록된 값 | 0x001f70f7 |
actual_checksum | 실제 파일 바이트로 계산한 값 | 0x00308901 |
두 값이 일치하지 않는다. 정상 컴파일 결과물은 두 값이 같다. 차이가 난다는 것은 컴파일 후 누군가가 파일을 수정했거나, 패커·인젝터가 본문을 변경하고 헤더 갱신을 건너뛰었음 을 의미한다. 빌더 자동화 단계에서 export 명을 다시 쓴 흔적과 일관된다. AV 입장에서 reported checksum 기반 빠른 무결성 검사는 무의미해진다.
CAPA가 정적 코드에서 추출한 15가지 능력 가운데 인포스틸러를 가리키는 신호가 명확하다.
| 능력 | 매치 | 의미 |
|---|---|---|
| anti-debug via QueryPerformanceCounter | 2 | 디버거 시간 지연 측정 |
| encode XOR | 27 | 문자열 디코딩 또는 C2 통신 암호화 |
| decode Base64 (dword translation) | 1 | 페이로드 압축·인코딩 |
| hash Murmur3 | 13 | 빠른 비암호 해시 — LummaStealer 자주 사용 |
| hash SHA1 + CRC32 | 각 1 | 무결성 검증 |
| PRNG Mersenne Twister + WinAPI | 각 1 | 결정성 회피 또는 키 생성 |
| query environment variable | 6 | 환경 식별 |
| get number of processors / memory | 18 / 3 | 분석 환경 식별 |
| access Windows event log | 1 | 로그 정찰 또는 자기 흔적 정리 |
| create directory + write file | 1 / 2 | 추가 페이로드 또는 데이터 dropping |
특히 XOR 27건 + Murmur3 13건 + Mersenne 조합은 LummaStealer 변종에서 반복적으로 보고된 fingerprint다. 빌더가 export 이름을 회전시켜도 이 능력 fingerprint는 거의 그대로 따라온다.
| 섹션 | 가상 크기 | 특징 |
|---|---|---|
.text | 0x142b28 (1.3 MB) | 코드, 실행 가능 |
.rdata | 0x921a2 (598 KB) | 읽기 전용 데이터 |
.data | 0x64998 (411 KB) | 쓰기 가능 데이터 |
.pdata | 0x12df8 (76 KB) | x64 예외 처리 |
.rsrc | 0x10 (16 bytes) | 사실상 비어 있음 |
.reloc | 0x111c98 (1.1 MB) | 재배치 정보 |
리소스 섹션이 16바이트로 사실상 비어 있다. 정상 응용 프로그램에서는 보기 어려운 패턴이다(보통 아이콘·버전 정보·매니페스트가 들어감). 모든 의미 있는 데이터가 .rdata나 .data 섹션에 XOR 인코딩으로 박혀 있는 구조로 추정된다.
rundll32.exe로 DLL을 직접 호출했을 때 프로세스가 한 개 뜨고(parent PID 7136 → child PID 4592) 실행이 시작됐지만, C2 응답도, 페이로드 다운로드도, 데이터 수집도 발생하지 않았다. 그 짧은 실행 시간 안에 네 단계의 anti-analysis 신호만 차례로 발화했다.
DLL은 시작 직후 두 종류의 예외 처리기를 등록한다.
분석가가 IDA Pro나 x64dbg로 코드를 들여다보면 VEH가 분기를 가로채 임의 위치로 점프시키거나 silent exit 시킨다. 이게 디버거 부착 시 코드 실행 흐름을 hijack하는 방어선이다.
QueryPerformanceCounter 기반 시간 지연 검사(CAPA가 잡음)와 함께 다음 신호가 발화한다.
antivm_checks_available_memory)이 묶음은 VM 또는 분석 샌드박스의 메모리·CPU 프로필이 통상 일반 사용자 PC와 다르다는 가정에 기반한다.
시그니처 language_check_registry가 발화했다. DLL이 다음과 같은 레지스트리 키를 읽는 패턴이다.
HKLM\SYSTEM\ControlSet001\Control\Nls\Language
HKLM\SYSTEM\ControlSet001\Control\Nls\CustomLocale\<lang>
이게 geofencing 의 표준 구현이다. 표적 국가의 언어 코드(예: 한국어 ko-KR, 영어 en-US, 러시아어 ru-RU)와 일치하는 환경에서만 본 행위 분기에 진입하고, 그 외 환경(예: CIS 국가나 분석 환경의 기본 영어 locale)에서는 silent exit한다. LummaStealer를 포함한 다수의 인포스틸러가 자기 운영자가 거주하는 CIS 국가 사용자를 보호하기 위해 사용하는 정확한 패턴이다.
가장 결정적인 신호는 시그니처 stealth_network다.
Network activity detected but not expressed in monitor API logs
CAPE 샌드박스는 분석 대상 프로세스의 네트워크 API 호출을 후킹해 모니터링한다. 그런데 네트워크 활동이 감지됐는데 API 호출 로그에 안 남았다. 이게 의미하는 건 명확하다. DLL이 후킹된 API를 우회해 직접 syscall로 네트워크에 접근했다.
직접 syscall은 ntdll 안의 시스템 호출 진입점을 메모리에서 직접 호출하거나, 자기가 ntdll을 디스크에서 다시 매핑해 깨끗한 사본으로 호출하는 기법이다(Copy Fail/Dirty Frag 시리즈에서 본 것과 동일한 카테고리). EDR 후크가 ntdll에 박혀 있으면 그것을 회피한다. 일반 응용 프로그램에서는 거의 발화하지 않는 신호다.
정적 분석에서 발견한 PE checksum 불일치가 동적 단계에서도 별도 시그니처(static_pe_anomaly 동적 판정)로 다시 잡혔다. 자체 무결성 검사를 우회한 빌더 흔적이 일관된다.
gotextileltd-com, nisuwyyyqsafdas-com 같은 캠페인 인프라 도메인이 이미 sinkhole되었거나 takedown됐을 가능성이 가장 높다. 또는 분석 환경의 영어 locale이 표적이 아니어서 geofencing 분기에서 막혔을 수도 있다. 두 경우 모두 DLL이 본 인포스틸러 행위(자격 증명 수집·유출·지속성 확보) 진입 전에 의도적으로 종료 됐다.
| 타입 | 값 | 맥락 |
|---|---|---|
| SHA-256 | 1831455ab404b1447db95a6ec0dac89eb6cfd779332662cee5b0d40e54663d61 | 외부 ZIP |
| SHA-256 | 77e6fbbdaaef4f6615341b9ab86519decc2c6d8646d6d3164380de8f008e9f99 | 내부 DLL 본체 |
| MD5 | 47e85ade09d52d69de5cc77e1f583704 | 외부 ZIP |
| Imphash | f418e835c2fb79101e806fd56041f826 | DLL 본체 (변종 클러스터링) |
| TLSH | T1B9E5BF15A3C866E9D427DA38CB14A332C2B2BD224B76D18F0A9AD7061F77D914F3E741 | DLL 본체 (퍼지 매칭) |
| 종류 | 값 | 분류 |
|---|---|---|
| 파일명 패턴 | booking.exe | 사칭 페이로드 |
| 도메인 | gotextileltd[.]com | 텍스타일 회사 위장 호스팅 |
| 도메인 | nisuwyyyqsafdas[.]com | 무작위 11자 burner |
| 기법 ID | 명칭 | 이 변종에서 어떻게 작동했나 |
|---|---|---|
| T1204.002 | User Execution: Malicious File | 사용자가 Win+R + Ctrl+V + Enter로 직접 실행 |
| T1218.005 | Mshta | LOLBin mshta.exe로 원격 페이로드 다운로드 |
| T1218.011 | Rundll32 | rundll32.exe로 DLL export 함수 호출 |
| T1059.001 | PowerShell | 클립보드에 잠입한 PowerShell 명령 실행 |
| T1027.013 | Encrypted/Encoded File | XOR 27건 + Base64 dword 인코딩 |
| T1027.009 | Embedded Payloads | PE checksum 불일치 — 빌더 변조 흔적 |
| T1497.001 | System Checks | 메모리·CPU·환경 변수 검사 |
| T1497.003 | Time Based Evasion | QueryPerformanceCounter 시간 지연 |
| T1480.001 | Environmental Keying | language registry 기반 geofencing |
| T1106 | Native API | 직접 syscall 추정 (stealth_network) |
| T1622 | Debugger Evasion | VEH + UnhandledExceptionFilter 등록 |
| T1082 | System Information Discovery | env var, CPU, memory 조회 |
ClickFix 캠페인은 사용자가 자기 손으로 실행 시키므로 EDR이 자동 차단하기 어렵다. 그러나 anti-analysis 단계가 발화시키는 신호는 일반 응용 프로그램에서 거의 안 나타나는 패턴이라, 행위 룰로 잡을 여지가 크다.
title: ClickFix Win+R Clipboard PowerShell or mshta Trigger
status: experimental
description: 사용자 키보드 단축키로 발동된 PowerShell·mshta가 클립보드 콘텐츠로 페이로드 다운로드하는 패턴
date: 2026-05-10
logsource:
product: windows
service: sysmon
detection:
selection_explorer_parent:
EventID: 1
ParentImage|endswith: '\explorer.exe'
Image|endswith:
- '\powershell.exe'
- '\mshta.exe'
- '\wscript.exe'
- '\cscript.exe'
selection_remote_payload:
CommandLine|contains:
- 'http://'
- 'https://'
- 'IEX'
- 'Invoke-Expression'
- 'DownloadString'
- 'Net.WebClient'
condition: selection_explorer_parent and selection_remote_payload
level: high
falsepositives:
- 운영자 정상 진단 작업
- IT 자동 배포 스크립트
title: Rundll32 Calls DLL with Random Export Names from Temp Path
status: experimental
description: rundll32가 AppData\Temp 또는 사용자 디렉토리의 .exe 확장자 PE32+ DLL을 무작위 영문 export 함수로 호출
date: 2026-05-10
logsource:
product: windows
service: sysmon
detection:
selection_rundll32:
EventID: 1
Image|endswith: '\rundll32.exe'
CommandLine|contains:
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
selection_random_export:
CommandLine|re: ',[a-zA-Z0-9]{8,32}\b'
selection_exe_extension:
CommandLine|contains: '.exe,'
condition: selection_rundll32 and selection_random_export and selection_exe_extension
level: high
falsepositives:
- 일부 정상 자동 생성 SDK (드물게 export 명 회전)
title: Suspicious Process Reads NLS Language Registry
status: experimental
description: 비특권 프로세스가 시작 직후 NLS Language 또는 CustomLocale 레지스트리를 읽는 패턴 — geofencing 의심
date: 2026-05-10
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 12
TargetObject|contains:
- '\Control\Nls\Language'
- '\Control\Nls\CustomLocale'
- '\Control\Nls\ExtendedLocale'
filter_legitimate:
Image|endswith:
- '\explorer.exe'
- '\OfficeClickToRun.exe'
- '\setup.exe'
condition: selection and not filter_legitimate
level: medium
falsepositives:
- 다국어 정상 응용 프로그램 (대체로 explorer 자식이거나 SetupAPI 경로)
지표가 회전해도 살아남는 룰이 우선순위다.
f418e835c2fb79101e806fd56041f826 기반 클러스터링 — 변종 추적이 변종 분석에서 본 것은 다음 네 가지다.
첫째, ClickFix 캠페인의 페이로드는 호출되더라도 본 행위에 들어가지 않을 수 있다 . 호출자 부재일 때만 깨어나지 않는 게 아니라, 호출돼도 환경 검증에서 막히면 silent exit한다. 디버거 회피(VEH + UnhandledExceptionFilter), 분석 환경 식별(메모리·CPU·환경 변수), geofencing(language registry), 직접 syscall(CAPE 후크 우회)이 차례로 통과해야 비로소 C2에 접근한다. 분석 환경 어느 한 단계라도 통과 못 하면 본 인포스틸러 행위는 절대 일어나지 않는다.
둘째, 빌더가 export 이름·DLL 내부 이름·PE checksum을 회전·변조하므로 시그니처 매칭은 실패한다 . 변종 추적은 imphash, CAPA 능력 fingerprint(XOR 27 + Murmur3 13 + Mersenne 조합), TLSH 같은 빌더가 회전시키지 못하는 차원에 의존해야 한다.
셋째, stealth_network는 LummaStealer 최신 변종의 EDR 우회 fingerprint 다. 후킹된 API에 안 남는 네트워크 활동은 ntdll 직접 호출 또는 자체 ntdll 매핑을 통한 syscall 우회의 결과다. EDR 후크에만 의존하는 탐지는 이 변종에서 그대로 우회된다. 텔레메트리 포인트(Sysmon, ETW, Windows Event Log)가 더 회복력 있다.
넷째, ClickFix는 한국에서 이미 별개 캠페인으로 활성화돼 있다 . Storm-1865 Booking 사칭이 글로벌 호스피탈리티 표적이라도, 같은 기법이 국내 매거진 사이트, Kimsuky 외교 표적, Lazarus 암호화폐·소매 인력 표적에서 이미 관측됐다. 한국 환경 점검 시 살펴볼 포인트는 explorer.exe 의 자식 프로세스가 mshta·powershell이고 명령줄에 URL이 포함된 시퀀스, 그리고 AppData\Temp 에 떨어진 .exe 확장자 PE32+ DLL이다. 이 둘이 동시에 잡히면 ClickFix 흐름의 마지막 두 단계 흔적이다.
77e6fbbd...8e9f99)을 두 번에 걸쳐(ZIP 자동 분석 + rundll32 직접 호출) 샌드박스에서 추출한 결과를 종합한 것AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.