LummaStealer Go 로더 분석: XOR 난독화와 VEH 안티분석을 쓴 MaaS 인포스틸러
2026년 4월 분석에서 탐지 점수 10/10을 받은 LummaStealer Go 로더 샘플. VEH 기반 흐름 하이재킹, RWX 메모리 매핑, SetUnhandledExceptionFilter 등 3가지 회피 기법과 초판 정정 내역.
2026년 4월 분석에서 탐지 점수 10/10을 받은 LummaStealer Go 로더 샘플. VEH 기반 흐름 하이재킹, RWX 메모리 매핑, SetUnhandledExceptionFilter 등 3가지 회피 기법과 초판 정정 내역.
정정 안내 (2026-09-28) 초판은 HTTP 요청 133건을 샘플이 Microsoft 업데이트로 위장한 C2 통신으로 보고 제목에 올렸다. 이 요청은 Windows 배달 최적화의 정상 통신과 형식이 같고 샘플이 보낸 것으로 확인되지 않아, 제목과 관련 서술을 고치고 IOC 표의 IP 주소 6개를 뺐다. CISA 권고와 어긋난 문장, 공개 저장소에 없는 Sigma 룰 이름 2개, 특정 문서를 가리키지 않던 참고 자료 링크도 함께 바로잡았다.
2026년 4월 25일 분석된 한 샘플은 탐지 점수 만점(10/10)을 받았다. AES 암호화된 1MB ZIP이 Go로 컴파일된 PE32를 드롭했고, 메모리에서 추가로 347KB 페이로드가 추출됐다. 시그니처 17건, MITRE 기법 6개, RC4 암호화 10회 일치. 이 샘플을 LummaStealer(Lumma C2)로 가른 근거는 정적 분석이었다. 분석 기록에는 Microsoft-Delivery-Optimization 사용자 에이전트를 단 HTTP 요청도 133건 남았지만, 이 요청은 Windows 업데이트의 정상 통신과 형식이 같고 샘플이 보낸 것으로 확인되지 않는다.
LummaStealer는 2022년 후반 러시아어권 다크웹 포럼(XSS.is·exploit.in)에서 처음 판매된 MaaS(Malware-as-a-Service) 정보 탈취형 악성코드다. 운영자 Shamel이 월 $250~$1,000 구독 모델로 운영한다. ENISA Threat Landscape 2025 보고서는 2024년 하반기 Lumma 사용이 상반기보다 350% 넘게 늘었고, 2025년 초부터 가장 널리 퍼진 인포스틸러였다고 평가했다.
2025년 5월 Microsoft 디지털범죄대응반(DCU)은 미국 법원 명령을 받아 Lumma 인프라를 이루던 도메인 약 2,300개를 압수·차단했다. 미국 법무부(DOJ)는 중앙 관리 구조를 압수하고 판매 시장을 교란했으며, Europol과 일본 JC3는 유럽·일본에 있던 인프라의 차단을 도왔다. ENISA는 운영자가 테이크다운 며칠 뒤 활동을 재개한 것으로 보인다고 적었다. 본 분석 샘플은 이 시기 이후의 최신 변종 계열이다.
한국에서는 다음 경로로 광범위하게 배포된다.
안랩 ASEC은 2025년 1월 LummaC2가 가짜 캡차 인증 페이지로 유포되는 사례를, 2월에는 Total Commander 크랙으로 위장해 유포되는 사례를 보고했다. 가짜 캡차 사례는 인증 버튼을 누르면 악성 명령어가 클립보드에 복사되고, 사용자가 실행 단축키로 이를 직접 붙여넣어 실행하도록 유도하는 사회공학 패턴이다. 한국어 OS 환경에서 자주 탐지되는 인포스틸러 중 하나다.
| 항목 | 값 |
|---|---|
| 파일명 | b73edda46a91349b37f2.zip |
| 파일 타입 | AES 암호화 Zip (v5.1+) |
| 크기 | 1,030,954 B |
| MD5 | ccca6d46b0cf0c242713db9f20be5717 |
| SHA-256 | a064054d9fc0149c94caa79eec4692252d02f37294179c9e999bd20619ab9965 |
| 드롭 PE | Go 컴파일 PE32 (2,124,976 B) |
| 메모리 페이로드 | Unpacked PE 32-bit (347,136 B) |
| 종합 탐지 점수 | 10.0 / 10 |
| 분석 환경 | Windows 10 x64, 176초 |
| 분석일 | 2026-04-25 07:11~07:14 UTC |
ZIP은 AES로 암호화되어 정적 스캐너가 내부 PE를 직접 검사할 수 없다. 사용자가 압축 해제 비밀번호를 함께 받는 형태(가짜 크랙 README에 동봉)로 배포된다.
CAPA가 드롭된 PE에서 다음 능력을 식별했다.
메모리 페이로드(unpacked)에서는 더 강한 능력이 식별됐다.
XOR 일치 329회는 비정상적으로 높다. 일반 PE 평균 10~30회 대비 10배 이상이다. Lumma 분석가들은 이를 "전 문자열 XOR 보호 + 런타임 디코딩" 으로 설명하며, Yara 룰 기반 정적 탐지를 무력화한다.
행위 모니터는 단일 프로세스만 관측했고 자식 프로세스가 없다. exec_crash 시그니처가 발생했지만 그 원인은 단정하기 어렵다. 가능한 가설은 네 가지다.
실제 피해자 환경에서는 페이로드 디크립트 후 BitLockerToGo.exe 또는 MSBuild.exe(LOLBin)에 process hollowing으로 인젝션해 트래픽 호스트를 위장하는 것이 알려진 패턴이다.
HTTP 요청은 총 133건, 중복을 빼면 27개 고유 패턴이 기록됐다. 모든 요청이 Microsoft-Delivery-Optimization/10.0 사용자 에이전트를 달고, IP 주소로 직접 /filestreamingservice/files/ 경로를 요청했다. URL에는 P1~P4 파라미터와 cacheHostOrigin=2.tlu.dl.delivery.mp.microsoft.com이 붙어 있었다.
이 형식은 Windows 업데이트가 쓰는 배달 최적화(Delivery Optimization)의 정상 통신과 같다. Microsoft는 배달 최적화가 Microsoft 서버 말고도 같은 네트워크의 다른 기기나 전용 캐시 서버(Microsoft Connected Cache)에서 업데이트 파일을 받는다고 설명한다. Connected Cache 점검 문서가 정상 동작 확인용으로 제시하는 주소도 http://[캐시 노드 IP]/filestreamingservice/files/…?cacheHostOrigin=dl.delivery.mp.microsoft.com 형태로, IP 주소에 직접 요청한다. 초판은 "실제 배달 최적화는 IP 주소에 직접 접속하지 않는다"고 적었으나 이 문서와 어긋난다. Microsoft Q&A에도 외부 IP 주소로 같은 형식의 요청이 수백 건 나갔다는 문의가 올라왔다. 채택된 답변은 그 주소를 피어나 ISP가 운영하는 캐시 노드로 보고 정상 배달 최적화 트래픽이라고 판단했다.
요청을 보낸 주체도 샘플로 확인되지 않는다. 행위 모니터가 기록한 프로세스는 샘플 하나뿐이지만, 네트워크 기록은 분석용 가상머신 전체의 통신을 담는다. 같은 분석 환경에서 계열이 다른 샘플을 돌린 기록에도 같은 IP 주소들이 되풀이해 나타났다. CISA AA25-141B가 기술한 LummaC2의 C2 통신은 바이너리 안에서 복호화한 C2 도메인으로 보내는 POST 요청이다. Microsoft 분석도 Lumma의 C2 서버가 Cloudflare 프록시 뒤에 숨어 있고 모든 트래픽이 HTTPS로 암호화된다고 적었다. 80번 포트 평문 GET으로 IP 주소에 업데이트 파일 조각을 요청한 이번 기록과는 모양이 다르다.
행위 시그니처 network_questionable_http_path(severity 3)와 network_cnc_http(severity 2)는 이 요청들에 걸린 것이다. 서두의 시그니처 17건과 탐지 점수에도 이 기록이 섞여 있다.
관측된 3가지 회피 기법은 다음과 같다.
registers_vectored_exception_handler 시그니처. 일반 SEH 체인을 우회해 예외 발생 시 자체 핸들러에서 페이로드를 디크립트하는 control flow obfuscation. 디버거가 단일 step으로 실행 흐름을 따라가기 어렵게 만든다.injection_rwx. 디크립트된 페이로드를 RWX(Read/Write/Execute) 권한 영역에 매핑. 이는 Windows 11 24H2 이후 Memory Integrity 활성 환경에서 EDR 알람 발생 가능성이 높지만, Lumma는 메모리 보호가 비활성 환경(소비자 PC, 구형 기업 PC)을 1차 타깃으로 삼는다.antidebug_setunhandledexceptionfilter. 디버거 attach 시 의도적 크래시.다음 항목이 0으로 관측됐다 — 파일 생성 0건, 레지스트리 쓰기 0건, 뮤텍스 생성 0건, 실행 명령어 0건, PowerShell 활동 0건, AMSI 이벤트 0건. CISA AA25-141B에 따르면 LummaC2는 C2와 교신하지 않으면 감염된 드라이브에 파일을 만들지 않고 메모리에서만 동작한다. 파일을 떨구거나 저장하는지는 C2가 내려보내는 명령에 달렸다. 앞 절의 HTTP 요청 133건은 샘플의 C2 교신으로 확인되지 않으므로, 이 0건들은 C2 교신이 없었던 상황과 어긋나지 않는다.
페이로드의 본 행위(자격증명·지갑 탈취)가 관측되지 않은 원인은 단정할 수 없다. 회피 능력 때문일 수도, C2 인프라 부재 때문일 수도, 분석 환경의 브라우저 프로필 미설치 때문일 수도 있다. 자동 분석 환경의 한계 영역이다. 그래도 정적 분석(XOR 329회, RC4 10회, 클립보드 read)으로 LummaStealer 식별 자체는 가능했다.
| 유형 | SHA-256 |
|---|---|
| 원본 ZIP | a064054d9fc0149c94caa79eec4692252d02f37294179c9e999bd20619ab9965 |
| 드롭 EXE | b73edda46a91349b37f219d3056dff65a545ba458f4c4a93eddd6fae3b99c38b |
| 메모리 페이로드 | 48665a7ff4f186039db2e163046d1d0c3fc576ffcfc4325e3e11a700ce8657ae |
이번 분석에서 샘플의 네트워크 IOC로 확정할 수 있는 항목은 없다. 초판은 이 자리에 IP 주소 6개를 C2 등으로 적었다. ARIN 등록 정보로 확인하면 그중 3개는 Microsoft 대역, 2개는 CDN 업체 Akamai 대역, 1개는 IP 임대 업체 IPXO 대역이다. IPXO 대역 주소는 앞 절의 배달 최적화 형식 요청을 받은 곳이다. 모두 샘플이 아닌 분석 환경의 Windows 통신에서 나왔을 가능성이 높아 C2로 볼 근거가 없으므로 표에서 뺐다. Google 인증서 폐기 목록 도메인(c.pki.goog) 조회도 기록에 있으나, 조회한 주체는 확인되지 않았다.
관측된 6개 기법:
| 전술 | 기법 | 시그니처 |
|---|---|---|
| Command and Control | T1071 Application Layer Protocol | flare_capa_communication (정적 분석의 HTTP 통신 능력) |
| Command and Control | T1132 Data Encoding | flare_capa_datamanipulation (RC4 + XOR + Base64) |
| Defense Evasion | T1055 Process Injection | registers_vectored_exception_handler, injection_rwx |
| Defense Evasion | T1497 Virtualization/Sandbox Evasion | flare_capa_antianalysis, exec_crash |
| Defense Evasion | T1574 Hijack Execution Flow | registers_vectored_exception_handler (VEH 흐름 탈취) |
| Privilege Escalation | T1055 (중복) | (위와 동일) |
T1071 행은 정적 분석에서 확인된 HTTP 통신 능력(IWebBrowser2)에 근거한다. 초판은 네트워크 시그니처 network_cnc_http·network_http도 근거로 들었지만, 이 시그니처가 걸린 HTTP 기록은 샘플의 통신으로 확인되지 않아 근거에서 뺐다.
추가로 LummaStealer 알려진 기법(이번 샘플에서 미관측, 실제 환경에서 발현):
이번 기록과 공개 자료를 기준으로 볼 수 있는 흔적은 다음과 같다.
네트워크 레벨
filestreamingservice/files/ 경로로 향하는 요청은 HTTP 소스(CDN)나 Connected Cache에서 받을 때 정상적으로 생기는 형태라, 그 자체로는 이상 신호가 아니다.프로세스 레벨
Sigma 룰
Sysmon 이벤트
c.pki.goog 조회처럼 주체가 불분명한 질의를 샘플 행위와 가를 때 쓰인다.BitLockerToGo.exe 또는 MSBuild.exe가 외부 메모리 access 시도.Atomic Red Team 검증
Atomic-Red-Team/atomics/T1115/T1115.md 클립보드 읽기 시뮬레이션이 샘플의 탐지 점수 만점(10/10)은 시그니처 기반 탐지가 작동했음을 보여주지만, 그 점수에는 샘플 행위로 확인되지 않은 네트워크 시그니처도 섞여 있다. 그러나 본 분석 환경에서 페이로드의 본 행위(자격증명·지갑 탈취)는 관측되지 않았으며, 이것이 LummaStealer의 회피 능력 때문인지, C2 인프라 무응답 때문인지, 분석 환경 한계 때문인지는 단정할 수 없다. 확실한 결론은 하나다 — 정적 시그니처(YARA, CAPA)는 작동했고, 행위 기반 단일 의존 환경에서는 동일 샘플이 어떻게 분류될지 추가 검증이 필요하다.
LummaStealer에 대해 공식 기관과 벤더가 공개한 탐지 자료 가운데 이 글이 다룬 실행 방식·배포 경로와 직접 닿는 것은 두 지점이다. 정상 프로그램을 빌린 페이로드 실행, 그리고 ClickFix 감염 경로에서 사용자가 실행 창에 붙여넣은 명령이다. 이번 분석에서는 자식 프로세스가 생기지 않았고 샘플도 ZIP으로 전달돼, 두 지점 모두 분석 기록에는 나타나지 않는다. 아래 자료는 실제 감염 환경을 기준으로 한다.
MITRE ATT&CK는 Lumma Stealer(S1213)가 BitLockerToGo.exe 같은 정상 프로그램에 프로세스 할로잉으로 페이로드를 주입했다고 기록하고, 이를 T1055.012(Process Hollowing)로 매핑했다. SigmaHQ의 「BitLockerTogo.EXE Execution」 룰은 프로세스 생성 로그(Sysmon 이벤트 ID 1 등)에서 실행 파일 경로가 BitLockerToGo.exe로 끝나는 경우를 잡는다. 룰 설명은 이 프로그램이 드물게 쓰여 실행 자체가 조사 대상이라고 적고, Lumma의 할로잉 사례를 근거로 든다. 이동식 드라이브를 실제로 암호화하는 정상 사용이 오탐 원인이어서 룰 수준은 low다. Microsoft는 2025년 5월 분석에서 Lumma 로더의 할로잉 대상으로 msbuild.exe·regasm.exe·regsvcs.exe·explorer.exe를 들었는데, 본문이 든 MSBuild.exe와 겹친다.
같은 Microsoft 분석이 공개한 Defender 백신 탐지명은 Trojan:Win32/LummaStealer다. 행위 기반 탐지명 Behavior:Win32/LummaStealer도 같은 목록에 있다. Defender for Endpoint 경보로는 'Possible Lumma Stealer activity'와 'Process hollowing detected'가 제시됐다. Microsoft는 이 경보들이 무관한 위협 활동에서도 뜰 수 있다고 덧붙였다.
본문이 한국 배포 경로로 든 ClickFix는 레지스트리에 기록을 남긴다. CISA·FBI 공동 권고 AA25-141B(2025년 5월 21일)에 따르면 가짜 CAPTCHA 페이지는 사용자에게 Windows 실행 창(Win+R)을 열게 한다. 이어 클립보드 내용을 붙여넣게 해 Base64로 인코딩된 PowerShell 명령을 실행시킨다. 실행 창에 입력한 명령은 사용자 레지스트리의 RunMRU 키에 값으로 남는다. SigmaHQ의 「Potentially Suspicious Command Executed Via Run Dialog Box - Registry」 룰이 이 값을 본다. 레지스트리 값 설정 로그(Sysmon 이벤트 ID 13)에서 RunMRU 값에 powershell과 -enc·iex·http 같은 문자열이 함께 있으면 잡으며, 룰 수준은 high다. Microsoft는 같은 행위를 탐지명 Behavior:Win32/RegRunMRU와 경보 'Suspicious command in RunMRU registry'로 분류한다. 함께 공개한 Defender XDR 헌팅 쿼리 'ClickFix commands execution'은 explorer.exe가 RunMRU 키에 쓴 값을 조회한다.
분석 환경 안내 본 분석은 격리된 동적 분석 샌드박스(CAPEv2) 환경에서 수행된 단일 인스턴스 관측치를 기반으로 합니다. 다른 환경/시점에서는 행위가 달라질 수 있으며, 본문의 모든 행위 기술은 본 인스턴스에서 실제로 관측된 것에 한정됩니다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.