SalatStealer 재분석: AMSI 전량 우회와 DoH C2 은닉의 2만 원짜리 MaaS 인포스틸러
CAPEv2 재분석으로 밝혀진 SalatStealer의 AMSI 100% 우회, DoH 기반 C2 통신, wazero WebAssembly 런타임 내장. GUID 감염 추적과 4중 지속성 메커니즘 분석.
CAPEv2 재분석으로 밝혀진 SalatStealer의 AMSI 100% 우회, DoH 기반 C2 통신, wazero WebAssembly 런타임 내장. GUID 감염 추적과 4중 지속성 메커니즘 분석.
2025년 3월 15일, 러시아어권 해킹 포럼 DeXpose에 월 1,199루블(약 2만 원)짜리 인포스틸러 광고가 올라왔다. 판매자 핸들은 NyashTeam, 공동 운영자는 Kapchenka다. 이 악성코드가 SalatStealer다. 관리 패널(62.109.0.189)에서 감염 현황을 실시간으로 확인하는 MaaS(Malware-as-a-Service) 모델로 운영된다.
Golang으로 작성된 SalatStealer는 브라우저 비밀번호, 암호화폐 지갑, 세션 토큰을 탈취하면서 Windows Defender와 EDR을 우회한다. CYFIRMA의 2025년 분석 보고서에 따르면 YouTube 게임 치트 영상과 크랙 소프트웨어를 통해 유포된다. Microsoft는 이를 Trojan:Win32/SalatStealer.KAT!MTB로 분류했다.
이 글은 자체 CAPEv2 샌드박스에서 AMSI/ETW, FLARE CAPA, DNS ETW를 추가 장착하고 심층 분석한 결과다. DoH 기반 C2 통신, AMSI 전량 우회, WebAssembly 런타임 내장 등 기존 공개 보고서에 없는 발견을 포함한다.
| 항목 | 값 |
|---|---|
| 파일명 | 92ec547c8088c16ce334.exe |
| 크기 | 12,570,624 bytes |
| SHA-256 | 92ec547c8088c16c... |
| MD5 | 4c1b0a582936fb2d1e246b0dd56c7428 |
| 탐지 점수 | 9.0/10 |
| 분석 환경 | Windows 10 x64 |
| 분석 시간 | 353초 |
SalatStealer는 Golang 1.22.0으로 컴파일된 PE 실행파일이다. UPX 패킹으로 압축되어 있고 디버그 심볼은 제거된 상태다.
YARA 규칙 3건이 탐지됐다.
INDICATOR_SUSPICIOUS_EXE_SQLQuery_ConfidentialDataStore — 브라우저 자격증명 DB 접근INDICATOR_Binary_Embedded_Cryptocurrency_Wallet_Browser_Extension_IDs — 암호화폐 지갑 확장 프로그램 ID 내장vmdetect — 가상머신 탐지 코드 포함바이너리에서 추출한 Go 모듈 경로가 SalatStealer의 내부 구조를 드러낸다. salat/ 접두사 모듈이 핵심 기능을 담당한다.
| 모듈 | 기능 |
|---|---|
salat/browsers | 브라우저 DB 탈취 |
salat/wallets | 암호화폐 지갑 탈취 |
salat/system | 시스템 정보 수집 |
salat/network | C2 통신 |
외부 의존성 중 주목할 라이브러리가 두 개 있다.
wazero는 Go 네이티브 WebAssembly 런타임이다. 기존 공개 보고서에서 보고되지 않은 발견이다. 브라우저 암호 복호화나 데이터 가공에 WASM 모듈을 활용하는 것으로 추정된다.
capnspacehook/taskmaster는 Windows 스케줄드 태스크를 프로그래밍 방식으로 생성하는 라이브러리다. 지속성 확보 메커니즘의 핵심이다.
바이너리에 하드코딩된 SQL 쿼리와 경로 패턴으로 대상을 식별했다.
| 대상 | 탈취 항목 |
|---|---|
| Chrome, Edge, Brave | 로그인 정보, 쿠키, 신용카드 |
| Opera, 360Browser | 로그인 정보, 쿠키 |
| Firefox | moz_cookies, moz_logins |
| 암호화폐 지갑 | Exodus, MetaMask, Phantom, Coinbase 등 |
SQLite DB를 직접 쿼리하는 코드가 포함되어 있다.
SELECT action_url, username_value, password_value FROM logins
SELECT host_key, name, encrypted_value FROM cookies
SELECT name_on_card, card_number_encrypted, expiration_month FROM credit_cards
로그인 정보, 세션 쿠키, 신용카드 정보를 각각 별도 쿼리로 추출한다.
ZIP을 해제하면 나오는 EXE가 실행되자마자 4단계 행위가 시작된다.
1단계: 자기 복제와 위장
원본 실행파일은 자신을 여러 경로에 복사하면서 시스템 프로세스 이름으로 위장한다.
| 위장 이름 | 드롭 경로 |
|---|---|
SecurityHealthService.exe | AppData\Local\D3DSCache\ |
SearchIndexer.exe | AppData\Local\Packages\ |
UserOOBEBroker.exe | AppData\Local\Comms\ |
1차 실행에서는 smss.exe, fontdrvhost.exe를 사용했지만 2차 실행에서는 SearchIndexer.exe, UserOOBEBroker.exe로 변경됐다. 실행 환경에 따라 위장 대상을 바꾸는 것으로 보인다.
2단계: GUID 마커 시스템
각 감염에 고유 식별자 60e64d29-6b6b-8e03-9280-86605c96296b를 부여한다. 이 GUID가 위장 복사본과 같은 경로에 동시 생성된다.
AppData\Local\D3DSCache\60e64d29-6b6b-8e03-9280-86605c96296b
AppData\Local\Comms\60e64d29-6b6b-8e03-9280-86605c96296b
AppData\Local\Packages\60e64d29-6b6b-8e03-9280-86605c96296b
AppData\Local\Temp\60e64d29-6b6b-8e03-9280-86605c96296b
MaaS 운영자가 관리 패널에서 감염 호스트를 추적하는 메커니즘이다. 위장 복사본이 제거되어도 GUID 파일이 남아 재감염 여부를 판단할 수 있다.
3단계: 지속성 확보
각 위장 복사본에 대해 Windows 스케줄드 태스크를 생성한다. taskmaster 라이브러리가 이 작업을 담당한다.
C:\Windows\System32\Tasks\SecurityHealthService
C:\Windows\System32\Tasks\SearchIndexer
C:\Windows\System32\Tasks\UserOOBEBroker
C:\Windows\System32\Tasks\pyw
4개의 독립 경로에서 악성코드가 실행된다. 하나를 제거해도 나머지 3개가 살아남는 구조다.
4단계: 정보 탈취와 EDR 우회
ntdll.dll의 메모리 보호를 PAGE_READWRITE로 변경하여 EDR이 설치한 후킹을 제거한다. 이후 unbacked 메모리(동적 할당 영역)에서 API를 호출하여 탐지를 우회한다. PID 2816(powershell.exe)에서 9종의 unbacked 작업이 관찰됐다. API 주소 수동 해석, DLL 로드, COM 객체 생성, 파일 쓰기까지 모두 동적 할당 메모리에서 실행됐다.
재분석에서 AMSI(Antimalware Scan Interface) 모니터링 결과가 드러났다. 69건의 스캔 중 탐지된 건수는 0이다.
| 항목 | 값 |
|---|---|
| 총 스캔 | 69건 |
| 탐지 | 0건 |
| 미탐지 | 69건 (100%) |
AMSI를 완전히 무력화한 정량적 증거다. Windows Defender가 실시간으로 스캔하지만 SalatStealer의 행위를 단 한 건도 잡아내지 못했다.
SalatStealer는 DNS over HTTPS(DoH)로 C2 도메인을 해석한다. dns.google(8.8.8.8:443)에 HTTPS 요청을 보내 salat.cn 등의 C2 주소를 얻는다.
이 방식의 결과는 명확하다. 네트워크 PCAP에 C2 도메인이 남지 않는다. DNS ETW 로그에서 dns.google 조회 기록만 확인될 뿐이다. 보안 장비의 DNS 로그 기반 탐지를 구조적으로 회피한다.
FLARE CAPA가 식별한 주요 능력이다.
| 카테고리 | 탐지 내용 |
|---|---|
| 데이터 수집 | 신용카드 번호 파싱, 스크린샷 캡처, 키 로깅 |
| 호스트 상호작용 | 파일 읽기/쓰기, 레지스트리 수정, 프로세스 열거 |
| 안티분석 | VM 탐지(메모리 크기 확인), 디버거 탐지(VEH) |
| 네트워크 통신 | HTTP 요청, DoH 암호화 통신 |
| 코드 로딩 | 동적 DLL 로드, 런타임 언패킹 |
└─ PID 9456 92ec547c8088c16ce334.exe (원본)
└─ PID 9476 SearchIndexer.exe (위장 복사본)
└─ PID 9720 SearchIndexer.exe (재실행)
└─ PID 2816 powershell.exe (unbacked 작업 9종)
원본 EXE → SearchIndexer.exe로 위장 → PowerShell 실행의 3단계 체인이다.
| IP | 포트 | 맥락 |
|---|---|---|
172.67.190.135 | 443 | C2 (Cloudflare) |
104.21.19.248 | 443 | C2 (Cloudflare) |
142.250.21.94 | 80 | c.pki.goog (CRL 조회, 정상) |
23.35.218.131 | 443 | C2 통신 |
c.pki.goog 연결은 Google 인증서 폐기 목록(CRL) 조회로, 정상 트래픽이다. C2 서버는 Cloudflare CDN 뒤에 숨어 있다.
탈취 대상:
Edge\User Data\Default\Web Data — 브라우저 자격증명 DB (SQLite)Edge\User Data\Default\Network\Cookies — 세션 쿠키 DB (SQLite)흔적 삭제:
masterkey_db — DPAPI 마스터키 임시파일 삭제.job 파일 4건 — 태스크 스케줄러 임시파일 정리SearchIndexer.exe — Edge 경로의 위장 복사본 자기 삭제Global\WEBR_93BS5XV2F3M2 — 중복 실행 방지용이다. 이 뮤텍스가 존재하면 이미 감염된 호스트로 판단하고 추가 실행을 중단한다.
50건의 시그니처 중 핵심만 정리한다.
| 카테고리 | 시그니처 | 의미 |
|---|---|---|
| EDR 우회 | ntdll_memory_unhooking | ntdll 메모리 보호 변경으로 EDR 후킹 제거 |
| 샌드박스 우회 | antisandbox_unhook | CAPE 모니터링 함수 언후킹 시도 |
| 프로세스 인젝션 | injection_rwx | RWX 메모리 생성 + 서스펜디드 프로세스 인젝션 |
| 정보 탈취 | infostealer_cookies | 쿠키 + 암호화폐 지갑 탈취 |
| 환경 탐지 | antivm_checks_available_memory | VM 탐지 + 지오펜싱 |
| 언백드 메모리 | unbacked_api_resolution 외 8건 | 동적 메모리에서 API 호출 |
| 시그니처 | 설명 |
|---|---|
antivm_checks_available_memory | 사용 가능 메모리 확인 (VM 탐지) |
queries_computer_name | 컴퓨터 호스트명 조회 |
queries_user_name | 사용자명 조회 |
queries_keyboard_layout | 키보드 레이아웃 조회 |
queries_locale_api | 로캘 조회 (지오펜싱) |
flare_capa_communication | 네트워크 통신 능력 |
flare_capa_datamanipulation | 데이터 조작 (암호화, 인코딩) |
flare_capa_linking | 런타임/정적 링크 코드 |
flare_capa_hostinteraction | 호스트 상호작용 |
flare_capa_loadcode | 코드 로딩/실행 |
flare_capa_runtime | 런타임 코드 |
flare_capa_antianalysis | 안티분석 능력 |
flare_capa_collection | 데이터 수집 능력 |
antidebug_setunhandledexceptionfilter | 안티디버깅 |
powershell_scriptblock_logging | PowerShell 스크립트 블록 탐지 |
stealth_timeout | 날짜 만료 확인 후 조기 종료 |
language_check_registry | 레지스트리 언어 확인 (지오펜싱) |
privilege_elevation_check | 관리자 권한/UAC 상태 확인 |
encrypted_ioc | 암호화 호출에서 IOC 발견 |
registers_vectored_exception_handler | VEH 등록 |
creates_suspended_process | 서스펜디드 프로세스 생성 |
resumethread_remote_process | 원격 프로세스 스레드 재개 |
enumerates_running_processes | 프로세스 열거 |
reads_self | 자기 바이너리 읽기 |
stealth_window | 숨겨진 윈도우 생성 |
terminates_remote_process | 원격 프로세스 종료 |
network_http | HTTP 요청 수행 |
packer_unknown_pe_section_name | 알 수 없는 PE 섹션 이름 |
dropper | 바이너리 드롭 후 실행 |
injection_rwx | RWX 메모리 생성 |
script_tool_executed | 스크립트 도구 실행 |
antisandbox_unhook | CAPE 모니터링 언후킹 |
hardware_id_profiling | 볼륨 시리얼/하드웨어 ID 조회 |
suspicious_iocontrol_codes | 의심스러운 IO 제어 코드 |
ntdll_memory_unhooking | ntdll.dll EDR 언후킹 |
infostealer_cookies | 쿠키 파일 접근 |
interprocess_comms_mutex | 뮤텍스 기반 동기화 |
unbacked_api_resolution | 언백드 메모리에서 API 해석 |
unbacked_library_load | 언백드 메모리에서 DLL 로드 |
unbacked_memory_protection_alteration | 언백드 메모리 보호 변경 |
unbacked_com_instantiation | 언백드 메모리에서 COM 생성 |
unbacked_crypto_operations | 언백드 메모리에서 암호화 API |
unbacked_file_dropping | 언백드 메모리에서 파일 쓰기 |
unbacked_process_enumeration | 언백드 메모리에서 프로세스 열거 |
unbacked_registry_modification | 언백드 메모리에서 레지스트리 수정 |
unbacked_token_manipulation | 언백드 메모리에서 토큰 조작 |
binary_yara | YARA 규칙 다수 매칭 |
deletes_executed_files | 실행 파일 자기 삭제 |
infostealer_bitcoin | 암호화폐 지갑 접근 |
recon_fingerprint | 시스템 핑거프린팅 |
| 타입 | 값 |
|---|---|
| SHA-256 | 92ec547c8088c16ce334e793d587e7e1b4b4e1d44460dd02f67302d9dc9b1969 |
| MD5 | 4c1b0a582936fb2d1e246b0dd56c7428 |
| 타입 | 값 |
|---|---|
| C2 IP | 172.67.190.135, 104.21.19.248 (Cloudflare) |
| C2 IP | 40.126.13.8, 20.190.163.21, 57.155.142.97 |
| C2 도메인 | salat.cn, posholnahuy.ru, pidorasina.ru |
| 추가 도메인 | webrat.in, webrat.top, webr.at, nyash.team |
| 관리 패널 | 62.109.0.189 |
| Mutex | Global\WEBR_93BS5XV2F3M2 |
| GUID 마커 | 60e64d29-6b6b-8e03-9280-86605c96296b |
| 기법 | 이 샘플에서의 구현 |
|---|---|
| T1055 | RWX 메모리 생성 + 서스펜디드 프로세스 인젝션 |
| T1059.001 | 위장 프로세스에서 powershell.exe 실행, unbacked 메모리 작업 |
| T1562.001 | ntdll.dll PAGE_READWRITE 변경으로 EDR 후킹 제거 |
| T1071 | DoH(dns.google)로 C2 도메인 해석, HTTPS로 데이터 전송 |
| T1082 | 볼륨 시리얼, 하드웨어 ID, 메모리 크기 조회 |
| T1547 | taskmaster 라이브러리로 스케줄드 태스크 4건 생성 |
| T1070 | 실행 파일 자기 삭제 + DPAPI 키 삭제 + .job 파일 정리 |
| T1539 | Edge/Chrome/Firefox 쿠키 DB 직접 SQL 쿼리 |
| T1005 | 암호화폐 지갑(Exodus, MetaMask, Phantom) 데이터 탈취 |
| T1027 | UPX 패킹 + 암호화된 IOC 문자열 + unbacked 메모리 실행 |
| T1497 | 사용 가능 메모리 확인, 키보드 레이아웃/로캘 조회로 VM 탐지 |
<Sysmon schemaversion="4.90">
<EventFiltering>
<RuleGroup groupRelation="or">
<NetworkConnect onmatch="include">
<DestinationIp condition="is">172.67.190.135</DestinationIp>
<DestinationIp condition="is">104.21.19.248</DestinationIp>
<DestinationIp condition="is">23.35.218.131</DestinationIp>
</NetworkConnect>
</RuleGroup>
<RuleGroup groupRelation="or">
<DnsQuery onmatch="include">
<QueryName condition="contains">salat.cn</QueryName>
<QueryName condition="contains">webrat.in</QueryName>
<QueryName condition="contains">nyash.team</QueryName>
</DnsQuery>
</RuleGroup>
</EventFiltering>
</Sysmon>
title: SalatStealer 네트워크 IOC 탐지
status: experimental
description: CAPEv2 재분석 + OSINT 기반 SalatStealer C2 통신 탐지
date: 2026-04-11
logsource:
category: network_connection
product: windows
detection:
selection_ip:
DestinationIp:
- '172.67.190.135'
- '104.21.19.248'
- '23.35.218.131'
selection_dns:
QueryName|contains:
- 'salat.cn'
- 'webrat.in'
- 'webrat.top'
- 'nyash.team'
condition: selection_ip or selection_dns
level: high
IOC는 변경될 수 있다. SalatStealer의 행위 패턴을 탐지하는 룰이다.
title: SalatStealer 위장 프로세스 + GUID 마커 탐지
status: experimental
description: 시스템 프로세스 위장 + GUID 파일 동시 생성 패턴 탐지
date: 2026-04-11
logsource:
category: file_event
product: windows
detection:
selection_guid:
TargetFilename|contains:
- '\AppData\Local\D3DSCache\'
- '\AppData\Local\Comms\'
- '\AppData\Local\Packages\'
TargetFilename|endswith:
- '.exe'
filter_legit:
Image|contains:
- '\Windows\System32\'
- '\Windows\SysWOW64\'
condition: selection_guid and not filter_legit
level: critical
title: DoH를 이용한 C2 통신 탐지
status: experimental
description: dns.google로의 HTTPS 연결 탐지 (DoH C2 우회 패턴)
date: 2026-04-11
logsource:
category: network_connection
product: windows
detection:
selection:
DestinationIp:
- '8.8.8.8'
- '8.8.4.4'
DestinationPort: 443
filter_browser:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
condition: selection and not filter_browser
level: high
SalatStealer는 월 2만 원짜리 MaaS 인포스틸러지만 기술 수준이 높다. EDR 언후킹, AMSI 전량 우회(69/69), DoH 기반 C2 은닉, 4중 지속성, GUID 감염 추적, 안티포렌식까지 갖추고 있다.
재분석에서 발견한 핵심 위협 3가지다. 첫째, AMSI를 100% 우회하므로 Windows Defender 실시간 보호만으로는 탐지가 불가능하다. 둘째, DoH로 C2 도메인을 해석하므로 DNS 로그 기반 보안 장비가 무력화된다. 셋째, wazero WebAssembly 런타임을 내장하여 기존 Go 인포스틸러보다 확장성이 높다.
탐지 우선순위:
AppData\Local 하위 폴더(D3DSCache, Comms, Packages)에 EXE 파일과 GUID 파일이 동시 생성되면 즉시 알림8.8.8.8:443으로 HTTPS 연결이 발생하면 DoH C2 통신 의심WEBR_93BS5XV2F3M2 존재 여부로 감염 호스트 식별방어 권고:
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 본 분석에 사용된 IOC와 행위 데이터는 자체 CAPEv2 샌드박스에서 직접 실행하여 수집한 결과입니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.