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 캠페인 의 큰 그림 안에서 한국 환경이 무엇을 봐야 하는지 정리한다.
사건 배경 — Storm-1865 ClickFix 캠페인
Microsoft가 추적하는 위협 활동 그룹 Storm-1865 는 2024년 12월부터 Booking.com 사칭 메일 을 통한 신용카드 절도·계정 탈취 캠페인을 운영해 왔다. 호스피탈리티 산업(호텔·여행사·예약 관리자)을 직접 표적한다.
미끼 → 클립보드 → mshta 실행 4단계
핵심은 사용자가 자기 손으로 실행시킨다 는 점이다. 자동 다운로드가 아니라 사용자 동의 + 사용자 키 입력 + Windows 기본 유틸리티(mshta.exe, powershell.exe)로 실행되므로, EDR이 차단할 명분이 약하다.
LummaStealer 재부활과 Storm-1865
이 캠페인이 자주 떨어뜨리는 페이로드는 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 가짜 CAPTCHA 유포 경로로 악용 — 사용자가 PowerShell 명령을 실행해 LummaC2(LummaStealer)가 설치된 사례. 브라우저 자격증명·암호화폐 지갑·세션 토큰 탈취가 목적 (ASEC 2025-12 보고)
- Kimsuky 가 ClickFix 전술을 활용해 외교·안보 전문가를 표적하는 다단계 스피어 피싱. 메일·문서 절취와 추가 정찰 도구 설치가 목적 (ASEC 2025-09 보고)
- Lazarus 가 BeaverTail / InvisibleFerret 변종을 ClickFix와 악성 저장소로 유포해 암호화폐·소매 산업 인력 표적. 가상자산 지갑·소스코드 저장소 자격증명 탈취가 목적 (ASEC 2025-07 보고)
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건 (신규 변종 또는 빌더 회전 결과) |
정적 분석 — 무엇이 의미 있는가
1. 확장자 위장: .exe → 실제 DLL
내부 본체는 .exe로 떨어지지만 PE 헤더가 DLL 이다. DLL은 자기 혼자 실행되지 않는다. rundll32.exe, regsvr32.exe, 또는 호출 측 PowerShell 스크립트가 export 함수를 직접 호출해야 동작이 시작된다.
2. 빌더 자동화 흔적: 무작위 export 104개 + 무작위 DLL 이름
이 DLL이 export하는 함수는 104개, 그런데 모두 다음과 같은 무작위 영문자열이다.
1ZnQSdxhbrvqZ0G2SeUQzoEMb99
2EcyXzca3MsfPc2EzqMcG
3lLlLnsElUBkKHsaHIxk
4BYAUUnzFC0dRvsv
4imJVy4EOl1B72VR14xgDlch
...
DLL 자체의 내부 이름(exported_dll_name)도 같은 패턴이다 — pKjabpuWih2yCjBV6pYY8iW5llFlgUt.dll. 30자 무작위.
이건 빌더가 컴파일 시점마다 export 이름을 자동 회전시키는 흔적 이다. 시그니처 매칭으로 변종을 잡으려는 AV·EDR 룰을 회피하는 표준 기법이다. 결과적으로 export 이름 기반 IOC는 거의 무용지물이고, 클러스터링은 imphash·strings 패턴·CAPA 능력 fingerprint 같은 빌더가 회전시키지 못하는 차원 에 의존해야 한다.
3. PE 헤더 변조 흔적 — checksum 불일치
PE 헤더에는 두 개의 체크섬 값이 있다.
| 값 | 의미 | 본 샘플 |
|---|
reported_checksum | PE 헤더에 기록된 값 | 0x001f70f7 |
actual_checksum | 실제 파일 바이트로 계산한 값 | 0x00308901 |
두 값이 일치하지 않는다. 정상 컴파일 결과물은 두 값이 같다. 차이가 난다는 것은 컴파일 후 누군가가 파일을 수정했거나, 패커·인젝터가 본문을 변경하고 헤더 갱신을 건너뛰었음 을 의미한다. 빌더 자동화 단계에서 export 명을 다시 쓴 흔적과 일관된다. AV 입장에서 reported checksum 기반 빠른 무결성 검사는 무의미해진다.
4. CAPA가 잡은 능력 — LummaStealer fingerprint
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는 거의 그대로 따라온다.
5. PE 섹션 — 비어 있는 .rsrc
| 섹션 | 가상 크기 | 특징 |
|---|
.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 신호만 차례로 발화했다.
1. 디버거 회피 — VEH 등록 + UnhandledExceptionFilter
DLL은 시작 직후 두 종류의 예외 처리기를 등록한다.
- Vectored Exception Handler(VEH) — 일반 SEH보다 우선순위가 높은 예외 처리 메커니즘. 정상 응용 프로그램에서 거의 안 쓰는 패턴
- UnhandledExceptionFilter — 디버거 부착 여부를 검사하는 표준 anti-debug 기법
분석가가 IDA Pro나 x64dbg로 코드를 들여다보면 VEH가 분기를 가로채 임의 위치로 점프시키거나 silent exit 시킨다. 이게 디버거 부착 시 코드 실행 흐름을 hijack하는 방어선이다.
2. 분석 환경 식별 — anti-VM + 시간 지연
QueryPerformanceCounter 기반 시간 지연 검사(CAPA가 잡음)와 함께 다음 신호가 발화한다.
- 가용 메모리 검사 (
antivm_checks_available_memory)
- 환경 변수 6건 조회 (호스트명·사용자명·언어·도메인 등)
- CPU 코어 수 18건, 메모리 용량 3건 조회
이 묶음은 VM 또는 분석 샌드박스의 메모리·CPU 프로필이 통상 일반 사용자 PC와 다르다는 가정에 기반한다.
3. Geofencing — 시스템 언어 레지스트리 검사
시그니처 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 국가 사용자를 보호하기 위해 사용하는 정확한 패턴이다.
4. API 후킹 우회 — stealth_network
가장 결정적인 신호는 시그니처 stealth_network다.
Network activity detected but not expressed in monitor API logs
동적 분석 환경은 분석 대상 프로세스의 네트워크 API 호출을 후킹해 모니터링한다. 그런데 네트워크 활동이 감지됐는데 API 호출 로그에 안 남았다. 이게 의미하는 건 명확하다. DLL이 후킹된 API를 우회해 직접 syscall로 네트워크에 접근했다.
직접 syscall은 ntdll 안의 시스템 호출 진입점을 메모리에서 직접 호출하거나, 자기가 ntdll을 디스크에서 다시 매핑해 깨끗한 사본으로 호출하는 기법이다(Copy Fail/Dirty Frag 시리즈에서 본 것과 동일한 카테고리). EDR 후크가 ntdll에 박혀 있으면 그것을 회피한다. 일반 응용 프로그램에서는 거의 발화하지 않는 신호다.
5. PE 헤더 anomaly 동적 확인
정적 분석에서 발견한 PE checksum 불일치가 동적 단계에서도 별도 시그니처(static_pe_anomaly 동적 판정)로 다시 잡혔다. 자체 무결성 검사를 우회한 빌더 흔적이 일관된다.
흐름 종합 — silent exit 시나리오
gotextileltd-com, nisuwyyyqsafdas-com 같은 캠페인 인프라 도메인이 이미 sinkhole되었거나 takedown됐을 가능성이 가장 높다. 또는 분석 환경의 영어 locale이 표적이 아니어서 geofencing 분기에서 막혔을 수도 있다. 두 경우 모두 DLL이 본 인포스틸러 행위(자격 증명 수집·유출·지속성 확보) 진입 전에 의도적으로 종료 됐다.
IOC
파일 해시
| 타입 | 값 | 맥락 |
|---|
| SHA-256 | 1831455ab404b1447db95a6ec0dac89eb6cfd779332662cee5b0d40e54663d61 | 외부 ZIP |
| SHA-256 | 77e6fbbdaaef4f6615341b9ab86519decc2c6d8646d6d3164380de8f008e9f99 | 내부 DLL 본체 |
| MD5 | 47e85ade09d52d69de5cc77e1f583704 | 외부 ZIP |
| Imphash | f418e835c2fb79101e806fd56041f826 | DLL 본체 (변종 클러스터링) |
| TLSH | T1B9E5BF15A3C866E9D427DA38CB14A332C2B2BD224B76D18F0A9AD7061F77D914F3E741 | DLL 본체 (퍼지 매칭) |
캠페인 인프라 흔적 (abuse.ch 메타데이터)
| 종류 | 값 | 분류 |
|---|
| 파일명 패턴 | booking.exe | 사칭 페이로드 |
| 도메인 | gotextileltd[.]com | 텍스타일 회사 위장 호스팅 |
| 도메인 | nisuwyyyqsafdas[.]com | 무작위 11자 burner |
MITRE ATT&CK 매핑
| 기법 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 단계가 발화시키는 신호는 일반 응용 프로그램에서 거의 안 나타나는 패턴이라, 행위 룰로 잡을 여지가 크다.
Sysmon 룰 — 클립보드 → Win+R → mshta/PowerShell 시퀀스
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 자동 배포 스크립트
Sigma 룰 — rundll32가 무작위 export 함수 호출 (빌더 fingerprint)
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 명 회전)
Sigma 룰 — Geofencing language registry 조회
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 경로)
행위 기반 우선순위
지표가 회전해도 살아남는 룰이 우선순위다.
- explorer.exe → mshta.exe / powershell.exe + URL — ClickFix 핵심 시퀀스
- 클립보드 변경 직후 Win+R 실행 (Process Tracing + Clipboard Audit) — Pastejacking 탐지
- rundll32가 AppData\Temp 의 .exe 확장자 PE32+ DLL을 무작위 export 함수로 호출 — 빌더 fingerprint
- VEH 등록 + UnhandledExceptionFilter 동시 등록 — 일반 응용에서 거의 안 나오는 디버거 회피 묶음
- stealth_network(후킹된 API 로그에 없는 네트워크 활동) — direct syscall 흔적
- 시작 직후 Nls\Language 레지스트리 조회 — geofencing 의심
- Imphash
f418e835c2fb79101e806fd56041f826 기반 클러스터링 — 변종 추적
요약
이 변종 분석에서 본 것은 다음 네 가지다.
첫째, ClickFix 캠페인의 페이로드는 호출되더라도 본 행위에 들어가지 않을 수 있다 . 호출자 부재일 때만 깨어나지 않는 게 아니라, 호출돼도 환경 검증에서 막히면 silent exit한다. 디버거 회피(VEH + UnhandledExceptionFilter), 분석 환경 식별(메모리·CPU·환경 변수), geofencing(language registry), 직접 syscall(API 후킹 우회)이 차례로 통과해야 비로소 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 흐름의 마지막 두 단계 흔적이다.
참고 자료
- Microsoft Security Blog, "Phishing campaign impersonates Booking.com, delivers a suite of credential-stealing malware", 2025-03-13
- Microsoft Security Blog, "Lumma Stealer: delivery techniques and capabilities", 2025-05-21
- Microsoft On the Issues, "Disrupting Lumma Stealer: Microsoft leads global action against favored cybercrime tool", 2025-05-21
- Trend Micro, "LummaStealer 인프라 부활 보고", 2025-06~07
- Bitdefender, "LummaStealer renewed activity", 2026
- G DATA, "Booking a Threat: Inside LummaStealer's Fake reCAPTCHA", 2025-03
- SentinelOne, "Caught in the CAPTCHA: How ClickFix is Weaponizing Verification Fatigue"
- Stormshield, "Analyzing a Full ClickFix Attack Chain"
- Splunk Security Content, "Windows PowerShell FakeCAPTCHA Clipboard Execution Detection"
- ASEC AhnLab, "December 2025 Infostealer Trend Report" (국내 매거진 사이트 ClickFix LummaC2 사례)
- ASEC AhnLab, "2025년 9월 APT 그룹 동향" (Kimsuky ClickFix)
- ASEC AhnLab, "2025년 7월 APT 그룹 동향" (Lazarus BeaverTail/InvisibleFerret ClickFix)
- abuse.ch MalwareBazaar, 분석 대상 ZIP 샘플 메타데이터 (booking.exe / gotextileltd[.]com / nisuwyyyqsafdas[.]com)
- 본문 정적·동적 분석은 단일 변종(SHA-256
77e6fbbd...8e9f99)을 두 번에 걸쳐(ZIP 자동 분석 + rundll32 직접 호출) 샌드박스에서 추출한 결과를 종합한 것
관련 글 더 보기
안내 및 법적 고지
분석 환경 안내
본 분석은 격리된 동적 분석 샌드박스(CAPEv2) 환경에서 수행된 단일 인스턴스 관측치를 기반으로 합니다.
다른 환경/시점에서는 행위가 달라질 수 있으며, 본문의 모든 행위 기술은 본 인스턴스에서 실제로 관측된 것에 한정됩니다.
AI 활용 안내
이 글은 AI(Claude)의 도움을 받아 작성되었습니다.
인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항
본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다.
언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라
처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.