COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
Silver Fox 그룹의 ValleyRAT 분석. 깨끗한 ntdll로 EDR 후크를 풀고 explorer.exe에 셸코드를 심는 RAT의 작동 원리, 6개 C2 인프라, 행위 기반 Sigma 룰 2종.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
ValleyRAT은 실행 직후 가장 먼저 자기 프로세스의 ntdll.dll을 통째로 덮어쓴다. EDR이 후킹해 둔 함수들을 깨끗한 사본으로 되돌려 감시망 자체를 무력화하는 한 수다. C2 호출도 키 입력 후킹도 그 다음이다.
이 글은 Silver Fox(银狐) 그룹이 운영하는 ValleyRAT 한 변종의 행위를 정리한다. 윈도우 분석 환경에서 7분 27초 동안 남긴 행위 기록을 따라가며 어떤 순서로 어떤 흔적이 남는지, 그리고 EDR이 풀린 뒤에도 무엇은 여전히 잡히는지를 본다.
Silver Fox(银狐) 는 2022년부터 활동이 관찰된 중국어권 위협 행위자 군이다. 핵심 도구가 ValleyRAT이고, 자주 쓰는 부가 도구가 Gh0stRAT 변종이다. 인프라 일부는 두 도구 사이에서 공유된다.
이름은 "중국 표적 그룹"이지만 한국에서 무관한 사건은 아니다. 2024년 AhnLab ASEC 보고에 따르면 한국 SI 업체와 제조업체 를 향한 Silver Fox 캠페인이 관측됐다. 진입로는 표적의 협력사·고객 메일을 위장한 첨부, 또는 정상 소프트웨어 업데이트 채널을 사칭한 다운로더였다. 한국 IP 대역에 한정된 캠페인은 아니었지만, 중국어 미끼 문서와 한국어 미끼 문서가 같은 인프라에서 동시에 배포된 사례가 보고됐다.
REVELARE 기준으로 이 그룹은 Salt Typhoon 1년 캠페인 이후 다루지 못한 중국 APT 활동의 빈자리를 채우는 의미가 있다. Salt Typhoon이 통신사 인프라 침투의 사례라면, Silver Fox는 개별 엔드포인트 EDR 우회 기술의 사례 다. 같은 국가 출처로 분류돼도 운영 모델이 전혀 다르다.
| 항목 | 값 |
|---|---|
| 파일명 | 1d54322168b05c286624.zip |
| 파일 타입 | ZIP archive (v5.1+, AES 암호화) |
| 크기 | 259,093 bytes |
| ZIP SHA-256 | f7a717607aed7d23...961bb03 |
| MD5 | 82a4410ca988b7723f3b033cda53aff1 |
| 탐지 family | ValleyRAT |
배포 형태는 AES 암호화된 ZIP 컨테이너 다. 외부 정적 분석 단계에서는 암호화 때문에 PE 헤더·임포트 정보가 드러나지 않는다. ZIP을 풀고 내부 PE를 메모리에서 실행한 시점부터 행위가 비로소 관찰된다.
실행 도중 메모리에 풀린 페이로드 조각은 세 개다.
| 크기 | 타입 | 호스트 프로세스 |
|---|---|---|
| 5,317 B | Unpacked Shellcode | explorer.exe |
| 3,079 B | Injected Shellcode/Data | ValleyRAT 본체 |
| 62 B | Injected Shellcode/Data | ValleyRAT 본체 |
가장 중요한 조각은 explorer.exe 안의 5KB 셸코드 다. ValleyRAT이 자기 본체에서 떼어 시스템 신뢰 프로세스로 이주시킨 핵심 페이로드다. 본체 프로세스가 종료돼도 explorer는 살아남으므로 종료 회피와 지속성을 동시에 챙긴다.
ValleyRAT은 임시 폴더에서 실행된 뒤 자기 자신을 한 번 더 자식으로 띄운다. 자식이 다시 시스템 프로세스에 코드를 주입한다.
본체에서 자식으로 가는 첫 분기는 자기 자신을 일시정지 상태로 다시 띄운 뒤 메모리를 덮어쓰는 패턴 이다. suspended 프로세스 생성과 메모리 쓰기가 함께 일어나는 점에서 프로세스 할로잉(process hollowing) 변종 으로 작동한다.
본체에서 explorer.exe로 가는 경로는 다른 프로세스 메모리를 읽고, 쓰고, 스레드를 재개 하는 전형적인 원격 인젝션 3단 패턴이다. 시스템 신뢰 프로세스로 이주가 완료되면 그 시점부터 모든 RAT 행위(C2 통신, 데이터 수집, 키로깅)는 explorer 컨텍스트 안에서 일어난다.
본체에서 svchost.exe로 이어지는 경로는 직접 인젝션이 아니라 시스템 작업 스케줄러를 만든 뒤 svchost가 그것을 실행하는 우회 경로 일 가능성이 있다. 파일시스템 쪽에 \Microsoft\Windows\UpdateOrchestrator\Schedule Scan 같은 정상 업데이트 작업의 스케줄 파일이 수정된 흔적이 잡힌다.
ValleyRAT의 가장 두드러진 행위는 ntdll.dll을 디스크에서 새로 읽어 자기 메모리를 덮어쓰는 동작 이다. 두 단계로 일어난다.
ntdll.dll이 매핑된 메모리 영역의 보호 속성을 PAGE_READWRITE로 변경C:\Windows\System32\ntdll.dll을 다시 매핑해 그 위에 통째로 덮어쓰기EDR 제품 다수는 프로세스가 시작될 때 ntdll.dll 안의 Nt* 시스템 콜 진입점에 자기 후크를 심는다. NtCreateProcess, NtWriteVirtualMemory 같은 민감 호출을 가로채기 위해서다. 공격자가 이 후크를 푸는 길은 두 가지다.
ValleyRAT은 후자를 선택했다. 한 번 덮어쓰면 그 프로세스 안의 모든 후속 호출은 EDR 입장에서 자기가 본 적 없는 함수 가 된다. 같은 시점에 분석 환경 식별 행위들이 한 묶음으로 발화한다. 볼륨 시리얼 조회, 시스템 제조사 조회, 가용 메모리 검사, en-US locale 키 조회. 분석 환경 회피와 후크 해제가 같은 코드 경로에 묶여 있다.
샘플 코드 안에는 RC4 PRGA 루틴이 50건 이상 식별 된다. 한 군데 키스트림 처리만 한 게 아니라 문자열 디코딩·설정 데이터·C2 메시지를 동일한 RC4 라이브러리로 처리한다는 뜻이다. 변종이 새로 등장해도 RC4 코드 자체는 거의 그대로 따라올 가능성이 높다.
ValleyRAT은 6개 호스트와 통신한다. 일부는 정상 인프라(Oracle Java 업데이트, Google 인증서 CRL)이고 핵심 C2는 두 곳이다.
| 호스트 | 분류 | 포트 |
|---|---|---|
cccflknorgnsd.cn (43.199.58.243) | C2 | 8880 |
72.145.35.117 | C2 후보 | 443 |
javadl-esd-secure.oracle.com (23.59.134.139) | 정상 (Java 업데이트 위장) | 443 |
c.pki.goog (142.251.118.94) | 정상 (CRL 조회) | 80 |
23.1.17.169 | dead connect | 443 |
23.206.175.152 | dead connect | 443 |
cccflknorgnsd.cn:8880 이 살아있는 C2다. 도메인 이름은 무작위 영문 11자에 .cn TLD 조합이라 사람이 읽고 의미를 파악할 수 없는 형태다. 포트 8880은 일반 웹 트래픽으로 가장하기 어려운 비표준 포트지만, 동시에 일반 보안 장비의 기본 정책이 모든 트래픽을 검사하지 않는 구간이라 통신 자체가 묻히기 쉽다.
폐기된 C2 후보 IP 3개(20.72.205.209:443, 23.206.175.152:443, 150.171.110.129:443)는 살아있는 C2가 죽었을 때 호출되는 백업 후보 군일 가능성이 있다. 응답이 없으면 다음 IP로 넘어가는 fallback 구조를 추정할 수 있다.
ValleyRAT이 발생시킨 HTTP 트래픽 가운데 본체 C2 호출보다 운영체제 정상 통신을 가장한 경유 트래픽 이 많다. c.pki.goog/r/gsr1.crl, javadl-esd-secure.oracle.com/update/1.8.0/..., prod.client.wosc.services.microsoft.com/api/v1/..., settings-win.data.microsoft.com/settings/.... 이 호스트군은 기업 환경 화이트리스트에 거의 항상 포함된다. ValleyRAT은 자기 통신을 별도 C2로 분리하면서도 분석가가 트래픽 로그만 봤을 때 위협으로 분류하기 어려운 신호 를 동시에 만든다.
| 타입 | 값 | 맥락 |
|---|---|---|
| SHA-256 | f7a717607aed7d238563712e2cf4008aa17a77d681cc86be6db988aad961bb03 | ZIP 컨테이너 |
| MD5 | 82a4410ca988b7723f3b033cda53aff1 | ZIP 컨테이너 |
| SHA-256 | 441270b96b972cf681fd053b50122796597b00a6aed4a3e26f04a092df661386 | 드롭 페이로드 1 |
| SHA-256 | 68fa3df67bcd62990b36e61667c88e6eb663631091a373cf010a52e7d3802d76 | 드롭 페이로드 2 |
| SHA-256 | 316c4a661ef297a2ee645fe99fb3c5a19721d94633075ea999959895cccb2482 | 드롭 페이로드 3 |
| 타입 | 값 |
|---|---|
| Domain | cccflknorgnsd.cn |
| IP:Port | 43.199.58.243:8880 |
| IP:Port | 72.145.35.117:443 |
| IP (dead) | 20.72.205.209:443 |
| IP (dead) | 23.206.175.152:443 |
| IP (dead) | 150.171.110.129:443 |
ValleyRAT은 다음과 같은 뮤텍스 패턴을 만든다.
Microsoft.Windows.Health.TestInProduction.RegistryStore.AggregateResults
Local\Mutex<hex>.automaticDestinations-ms
Global\C::Users:<user>:AppData:Local:Microsoft:Windows:Explorer:thumbcache_idx.db!*
automaticDestinations-ms와 thumbcache_idx.db!* 패턴은 정상 윈도우 동작에서도 자주 발화한다. 단독 IOC로 사용하면 다량의 정상 알람을 발생시키므로 다른 행위 신호와 결합한 상관 분석에만 사용한다.
ValleyRAT의 행위는 다음 MITRE 기법과 매핑된다. 핵심 5건만 추리면 다음과 같다.
| 기법 ID | 명칭 | 이 변종에서 어떻게 작동했나 |
|---|---|---|
| T1562.001 | Disable or Modify Tools | ntdll.dll 후크 해제 + 디스크에서 깨끗한 ntdll 재로드 |
| T1055 | Process Injection | suspended 프로세스 생성 → 메모리 쓰기 → 스레드 재개 |
| T1497 | Virtualization/Sandbox Evasion | 마우스 움직임 검사 + 시스템 제조사 검사 + 가용 메모리 검사 |
| T1539 | Steal Web Session Cookie | 쿠키 파일 접근 |
| T1573 | Encrypted Channel | C2 트래픽 RC4 암호화 (RC4 PRGA 루틴 50건+ 식별) |
전체 매핑은 다음과 같다.
| 기법 ID | 행위 |
|---|---|
| T1497 | mouse_movement_detect |
| T1562.001, T1562 | antisandbox_unhook |
| T1082 | hardware_id_profiling |
| T1012, T1057 | antivm_generic_system |
| T1542.003 | suspicious_iocontrol_codes |
| T1055 | ntdll_memory_unhooking |
| T1033 | privilege_elevation_check |
| T1106 | process_creation_suspicious_location |
| T1539 | infostealer_cookies |
| T1071 | injection_network_traffic |
| T1573 | network_cnc_https_generic |
| T1074 | accesses_recyclebin |
| T1564.003, T1564 | stealth_window |
| T1132 | flare_capa_datamanipulation |
| T1027 | flare_capa_loadcode |
| T1548, T1036 | accesses_public_folder |
ValleyRAT은 EDR을 끊었지만, 끊는 행위 자체가 흔적 이다.
<Sysmon schemaversion="4.90">
<EventFiltering>
<RuleGroup groupRelation="or">
<NetworkConnect onmatch="include">
<DestinationIp condition="is">43.199.58.243</DestinationIp>
<DestinationIp condition="is">72.145.35.117</DestinationIp>
<DestinationIp condition="is">20.72.205.209</DestinationIp>
<DestinationIp condition="is">150.171.110.129</DestinationIp>
</NetworkConnect>
<DnsQuery onmatch="include">
<QueryName condition="contains">cccflknorgnsd.cn</QueryName>
</DnsQuery>
</RuleGroup>
</EventFiltering>
</Sysmon>
IP·도메인이 바뀌어도 살아남는 룰이 필요하다. 핵심은 "프로세스가 자기 ntdll.dll의 메모리 보호를 PAGE_READWRITE로 변경한 직후 디스크의 ntdll을 mmap한다"는 시퀀스다.
title: ValleyRAT-style ntdll Unhooking via Disk Reload
status: experimental
description: 프로세스가 ntdll.dll 메모리를 RW로 변경 후 디스크의 ntdll을 다시 매핑하는 EDR 우회 패턴
date: 2026-05-09
logsource:
category: process_access
product: windows
detection:
selection_protect:
EventID: 10
GrantedAccess|contains:
- '0x40'
TargetImage|endswith: '\ntdll.dll'
selection_load:
EventID: 7
ImageLoaded|endswith: '\ntdll.dll'
Signed: 'true'
filter_first_load:
EventID: 7
Image|startswith:
- 'C:\Windows\System32\'
- 'C:\Windows\SysWOW64\'
condition: selection_protect and (selection_load and not filter_first_load)
level: high
falsepositives:
- 정상 디버거(WinDbg, x64dbg)
- EDR 제품 자체의 후킹 갱신
title: Process Injection 3-step Pattern (Read + Write + Resume)
status: experimental
description: 동일 프로세스가 외부 프로세스의 메모리를 읽고 쓰고 스레드를 재개하는 시퀀스
date: 2026-05-09
logsource:
category: process_access
product: windows
detection:
selection:
EventID:
- 8
- 10
GrantedAccess|contains:
- '0x1F0FFF'
- '0x1F1FFF'
condition: selection
level: medium
falsepositives:
- 정상 디버거
- 일부 백업/AV 제품
지표가 회전하면 IOC 룰은 의미가 없다. 우선순위는 행위 룰이다.
*.cn 도메인 + 11자 무작위 호스트 + 비표준 포트(8000번대) 조합 — 룰로는 약하지만 헌팅 쿼리에 가치ValleyRAT의 핵심 특징 세 가지다.
첫째, EDR 우회는 코드 한 줄이 아니라 한 묶음의 행위 다. ntdll 디스크 재로드, 마우스 움직임 검사, 시스템 제조사 검사, locale 키 조회. 분석 환경 식별과 후크 해제는 같은 코드 경로 안에 묶여 있다.
둘째, 프로세스 인젝션의 모든 단계는 Sysmon Event 8·10에 흔적을 남긴다 . 공격자가 ntdll을 풀어도 그 풀린 ntdll로 호출하는 NtWriteVirtualMemory의 결과는 결국 시스템 호출 종단에서 잡힌다. 후킹이 아닌 텔레메트리 포인트(Sysmon, ETW)는 이런 면에서 더 회복력 있다.
셋째, C2 도메인은 회전하지만 RC4 라이브러리는 회전하기 어렵다 . 동일 RC4 코드가 다음 변종에서도 거의 그대로 재사용될 가능성이 높다. 행위 기반 시그니처와 페이로드 메모리 yara 룰의 재사용 가치가 IOC보다 높다.
한국 환경 점검 시 살펴볼 포인트는 협력사·SI 업체로부터 들어오는 ZIP 첨부의 패스워드 보호 비율, 임시 폴더에서 실행된 EXE의 부모-자식 PID 관계, 그리고 *.cn 비표준 포트 통신이 화이트리스트로 가려지지 않았는지다. 이 셋이 동시에 잡히면 Silver Fox 캠페인의 한국 침투 흔적일 가능성이 있다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.