[07월 | 악성코드 분석 보고서] 이메일로 유포 중인 PureLogs 인포스틸러, Violet RAT 결합 정황
샌즈랩 위협 분석팀은 매월 악성코드를 선정하여 보고서를 작성합니다.
샌즈랩 위협 분석팀은 매월 악성코드를 선정하여 보고서를 작성합니다.
전문 분석을 통해 파악한 악성코드의 특징과 위협 동향, 연관 정보 등을 공유해 안전한 사이버 환경을 만들어 가고자 합니다.
악성코드에 대한 더 상세한 정보는 사이버 위협 인텔리전스 서비스 <CTX>에서 확인하실 수 있습니다.
1. 개요
본 보고서는 2025년 7월 이메일을 통해 유포된 .NET 기반 다단계 악성코드를 기술적으로 분석했다.
공격자는 악성 URL 접근을 유도해 사용자가 실행 파일을 다운로드하도록 만들며, 이후 실행된 악성코드는 드로퍼, 다운로더, 인포스틸러, RAT(Remote Access Trojan)으로 구성된 다단계 구조를 따라 감염을 확산시킨다. 전체 실행 흐름에는 메모리 내 로딩 방식(Fileless 실행)이 혼합돼 있으며, 코드 전반에 걸쳐 문자열과 주요 로직을 난독화해 정적 분석을 어렵게 만든다.
이 악성코드의 핵심은 정보 탈취와 시스템 제어 기능을 각각 수행하는 두 개의 주요 모듈, PureLogs와 Violet RAT이다. PureLogs는 인포스틸러로 시스템 정보, 브라우저 인증 정보, 이메일 클라이언트, 암호화폐 지갑, Discord 토큰, 클립보드, 스크린샷, 로컬 파일 등 방대한 범주의 민감 정보를 수집한 뒤 이를 암호화 및 압축하여 C2 서버로 전송한다. 이어서 실행되는 Violet RAT은 119개의 명령 처리 기능을 내장한 고도화된 원격 액세스 도구로, 원격 명령 실행, 파일 시스템 조작, 화면 및 입력 제어, 오디오 재생, DoS(Denial-of-Service 공격 등 다양한 악성 행위를 수행할 수 있도록 구성돼 있다. 두 페이로드 모두 MaaS(Malware-as-a-Service)¹ 형태로 유포되며, 실제 공격자는 이 둘을 조합해 감염 환경에서 정보 수집과 원격 제어를 단계적으로 수행한다.
이번 분석에서는 드로퍼, 다운로더, PureLogs, Violet RAT의 네 가지 모듈을 중심으로 악성코드의 전체 동작을 정리하고, 각 단계에서 공격자가 활용한 탐지 회피 기법과 전략을 상세히 분석했다. 특히 PureLogs와 Violet RAT의 구조적 특징, 통신 방식, 수집 및 명령 처리 흐름에 중점을 두고 분석함으로써, 최신 MaaS 기반 악성코드의 위협 수준을 구체적으로 파악하고 이에 대한 대응 방안을 마련하는 데 목적을 두었다.
¹ MaaS(Malware-as-a-Service): 공격자가 직접 악성코드를 개발하거나 배포하지 않고,
제작자가 개발한 악성코드나 악성코드 생성·유포 도구를 임대 또는 구매하여 사용하는 형태의 사이버 범죄 서비스
2. 악성코드 정보
공격자는 이메일을 통해 악성코드를 유포하며, 사용자가 "hxxp://176.46.157.32/files/5373782173/QvG0bbo.exe" 주소에 접속해 "QvG0bbo.exe" 파일을 다운로드하도록 유도한다. 이 파일은 실제로 "Hypgkdn.exe"라는 이름의 실행 파일이며, 실행 시 다른 악성 구성요소를 메모리에 로딩하는 드로퍼 역할을 수행한다.
드로퍼는 실행과 동시에 내부에 하드코딩된 바이너리를 복호화하고 압축을 해제한 뒤, 메모리 상에서 직접 DLL을 로드한다. “AIfA66mqs.dll”이라는 이름으로 메모리에 로드하지만, 빌드 된 파일명은 “Hjlslg.dll”이다. 이 모듈은 다운로더로 작동하며, 내부에 인코딩된 형태로 포함된 C2 서버 주소를 복호화 해 서버와 통신을 시도한다. 이후 C2로부터 암호화된 페이로드를 수신하고 이를 복호화 및 압축 해제한 다음, 내장된 DLL과 인자 배열을 활용해 다음 단계 DLL을 메모리 내에서 실행한다.
다음으로 실행되는 “ClassLibrary4.dll”은 인포스틸러로, 시스템 환경 정보, 브라우저 로그인 정보, 이메일 및 FTP 클라이언트 계정, 암호화폐 지갑, Discord 토큰 등 다양한 민감 정보를 수집한다. 또한, 감염된 PC의 파일 시스템을 재귀적으로 탐색해 수집 대상 파일을 메모리 상에서 압축한 뒤 함께 유출한다. 이 모듈은 자체 복사 및 자가 삭제 루틴을 실행해 흔적을 지우고, 레지스트리에 자동 실행 경로를 등록해 감염 지속성을 확보한다. 이후 하드코딩된 URL “hxxps://rdmfile.eu/install/PoaZWvOtN6wJ”에 접속해 추가 실행 파일을 다운로드 및 실행한다.
다운로드된 파일인 “VioletClient.exe”는 RAT(Remote Access Trojan)으로, 감염 시스템의 정보를 C2 서버로 전송한 뒤, 서버로부터 명령 코드를 수신하고 다양한 원격 제어 명령을 수행한다. 해당 RAT은 총 119개의 명령 처리 기능을 포함하며, 이를 통해 원격 명령 실행, 화면 및 오디오 제어, 파일 조작, 프로세스 관리, 정보 탈취, 네트워크 공격 등 폭넓은 악성 행위를 실행할 수 있다.
모든 파일은 .NET 기반이며 난독화가 적용되어 있어 분석을 어렵게 만든다. 아래 표는 이러한 악성코드 구성 요소 각각의 역할을 요약한 내용이다.
파일명 (컴파일 스탬프) | 설명 및 역할 |
|---|---|
Hypgkdn.exe (2084-07-09) | 드로퍼. Hjlslg.dll 복호화 후 메모리 로딩 |
Hjlslg.dll (2025-07-06) | 다운로더. C2에서 ClassLibrary4.dll 수신 및 메모리 로딩 |
ClassLibrary4.dll (2025-07-06) | 인포스틸러. 정보 수집 및 유출, VioletClient.exe 다운로드 후 실행 |
VioletClient.exe (2025-07-03) | RAT. C2 명령 수신 및 실행 |
[표 1] 악성코드 구성 파일 및 각 모듈의 역할
결론적으로, 분석 대상 악성코드는 드로퍼, 다운로더, 인포스틸러, RAT으로 이어지는 다단계 감염 구조를 갖추고 있으며, 각 단계에서는 Fileless 실행, 외부 페이로드 로딩, 자동 실행 등록 등 악성코드에서 자주 사용되는 기법들을 사용한다. 공격자는 각 기능을 페이로드별로 계층적으로 분리하고, 공격 의도에 따라 기능을 유연하게 확장할 수 있도록 악성코드를 설계했다. 특히 인포스틸러 이후 RAT으로 이어지는 흐름은 피해자의 PC를 완전히 장악할 수 있어, 보안 위험이 매우 크다.
3. 악성코드 동작 순서
분석 대상 악성코드는 드로퍼, 다운로더, 인포스틸러, RAT으로 이어지는 다단계 구조를 기반으로 순차적인 악성 행위를 수행한다. 공격자는 이메일에 악성 URL “hxxp://176.46.157.32/files/5373782173/QvG0bbo.exe”을 삽입해 사용자가 이를 클릭하도록 유도하고, 이를 통해 첫 번째 실행 파일인 “Hypgkdn.exe”를 다운로드하게 만든다. 사용자가 “Hypgkdn.exe”를 실행하면, 프로그램은 내부에 하드코딩된 다운로더(“Hjlslg.dll”)를 복호화 해 메모리에 로드한다. 다운로더는 C2 서버(144.172.91.41:8805, TCP)로부터 암호화된 인포스틸러(“ClassLibrary4.dll”)를 수신한 뒤, 이를 복호화 및 압축 해제하고 메모리에 로딩한다.
로딩된 인포스틸러는 시스템 정보, 브라우저 자격 증명, 이메일 및 FTP 클라이언트 계정, 암호화폐 지갑, Discord 토큰, 클립보드, 스크린샷, 로컬 파일 등 다양한 민감 정보를 수집한다. 이렇게 수집한 정보는 직렬화 및 암호화 과정을 거쳐 C2 서버로 전송된다. 또한, 인포스틸러는 현재 실행 중인 파일(“Hypgkdn.exe”)을 %APPDATA% 경로에 복사하고, 레지스트리 자동 실행 항목 (“HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”)을 등록해 지속성을 확보한다. 이어서 원본 실행 파일을 삭제해 흔적을 제거하고, 외부 URL “hxxps://rdmfile.eu/install/PoaZWvOtN6wJ”에 접속해 RAT 페이로드(“VioletClient.exe”)를 다운로드한 뒤 실행한다.
RAT은 실행 직후 시스템 정보, 보안 제품 목록, 사용자 환경 정보를 수집해 C2 서버(144.172.91.41:7708, TCP)로 전송하고, 명령을 대기한다. 서버는 총 119개의 명령을 전송할 수 있으며, 악성코드는 이 명령을 통해 원격 명령 실행, 파일 시스템 조작, 화면 및 입력 제어, 오디오 재생, 프로세스 관리, 정보 탈취, 네트워크 공격 등 광범위한 행위를 수행한다.
이처럼 해당 악성코드는 각 기능을 모듈화해 실행하며, 페이로드를 암호화·압축한 후 메모리 내에서 로딩함으로써 탐지 회피에 최적화된 구조를 갖춘다. 정보 탈취 이후 곧바로 원격 제어 기능이 이어지는 설계는, 공격자가 수집된 정보를 바탕으로 추가 조작을 수행할 수 있는 여지를 남기며, 잠재적인 위험 수준을 높인다.
![[그림 1] 악성코드 동작 순서도](/api/media/file/1.png)
[그림 1] 악성코드 동작 순서도
4. 악성코드 분석
분석 대상 파일들은 모두 난독화되어 있었으며, 본 문서에서는 난독화를 해제한 디컴파일 코드를 기반으로 각 기능을 설명한다.
4.1. Hypgkdn.exe (드로퍼)
4.1.1. 페이로드 복호화 및 메모리 로딩
“Hypgkdn.exe”는 하드코딩된 AES 키와 IV를 이용해 암호화된 페이로드 바이너리를 복호화 한다. 공격자는 Base64로 인코딩된 키와 IV를 코드 내부에 포함시켜, 복호화 루틴에서 사용했다. 복호화 된 페이로드는 GZip 형식으로 한차례 더 압축돼 있으며, 압축을 해제하면 .NET 포맷의 바이너리(“Hjlslg.dll”)가 나타난다. 드로퍼는 이 어셈블리를 디스크에 저장하지 않고 메모리 상에서 로딩한 뒤, 해당 바이너리에서 “HN94DoyCexiOXenFms.vJy7OW7XF5hyR53H4r.AIfA66mqs” 타입을 찾아 동적으로 실행한다. 이러한 Fileless 실행 방식은 디스크 기반 탐지를 우회하고, 분석을 어렵게 한다.
![[그림 2] 하드코딩된 페이로드 복호화 및 메모리 내 로딩 후 동적 실행 흐름](/api/media/file/2.png)
[그림 2] 하드코딩된 페이로드 복호화 및 메모리 내 로딩 후 동적 실행 흐름
4.2. Hjlslg.dll (다운로더)
4.2.1. 초기 설정값 복호화
“Hjlslg.dll”은 실행 시 하드코딩된 Base64 문자열을 복호화하고, 이를 역직렬화해 초기 설정값을 메모리에 로드한다. 공격자는 이 방식으로 C2 서버 정보와 각종 실행 파라미터를 코드 내부에 은닉했다. 복원한 설정값에는 C2 서버의 IP 주소(144.172.91.41)와 포트 번호(0x00002265) 등이 포함되어 있다.
![[그림 3] 디버깅을 통해 복호화 된 C2 서버 IP 및 포트 정보 확인](/api/media/file/3.png)
[그림 3] 디버깅을 통해 복호화 된 C2 서버 IP 및 포트 정보 확인
4.2.2. 중복 실행 방지 및 분석 회피
“Hjlslg.dll”은 초기 설정값에서 추출한 문자열을 해시 처리해 뮤텍스 이름으로 생성하고, 동일한 뮤텍스가 존재할 경우 즉시 종료해 중복 실행을 방지한다. 이 방식은 동일 PC에서 악성코드가 동시에 실행되는 상황을 차단한다.
![[그림 4] 뮤텍스를 이용한 중복 실행 방지 로직](/api/media/file/4.png)
[그림 4] 뮤텍스를 이용한 중복 실행 방지 로직
또한, 다양한 분석 환경 탐지 기법을 적용해 아래 조건 중 하나라도 탐지되면 실행 중인 프로세스를 즉시 종료하도록 설계했다.
![[그림 5] 샌드박스 분석 모듈(SbieDll.dll, cuckoomon.dll) 존재 여부를 통한 탐지 로직](/api/media/file/5.png)
[그림 5] 샌드박스 분석 모듈(SbieDll.dll, cuckoomon.dll) 존재 여부를 통한 탐지 로직
![[그림 6] WMI 쿼리로 BIOS 정보(version, SerialNumber)를 조회해 가상 머신(VMware 등) 탐지](/api/media/file/6.png)
[그림 6] WMI 쿼리로 BIOS 정보(version, SerialNumber)를 조회해 가상 머신(VMware 등) 탐지
![[그림 7] 부모 프로세스 이름(cmd)을 기준으로 분석 환경 여부 확인](/api/media/file/7.png)
[그림 7] 부모 프로세스 이름(cmd)을 기준으로 분석 환경 여부 확인
![[그림 8] VMware 관련 시스템 파일(vmGuestLib.dll) 존재 여부 확인을 통한 탐지](/api/media/file/8.png)
[그림 8] VMware 관련 시스템 파일(vmGuestLib.dll) 존재 여부 확인을 통한 탐지
![[그림 9] WMI 쿼리를 통한 시스템 제조사 및 모델명 기반 가상 머신 탐지](/api/media/file/9.png)
[그림 9] WMI 쿼리를 통한 시스템 제조사 및 모델명 기반 가상 머신 탐지
![[그림 10] 해상도 정보를 기준으로 분석 환경 여부를 식별하는 조건 검사](/api/media/file/10.png)
[그림 10] 해상도 정보를 기준으로 분석 환경 여부를 식별하는 조건 검사
![[그림 11] 운영 체제의 64비트 여부를 기반으로 분석 환경 탐지](/api/media/file/11.png)
[그림 11] 운영 체제의 64비트 여부를 기반으로 분석 환경 탐지
![[그림 12] 사용자 계정명(john, anna 등)을 기반으로 분석 환경을 탐지하는 조건문](/api/media/file/12.png)
[그림 12] 사용자 계정명(john, anna 등)을 기반으로 분석 환경을 탐지하는 조건문
4.2.3. C2 통신 및 페이로드 처리
“Hjlslg.dll”은 TCP 소켓을 생성해 C2 서버와 직접 통신하며, 대용량 데이터를 처리하기 위해 송수신 버퍼 크기를 비정상적으로 크게(5MB) 설정한다. 이 모듈은 초기 설정값에 포함된 IP 주소(144.172.91.41)와 포트 번호(8805)를 이용해 C2 서버에 연결한다.
![[그림 13] TCP 소켓 생성 및 송수신 버퍼 크기 5MB로 설정 [출처] [07월 | 악성코드 분석 보고서] 이메일로 유포 중인 PureLogs 인포스틸러, Violet RAT 결합 정황|작성자 샌즈랩](/api/media/file/13.png)
[그림 13] TCP 소켓 생성 및 송수신 버퍼 크기 5MB로 설정
연결을 완료한 뒤에는 헬스 체크 루틴을 수행해 세션 상태를 점검한다. 이 과정에서 특정 바이트 값을 송수신하며, 서버가 정상적으로 응답하는지 확인한다.
![[그림 14] 서버와의 연결 상태 확인을 위한 단일 바이트 송수신 헬스 체크 루틴](/api/media/file/14.png)
[그림 14] 서버와의 연결 상태 확인을 위한 단일 바이트 송수신 헬스 체크 루틴
페이로드를 수신할 때는 먼저 서버가 전송하는 4바이트 크기 정보를 읽어 실제 페이로드의 길이를 파악한 후, 해당 길이만큼 데이터를 수신한다. 수신한 데이터는 초기 설정값에서 추출한 암호화 키를 이용해 3DES 방식으로 복호화하고, GZip 압축을 해제한 뒤, 최종적으로 역직렬화해 처리한다. 역직렬화된 객체 내부에는 또 다른 바이트 배열 형태의 페이로드를 포함하고 있으며, 동일한 방식으로 3DES 복호화 및 압축 해제를 거쳐 최종적으로 .NET 어셈블리(“ClassLibrary4.dll”)를 확보한다.
![[그림 15] 수신된 페이로드 크기 정보 확인 후 전체 데이터를 블록 단위로 수신하는 로직 [출처] [07월 | 악성코드 분석 보고서] 이메일로 유포 중인 PureLogs 인포스틸러, Violet RAT 결합 정황|작성자 샌즈랩](/api/media/file/15.png)
[그림 15] 수신된 페이로드 크기 정보 확인 후 전체 데이터를 블록 단위로 수신하는 로직
다운로더는 확보한 어셈블리를 디스크에 저장하지 않고 메모리에 직접 로드한 뒤, 첫 번째 public 클래스 내 첫 번째 public 메소드를 실행한다. 이때 통신을 통해 업데이트된 설정값을 직렬화해 메소드 인자로 함께 전달한다. 해당 방식 역시 Fileless 실행 방식으로 동작하며, 파일 기반 보안 솔루션의 탐지를 회피하고 분석을 어렵게 한다.
4.3. ClassLibrary4.dll (PureLogs)
4.3.1. 시스템 정보 수집
“ClassLibrary4.dll”은 먼저 인자로 전달받은 설정값 바이트 배열을 역직렬화한 뒤, 로컬 시스템의 다양한 정보를 수집하고 이를 하나의 객체로 구성해 외부 전송에 활용할 수 있도록 준비한다. 수집 항목은 다음과 같다.
- 버전 정보: 악성코드 내부에 하드코딩된 문자열로, PureLogs의 버전을 나타낸다.
- 실행 플래그: 설정값에 포함된 Boolean 값을 기준으로 설정하며, 내부 실행 조건 및 분기 처리에 사용한다.
- 실행 시각: 현재 날짜와 시간을 기록해 수집 시점을 명확히 한다.
- 컴퓨터 이름(MachineName): 운영체제에 설정된 시스템 이름을 가져온다.
- 사용자 및 시스템 식별자: WMI를 이용해 조회한 하드웨어 정보(BaseBoard SerialNumber, ProcessorId, Processor Name)를 조합한 뒤, 여기에 MD5 해시를 적용하고 특정 부분을 잘라낸 값을 고유 식별자로 사용한다. 이후 사용자 계정명을 결합해 최종 식별 문자열을 생성한다.
- 실행 경로: 현재 악성코드가 실행 중인 전체 파일 경로를 확인한다.
- 운영체제 정보: OS 이름과 아키텍처 정보를 결합해 시스템 환경을 파악한다.
- 설치된 안티바이러스: 등록된 백신 제품명을 조회해 보안 소프트웨어 존재 여부를 확인한다.
- 화면 캡처 이미지: 현재 화면을 캡처한 뒤, JPEG 포맷의 바이트 배열로 변환한다.
- 클립보드 문자열: 클립보드에 저장된 텍스트 데이터를 읽어온다.
- CPU 및 GPU 이름: 시스템에 장착된 CPU와 GPU의 모델명을 조회해 사용자의 하드웨어 환경을 파악하고, 가상 환경 여부를 식별하는 데 활용한다.
- 물리적 메모리 크기: 설치된 RAM 용량을 GB 단위로 측정한다.
- 화면 해상도: 현재 사용 중인 해상도(가로 × 세로)를 확인한다.
- IPv4 주소 및 게이트웨이 IP: 로컬 네트워크 주소와 기본 게이트웨이 정보를 수집한다.
- 최초 실행 여부: “Software\<고유 식별자>“ 경로에 해당하는 레지스트리 키 존재 여부를 검사한다. 고유 식별자는 앞서 생성한 시스템 식별자와 동일하며, 이 키가 존재하지 않으면 악성코드는 현재 실행을 최초 실행으로 간주한다.
![[그림 16] 시스템 정보 수집을 위한 객체 생성 및 주요 수집 항목 구성](/api/media/file/16.png)
[그림 16] 시스템 정보 수집을 위한 객체 생성 및 주요 수집 항목 구성
공격자는 이 정보를 기반으로 피해자의 환경을 정밀하게 분석하고, 조건에 맞는 명령을 전달하거나 맞춤형 공격을 수행한다. 특히 시스템 식별자, 클립보드, 화면 캡처는 공격자의 정보 탈취 목적에 활용될 수 있는 주요 대상이다.
4.3.2. 브라우저 정보 수집
인포스틸러는 시스템 정보 수집 이후, 브라우저와 애플리케이션 자격 증명, 암호화폐 지갑, Discord 토큰 정보를 비동기 방식으로 수집한다. 각 수집 루틴은 별도의 스레드에서 동시 실행되며, 최종적으로 수집된 모든 정보는 시스템 정보와 함께 외부로 전송된다.
![[그림 17] 브라우저, 애플리케이션, 암호화폐 지갑, Discord 정보를 수집하는 비동기 루틴](/api/media/file/17.png)
[그림 17] 브라우저, 애플리케이션, 암호화폐 지갑, Discord 정보를 수집하는 비동기 루틴
브라우저 정보 수집 루틴에서는 사전에 정의된 브라우저 목록을 기반으로, 설치 여부와 사용자 프로필 디렉토리(“User Data”)의 존재 여부를 확인한다. 목록에는 Chrome, Edge, Firefox 등 주요 브라우저뿐만 아니라 다양한 Chromium/Gecko 기반 파생 브라우저까지 포함되어 있다. 악성코드는 탐색 대상 브라우저 경로를 하드코딩된 문자열 형태로 관리하고, 탐색 대상이 되는 브라우저는 다음과 같다.
Chrome, ChromeBeta, ChromeSxS, ChromeDev, ChromeUnstable, ChromeCanary, Chrome(x86), ChromeBeta(x86), ChromeSxS(x86), GChromeDev(x86), ChromeUnstable(x86), ChromeCanary(x86), Chromium, Edge, Brave, EpicPrivacy, Amigo, Vivaldi, Kometa, Orbitum, Mail.Ru Atom, ComodoDragon, Torch, Comodo, 360ChromeX, Slimjet, 360, 360 SE6, 360 SE, 360 Secure, Maxthon3, Maxthon5, Maxthon, QQ, K-Meleon, Xpom, Lenovo, Xvast, Go!, Safer Secure, Sputnik, Nichrome, CocCoc, Uran, Chromodo, 7Star, Chedot, Cent, Iridium, Elements, Citrio, Sleipnir5 ChromiumViewer, QIP Surf, Liebao, Coowon, ChromePlus, RafotechMustang, Suhba, TorBro, RockMelt, Bromium, Twinkstar, iTop Private, CCleaner, AcWeb, CoolNovo, Baidu Spark, SRWare Iron, Titan, AVAST, AVG, UC, UR, Blisk, Flock, CryptoTab, Sidekick, Swing, Superbird, SalamWeb, Ghost, Netbox, GarenaPlus, Kinza, Insomniac, ViaSat, NaverWhale, Falkon, Sogou, Opera, Opera GX, OperaNeon, OperaCryptoDeveloper, Yandex, YandexBrowserCanary, YandexBrowserDeveloper, YandexBrowserBeta, YandexBrowserTech, YandexBrowserSxS, Firefox, SeaMonkey, Waterfox, Waterfox Classic, K-Meleon, Thunderbird, IceDragon, Cyberfox, BlackHawk, Pale Moon, Basilisk, BitTube, SlimBrowser, LibreWolf, Mercury |
이처럼 114종의 광범위한 브라우저를 수집 대상으로 설정함으로써, 악성코드는 다양한 사용자 환경에 대한 정보 탈취를 시도한다. 설치 여부가 확인된 브라우저에 대해서는 각 프로필 디렉토리를 탐색해 방문 기록, 로그인 정보, 세션 쿠키 등을 추출하며, 다른 수집 정보와 함께 전송한다.
4.3.3. 애플리케이션 정보 수집
인포스틸러는 이메일 클라이언트, FTP 도구, 메신저, VPN, 다운로드 관리자 등 다양한 애플리케이션을 대상으로 사용자 민감 데이터를 수집한다. 각 애플리케이션마다 정의된 전용 루틴을 실행하며, 설정 파일이나 레지스트리 경로를 탐색해 데이터를 수집한다. 이후 다른 수집 항목과 함께 해당 정보를 외부로 전송한다. 수집 대상 애플리케이션과 세부 수집 방식은 다음과 같다.
애플리케이션 | 수집 정보 |
|---|---|
Foxmail | 계정 설정 파일에서 저장된 이메일 주소, 암호, 수신/발신 서버 주소를 복호화 해 수집 |
MailBird | 계정 데이터베이스 파일에서 서버 주소, 사용자 이름, 암호, OAuth2 인증 토큰을 복호화 해 수집 |
MailMaster | 로컬 데이터 디렉토리에서 계정 정보 및 설정 파일들을 수집하고 압축하여 수집 |
Outlook | 프로필이 저장된 레지스트리에서 이메일 주소, 서버 주소, 사용자 이름, 암호를 복호화 해 수집 |
FileZilla | 설정 파일에서 저장된 FTP 호스트, 포트, 사용자 이름, 암호를 복호화 해 수집 |
WinSCP 2 | 레지스트리 세션 설정에서 FTP/SFTP 호스트 주소, 사용자 이름, 암호를 복호화 해 수집 |
Steam | 설치 경로 및 레지스트리 정보를 기반으로 로그인 계정 ID, 게임 목록, 세션 쿠키 및 설정 파일을 압축해 수집 |
Pidgin | 메신저 설정 파일에서 저장된 프로토콜, 사용자 이름, 암호를 평문으로 수집 |
Signal | 데스크톱 애플리케이션의 설정 및 데이터베이스 파일을 압축해 수집 |
Telegram | 설치 경로에서 “tdata” 디렉토리의 설정 및 인증 데이터를 압축해 수집 |
OpenVPN | “profiles” 디렉토리에서 “.ovpn” 설정 파일들을 압축해 수집 |
ProtonVPN | “user.config” 파일에서 계정 정보 및 인증 토큰을 복호화 해 압축하여 수집 |
IDM (Internet Download Manager) | 레지스트리 설정에서 사용자 이메일, 이름, 시리얼 키 정보를 수집 |
Ngrok | 설정 파일 “ngrok.yml”을 평문으로 수집 |
OBS Studio | 설정 디렉토리에서 방송 설정(“profile”) 데이터를 압축해 수집 |
[표 2] 애플리케이션별 데이터 수집 방식
4.3.4. 암호화폐 지갑 정보 수집
인포스틸러는 로컬 시스템에 설치된 암호화폐 지갑 애플리케이션의 데이터를 수집하기 위해 하드코딩된 경로들을 기준으로 파일과 폴더를 탐색한다. 수집 대상은 지갑 데이터 폴더 전체이거나, 특정 설정 또는 키 파일로 구성되며, 대상이 존재할 경우 이를 압축한 뒤 다른 수집 정보와 함께 전송한다. 수집 대상은 다음 두 가지 유형으로 분류할 수 있다.
- 지갑 데이터 폴더 전체: 암호화폐 지갑 설치 경로 내 전체 데이터 수집 및 압축(ZIP)
Qtum, DashCore, Litecoin, Bitcoin, Dogecoin, Coinomi, Armory, Bytecoin, MultiBit, Exodus, Ethereum, Electrum, ElectrumLTC, AtomicWallet, Guarda, WalletWasabi, ElectronCash, Sparrow, IOCoin, PPCoin, BBQCoin, Mincoin, DevCoin, YACoin, Franko, FreiCoin, InfiniteCoin, GoldCoinGLD, Binance, Terracoin, DaedalusMainnet, MyMonero, MyCrypto, Bisq, Bisq_db, Bisq_keys, Zap, Simpleos, Neon, bitmonero, Etherwall
- 설정 및 키 파일 단일 수집: 암호화폐 지갑 설치 경로 내 특정 파일을 수집 및 압축(ZIP)
Electrum_config, ElectronCash_config, Sparrow_config, AtomicDEX, Binance_wallet_config
인포스틸러는 이들 폴더 및 파일 경로를 코드 내부에 하드코딩된 상태로 유지하며, 탐색 결과 파일 크기가 60MB를 초과하지 않는 경우에만 수집한다. 수집한 파일은 모두 메모리 내에서 압축하고, 디스크에 기록하지 않은 채 전송한다.
4.3.5. Discord 토큰 및 사용자 정보 수집
인포스틸러는 Discord 데스크톱 클라이언트의 로컬 데이터 폴더를 탐색해 사용자 인증 토큰을 수집한 뒤, 이를 이용해 추가적인 사용자 정보 및 서버 정보를 조회한다. 이를 통해 단순한 정보 탈취를 넘어서, 실제 피해자의 Discord 계정에 직접 접근할 수 있도록 설계됐다. 먼저 다음 경로의 Discord 설치 디렉토리에서 “Local Storage\leveldb” 하위 폴더를 검색한다.
“%AppData%\Discord”, “%AppData%\DiscordCanary”, “%AppData%\DiscordPTB”, “%AppData%\DiscordDevelopment”, “%AppData%\Lightcord” |
LevelDB 폴더 내 “.log” 및 “.ldb” 파일에서 아래 정규식을 기준으로 토큰을 추출한다.
-기본 토큰: [\\w-]{24}\\.[\\w-]{6}\\.[\\w-]{27}
-MFA 토큰: mfa\\.[\\w-]{84}
인포스틸러는 추출된 토큰에서 중복을 제거한 후, Discord의 공식 API를 호출해 다음 정보를 수집한다.
URL | 수집 항목 | 비고 |
|---|---|---|
hxxps://discordapp.com/api/v9/users/@me | 사용자명(username), 전화번호(phone), 이메일(email) | 전화번호(phone)는 응답에 포함되지 않음 |
hxxps://discordapp.com/api/v9/users/@me/guilds | 서버 ID, 서버명(name), 서버 소유 여부(owner) |
[표 3] Discord API를 활용한 사용자 및 서버 정보 수집 항목
API 호출 시에는 “Authorization” 헤더에 추출한 토큰을 그대로 삽입해 인증 절차를 우회하며, 이는 실제 사용자 세션을 가장하는 방식이기 때문에 2차 인증이 적용되지 않은 계정의 경우 즉각적인 계정 탈취로 이어질 수 있다.
4.3.6. 파일 탐색 및 메모리 압축 수집
인포스틸러는 로컬 파일 시스템을 탐색해 파일을 수집한 뒤, 이를 메모리 상에서 ZIP 형식으로 압축해 유출한다. 유효한 디렉토리는 재귀적으로 탐색하고 개별 파일 경로는 직접 압축 대상에 포함한다. 이 과정에서 접근 위험이 크거나 불필요한 아래의 디렉토리는 수집 대상에서 제외한다.
Windows, ProgramData, Program Files, Program Files (x86), 각 드라이브의 휴지통 |
인포스틸러는 탐색한 파일들을 모두 메모리 상에서 ZIP 형식으로 압축한다. 디스크에 임시 파일을 생성하지 않도록 설계되어 흔적을 남기지 않으며, 이를 통해 보안 제품의 탐지를 회피한다.
4.3.7. 수집 정보 전송
인포스틸러는 수집한 정보를 두 차례에 걸쳐 전송한다. 먼저 텍스트 기반 정보(브라우저, 애플리케이션, 암호화폐 지갑, Discord)를 전송하고, 이어서 파일 시스템에서 수집한 압축 파일 데이터를 전송한다. TCP 소켓을 생성하고, 실행 시 전달받은 인자에 포함된 IP 주소(144.172.91.41)와 포트 번호(8805)로 C2 서버에 연결한다. 연결 직후에는 고정된 특정 바이트 값을 송수신하며 세션이 정상적으로 연결됐는지 확인하는 헬스 체크 과정을 수행한다. 이후 다음과 같은 절차로 정보를 전송한다.
①. 전송 데이터 직렬화
전송할 객체를 Protobuf 형식으로 직렬화해 바이트 배열로 변환한다.
②. 시스템 정보 포함 패킷 전송
시스템 정보와 직렬화된 데이터 길이를 포함한 새 객체를 구성하고, 이를 다시 직렬화한 뒤 압축 및 암호화한다. 이후 암호화된 데이터의 길이를 먼저 전송하고, 이어서 본 데이터를 전송한다. 이는 수신 측이 수신해야 할 전체 데이터의 크기를 정확히 파악하고, 올바르게 분할하여 처리할 수 있도록 하기 위한 절차다.
![[그림 18] 압축 및 암호화된 데이터 전송 절차](/api/media/file/18.png)
[그림 18] 압축 및 암호화된 데이터 전송 절차
③. GUID 기반 식별자 전송
GUID 문자열에서 하이픈을 제거한 값을 동일한 방식으로 직렬화, 압축, 암호화해 전송한다.
![[그림 19] GUID 기반 식별자 전송](/api/media/file/19.png)
[그림 19] GUID 기반 식별자 전송
④. 데이터 스트리밍 전송
직렬화된 수집 데이터를 일정 크기의 블록 단위로 나눠 전송하며, 각 블록에는 GUID 식별자와 데이터 인덱스를 포함한다. 블록마다 압축과 암호화를 적용한 뒤 순차적으로 전송하며, 중간에 짧은 대기 시간을 두어 전송 안정성을 높였다.
![[그림 20] 수집 정보의 블록 단위 스트리밍 전송](/api/media/file/20.png)
[그림 20] 수집 정보의 블록 단위 스트리밍 전송
⑤. 전송 완료 패킷 전송
마지막으로 동일한 GUID 값을 다시 한번 전송해 데이터 전송이 완료되었음을 서버에 알린다.
4.3.8. 지속성 확보 및 흔적 제거
인포스틸러는 감염 환경에서 지속적으로 실행되기 위해 레지스트리 등록, 실행 파일 복사, 자가 삭제 루틴을 수행한다.
먼저 “HKEY_CURRENT_USER\Software\”에 시스템 정보를 기반으로 생성한 고유 식별자를 서브 키로 등록해 감염 흔적을 관리한다. 이후 현재 실행 중인 파일이 %WINDIR% 또는 %APPDATA%에 포함되지 않을 경우, 자신을 %APPDATA% 경로로 복사하고 다음 PowerShell 명령을 숨김 창에서 실행해 자동 실행 항목을 등록한다.
Remove-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name '<파일명>'; New-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name '<파일명>' -Value '“<%APPDATA%로 복사된 경로>“' -PropertyType 'String' |
이 명령은 기존 Run 키를 제거한 뒤 새 경로를 등록해 지속성을 확보한다. 자신을 %APPDATA%로 복사한 뒤, 악성코드는 다음 PowerShell 명령을 숨김 창에서 실행해 원래 실행 중이던 자신 파일을 삭제한다.
Start-Sleep -Seconds 10; Remove-Item -Path '<현재 실행 경로>' -Force |
4.3.9. 페이로드 다운로드 및 실행
인포스틸러는 외부 서버로부터 추가 페이로드를 다운로드하고, 이를 로컬에 저장하고 실행하는 기능을 수행한다. 이때 TLS 1.2 프로토콜을 명시적으로 설정한 상태에서 HTTPS 통신을 수행하며, “hxxps://rdmfile.eu/install/PoaZWvOtN6wJ”에서 실행 파일을 다운로드한다. 다운로드한 파일을 %TEMP% 디렉토리에 무작위 이름으로 저장하며, 확장자는 “.exe”로 지정한다. 이후 인포스틸러는 저장된 파일을 곧바로 실행한다.
![[그림 21] HTTPS 통신으로 외부 파일 다운로드 및 파일 저장](/api/media/file/21.png)
[그림 21] HTTPS 통신으로 외부 파일 다운로드 및 파일 저장
![[그림 22] rdmfile.eu 서버에서 다운로드된 파일](/api/media/file/22.png)
[그림 22] rdmfile.eu 서버에서 다운로드된 파일
4.4. VioletClient.exe (Violet RAT)
“VioletClient.exe”는 코드 전반에 문자열 난독화 기법을 적용했다. 공격자는 파일 경로, 레지스트리 경로, 실행 명령어 등 주요 문자열을 모두 Base64로 인코딩한 뒤 코드에 삽입하고, 실행 시점에 이를 복호화 해 실제 값으로 변환하도록 구성했다. 이 방식은 정적 분석을 방해하는 수단으로 활용된다.
![[그림 23] Base64 문자열로 난독화된 코드](/api/media/file/23.png)
[그림 23] Base64 문자열로 난독화된 코드
4.4.1. 중복 실행 방지 및 지속성 확보
RAT은 중복 실행을 차단하고, 시스템 재부팅 이후에도 자동 실행되도록 다양한 방식으로 지속성을 확보한다. 먼저 “tR1utZz9FykzeKjC”라는 이름의 뮤텍스를 생성한 뒤, 동일한 뮤텍스를 가진 인스턴스가 이미 존재할 경우 즉시 프로세스를 종료한다. 이를 통해 동일 PC에서 악성코드가 동시에 실행되는 상황을 방지한다.
![[그림 24] Base64로 인코딩된 문자열을 복호화 하여 실행 중복 방지를 위한 뮤텍스 이름으로 사용](/api/media/file/24.png)
[그림 24] Base64로 인코딩된 문자열을 복호화 하여 실행 중복 방지를 위한 뮤텍스 이름으로 사용
이후 현재 실행 중인 파일을 다음 두 경로에 복사해 자동 실행을 설정한다.
- Startup 폴더
“%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup” 경로에 파일을 복사해, Windows 부팅 시 자동으로 실행되도록 설정한다.
![[그림 25] Startup 폴더로 현재 실행 파일을 복사해 부팅 시 자동 실행을 유도](/api/media/file/25.png)
[그림 25] Startup 폴더로 현재 실행 파일을 복사해 부팅 시 자동 실행을 유도
- %APPDATA% 경로
동일한 파일을 %APPDATA% 경로로 복사한 뒤, 레지스트리 “SOFTWARE\Microsoft\Windows\CurrentVersion\Run” 키에 해당 파일명을 등록한다. 이로 인해 사용자가 로그인할 때마다 악성 파일이 자동으로 실행된다.
![[그림 26] appdata 경로로 실행 파일을 복사하고 레지스트리에 등록해 자동 실행을 설정](/api/media/file/SE-428df819-096a-4a26-b37e-c3622345ac72.png)
[그림 26] appdata 경로로 실행 파일을 복사하고 레지스트리에 등록해 자동 실행을 설정
이처럼 뮤텍스를 활용한 중복 실행 방지와 Startup 폴더 및 Run 키 등록을 병행해 다중 경로에서 지속성을 확보하며, 이는 악성코드에서 자주 관찰되는 기법으로 악성코드의 생존력을 높인다.
4.4.2. C2 설정
RAT은 C2 서버와 통신하기 위해 두 가지 방식의 주소 설정 기능을 구현한다.
첫 번째는 외부 URL을 통해 IP 주소와 포트 정보를 동적으로 불러오는 방식이며, 두 번째는 코드에 하드코딩된 값을 직접 사용하는 정적 설정 방식이다.
외부 URL 기반 방식에서는 WebRequest를 사용해 공격자가 지정한 웹 페이지에 접속한 뒤, 응답에서 “IP:Port” 형식의 문자열을 파싱 한다. 이때 HTTP 요청은 GET 방식으로 전송되며, 공격자는 User-Agent 값을 수동으로 “Mozilla/5.0”으로 설정해 요청을 일반 브라우저의 정상 트래픽처럼 위장한다. 수신한 문자열은 공백 유무와 콜론 포함 여부를 기준으로 필터링하며, 유효한 경우 IP와 포트를 분리해 내부 변수에 할당한다.
이 방식은 악성코드를 재배포하지 않고도 C2 주소를 유연하게 변경할 수 있어, 탐지 회피와 장기 운영에 유리하다. 특히 Pastebin과 같은 서비스를 활용할 경우, 정적 탐지를 더욱 효과적으로 회피할 수 있다.
![[그림 27] 외부 URL에서 “IP:Port” 문자열을 파싱 해 C2 주소 동적으로 설정](/api/media/file/27.png)
[그림 27] 외부 URL에서 “IP:Port” 문자열을 파싱 해 C2 주소 동적으로 설정
그러나 분석에 사용된 샘플에서는 외부 URL 관련 로직이 조건문에 의해 비활성화되어 있고, URL 필드에는 “%PasteUrl%”라는 문자열이 할당돼 있어 해당 기능은 정상적으로 작동하지 않는다. 이에 따라 악성코드는 하드코딩된 문자열을 복호화 하는 정적 방식으로 C2 정보를 설정한다.
![[그림 28] XOR 키(mOZNSBt)를 사용해 Base64 인코딩된 IP 및 Port 문자열을 복호화 하는 정적 C2 설정 루틴](/api/media/file/28.png)
[그림 28] XOR 키(mOZNSBt)를 사용해 Base64 인코딩된 IP 및 Port 문자열을 복호화 하는 정적 C2 설정 루틴
복호화 되어 설정된 C2 서버의 IP 주소는 144.172.91.41이고 포트 번호는 7708이다. 이 IP는 인포스틸러에서 사용한 주소와 동일하지만, 포트 번호는 서로 다르다.
4.4.3. C2 명령 처리
악성코드는 서버로부터 명령을 수신하고 처리하기 위해 독립적인 스레드를 생성하고, 지속적인 통신 루프를 수행한다. 이 루프는 무한 반복 구조로 설계되어 있으며, 각 반복 주기마다 1~5초 사이의 랜덤한 대기 시간을 적용한다. 루프가 시작되면 악성코드는 C2 연결 관련 리소스를 초기화하고, TCP 소켓을 통해 C2 서버(144.172.91.41:7708)에 접속을 시도한다.
![[그림 29] 무한 루프 기반의 통신 스레드](/api/media/file/SE-534fc4e3-3de6-4166-9953-0a5626f6981d.png)
[그림 29] 무한 루프 기반의 통신 스레드
C2 연결에 성공하면, 클라이언트는 감염 시스템의 정보를 문자열 형태로 구성한다.
이 문자열은 총 13개의 항목으로 구성되며, HWID, 사용자 이름, 운영체제 이름 및 서비스 팩, 관리자 권한 여부, 실행 파일명, 설치된 백신 제품, 비디오 캡처 장치 유무 등이 포함된다. 각 항목은 “<Violet>“ 문자열을 구분자로 사용해 연결하며, 최종 문자열을 AES로 암호화한 뒤 서버로 전송한다. 암호화된 바이트 배열의 길이를 문자열로 변환하고 널 문자(\0)를 덧붙여 전송 헤더로 사용하며, 전체 전송 구조는 “[길이 + '\0'][암호화된 메시지 본문]” 형태를 따른다.
![[그림 30] 감염 시스템 정보 문자열 생성](/api/media/file/30.png)
[그림 30] 감염 시스템 정보 문자열 생성
이후 서버는 클라이언트에게 명령 데이터를 전송한다.
전송 형식은 시스템 정보와 동일하게 “[길이 + '\0'][메시지 본문]” 구조를 따르며, 악성코드는 수신한 데이터를 명령 대기열에 등록한 뒤 별도의 스레드에서 이를 처리한다. 각 명령은 “<Violet>“ 구분자로 구분된 문자열이며, 첫 번째 항목은 명령 코드, 이후 항목은 해당 명령 수행에 필요한 파라미터로 구성된다.
![[그림 31] 수신된 명령 문자열 분해 및 명령 코드 처리 루틴](/api/media/file/31.png)
[그림 31] 수신된 명령 문자열 분해 및 명령 코드 처리 루틴
명령 코드는 총 119개이며, 수행하는 기능은 다음과 같이 분류된다.
- 파일 시스템 조작: 파일/폴더 생성, 삭제, 이름 변경, 복사, 이동, 임의 바이너리 파일 드롭/실행 등
- 프로세스/시스템 제어: CMD 명령어 실행, 관리자 권한 상승, 클립보드 감시, 키로깅 관련 제어 등
- 스크린 및 입력 제어: 스크린샷 캡처, 마우스 커서 이동, 클릭 이벤트, 키보드 이벤트 등
- 네트워크 및 원격 제어: Flood 공격, ARP 스푸핑, sniffing, TCP 터널링/역방향 쉘 설치, 명령 실행 결과 서버로 전송 등
- 로컬 리소스 드롭 및 실행: 어셈블리 로드 및 메소드 실행, PE 파일 드롭 후 실행 등
- 정보 수집 및 유출: 활성 창 정보 수집, 시스템 환경정보 암호화해 전송, 패스워드/이메일 추출 기능 등
- 멀티미디어 제어: 오디오 재생 및 중지, 이미지 썸네일 생성 및 전송 등
이러한 명령 체계는 단순한 원격 제어를 넘어 감염 시스템 전체를 완전히 장악할 수 있도록 설계되었으며, 장기적인 악성 활동에 악용될 수 있는 고위험 요소를 내포한다. 악성코드는 명령을 실행한 이후에도 소켓 연결을 유지하며, 약 10~15초 간격으로 암호화된 “PING?” 메시지를 전송해 C2 서버와의 세션을 지속적으로 유지한다.
5. 수집/유출 정보
구분 | 세부 정보 | 대상 프로그램/기술 |
|---|---|---|
시스템 정보 | - 현재 날짜 및 시간 - 컴퓨터 및 사용자 이름 - 운영체제 이름 및 아키텍처 - 안티바이러스 소프트웨어 이름 - 스크린샷 - 클립보드 저장 문자열 - CPU 및 GPU 이름 - 메모리 용량 - 화면 해상도 - IPv4 주소 - Windows 서비스 팩 이름 - Video Capture Driver 존재 여부 | |
브라우저 | - 사용자 프로필 별 데이터 | Chrome, ChromeBeta, ChromeSxS, ChromeDev, ChromeUnstable, ChromeCanary, Chrome(x86), ChromeBeta(x86), ChromeSxS(x86), GChromeDev(x86), ChromeUnstable(x86), ChromeCanary(x86), Chromium, Edge, Brave, EpicPrivacy, Amigo, Vivaldi, Kometa, Orbitum, Mail.Ru Atom, ComodoDragon, Torch, Comodo, 360ChromeX, Slimjet, 360, 360 SE6, 360 SE, 360 Secure, Maxthon3, Maxthon5, Maxthon, QQ, K-Meleon, Xpom, Lenovo, Xvast, Go!, Safer Secure, Sputnik, Nichrome, CocCoc, Uran, Chromodo, 7Star, Chedot, Cent, Iridium, Elements, Citrio, Sleipnir5 ChromiumViewer, QIP Surf, Liebao, Coowon, ChromePlus, RafotechMustang, Suhba, TorBro, RockMelt, Bromium, Twinkstar, iTop Private, CCleaner, AcWeb, CoolNovo, Baidu Spark, SRWare Iron, Titan, AVAST, AVG, UC, UR, Blisk, Flock, CryptoTab, Sidekick, Swing, Superbird, SalamWeb, Ghost, Netbox, GarenaPlus, Kinza, Insomniac, ViaSat, NaverWhale, Falkon, Sogou, Opera, Opera GX, OperaNeon, OperaCryptoDeveloper, Yandex, YandexBrowserCanary, YandexBrowserDeveloper, YandexBrowserBeta, YandexBrowserTech, YandexBrowserSxS, Firefox, SeaMonkey, Waterfox, Waterfox Classic, K-Meleon, Thunderbird, IceDragon, Cyberfox, BlackHawk, Pale Moon, Basilisk, BitTube, SlimBrowser, LibreWolf, Mercury |
메일 클라이언트 | - 이메일 주소 - 서버 주소 - 비밀번호 - 사용자명 | Foxmail, MailBird, MailMaster, Outlook |
FTP 클라이언트 | - 호스트 - 포트 - 사용자명 - 비밀번호 | FileZilla, WinSCP 2 |
기타 프로그램 | # Steam - 계정 ID, 게임 목록, 세션 쿠키, 설정 파일 # Pidgin - 프로토콜, 사용자명, 암호 # Signal - 설정 및 DB 파일 # Telegram - 설정 및 인증 데이터 # OpenVPN - “.ovpn” 설정 파일 # ProtonVPN - 계정 정보, 인증 토큰 # IDM - 이메일, 이름, 시리얼 키 # Ngrok - “ngrok.yml” 설정 파일 # OBS Studio - 방송 설정 파일 # Discord - 토큰, 사용자 및 서버 정보 | Steam, Pidgin, Signal, Telegram, OpenVPN, ProtonVPN, IDM, Ngrok, OBS Studio, Discord |
암호화폐 지갑 | - 지갑 데이터 폴더 전체 - 설정/키 파일 | # 지갑 데이터 Qtum, DashCore, Litecoin, Bitcoin, Dogecoin, Coinomi, Armory, Bytecoin, MultiBit, Exodus, Ethereum, Electrum, ElectrumLTC, AtomicWallet, Guarda, WalletWasabi, ElectronCash, Sparrow, IOCoin, PPCoin, BBQCoin, Mincoin, DevCoin, YACoin, Franko, FreiCoin, InfiniteCoin, GoldCoinGLD, Binance, Terracoin, DaedalusMainnet, MyMonero, MyCrypto, Bisq, Bisq_db, Bisq_keys, Zap, Simpleos, Neon, bitmonero, Etherwall # 설정/키 파일 Electrum_config, Electrum_config, Electrum_config, ElectronCash_config, Sparrow_config, AtomicDEX, Binance_wallet_config |
파일 | # 아래 경로 제외 모든 파일 - Windows - ProgramData - Program Files - Program Fils (x86) - 휴지통 |
6. 결론
본 보고서에서 분석한 악성코드는 드로퍼, 다운로더, 인포스틸러, RAT으로 구성된 .NET 기반 다단계 악성코드로, 정보 탈취와 원격 제어를 단계적으로 수행하는 복합 구조를 갖추고 있다. 공격자는 이메일 본문에 악성 URL을 삽입해 사용자가 실행 파일을 다운로드하도록 유도하며, 해당 파일은 드로퍼로 동작한다. 드로퍼는 내부에 암호화된 다운로더 DLL을 포함하고 있으며, 이를 복호화 한 뒤 디스크에 기록하지 않고 메모리에 직접 로딩해 실행한다. 다운로더는 C2 서버와 통신해 인포스틸러 페이로드를 수신하고 이를 메모리 상에서 복호화 해 실행한다. 인포스틸러까지의 흐름은 전형적인 Fileless 방식으로 구성돼 있어, 감염 흔적을 최소화하고 탐지를 어렵게 만든다. 반면, 이후 실행되는 RAT은 별도의 실행 파일 형태로 디스크에 저장되고, 새로운 프로세스를 생성해 명시적으로 실행되기 때문에 공격 흐름이 메모리 기반에만 국한되지 않는다.
인포스틸러 모듈인 “ClassLibrary4.dll”은 내부 문자열(“v4.0.1.”)과 수집 항목, 파일명, 코드 구조 등을 종합적으로 고려할 때, PureCoder가 유포하는 상용 MaaS(Malware-as-a-Service) 악성코드인 PureLogs Stealer로 식별된다. 이 모듈은 시스템 정보, 브라우저 인증 정보, 이메일 및 FTP 계정, 암호화폐 지갑, Discord 토큰, 클립보드, 스크린샷, 로컬 파일 등 다양한 항목을 수집하고 이를 암호화·압축한 뒤 C2 서버로 전송한다. 전송을 마친 후에는 자동 실행 등록 및 자가 삭제 루틴을 통해 감염 흔적을 은폐하고 지속성을 확보한다.
![[그림 32] PureLogs의 공식 판매 페이지](/api/media/file/32.jpg)
[그림 32] PureLogs의 공식 판매 페이지
뒤이어 실행되는 RAT 모듈 “VioletClient.exe”는 코드 전반에 포함된 “<Violet>“ 문자열, 시스템 정보 문자열(“Violet v4.5”), 기본 빌드 구조 등을 근거로 볼 때, 상용 MaaS 악성코드인 Violet RAT으로 식별된다. 명령 처리 방식, 통신 구조, 문자열 포맷 역시 Violet RAT의 공식 배포 버전과 높은 유사성을 보인다.
![[그림 33] Violet RAT의 공식 판매 페이지](/api/media/file/33.jpg)
[그림 33] Violet RAT의 공식 판매 페이지
두 모듈은 제작자와 판매 경로가 상이한 독립된 MaaS 악성코드로, 공격자는 이를 별도로 확보한 뒤 조합함으로써 정보 탈취와 원격 제어 기능을 단계적으로 수행하는 구조를 구성하였다. 특히 인포스틸러 모듈을 통해 수집된 시스템 정보, 계정 자격 증명, 네트워크 환경 등의 데이터는 이후 실행되는 RAT 모듈의 명령 수행에 유용한 기반 자료로 활용되어, 피해자 시스템에 대한 정밀한 제어와 표적화된 명령 실행을 가능하게 한다. RAT 모듈은 119개의 명령을 처리할 수 있는 고도화된 원격 제어 도구로, 명령 실행, 파일 조작, 화면 및 입력 제어, 오디오 재생, DLL 인젝션, 정보 탈취, DoS 공격 등 다양한 기능을 포함하고 있으며, 암호화된 비동기 통신 구조를 통해 실시간 명령 수신 및 지속적인 제어가 가능하다. 이처럼 폭넓은 명령 처리 능력은 단순한 정보 수집을 넘어 능동적 침해 행위와 장기적인 시스템 통제까지 수행할 수 있음을 의미하며, 자산에 대한 심각한 보안 위협으로 작용할 수 있다.
결론적으로, 이번 악성코드는 기능별 페이로드를 분리하고, 상용 MaaS 악성코드를 결합해 제작된 사례다. 공격자는 난독화, 메모리 로딩, 자동 실행 등록, 자가 삭제 등 다양한 탐지 회피 기법을 적용하며, 유연한 페이로드 조합을 통해 향후 변형 및 재확산 가능성도 높다. 이에 따라 사용자 보안 인식 제고와 함께, 이메일 기반 유포 차단 및 Fileless 악성코드 대응 체계에 대한 점검이 필요하다. 또한 MaaS 유통 채널에 대한 인텔리전스 수집과 유포지 차단, 악성코드 커뮤니티 모니터링 역시 병행되어야 한다.
추가적으로, 샌즈랩 위협 인텔리전스 플랫폼 CTX에서 “exe.trojan.msil” 탐지명으로 식별되었으며, 관련 해시, C2 IP, URL 등 다양한 IoC가 함께 수집되었다. CTX 플랫폼에서는 악성코드 간 연관 관계, 공격 그룹, 연관 캠페인 정보 등 보고서에 포함되지 않은 추가 정보도 확인할 수 있어, 유사 위협 탐지 및 추적 시 유용한 참고 자료로 활용할 수 있다.
![[그림 34] 샌즈랩 CTX 플랫폼 내 탐지 결과 화면](/api/media/file/34.png)
[그림 34] 샌즈랩 CTX 플랫폼 내 탐지 결과 화면
7. IoC 정보
7.1. sha 256 해시
35EC950215AB50445813E2BABEF90DAFE6C2F7E6DD4E8A70418CB48AB61358EA | Hypgkdn.exe |
3651B5D148ACE48C188214D90CCD71F59BAFBE0775D60B0B84CA9E746784B898 | Hjlslg.dll |
27CA9CFCA6823DC688916E7EE6628571B4D3ED163E9EB2FAD54CD998AB096013 | ClassLibrary4.dll |
571B2E2B153C4ADE6AD779B107280E830540D08D889E097580197B5703B84DED | VioletClient.exe |
7.2. IP
TCP 144.172.91.41:8805
TCP 144.172.91.41:7708
7.3. URL
hxxp://176.46.157.32/files/5373782173/QvG0bbo.exe
hxxps://rdmfile.eu/install/PoaZWvOtN6wJ