COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
PureHVNC RAT 변종 1건 분석. 27단 인메모리 .NET 언패킹, AMSI/Defender 무력화, HostPapa 3268 비표준 포트 C2. ThreatFox 매치로 PureRAT=PureHVNC=ResolverRAT 동일 패밀리 확인.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2026년 5월 18일, 패스워드 보호된 ZIP 파일 한 건이 분석 큐에 올랐다. AES 암호화 아카이브 안에는 1.25MB짜리 .NET 실행 파일이 들어 있었다. 실행 5분 만에 27개의 인메모리 페이로드가 풀려났고, 미국 뉴욕주 버팔로의 어느 Windows 머신에 비표준 포트 3268로 신호가 갔다.
ThreatFox는 그 IP를 PureRAT C2로 매치했고, malware_alias 필드에는 PureHVNC, ResolverRAT이 함께 기록되어 있었다. 같은 코드 베이스, 세 가지 이름. 본 분석은 그 변종 한 건의 5분짜리 행적을 풀어 쓴 기록이다.
PureHVNC, PureRAT, ResolverRAT은 동일한 .NET 기반 원격 제어 도구다. Malpedia는 셋을 win.pure_rat 한 패밀리로 묶고 있다. NetReSec은 2025년 8월 PCAP 비교 분석에서 "PureRAT은 Morphisec이 ResolverRAT이라고 부르는 것과 동일한 악성코드이며, PureHVNC는 PureRAT의 전신"이라고 못 박았다.
개발자 별칭은 PureCoder로, 다크웹 포럼과 GitHub 양쪽에서 활동한다. testdemo345와 DFfe9ewf/PURE-CODER-1 두 계정이 TwitchBot, YoutubeBot 등 부가 모듈의 소스를 공개 호스팅한 사실이 확인됐다. Git 커밋 타임스탬프는 UTC+0300에 집중되어 있어 동유럽 또는 서아시아 시간대로 추정된다.
이 패밀리가 2025년부터 본격적으로 주류 위협 인텔 보고에 등장한 배경에는 두 가지 흐름이 있다. 첫째, 베트남어권 운영자 LoneNone이 PXA Stealer를 통해 초기 정찰을 마치고 PureRAT으로 피벗하는 다단 침투 체인을 정형화했다. Bleeping Computer가 분석한 사례에서는 합법 PDF 리더에 악성 version.dll을 끼워 넣는 DLL 사이드로딩으로 시작했다. Python 인터프리터가 Base85 인코딩된 스크립트를 풀고, RSA·AES·RC4·XOR을 단계적으로 적용한 뒤, 최종적으로 RegAsm.exe에 프로세스 할로잉으로 PureRAT을 주입하는 흐름이었다.
둘째, Kaspersky AMR이 2025년 5월 러시아 조직 대상 PureRAT 캠페인을 공개했다. 같은 해 Netskope는 패션·뷰티 브랜드 채용 사기를 미끼로 PureHVNC를 배포하는 다층 감염 체인을 보고했다. 2026년 들어 Google Forms 사칭 채용 양식과 LinkedIn DM이 새 미끼로 가세했다. 베트남어권 운영자는 SVG 파일에 페이로드를 숨기는 변형을 우크라이나·베트남 표적에 살포했다.
이번 샘플은 이 흐름의 한 변종이다. 표준 PureRAT은 56001~56003 포트를 protobuf와 TLS 1.0으로 사용한다. 본 변종은 비표준 3268 포트에서 HTTP와 HTTPS를 동시에 쓰며, /ping·/browser·/plugin·/userinfo 네 가지 엔드포인트로 통신했다. 운영자가 표준 빌더 출력에서 한 단계 손을 더 댄 흔적이다.
| 항목 | 값 |
|---|---|
| ZIP SHA-256 | 48278c0d8533f0105b9aec60d7759a77fbbe1f4a15c4aaeda702a8f25c11cf33 |
| ZIP 형식 | AES 암호화 ZIP (ZipCrypto v5.1+, 1,206,333 바이트) |
| 추출 EXE SHA-256 | b376d51a69b661d9c360f22562b48fbe1733b93429155a3f9a06b07721051c58 |
| 추출 EXE 형식 | PE32 GUI, Mono/.NET 32비트 어셈블리 (1,256,960 바이트) |
| ssdeep | 24576:IX6r9ARyjkfYEMY96VDkKq7Y89xeV3/xVxkMPZ1InwoZiKQFqTqsPivg |
| 분석 환경 | win10x64, 인터넷 라우팅 |
| 분석 시각 | 2026-05-18 13:07~13:12 (UTC, 325초) |
| 종합 탐지 점수 | 10.0/10 |
| ThreatFox 매치 | IOC 1781668, win.pure_rat, alias PureHVNC,ResolverRAT, 신뢰도 75 |
ThreatFox의 last_seen 타임스탬프는 분석 시점 두 시간 전인 2026-05-18 11:05 UTC다. C2 인프라가 같은 날 다른 샘플로도 활성 호출을 받고 있었다는 의미다.
ZIP은 AES 패스워드 보호 상태로 도착했고, 추출 시점에 1.25MB .NET 32비트 PE32 GUI 실행파일이 나왔다. 헤더상 컴파일러는 .NET assembly (Mono/.Net)로만 표기됐고, .NET 메타데이터의 typerefs 배열은 mscorlib만 참조하는 최소 골격을 보였다. 클래스명·메서드명이 사라진 상태로, .NET Reactor 또는 유사한 난독화 도구가 적용됐을 가능성이 크다. Bleeping Computer 분석에서도 같은 패밀리 최종 페이로드 Mhgljosy.dll이 .NET Reactor로 보호되어 있었다는 보고가 있다.
해시 검증을 마치고 외부 인텔과 대조하면 본 변종 EXE는 MalwareBazaar의 win.pure_rat 클러스터에 속할 가능성이 크다. 본 보고서에 명시되는 27개 인메모리 페이로드 해시는 본 인스턴스에서 처음 관찰된 것들이다. 즉 빌더가 같은 운영자에게 매번 다른 출력을 내준다는 의미다.
EXE가 메모리에 적재되자마자 본 변종은 27개의 페이로드를 자기 프로세스 공간에 풀어 놓았다. 가장 큰 5개는 1MB 이상의 PE32 32비트 DLL 형태로, 모두 Mono/.NET 어셈블리였다. 그중 1.2MB짜리 DLL과 1.1MB, 797KB, 421KB 인젝트된 PE 이미지 4종이 메인 페이로드군이다. 나머지 22개는 50KB 미만의 .NET DLL 조각 또는 Unpacked Shellcode로 분류된 데이터 영역이다.
이 다단 구조는 표준 PureRAT 보고서의 9~10단 체인과 결이 같다. Bleeping Computer가 정리한 표준 체인은 피싱 ZIP에서 시작해 DLL 사이드로딩으로 들어간다. Python 인터프리터가 Base85·RSA·AES·RC4·XOR을 거쳐 컴파일된 .NET 단계로 넘긴 뒤, RegAsm.exe 프로세스 할로잉으로 최종 Mhgljosy.dll을 푸는 순서다. 본 변종은 Python 단계를 거치지 않고 .NET 로더가 직접 PowerShell을 통해 페이로드를 풀어내며, 27단으로 더 잘게 쪼개져 있다는 점이 다르다.
샘플은 자기 자신을 Defender 검역 대상에서 빼내는 명령을 가장 먼저 실행했다.
Add-MpPreference -ExclusionPath C:\Users\cape\AppData\Local\Temp\b376d51a...51c58.exe
이 한 줄 뒤에 PowerShell 스크립트 블록 로깅이 기록한 행위 태그는 다음과 같다.
| 카테고리 | 탐지 행위 |
|---|---|
| 무력화 | AMSI Bypass, AppLocker Bypass, Disables Windows Defender, Clear Logs |
| 데이터 수집 | Key Logging, Screen Scraping, Custom Web Fields |
| 실행·전송 | Downloader, Starts Process, Invokes C# .NET Assemblies, Sends Data |
같은 PowerShell 세션은 BitLocker 관련 문자열을 ConvertFrom-StringData로 처리한 흔적도 남겼고, 결과적으로 AMSI 스캔 55회가 모두 미탐지로 끝났다. 즉 Defender 제외 등록이 실제로 작동했다는 의미다. 같은 PID에서 49KB 크기의 셸코드가 메모리에 풀렸고, 이것이 self-respawn된 EXE 인스턴스(pid 8584)와 함께 C2 통신을 담당하게 된다.
관측된 동적 시그니처 49건 중 18건이 "unbacked" 계열, 즉 디스크에 백킹 파일이 없는 메모리 영역에서 발생한 작업이었다. 본 변종은 세 축의 우회 기법을 동시에 적용한다. 후킹된 API를 메모리에서 잘라내 직접 호출하는 축, 정상 실행 흐름과 예외 흐름을 분리해 디버거의 분기 추적을 끊는 축, 그리고 호스트 환경을 지문 삼아 분석 도구와 실제 사용자 PC를 가르는 축이다. 본 변종이 동시에 적용한 우회 기법은 다음 비교로 한눈에 보인다.
ntdll 메모리 보호를 PAGE_READWRITE로 바꿔 후킹을 해제하고, 이후 모든 syscall이 "백킹되지 않은" 메모리 영역에서 발생했다. 본 변종이 unbacked로 수행한 항목은 다음과 같다.
사실상 운영체제의 모든 핵심 API 호출이 디스크 백킹 없이 메모리 안에서 자체 해소되는 구조다.
Vectored Exception Handler 등록은 정상 실행 흐름과 예외 핸들러를 별도로 운영해 디버거나 EDR이 fork된 분기를 추적하기 어렵게 만든다. 거기에 샘플은 629.6초 동안 잠들려고 시도했다. 일반 EDR이 5분 이상 빈 상태로 두면 분석을 종료하는 정책을 노린 sleep이다. 자동 분석 환경 대부분이 sleep을 가속해 무력화하지만, 본 시도 자체가 회피 의도를 드러낸다.
샌드박스 회피의 또 다른 축은 환경 키잉이다. 샘플은 Volume Serial Number 조회로 디스크 ID를 추출하고, 30개 이상의 언어 코드를 레지스트리에서 순차 조회했다. en-US, ca-ES, cs-CZ, da-DK, de-DE, el-GR, es-ES, fi-FI, fr-FR, hu-HU, it-IT, nl-NL, nb-NO, pl-PL, pt-BR 등이 포함됐다.
한국어(ko-KR)는 명시적 분기 키로 등장하지 않았다. 다만 이를 두고 "한국 환경 안전"이라는 결론을 내리는 것은 위험하다. 본 인스턴스의 동작만으로는 locale 체크가 단순 enumeration인지 운영자 콘솔에서 차단 분기로 사용되는지 구분할 수 없다.
오히려 운영자가 한국어를 명시적으로 막아 두지 않았다는 사실 자체가 "막을 이유가 없었다"는 신호로 해석될 여지가 있다. PureHVNC는 이미 ASEC 위협 인텔에서 PureCrypter·Quasar RAT와 함께 한국 사용자가 마주칠 수 있는 도구로 거론되어 왔다. 결국 한국 환경에서의 노출 여부는 운영자의 표적 선택 의도와 캠페인 lure 한국어화 정도에 달려 있다.
표준 PureRAT의 C2 패턴은 NetReSec 보고에 따르면 다음과 같다. 클라이언트가 04 00 00 00 4바이트를 먼저 보내고, 그 위에 TLS 1.0 핸드셰이크가 올라가며, X.509 인증서는 9999-12-31 만료의 self-signed다. 페이로드는 protobuf 직렬화이며, 일반적 C2 포트는 56001, 56002, 56003이다. 알려진 C2 인프라로 193.26.115.125:8883, purebase.ddns[.]net:8883, 45.74.10.38:56001, 139.99.83.25:56001이 NetReSec에 기록되어 있다.
본 변종은 그 패턴과 두 가지가 다르다.
첫째, 포트가 3268이다. 이 번호는 Windows Active Directory의 Global Catalog LDAP 서비스가 쓰는 포트로, 사내망 정찰에서 합법 트래픽으로 오인되기 쉽다. 표준 PureRAT의 56001~56003이 방화벽 차단 1순위인 것과 대비된다.
둘째, 통신이 protobuf+TLS만 쓰지 않는다. 일반 HTTP와 HTTPS를 모두 사용하며, REST 스타일 엔드포인트(/ping, /userinfo, /plugin, /browser)가 등장한다. 빌더가 제공하는 옵션을 운영자가 변경했거나, 본 변종이 새로운 모듈을 얹은 결과일 수 있다.
C2 IP 198.46.178.137의 Shodan 측 메타데이터는 본 인프라가 일회용이 아니라는 사실을 보여준다. HostPapa(AS36352, ColoCrossing 리셀러)의 미국 뉴욕주 버팔로 위치 VPS이며, 호스트네임은 DESKTOP-E4F55FE다.
노출 포트로 135(RPC), 139(NetBIOS), 3389(RDP)가 잡힌다. RDP 응답에는 NTLM target name이 그대로 노출되어 있고, NTLM 헤더의 Administrator 계정명까지 보이며, TLS 자기서명 인증서 태그가 함께 달려 있다. 정상 데스크톱 PC 외형을 한 VPS이거나, 침투당한 일반 사용자 머신을 운영자가 jump host로 활용 중일 가능성이 모두 열려 있다.
/browser 엔드포인트는 POST로만 호출됐다. 본 변종은 실행 직후 msedge.exe를 9176번 PID로 새 사용자 데이터 디렉터리(AppData\Local\Temp\we42ekgp.bmr)와 함께 실행했다. 그 안에 Edge가 History, EdgeJourneys.db-wal, load_statistics.db-wal, domains_config.json 등 브라우저 메타데이터를 남기게 했고, 총 51개의 파일 드롭 중 History 파일이 핵심 표적이다.
PowerShell 행위 태그의 Custom Web Fields는 자격증명 입력 폼을 후킹하는 기능을, Key Logging은 키 입력 캡처를, Screen Scraping은 화면 캡처를 의미한다. PureHVNC가 본래 "Hidden VNC"라는 이름이 붙은 이유 자체가 사용자 모르게 보조 데스크톱을 띄워 자동 조작을 수행하기 때문이며, msedge 자동화는 그 기능의 일환으로 보인다.
샘플은 시작 서비스로 WaaSMedicSvc(Windows Update Medic Service), VSS(Volume Shadow Copy), swprv(Microsoft Software Shadow Copy Provider), MicrosoftEdgeElevationService, WinHttpAutoProxySvc를 띄웠다. WaaSMedicSvc는 Defender 무력화 후 Update 컴포넌트가 자가 복구되는 흐름을 끊기 위한 사전 작업으로, PowerShell 행위 태그의 Modifies Shadowcopy와 결합되면 시스템 복원 지점을 무력화하려는 의도가 보인다. write_keys 26건 중에는 HKLM\SYSTEM\...\VSS\Diag 하위 키들이 다수 포함되어 있어 VSS 진단 로그까지 손댄 흔적이 남았다.
뮤텍스는 두 개가 생성됐다. 한 개는 22자 영문 oDLrJodZcYHQjyyaxzPOCV로, 빌더가 무작위 생성한 시드로 보인다. 다른 한 개는 12자 16진수 1fd445ffe022로 Volume Serial Number 유사 형식이며, hardware_id_profiling 시그니처와 함께 묶이면 호스트별 단일 인스턴스 보장 목적의 식별자로 추정된다.
| 타입 | 값 | 맥락 |
|---|---|---|
| IP:Port | 198.46.178.137:3268 | C2 (HTTP+HTTPS), HostPapa NY, ThreatFox 1781668 |
| 도메인 | 99a9060fcf78c98451470637175241f6.azr.footprintdns.com | Azure Front Door 추적용 도메인(이번 변종에서 관측, 페이로드 추출 후 정상 트래픽 가능성도 있음) |
| URL | http://198.46.178.137:3268/ping | C2 health check |
| URL | https://198.46.178.137:3268/userinfo | 호스트 식별 정보 송신 |
| URL | https://198.46.178.137:3268/plugin | 모듈 다운로드 |
| URL | http://198.46.178.137:3268/browser | POST, 브라우저 데이터 유출 |
ZIP과 추출 EXE 외에, 본 변종 인스턴스에서 메모리로 풀린 PE 페이로드와 셸코드 SHA-256은 모두 27개다. 같은 운영자가 다른 인스턴스를 만들면 해시는 모두 바뀌므로, 본 27개는 본 인스턴스 한 건의 지문으로 봐야 한다.
크기 상위 5개는 다음과 같다.
| 크기 | SHA-256 | 분류 |
|---|---|---|
| 1.2MB | e522228eb6c61a598be82b36d71b6ce454a6cca1fbe39f2ee9248190e771cc1c | Unpacked PE 32bit DLL |
| 1.1MB | e44f98309c9341d2cda904dedc3316959493b81bff58dba920202b1cee274e17 | Unpacked PE 32bit DLL |
| 797KB | 23389cbf46c48b94de590486bba34014cf633202696c0c0b7252c57ccd65ddc6 | Unpacked PE 32bit DLL |
| 421KB | e6643a031167c1d96789139b111b8a4cca5ac432163b3deb73432689518dd094 | Injected PE 32bit EXE |
| 340KB | ee41d7e7dafe61b7f8d68e9c878c01cb6ecc0a108ad46951702b73064244fe66 | Unpacked PE 32bit DLL |
| SHA-256 | 크기(bytes) | 분류 |
|---|---|---|
e522228eb6c61a598be82b36d71b6ce454a6cca1fbe39f2ee9248190e771cc1c | 1,207,808 | Unpacked PE 32bit DLL |
e44f98309c9341d2cda904dedc3316959493b81bff58dba920202b1cee274e17 | 1,118,208 | Unpacked PE 32bit DLL |
23389cbf46c48b94de590486bba34014cf633202696c0c0b7252c57ccd65ddc6 | 797,184 | Unpacked PE 32bit DLL |
e6643a031167c1d96789139b111b8a4cca5ac432163b3deb73432689518dd094 | 421,888 | Injected PE 32bit EXE |
ee41d7e7dafe61b7f8d68e9c878c01cb6ecc0a108ad46951702b73064244fe66 | 340,480 | Unpacked PE 32bit DLL |
27fe00e608c46094edb8c16a39ab5630a89ed663c89b3f4f1ac2b14c898b96d1 | 49,934 | Unpacked Shellcode |
265710a4053dc7c993ca47e266c6b9c6808530186385a0e192fe747e0e903bfc | 46,080 | Unpacked PE 32bit DLL |
77ab729fa9c584dd68a1596935266dee05c1e2c6c5627e3d334d43a60fe8cc68 | 23,040 | Unpacked PE 32bit DLL |
905e0507bdb9dceb9901e5b4cf13a2fb6109dcb28cb4b2d224e7c92dfcd6bfa2 | 14,994 | Unpacked Shellcode |
f42f3f772a4a51bdddf3ef461c811627eb3690081a33db725f5c7416414feeaf | 10,973 | Unpacked Shellcode |
aef8a0558953df1375220104ce1e191ed173311e4a20fd2e9679a00b1127f8c1 | 7,533 | Unpacked Shellcode |
1c3660b6f1d37d95f54d96a6ce75ed4b3482427cc90df6f0c01605fdda473c84 | 5,665 | Unpacked Shellcode |
e7296bbba3dee022b992d48fb5e79b9ef1387cee2c973c70d062198a25ad3b79 | 4,096 | Unpacked Shellcode |
374ce559b32392b9d63555cd6b6f33433d81290995929b968416c1504322a43f | 3,954 | Unpacked Shellcode |
6e98f5672280cdd7e2eff6bea4ee8cd7a9901aeefea6b48c041a82e8e7f26585 | 3,714 | Unpacked Shellcode |
e43f6fd34812fbf414211732a27b3857d8228ca8ff534a1ecff889b3253388a7 | 3,499 | Unpacked Shellcode |
7ea5074a44453258d29adb3a9058567887453f78463b1cd5de45298ab774b446 | 2,992 | Injected Shellcode/Data |
7635828e937998e0cc4189fe8e4e09d99b962b979018494b22148c3efc99ccb7 | 2,000 | Unpacked Shellcode |
5c1fdd4f0f5be35db751e1391558b42f932f1c0502a427d434582f477007bf0a | 1,599 | Unpacked Shellcode |
bed1775fe98b42d5a26d2d5430cfa72ab82d0876dab8e2fb7cfb2ad21fbac228 | 1,390 | Injected Shellcode/Data |
77ab9d8a30a8ae9eb7acfb20e884c8365f02631080fa48074247f6a02960adf9 | 865 | Unpacked Shellcode |
f256ee2c9125667b0748d736c749d8b770c330d6ad581a0d3e5fbe0677ee9f27 | 683 | Unpacked Shellcode |
bff2259f53a3e8bd11af8de0584ec5e9acfb700f9fcfce22ca20228c588c7a52 | 652 | Unpacked Shellcode |
fe6e7a0a7cff1c690de6fc4f4377d89052117fd1dce376481dde6ab833f09238 | 300 | Unpacked Shellcode |
341f5bd6e1a87dc684d89f7e27d020be0ae7ac48e2e239bd1c9546aaf44ad22e | 60 | Unpacked Shellcode |
c1f4f87e6fb3a53ca91aeaf4f323e3133c7f443d577458a03245ca73286f9c30 | 60 | Unpacked Shellcode |
152c5fd693f61fe98fe33b69d5c28ae1113e88d1ceef7f0b8c09c4ded67cf498 | 10 | Injected Shellcode/Data |
oDLrJodZcYHQjyyaxzPOCV1fd445ffe022관측된 26개 TTP 중 본 변종의 핵심 8개를 추려 적는다.
| 기법 ID | 이름 | 본 샘플 구현 |
|---|---|---|
| T1055 | Process Injection | self-respawn된 EXE가 메모리에 27개 페이로드 인젝션, ntdll 후킹 해제 후 unbacked syscall |
| T1106 | Native API | API 주소 해소가 unbacked 메모리에서 발생 |
| T1027 | Obfuscated Files | .NET Reactor 추정 난독화, AES 암호 ZIP |
| T1573 | Encrypted Channel | HTTPS C2 + 표준 PureRAT은 self-signed TLS 1.0 |
| T1539 | Steal Web Session Cookie | msedge 자동 실행 후 History 파일 접근, /browser POST |
| T1071 | Application Layer Protocol (Web) | HTTP+HTTPS 이중 C2, REST 스타일 엔드포인트 |
| T1082 | System Information Discovery | Volume Serial, 30+ locale 레지스트리 enumeration |
| T1497 | Virtualization/Sandbox Evasion | 629초 sleep, hardware fingerprinting |
PowerShell 단계의 Add-MpPreference -ExclusionPath는 T1562.001(Disable or Modify Tools), AMSI 미탐지 55건은 T1562.001과 T1059.001(PowerShell)의 조합으로 매핑된다. 본 변종이 자기 자신의 흔적을 줄이려고 시스템 보안 모듈을 직접 손대는 동작은 분석 시점 기준 26개 TTP 외 추가 매핑이 가능하다.
<Sysmon schemaversion="4.90">
<EventFiltering>
<RuleGroup groupRelation="or">
<NetworkConnect onmatch="include">
<DestinationIp condition="is">198.46.178.137</DestinationIp>
<DestinationPort condition="is">3268</DestinationPort>
</NetworkConnect>
</RuleGroup>
<RuleGroup groupRelation="or">
<ProcessCreate onmatch="include">
<CommandLine condition="contains">Add-MpPreference -ExclusionPath</CommandLine>
</ProcessCreate>
</RuleGroup>
</EventFiltering>
</Sysmon>
title: PureHVNC Variant - HTTP C2 on Port 3268
status: experimental
description: 본 PureHVNC 변종이 HostPapa 인프라(198.46.178.137:3268)와 HTTP/HTTPS로 통신하는 패턴 탐지
date: 2026-05-18
logsource:
category: network_connection
product: windows
detection:
selection_c2:
DestinationIp: '198.46.178.137'
DestinationPort: 3268
selection_endpoint:
Image|endswith: '.exe'
Initiated: true
condition: selection_c2 and selection_endpoint
level: high
본 변종이 남길 수밖에 없는 흔적은 다섯 가지로 정리된다.
Add-MpPreference -ExclusionPath 명령에 자기 자신의 경로를 인자로 넣는 패턴. 정상 소프트웨어가 이 경로 조합을 자체 실행할 이유가 없다....\Temp\...bmr) 옵션과 함께 실행. 정상 사용자가 직접 Edge를 띄울 때는 발생하지 않는다.이 패턴들은 198.46.178.137이라는 특정 IP가 바뀌어도 그대로 유효하다. 변종이 새로운 빌더 출력으로 갱신될 때 IP·해시는 모두 바뀌지만, 행위 시퀀스는 같은 운영자가 같은 빌더를 쓰는 한 보존된다.
이번 인스턴스의 가장 큰 시사점은 PureHVNC가 더 이상 "표준 빌더 출력 그대로"의 협박형 RAT이 아니라는 점이다. NetReSec이 정리한 표준 C2 포트(56001~56003)와 protobuf 프로토콜 대신, 본 변종은 LDAP Global Catalog 포트(3268)를 빌려 쓰고 일반 REST 엔드포인트를 노출했다. 운영자가 빌더 출력 위에 한 단계 더 손을 댔거나, PureCoder가 새 모듈을 추가했다는 의미다. NetReSec의 PCAP 탐지 규칙이나 표준 포트 기반 차단 정책은 본 변종을 놓칠 가능성이 있고, 같은 운영자가 다른 표적에 같은 변종을 살포 중일 개연성이 높다.
두 번째 시사점은 인프라 식별의 한계다. 198.46.178.137은 HostPapa의 일반 VPS이고, 호스트네임은 DESKTOP-E4F55FE로 한 Windows 데스크톱처럼 자기소개를 한다. RDP·SMB·RPC가 열려 있고 self-signed TLS 인증서까지 있다는 점에서 정상 사용자 머신을 침투한 jump host일 수 있고, 그렇다면 IP 차단만으로는 다른 호스트로의 피벗을 막을 수 없다. ColoCrossing 산하 IP 대역 전체를 가시화하지 않으면 같은 운영자의 다른 거점을 놓치게 된다.
세 번째는 한국 환경 노출의 모호함이다. 본 변종은 30개 이상의 언어 코드를 enumerate했고, 그 중 ko-KR이 명시적 차단 분기로 등장하지는 않았다.
동일 빌더를 쓰는 운영자가 한국어 표적을 노리지 못할 이유가 없으며, PureHVNC가 이미 ASEC 인텔에서 PureCrypter·Quasar RAT와 함께 한국 위협 행위자가 사용 가능한 도구로 언급되어 왔다. 한국 환경에서 본 변종의 행위 시퀀스를 탐지할 수 있는 룰을 사전에 보유하는 편이 인프라 차단보다 비용 대비 효과가 높다.
분석 환경 안내 본 분석은 격리된 동적 분석 샌드박스(CAPEv2) 환경에서 수행된 단일 인스턴스 관측치를 기반으로 합니다. 다른 환경/시점에서는 행위가 달라질 수 있으며, 본문의 모든 행위 기술은 본 인스턴스에서 실제로 관측된 것에 한정됩니다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.