본문 바로가기
분석 정보/악성코드 분석 정보

NSIS 플러그인을 악용해 유포되는 Lumma Stealer

by TACHYON & ISARC 2026. 1. 29.

최근 NSIS 인스톨러의 기본 플러그인만을 이용해 Lumma Stealer를 유포하는 악성코드가 발견됐다. 해당 NSIS 샘플은 설치 데이터에 기본 플러그인 파일 외 다른 파일이 존재하지 않아 겉으로는 무해한 파일처럼 보이지만 실제로 실행하면 백그라운드에서 Lumma Stealer를 다운로드한다. NSIS 인스톨러 내부에는 설치 관련 동작을 정의하는 .nsi 스크립트가 포함돼 있으며 본 샘플은 이를 이용해 기본 플러그인 중 네트워크 기능을 제공하는INetC.dll API를 직접 호출하고 원격지에서 악성 파일을 다운로드하도록 설계됐다. 다운로드된 Lumma Stealer는 공격자가 운영하는 C&C 서버와 연결 후 시스템에서 정보를 탈취하고 추가 페이로드를 다운로드해 실행할 수 있다.

 

먼저 NSIS 샘플을 실행한 후 설치 화면에서 Next 버튼을 클릭하면 초록색 바 형태의 진행률과 함께 프로그램을 설치 중인 것처럼 UI를 출력한다. 하지만 실제로 설치되는 파일은 존재하지 않고 백그라운드에서 공격자가 운영하는 C&C 서버에 연결해 다음 페이로드를 다운로드 및 실행하게 된다.

 

[그림 1] NSIS 인스톨러 실행 화면

 

페이로드를 다운로드하는 동작은 설치 단계에서 수행되며 .nsi 스크립트의 Section 블록에서 해당 동작을 정의한다. Section 블록은 설치할 구성 요소를 정의하는 부분으로 파일, 레지스트리 및 실행 명령어 등을 설정할 수 있다. 현재 샘플의 Section 블록은 INetC.dll get 함수를 이용해 두 개의 URL에서 순차적으로 파일 다운로드를 시도하고 해당 파일에 저장된 또 다른 URL에서 파일을 다운로드해 octo.exe라는 이름으로 저장 및 실행한다.

 

[그림 2] .nsi 스크립트의 Section 블록

 

실행된 octo.exe는 상위 샘플과 같은 NSIS 인스톨러 파일로 [그림 2]와 같은 방식을 이용해 원격지에서 추가 페이로드를 다운로드 및 실행한다. 해당 페이로드는 .data 섹션에 저장된 Lumma Stealer를 복호화해 메모리에서 바로 실행하는 로더이다. Lumma Stealer는 사용할 라이브러리, API 및 데이터 등의 문자열을 복호화해 사용하며 각 문자열마다 다른 복호화 식을 적용한다.

 

# encrypted : FA 55 C2 57 F4 51 FE 53 F0 5D B0 5F FC 59 F6 5B E8 45 46 47
# decrypted : ntdll.dll
for ( i = 0 ; i < 0x14 ; i = (i | 1) + (i & 1) )
    decrypted[i] = (~encrypted[i] & (i ^ 0x24) | encrypted[i] & (~(2 * (i ^ 0x24)) * (i ^ 0x24))) - 0x70

[코드 1] 문자열 복호화 예시 1

 

# encrypted : 63 A9 6F AB 7E AD 60 AF 65 A1 6E A3 57 A5 54 A7 56 B9 7E BB 70 BD 72 BF B0 B1
# decrypted : KERNEL32.DLL
for ( i = 0 ; i < 0x1A ; i++ )
    decrypted[i] = (~encrypted[i] & (i ^ 0x48) | ~(i ^ 0x48) & encrypted[i]) + 0x20

[코드 2] 문자열 복호화 예시 2

 

Lumma Stealer는 이와 같은 방식으로 네트워크 연결에 필요한 WinHttp 라이브러리의 API 이름을 복호화한 후 동적으로 로드해 사용한다. C&C 서버의 주소 또한 문자열 복호화를 이용해 획득하며 로드한 WinHttp API를 이용해 통신을 시도한다.

 

[그림 3] WinHttp 라이브러리 API 동적 로드 결과

 

공격자의 C&C 서버와 통신에 성공하면 서버로부터 JSON형식의 config 정보를 수신하며 JSON 내부의 문자열 데이터는 암호화돼 있어 아래와 같은 방식으로 복화화를 진행한다. 복호화된 config 정보는 암호화폐 지갑, 웹 브라우저 및 애플리케이션 등 수집할 데이터의 목록을 포함하고 있으며 이에 따라 Lumma Stealer는 시스템에서 정보를 수집하고 서버로 전송한다.

  • 문자열 Base64 디코딩.
  • 디코딩된 바이너리 데이터의 처음 8 바이트를 키로 저장.
  • 디코딩된 바이너리 데이터의 8 이후 데이터를 키와 XOR 연산.

 

[그림 4] 복호화된 config 정보

 

정보 탈취 후 Lumma Stealer C&C 서버에서 추가 페이로드를 다운로드하며 해당 페이로드는 Lumma Stealer를 실행한 로더와 같은 방식을 사용해 Go 언어 기반의 백도어를 복호화 및 실행한다. 백도어는 또 다른 C&C 서버와 통신을 시도하지만 수신되는 명령어가 없어 후속 동작은 확인되지 않는다.

 

[그림 5] 백도어 C&C 서버 연결 결과

 

NSIS 설치 데이터에 악성 파일을 포함하지 않고 기본 플러그인을 사용해 악성코드를 다운로드하는 방식은 사용자가 악성 여부를 식별하기 어렵고 정상적인 네트워크 활동과 구분되지 않아 주의가 필요하다. 따라서, 출처가 불분명한 파일의 다운로드와 실행을 지양하고, 보안 프로그램과 OS를 항상 최신버전으로 유지할 것을 권고한다.

 

상기 악성코드는 잉카인터넷 안티바이러스 제품 TACHYON Internet Security 6.0에서 진단 및 치료가 가능하다.

 

[그림 6] TACHYON Internet Security 6.0 진단 및 치료 화면