본문 바로가기

Reversing/Malware Analysis

[Lumma Stealer] Heaven's Gate 기법을 활용한 악성코드(2)

목차

 

1. 개요
   1.1) 분석 파일 정보


2. 상세 분석
   2.1) 탐지 회피
      2.1.1) 코드 난독화
      2.1.2) GetModuleHandleW 구현
      2.1.3) GetProcAddress 구현
      2.1.4) LoadLibraryW 동적 호출
      2.1.5) Winhttp 함수 주소 추출
      2.1.6) syscall table 생성
      2.1.7) Heaven’s Gate 기법
      2.1.8) ntdll.dll 매핑
   2.2) 패킹 여부 확인
   2.3) C2 연결
     2.3.1) 추가 C2 연결
     2.3.2) c2conf 복호화

 

3. 결론

 

4. 참고 문헌

 

 

 

 

1. 개요

Lumma Stealer는 C언어 기반 정보탈취 악성코드로, 감염된 PC 내 암호화폐 지갑과 브라우저에 저장된 계정·결제정보를 탈취하는 것을 주목적으로 한다. 이 악성코드는 Malware-as-a-Service(MaaS) 형태로 유통되어 유료 서비스로 제공되며, 전문 지식이 없는  일반 사용자도 쉽게 사이버 공격에 가담할 수 있게 해 위협이 크다. 이 때문에 다양한 변종이 존재하고, 빌드와 가격은 크게 세 가지 등급으로 나뉜다.

그림1) Lumma Stealer 다크웹 게시물

  • Experienced - $250/month : 로그를 대량으로 다운로드하는 기능과 특정 매개변수로 로그를 필터링하는 기능을 포함.
  • Professional - $500/month : 스틸러에 대한 규칙을 무제한으로 생성할 수 있고, 다른 사용자와 통계 공유가 가능하며 비상주 로더 등 추가 기능을 제공.
  • Corporate  - $1000/month : 개발자는 기업 플랜을 통해 사용자가 무작위 빌드를 받는다고 주장. 즉, 각 빌드는 서로 다르게 생성되며, Heaven’s Gate(32비트 모드에서 64비트 모드로 전환해  64비트 코드를 실행하는 기법)를 구현해 샌드박스·디버거 등 동적 분석을 회피하는 기능을 포함.

이전 글에서는 ClickFix 기법과 침해 사례 및 감염 경로에 대해 다뤘다. 이번 글에서는 Heaven’s Gate, API 난독화, 게임 플랫폼 남용 등 탐지 회피 기술을 탑재한 Lumma Stealer를 분석하려고 한다.

 

 

1.1) 분석 파일 정보

Lumma는 다양한 변종으로 악성코드를 유포한다. 그중 Lumma Stealer를 수집하여 분석을 진행하였다.

C2 blast-hubs[.]com
blastikcn[.]com
decreaserid[.]world
dsfljsdfjewf[.]info
hoyoverse[.]blog
inspirzedthoughts[.]tech
lestagames[.]world
pasteflawwed[.]world
stormlegue[.]com
hxxps://steamcommunity[.]com/profiles/76561199822375128

 

File name 7g487n.exe
MD5 d4c0863a69bd1214eaa2ee7b7eb4ec72
SHA-256 16538b354e9e7484f7a5ab63f566b131308addc1968b7a69034b758f11b07173
File type Win32 EXE
File size 334.00 KB (342016 bytes)
Creation Time 25-02-16 15:26:45 UTC
File name output.241471247.txt
MD5 4c55078da7f0d632b0af29dfa23e0db7
SHA-256 533a6854efe4f57824ad9e8154d448d22eab66af085e377e190b648f2363ecef
File type ASCII text
File size 7.27 KB (7448 bytes)

 

 

2. 상세 분석

2.1) 탐지 회피

Lumma Stealer는 탐지 회피 및 분석 지연을 위해 문자열 암호화/난독화, API Resolving, heaven`s gate 기법 등을 사용한다.

 

2.1.1) 코드 난독화

그림2) 암호화 된 ntdll.dll 문자열
그림3) 문자열 복호화 루틴

 

그림4) 제어 흐름 난독화

 

Lumma Stealer는 모든 정적 문자열을 바이너리 내부에 암호화된 상태로 저장해 필요시 런타임에 복호화하여 사용하며, 다수의 jmp 명령으로 제어 흐름을 난독화해 정적 분석을 방해한다.

 

 

 

2.1.2) GetModuleHandleW 구현

대부분의 함수는 표준 WinAPI나 CRT 호출을 피하고 자체 구현한 네이티브 코드로 호출되며, 이는 흔한 탐지 지표와 행위 기반 룰을 회피하기 위함이다.

그림5) API 호출 없이 GetModuleHandleW()를 구현

 

447240() 루틴에서는 복호화된 문자열을 매개변수로 받고 GetModuleHandleW() API 호출 없이

직접 PEB의 LDR 구조체 내 InLoadOrderModuleList를 순회한다. 해당 방식으로 프로세스에 로드된 모듈들의 베이스 주소를 수동으로 찾아 ntdll.dll, kernel32.dll, user32.dll 등의 베이스 주소를 얻는다.

그림6) PEB

 

4471D0() 루틴은 mov eax, fs:[0x30] 명령을 사용해 FS 세그먼트의 TEB(스레드 환경 블록)에서 PEB 주소를 가져온다.

이후 PEB를 통해 프로세스 관련 정보를 직접 참조할 수 있다.

 

그림7) InLoadOrderModuleList

 

PEB.Ldr(0x0C) → InLoadOrderModuleList(0x0C)를 순회하며, 매개변수로 전달된 복호화된 모듈 이름을 기반으로 해당 모듈의 베이스 주소를 찾아 반환한다.

 

 

 

2.1.3) GetProcAddress 구현

그림8) API 호출 없이 GetProcAddress()를 구현

 

447590() 루틴은 첫 번째 인수로 연산된 API 함수명을 받고, 두 번째 인수로 복호화된 모듈 이름을 받는다. 전달된 모듈의 NT Header -> Export Directory(IMAGE_DIRECTORY_ENTRY_EXPORT)를 읽어 내보낸 함수 목록을 검사하고, 각 함수명에 동일한 연산을 적용해 전달된 값과 비교해 일치하면 그 엔트리의 RVA를 추출해 모듈 베이스에 더한 뒤 실제 함수 주소를 반환한다. 해당 패턴은 정적 문자열 노출을 줄이고 탐지를 회피하려는 목적을 가진 악성코드에서 주로 관찰되는 기법이다.

 

이렇게 가져온 주요 함수 주소는 다음과 같다.

KERNEL32.DLL LoadLibraryExW, FreeLibrary
ntdll.dll RtlAllocateHeap, RtlReAllocateHeap, RtlHeapFree

 

 

2.1.4) LoadLibraryW 동적 호출

그림9) LoadLibraryW

 

앞서 획득한 LoadLibraryW 주소를 사용해 crypt32.dll, winhttp.dll, ws2_32.dll을 동적으로 로드한다.

 

 

2.1.5) Winhttp 함수 주소 추출

그림10) 동적으로 Winhttp 함수 주소 추출

 

C2 연결 및 통신에 필요한 WinHTTP 함수들(WinHttpOpen, WinHttpConnect, WinHttpOpenRequest, WinHttpSendRequest, WinHttpReceiveResponse, WinHttpReadData 등)의 주소를 동적으로 가져온다.

 

 

2.1.6) syscall table 생성

그림11) AddressOfNames 조회

 

ntdll.dll의 Export Table을 읽어 AddressOfNames 엔트리에서 내보낸 함수명들을 순회하며 추출한다. 

 

그림12) syscall table 생성

 

RtlAllocateHeap()로 힙 메모리를 확보한 후, 미리 추출한 ntdll.dll 함수명들을 연산을 통해 암호화한다. 그다음 각 함수에 대응하는 syscall 번호를 식별하고 할당한 힙 영역에 syscall 번호 테이블과 암호화된 함수명들을 정렬하여 테이블을 생성한다. 이러한 동작은 헤븐즈 게이트 코드 실행 시 syscall을 호출하기 위해 필요한 syscall number를 수집·정렬해 준비하는 과정으로 해석된다.

 

그림 9)와 같이 각 구성된 테이블은 4바이트 단위로 두 개씩 묶여 있으며, 첫 4바이트는 암호화된 함수명을, 다음 4바이트는 해당 함수에 대응하는 syscall number가 저장되어 있다.

 

 

2.1.7) Heaven’s Gate 기법

그림13) Heaven`s Gate

NTSYSAPI NTSTATUS ZwOpenSection(
  [out] PHANDLE            SectionHandle,
  [in]  ACCESS_MASK        DesiredAccess,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes
);

 

Heaven’s Gate 기법을 사용해 ZwOpenSection()을 호출한다. Heaven’s Gate는 32비트 바이너리에서 wow64cpu.dll의 전환 메커니즘을 통해 64비트 syscall을 수행한다. 모든 Heaven’s Gate 호출은 4458B0() 루틴을 통해 이루어지며, 첫 번째 인수로 syscall 번호를 받고, 두 번째 인수로 syscall 반환 후 스택 정리 크기(예: ret 0xC)를 받아 MSDN 규약에 따라 SectionHandle, DesiredAccess, ObjectAttributes 등의 파라미터로 syscall을 수행한다.

 

그림14) jmp far

 

WOW64(Windows on Windows 64-bit)는 64비트 OS에서 32비트로 빌드된 애플리케이션을 실행하게 해 주는 호환성 서브시스템이다. 32비트 프로세스는 레지스터 너비, 주소 체계 등 차이 때문에 직접 64비트 시스템콜을 호출할 수 없으므로, 정상 동작에서는 WOW64 모듈들이 제공하는 전환 경로를 통해 64비트 컨텍스트로 진입해 syscall을 수행한다.

 

Heaven’s Gate 기법은 32비트 컨텍스트에서 64비트로 전환되는 정상 경로를 강제로 우회하거나 생략함으로써, 32비트 프로세스가 곧바로 64비트 코드를 실행하도록 만든다. 구현 방식으로는 call far, jump far, ret far 같은 far 제어 전송을 사용하며 해당 분석 샘플은 jmp far(0x33) 명령을 사용하여 64비트 코드를 실행한다. 이로 인해 OllyDbg 같은 일반적인 디버거나 단순한 API 트레이싱 도구로는 호출 흐름을 추적·감지하기가 어렵다. 

그림15) 로드되어있는 64비트 모듈

 

64비트 Windows에서 32비트 애플리케이션을 실행하면, WOW64와 관련된 64비트 모듈들이 프로세스 주소 공간에 자동으로 로드된 것을 확인할 수 있다. 

 

그림16) Heaven`s Gate 호출 흐름 트레이스

 

WinDbg 같은 64비트 전환 및 커널 레벨 디버깅을 지원하는 도구에서는 Heaven’s Gate의 호출 흐름을 동적 분석할 수 있다. 호출 흐름을 트레이스 하면 최종적으로 ZwOpenSection()  시스템 콜이 호출되는 것을 확인할 수 있다.

 

 

2.1.8) ntdll.dll 매핑

그림17) Heave`s Gate - NtMapViewOfSection

 

동일한 방식으로 Heaven’s Gate 기법을 사용해 NtMapViewOfSection()을 호출하여 ntdll.dll의 복사본을 메모리에 매핑한다.

 

 

2.2) 패킹 여부 확인

그림18) GetUserDefaultUILanguage - PC 언어 조회

 

GetUserDefaultUILanguage()로 실행 환경의 UI 언어(LANGID)를 조회한다. 반환값으로 0x0412가 나왔으며,

이는 한국어(대한민국)를 가리키는 식별자이다.

그림19) Lummac2.4.exe 경로 작성

 

RtlAllocateHeap()로 힙 메모리를 할당한 뒤, 할당된 메모리에 현재 실행 중인 Lummac2.4.exe의 경로를 작성한다.

 

그림20) Heaven`s Gate - ZwOpenFile

 

Heaven’s Gate를 통해 ZwOpenFile()을 호출한다. 호출 결과로 얻은 FileHandle이 0x190로 관찰되었고, 이 핸들은 현재 실행하고 있는 C:\Users\*****\Desktop\Lumma\LummaC2.4.exe 의 핸들로 확인된다.

 

그림21) Heaven`s Gate - NtReadFile

 

RtlAllocateHeap()로 힙 메모리를 할당한 후, Heaven’s Gate를 통해 NtReadFile()을 호출해 Lummac2.4.exe 바이너리를 읽어 메모리에 기록한다. 해당 동작은 이후 메모리 패킹 여부를 검사하기 위한 것으로 추정된다.

 

그림22) 암호화된 lpText

 

그림23) 암호화된 lpText 복호화

 

패킹 여부를 검사하고 패킹이 적용되어 있지 않거나 해제된 상태이면, 내부에 저장된 암호화된 lpText 버퍼를 복호화해 평문을 생성한다. 이 평문은 이후 메시지박스 호출 시 표시될 텍스트로 사용된다.

 

그림24) Heaven`s Gate - NtRasieHardError

 

Heaven’s Gate를 통해 NtRaiseHardError()를 호출하여 메시지박스를 생성한다. 일반적인 구현과 달리 MessageBox()를 직접 호출하지 않고 NtRaiseHardError()를 이용해 간접적으로 UI를 띄우는 점이 특징적이다. 개발자 측은 이 동작이 암호화되지 않은 원본 샘플의 유출을 막기 위한 보호 조치라고 설명했다. 메시지박스에서 사용자가 “아니요”를 선택하면 악성코드는 추가적인 행위를 수행하지 않고 종료된다.

 

 

2.3) C2 연결

그림25) 힙 메모리 생성

 

RtlAllocateHeap()로 힙 영역을 동적으로 할당하고, 그 버퍼에 C2 통신에 사용될 암호화된 버퍼를 기록한다. 

 

그림26) C2 도메인 주소 추출

 

실행 중 내부에 저장된 ChaCha20 암호화 데이터를 복호화하여 C2 도메인 주소를 얻는다. 복호화된 도메인 주소는 다음과 같다.

그림27) 추출한 C2 도메인 주소 순회
그림28) C2 서버에 요청

 

추출한 C2 도메인들을 순회하면서 접속 가능한 서버를 찾고, 접속이 가능한 C2를 발견하면 WinHttpSendRequest()로 HTTP POST 요청을 전송해 C2와 연결을 수립한다. 첫 요청은 act=life로 heartbeat를 알리고, 이후 act=receive_message&ver=4.0&lid=yau6Na–5504031492&j 형태의 요청으로 메시지 수신/명령 페이로드를 요청한다.

act=receive_message 서버로부터 명령/메시지를 받아오기 위한 액션
ver=4.0 Lumma 버전 정보
lid=... 하드코딩/생성된 ID

 

2.3.1) 추가 C2 연결

그림29) Steamcommuntiy.com 조회

 

내부에 등록된 모든 C2에 접속하지 못할 경우 게임 플랫폼인 Steam을 이용해 C2 정보를 조회한다. 이전 버전에는 모든 C2 정보가 바이너리 내부에 고정되어 있었지만, 현재는 정상적인 웹 서비스(Steam)를 악용해 원격에서 동적으로 C2를 제공함으로써 공격자가 원하는 시점에 C2를 교체할 수 있다. 이런 방식은 정적 분석과 서명 기반 탐지를 회피하고, 네트워크 트래픽만으로는 악성 행위를 구분하기 어렵게 만든다.

 

그림30) c2 도메인 주소가 기록되어 있는 게임 플랫폼 프로필

 

접속되는 URL은 공격자가 개설한 것으로 추정되는 Steam 계정 프로필 페이지에 접속해 "actual_persona_name" 항목을 파싱 한 뒤, 해당 문자열을 시저 암호로 복호화해 C2 도메인을 얻는다.

 

 

2.3.2) c2conf 복호화

C2에 연결한 뒤 서버로부터 암호화된 설정 파일(JSON)을 내려받아 복호화한다. 

현재 C2 도메인이 비활성화되어 있기 때문에 알려진 conf 파일을 수집하여 복호화를 진행하였다.

 

알려진 Lumma Stealer 주요 탈취 데이터

  • 암호화폐 지갑 관련 프로그램 정보
  • 브라우저에 저장된 로그인 정보(쿠키·세션·자동 완성) 및 브라우저 확장(특히 가상화폐 지갑 확장) 정보
  • 패스워드 관리자/저장 프로그램 정보
  • 사용자 디렉터리 내의 .txt 등 텍스트 파일
  • 메신저(채팅) 프로그램 정보
  • FTP 클라이언트 정보
  • VPN 클라이언트 정보
  • 원격 접속 프로그램 정보(RDP/원격제어 도구 등)
  • 메모·노트 프로그램 정보
  • 메일 클라이언트 정보

그림31) base64 인코딩 및 암호화된 페이로드

인코딩 된 문자열의 첫 32바이트는 복호화에 사용되는 키이고, 그 이후 바이트들이 암호화된 본문이다. 복호화는 본문과 32바이트 키를 XOR 연산하여 수행된다. 복호화 후 탈취하는 데이터를 정리하면 다음과 같다.

 

1 File/Dir %userprofile% *.txt Important Files/Profile
2 File/Dir %appdata%\Binance app-store.json Wallets/Binance
3 File/Dir %appdata%\Binance .finger-print.fp Wallets/Binance
4 File/Dir %appdata%\Binance simple-storage.json Wallets/Binance
5 File/Dir %appdata%\Electrum\wallets * Wallets/Electrum
6 File/Dir %appdata%\Ethereum keystore Wallets/Ethereum
7 File/Dir %appdata%\Exodus\exodus.wallet * Wallets/Exodus
8 File/Dir %appdata%\Ledger Live * Wallets/Ledger Live
9 File/Dir %appdata%\atomic\Local Storage\leveldb * Wallets/Atomic
10 File/Dir %localappdata%\Coinomi\Coinomi\wallets * Wallets/Coinomi
11 File/Dir %appdata%\Authy Desktop\Local Storage\leveldb * Wallets/Authy Desktop
12 File/Dir %appdata%\Bitcoin\wallets * Wallets/Bitcoin core
13 File/Dir %appdata%\com.liberty.jaxx\IndexedDB *.leveldb Wallets/JAXX New Version
14 File/Dir %appdata%\Electrum\wallets * Wallets/Electrum
15 File/Dir %appdata%\AnyDesk *.conf Applications/AnyDesk
16 File/Dir %appdata%\FileZilla recentservers.xml Applications/FileZilla
17 File/Dir %appdata%\FileZilla sitemanager.xml Applications/FileZilla
18 File/Dir %userprofile% *.kbdx Applications/KeePass
19 File/Dir %programfiles%\Steam ssfn* Applications/Steam
20 File/Dir %programfiles%\Steam\config * Applications/Steam/config
21 File/Dir %appdata%\Telegram Desktop *s Applications/Telegram
22 Extension ejbalbakoplchlghecdalmeeeajnimhm MetaMask
23 Extension nkbihfbeogaeaoehlefnkodbefgpgknn MetaMask
24 Extension egjidjbpglichdcondbcbdnbeeppgdph Trust Wallet
25 Extension ibnejdfjmmkpcnlpebklmnkoeoihofec TronLink
26 Extension fnjhmkhhmkbjkkabndcnnogagogbneec Ronin Wallet
27 Extension fhbohimaelbohpjbbldcngcnapndodjp Binance Chain Wallet
28 Extension ffnbelfdoeiohenkjibnmadjiehjhajb Yoroi
29 Extension jbdaocneiiinmjbjlgalhcelgbejmnid Nifty
30 Extension afbcbjpbpfadlkmhmclhkeeodmamcflc Math
31 Extension hnfanknocfeofbddgcijnmhnfnkdnaad Coinbase
32 Extension hpglfhgfnhbgpjdenjgmdgoeiappafln Guarda
33 Extension blnieiiffboillknjnepogjhkgnoapac EQUA
34 Extension cjelfplplebdjjenllpjcblmjkfcffne Jaxx Liberty
35 Extension fihkakfobkmkjojpchpfgcmhfjnmnfpi BitApp
36 Extension kncchdigobghenbbaddojjnnaogfppfj iWlt
37 Extension kkpllkodjeloidieedojogacfhpaihoh EnKrypt
38 Extension amkmjjmmflddogmhpjloimipbofnfjih Wombat
39 Extension nlbmnnijcnlegkjjpcfjclmcfggfefdm MEW CX
40 Extension nanjmdknhkinifnkgdcggcfnhdaammmj Guild
41 Extension nkddgncdjgjfcddamfgcmfnlhccnimig Saturn
42 Extension cphhlgmgameodnhkjdmkpanlelnlohao NeoLine
43 Extension nhnkbkgjikgcigadomkphalanndcapjk Clover
44 Extension kpfopkelmapcoipemfendmdcghnegimn Liquality
45 Extension aiifbnbfobpmeekipheeijimdpnlpgpp TerraStation
46 Extension dmkamcknogkgcdfhhbddcghachkejeap Keplr
47 Extension fhmfendgdocmcbmfikdcogofphimnkno Sollet
48 Extension cnmamaachppnkjgnildpdmkaakejnhae Auro
49 Extension jojhfeoedkpkglbfimdfabpdfjaoolaf Polymesh
50 Extension flpiciilemghbmfalicajoolhkkenfe ICONex
51 Extension nknhiehlklippafakaeklbeglecifhad Nabox
52 Extension hcflpincpppdclinealmandijcmnkbgn KHC
53 Extension ookjlbkiijinhpmnjffcofjonbfbgaoc Temple
54 Extension mnfifefkajgofkcjkemidiaecocnkjeh TezBox
55 Extension lodccjjbdhfakaekdiahmedfbieldgik DAppPlay
56 Extension ijmpgkjfkbfhoebgogflfebnmejmfbm BitClip
57 Extension lkcjlnjfpbikmcmbachjpdbijejflpcm Steem Keychain
58 Extension onofpnbbkehpmmoabgpcpmigafmmnjh Nash Extension
59 Extension bcopgchhojmggmffilplmbdicgaihlkp Hycon Lite Client
60 Extension klnaejjgbibmhlephnhpmaofohgkpgkd ZilPay
61 Extension aeachknmefphepccionboohckonoeemg Coin98
62 Extension bhghoamapcdpbohphigoooaddinpkbai Authenticator
63 Extension dkdedlpgdmmkkfjabffeganieamfklkm Cyano
64 Extension nlgbhdfgdhgbiamfdfmbikcdghidoadd Byone
65 Extension infeboajgfhgbjpjbeppbkgnabfdkdaf OneKey
66 Extension cihmoadaighcejopammfbmddcmdekcje Leaf
67 Extension gaedmjdfmmahhbjefcbgaolhhanlaolb Authy
68 Extension oeljdldpnmdbchonielidgobddfffla EOS Authenticator
69 Extension ilgcnhelpchnceeipipijaljkblbcob GAuth Authenticator
70 Extension imloifkgjagghnncjkhggdhalmcnfklk Trezor Password Manager
71 Extension bfnaelmomeimhlpmgjnjophhpkkoljpa Phantom
72 Extension ppbibelpcjmhbdihakflkdcoccbgbkpo UniSat
73 Browser Data %localappdata%\Google\Chrome\User Data Chrome
74 Browser Data %localappdata%\Chromium\User Data Chromium
75 Browser Data %localappdata%\Microsoft\Edge\User Data Edge
76 Browser Data %localappdata%\Kometa\User Data Kometa
77 Browser Data %appdata%\Opera Software\Opera Stable Opera Stable
78 Browser Data %appdata%\Opera Software\Opera GX Stable Opera GX Stable
79 Browser Data %appdata%\Opera Software\Opera Neon\User Data Opera Neon
80 Browser Data %localappdata%\BraveSoftware\Brave-Browser\User Data Brave Software
81 Browser Data %localappdata%\Comodo\Dragon\User Data Comodo
82 Browser Data %localappdata%\CocCoc\Browser\User Data CocCoc
83 Profile %appdata%\Mozilla\Firefox\Profiles Mozilla Firefox

 

표 1) Lumma에서 탈취하는 데이터

 

그림32) Heaven`s Gate Call

 

해당 샘플에는 지금까지 설명한 것 외에도 Heaven’s Gate 관련 호출이 다수 존재한다. 현재 분석 시점에서는 모든 C2 도메인이 비활성화되어 있어 C2로부터의 실제 응답에 따라 어떤 추가 행위가 발생하는지는 완전히 재현 및 확인되지 않았다. 따라서 분석한 내용보다 더 많은 루틴이 존재할 수도 있다.

 

 

 

3. 결론

분석을 통해 LummaC2.4 샘플은 여러 고급 회피·은폐 기법을 결합해 정교하게 설계된 정보 탈취형 악성코드로 확인된다. Heaven’s Gate를 통해 64비트 시스템콜을 호출하고 필요한 API 주소를 동적으로 가져오거나, 내부 문자열을 런타임에서 복호화하며, 분기 흐름을 jmp 등으로 난독화하는 등, 분석 지연을 유도하고 일반적인 정적·동적 분석 도구를 통한 행위 추적을 어렵게 만든다. 

 

또한 C2 통신 방식 또한 고도화되어, 기존의 하드코딩된 C2 주소 대신 Steam 프로필 페이지를 이용해 동적으로 C2 도메인을 획득하는 방식을 사용하여 C2 인프라 차단을 어렵게 만들며, 공격자가 손쉽게 제어 서버를 교체할 수 있는 유연성을 제공한다.

 

 

4. 참고 문헌

[1] https://www.somansa.com/wp-content/uploads/2025/07/%EB%9E%9C%EC%84%AC%EC%9B%A8%EC%96%B4-%EB%A6%AC%ED%8F%AC%ED%8A%B8-%EB%B9%84%EC%A0%84%EB%AC%B8%EA%B0%80%EB%8F%84-%EA%B3%B5%EA%B2%A9-%EA%B0%80%EB%8A%A5-Lummar-Stealer-%EB%B6%84%EC%84%9D-_-%EB%9E%9C%EC%84%AC%EC%9B%A8%EC%96%B4-%EB%A6%AC%ED%8F%AC%ED%8A%B8-2025.07.pdf

(Somansa Lummar Stealer 분석 )