COMMENTS (0)
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2026년 5월 4일 abuse.ch 스팸트랩에서 첫 관측된 AsyncRAT 견적서 위장 신규 변종(SHA-256 6c4229ac...)을 CAPEv2 233초 분석. jsc.exe 인젝션·ntdll 메모리 후킹 해제·Chromium 탈취·비표준 포트 3333 C2까지 45개 시그니처 행적과 AhnLab ASEC가 추적한 한국 IT 회사 사칭 캠페인의 5월 변종을 정리.
댓글은 익명으로 작성되며, 삭제 비밀번호를 설정하면 본인만 삭제할 수 있습니다. 비밀번호를 설정하지 않은 댓글은 누구나 삭제할 수 있습니다.
2026년 5월 4일 오전 10시 26분(UTC). abuse.ch가 운영하는 멀웨어 스팸트랩에 신규 샘플 하나가 잡혔다. 파일명은 Quotes & Samples 04-05-26.exe. 견적서와 샘플이라는 비즈니스 이메일 주제로 위장한 1MB짜리 64비트 PE 실행 파일이었다.
같은 날 동일 샘플을 CAPEv2 샌드박스로 직접 분석한 결과를 본 글에서 정리한다. 233초 동안 45건의 행위 시그니처가 잡혔고 jsc.exe 메모리에서 37,376바이트짜리 XWorm 페이로드까지 추출됐다. AhnLab ASEC가 2025년 11월부터 추적해 온 한국 IT 회사 사칭 캠페인이 5월 변종으로 이어진 흔적이다.
이번 변종이 흥미로운 지점은 두 가지다.
첫째, 분류가 갈린다. 동일 샘플인데도 abuse.ch MalwareBazaar는 AsyncRAT으로 태그한 반면 CAPEv2의 YARA는 메모리에서 추출한 페이로드를 XWorm으로 매칭했다. 같은 imphash d66b4ec09935df327ac8d2b54b2b10a8를 가진 다른 두 샘플 역시 AsyncRAT으로 태그된 상태다. 둘 다 거짓이 아니다. Quasar(2014) → AsyncRAT(2019) → XWorm(2022)로 이어지는 .NET 원격 제어 도구의 코드 공유 계보가 진짜 원인이다.
이 패밀리의 활동량은 폭발적이다. ANY.RUN 통계에 따르면 2026년 4월 중순 한 주에만 17개 신규 샘플이 잡혔다. 직전 7일 평균 대비 125% 증가다. Maltiverse는 활동량 2위 악성코드 패밀리로 분류한다(1위는 CobaltStrike).
둘째, jsc.exe로 인젝션한다. AsyncRAT 캠페인의 전형적 LOLBin 패턴이다. Trend Micro가 2023년 분석한 사례에서는 동일 계보가 aspnet_compiler.exe를 노렸고, 2026년 변종은 RegAsm.exe까지 확장했다. 모두 Microsoft가 서명한 .NET 빌드 도구라는 공통점이 있다. 이번 5월 변종은 C:\Windows\Microsoft.NET\Framework\v4.0.30319\jsc.exe(.NET JScript 컴파일러)를 선택해 서명된 합법 프로세스 안에서 RAT가 동작하도록 만든다.
| 항목 | 값 |
|---|---|
| 파일명 | Quotes & Samples 04-05-26.exe |
| SHA-256 | 6c4229ac9e24a9d1444a5bc37f0d3fdb16befe906fd0005138a52ae65ccb0503 |
| MD5 | 4d7737ae50670d5a01679e912e4b3305 |
| 파일 크기 | 1,007,801 bytes (약 984 KB) |
| 파일 타입 | PE32+ executable (GUI) x86-64 |
| Imphash | d66b4ec09935df327ac8d2b54b2b10a8 |
| PE Timestamp | 2026-05-01 18:57:16 UTC (관측 3일 전 컴파일) |
| 첫 관측 | 2026-05-04 10:26:00 UTC (abuse.ch MalwareBazaar) |
| 분석 환경 | Windows 10 x64, CAPEv2 |
| 탐지 점수 | 10.0 / 10.0 |
| 인메모리 페이로드 | XWorm payload 37,376 bytes (jsc.exe 메모리) |
abuse.ch MalwareBazaar의 imphash 추적 결과는 동일 함수 호출 패턴을 공유하는 샘플이 더 있다는 사실을 보여준다. 그 가운데 두 개는 AsyncRAT, 한 개는 SnakeKeylogger로 태그됐다. 동일 빌더에서 찍어 낸 변종이 최소 세 가족이라는 의미다.
PE 헤더는 표준이다. Microsoft Linker 14.36으로 빌드됐고 6개 섹션(.text, .rdata, .data, .pdata, .rsrc, .reloc)을 가진다. .text 섹션 엔트로피는 6.64로 패킹된 페이로드는 아니다. 다만 .data 섹션의 엔트로피가 3.09로 낮은 점은 평문 또는 단순 인코딩된 문자열·설정 영역이 존재함을 시사한다.
의심 API 함수가 11개 DLL의 143개 임포트 중 7개 발견된다.
| API | 용도 |
|---|---|
AddVectoredExceptionHandler | 후킹 또는 실행 흐름 가로채기 |
SuspendThread / ResumeThread | 인젝션 시 thread hijacking |
GetThreadContext / SetThreadContext | 인젝션 시 RIP 레지스터 조작 |
IsDebuggerPresent | 단순 anti-debug |
SetUnhandledExceptionFilter | 디버거 차단 우회 |
YARA 룰 두 개가 매칭된다.
첫째는 INDICATOR_SUSPICIOUS_EXE_UACBypass_CMSTPCOM이다. CMSTP는 본래 Windows의 합법적 인증서 관리 유틸리티다. 그러나 Elevation:Administrator!new: 같은 COM 모니커를 통해 권한 상승 프롬프트 없이 관리자 토큰을 획득하는 경로로 잘 알려져 있다. MITRE ATT&CK에서는 T1218.003에 매핑된다.
둘째는 shellcode_peb_parsing이다. x86 환경에서 스레드 환경 블록과 프로세스 환경 블록의 모듈 적재 목록을 수동으로 순회하는 시그니처를 잡아낸다. 본문 안에 다음 바이트 시퀀스가 박혀 있다.
64 A1 30 00 00 00 8B 40 0C 8B 40 14 8B 78 10 8B 70 28
Ldr->InMemoryOrderModuleList를 따라가며 적재된 DLL을 찾는 전형적 쉘코드 베이스 코드다.
FLARE CAPA 분석은 더 풍부한 능력 지도를 그려 준다. 핵심 발견을 정리하면 다음과 같다.
| 영역 | 검출 |
|---|---|
| 데이터 조작 | XOR 인코딩 22회 / RC4 PRGA / Murmur3 해시 / SHA1 / Mersenne Twister PRNG |
| 런타임 링킹 | PEB ldr_data 접근 22회 / 런타임 함수 해석 10회 |
| 호스트 조사 | 환경변수·파일 메타·CPU 수·메모리 용량 쿼리 |
| 안티 분석 | QueryPerformanceCounter 시간 지연 검사 |
정상 PE라면 임포트 테이블에 한 번에 끝낼 함수 호출을, 이번 샘플은 매번 수동으로 해석한다. EDR이 임포트 테이블 기반으로 행위를 예측할 여지를 차단하는 설계다.
실행 시작은 PID 3816(드로퍼)이다. 드로퍼는 곧바로 C:\Windows\Microsoft.NET\Framework\v4.0.30319\jsc.exe를 일시 정지(suspended) 상태로 생성하고 PID 2896을 부여한다. 그다음 jsc.exe 안에 RWX 메모리 영역을 할당하고 37,376바이트짜리 XWorm 페이로드를 그 자리에 작성한다. CAPEv2 시그니처는 이 단계를 다음과 같이 기록한다.
creates_suspended_process — suspended 상태 프로세스 생성injection_write_exe_process — 실행 가능한 PE를 다른 프로세스 메모리에 작성injection_runpe — RunPE 패턴(언패킹 후 새 프로세스에 인젝션)injection_rwx — RWX 메모리 생성resumethread_remote_process — 원격 프로세스의 스레드 재개이 다섯 가지가 모두 한 트리에 발생한 것은 Process Hollowing(T1055.012) 의 교과서적 절차다. dropper는 jsc.exe의 정상 코드를 비우지는 않고 RWX 영역에 XWorm 페이로드를 더해 두 코드가 한 프로세스 공간에 공존하게 만든다. RegAsm/aspnet_compiler 인젝션과 차이는 타깃 바이너리 이름뿐이다.
CAPE 시그니처 중 가장 심각한 묶음은 모두 같은 그림을 그린다.
| 시그니처 | 의미 |
|---|---|
ntdll_memory_unhooking | ntdll.dll의 메모리 보호를 PAGE_READWRITE로 변경 |
unbacked_api_resolution | 디스크에 매핑되지 않은(언배크드) 메모리에서 API 주소 해석 |
unbacked_library_load | 언배크드 메모리의 호출자가 새 DLL 적재 |
unbacked_memory_protection_alteration | 언배크드 메모리에서 보호 속성 변경 |
unbacked_crypto_operations | 언배크드 메모리에서 암호화 API 호출 |
unbacked_token_manipulation | 언배크드 메모리에서 토큰 조작 시도 |
unbacked_process_enumeration | 언배크드 메모리에서 프로세스 열거 |
"unbacked"는 디스크의 PE 파일과 1:1로 대응되지 않는 메모리 영역을 가리킨다. EDR은 보통 ntdll.dll에 자체 후킹을 걸어 시스템 콜을 가로챈다. 이번 샘플은 ntdll의 보호 속성을 풀고 후킹을 제거(unhooking)한 뒤 자기가 할당한 RWX 영역에서 직접 시스템 콜을 호출한다. 결과적으로 EDR이 후킹으로 잡으려던 행위를 모두 후킹 밖에서 처리한다.
여기에 anti-analysis 시그니처가 추가된다. stealth_timeout은 시간 측정을 한 뒤 비정상적으로 빨리 종료되는 패턴을 잡는다. 샌드박스의 가속 시계를 피하려는 흔적이다.
또 다른 시그니처는 language_check_registry다. 시스템 로케일 레지스트리(Nls\CustomLocale\en-US 키)를 확인하는 행위를 잡는다. 영문 환경에서만 동작하도록 만들었거나, 반대로 특정 지역을 회피하기 위한 사전 점검일 가능성이 있다.
CAPE는 다음 시그니처를 함께 보고한다.
infostealer_keylog — 키 입력 후킹 흔적registry_credential_store_access — 자격증명 저장 레지스트리 키 접근target_browsers: Chromium Browsers 항목 검출XWorm/AsyncRAT 빌드 옵션 중 키로거와 클립보드 모니터, Chromium 기반 브라우저(Chrome, Edge, Brave 등)의 저장된 패스워드 추출은 표준 기능이다. Halcyon이 보고한 2026년 변종은 16개 암호화폐 클리퍼까지 포함한다.
이번 샘플의 메모리 페이로드가 같은 빌더 가족인지는 추가 분석이 필요하다. 다만 1MB대 드로퍼 크기와 imphash 통계로 볼 때 동일 캠페인일 가능성이 높다.
dropper는 자기 자신을 사용자 시작 폴더에 그대로 복사한다.
C:\Users\cape\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\6c4229ac9e24a9d1444a.exe
이 경로는 사용자 권한만으로 쓸 수 있고 로그인 시 자동 실행된다. UAC 우회나 관리자 권한이 필요 없다. CAPE 시그니처 persistence_autorun이 이 행위를 잡아낸다.
시작 폴더 활용은 MITRE ATT&CK T1547.001 매핑이다. AhnLab ASEC가 2025년 11월에 보고한 한국어 변종은 같은 가족이지만 다른 길을 택했다. 그쪽은 Task Scheduler에 BitTorrent Certificate 같은 정상 소프트웨어 위장 작업을 등록한다. 이번 5월 변종은 단순한 시작 폴더 방식을 선택했고, 그 결과 EDR의 행위 분석을 더 적게 자극한다.
뮤텍스 두 개도 같은 시점에 생성된다.
Global\MFDC8E618246FEA13 — 시스템 전역 뮤텍스(중복 실행 방지)UDWJhb0nWsfp7CKC — 세션 로컬 뮤텍스Global\ 접두는 동일 호스트에서 같은 RAT 인스턴스가 두 번 돌지 않게 막는다. 16자리 영숫자로 보이지만 일정한 키 유도 함수 결과일 가능성이 있다. AsyncRAT 빌더는 보통 빌드 GUID를 SHA1으로 해싱한 뒤 일부를 뮤텍스 이름으로 사용한다.
가장 먼저 눈에 띄는 부분은 C2 포트가 3333이라는 점이다. ThreatFox에 등록된 1,000개 AsyncRAT 샘플 분석에서 C2 포트 분포 1~3위는 6606, 7707, 8808 — 모두 AsyncRAT 빌더의 디폴트 옵션이다.
3333은 비전형이며 XWorm 빌더에서 더 흔하게 발견된다. 이 점이 메모리 페이로드의 XWorm YARA 매칭과 일치한다. 즉 외피는 AsyncRAT 패밀리지만 실제 통신 모듈은 XWorm 코드 베이스에 가깝다.
두 번째로 흥미로운 트래픽은 206.206.82.206/filestreamingservice/files/{GUID} 패턴이다. filestreamingservice는 Microsoft가 Windows Update의 차등 패치 배포에 사용하는 정상 CDN 경로명이다. *.update.microsoft.com/filestreamingservice/files/{GUID}/... 형식이 표준이다.
이번 샘플은 IP 직접 호출로 정상 도메인을 우회하면서 경로 구조만 흉내 낸다. 같은 위장 패턴은 LummaStealer Go 변종에서도 확인된 바 있다. URL 경로 패턴 기반 화이트리스트가 있는 환경에서 통과율을 높이는 설계다.
세 번째는 c.pki.goog의 CRL(Certificate Revocation List) 조회다. Google Trust Services의 정상 인증서 검증 트래픽이지만, RAT 입장에서는 시스템이 정상 통신 중이라는 인상을 준다. CAPE 시그니처 network_questionable_http_path가 이 묶음을 의심 트래픽으로 분류한다.
| 종류 | 값 |
|---|---|
| SHA-256 | 6c4229ac9e24a9d1444a5bc37f0d3fdb16befe906fd0005138a52ae65ccb0503 |
| SHA-1 | f5d07c13569b4a9ad5b4f8b757bf67b9878f7c7f |
| MD5 | 4d7737ae50670d5a01679e912e4b3305 |
| SHA3-384 | 73d1c392ce075dc2f89fe3ec15e973b37ddc50c73f81505353158a64261d830cf4544aa769ca40ed7e0a0722556ba639 |
| Imphash | d66b4ec09935df327ac8d2b54b2b10a8 |
| TLSH | T109258D1DE38C11E9D22BC134CBA26232E775785A0761BADB079AD6152F73ED06F3A311 |
| 호스트 | 포트 | 용도 |
|---|---|---|
103.83.86.92 | 3333/TCP | 주요 C2 (XWorm 비표준 포트) |
206.206.82.206 | 80/HTTP | 추가 페이로드 다운로드 (Microsoft Update CDN 위장) |
72.145.35.117 | 443/HTTPS | 백업 C2 추정 |
20.190.141.33 | 443/HTTPS | 백업 C2 추정 |
23.1.17.169 | 443/HTTPS | 보조 채널 |
23.206.175.152 | 443/HTTPS | 보조 채널 |
| 항목 | 값 |
|---|---|
| 파일 경로 | %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\6c4229ac9e24a9d1444a.exe |
| 글로벌 뮤텍스 | Global\MFDC8E618246FEA13 |
| 세션 뮤텍스 | UDWJhb0nWsfp7CKC |
| 인젝션 타깃 | C:\Windows\Microsoft.NET\Framework\v4.0.30319\jsc.exe |
| 레지스트리 점검 | HKLM\SYSTEM\ControlSet001\Control\Nls\CustomLocale\en-US |
| 전술 | 기법 | 설명 |
|---|---|---|
| Execution | T1059.005 (Visual Basic) | imphash가 같은 자매 샘플에서 VBS 사용 흔적. 본 샘플은 PE 직접 실행. |
| Execution | T1218.011 (Rundll32) — 변종 | 동일 캠페인의 한국 변종에서 mshta/rundll32 보고됨 |
| Defense Evasion | T1218.003 (CMSTP) | YARA INDICATOR_SUSPICIOUS_EXE_UACBypass_CMSTPCOM |
| Defense Evasion | T1055.012 (Process Hollowing) | jsc.exe에 RWX 작성 + 원격 스레드 재개 |
| Defense Evasion | T1027 (Obfuscated Files) | 22회 XOR · RC4 PRGA · Murmur3 |
| Defense Evasion | T1497 (Virtualization/Sandbox Evasion) | stealth_timeout · QueryPerformanceCounter 시간 검사 |
| Defense Evasion | T1562.001 (Disable EDR) | ntdll memory unhooking |
| Persistence | T1547.001 (Startup Folder) | 시작 폴더 자기 복사 |
| Discovery | T1082 (System Information) | 컴퓨터 이름·사용자명·메모리 용량 쿼리 |
| Credential Access | T1555.003 (Credentials from Browsers) | Chromium 자격증명 |
| Credential Access | T1056.001 (Keylogging) | infostealer_keylog |
| Command and Control | T1071.001 (Web Protocols) | HTTP filestreamingservice |
| Command and Control | T1571 (Non-Standard Port) | 3333/TCP |
이 샘플은 무엇을 남기지 않을 수 없는가. 공격자 입장에서 본 행위 흔적이다.
프로세스 트리에서 임의 드로퍼 → jsc.exe 부모-자식 관계가 만들어진다. jsc.exe는 .NET JScript 컴파일러다. 일반 사용자 환경에서 직접 실행되는 일이 거의 없다. Microsoft Visual Studio 빌드 도중에는 등장하지만, 그 외 정상 시나리오는 떠올리기 어렵다.
데스크톱 사용자가 견적서 첨부 파일을 열었는데 jsc.exe가 자식 프로세스로 뜬다면 합리적 설명이 없다. Sysmon 이벤트 ID 1(Process Create)에서 Image\jsc.exe + ParentImage\AppData\Local\Temp 또는 다운로드 폴더 조합은 강력한 단일 시그널이다.
ntdll.dll 메모리 보호 변경이 발생한다. Sysmon 이벤트 ID 10(Process Access)에서 TargetImage ntdll.dll, GrantedAccess 0x1FFFFF 같은 광범위 권한 요청이 의심 시그널이다. EDR이 자체 후킹을 건 ntdll의 보호 속성이 PAGE_READWRITE로 바뀌면 후속 행위가 후킹 밖에서 진행된다. 후킹 회피 자체를 탐지하는 편이 더 안정적이다.
RWX 메모리에 PE 헤더(MZ, PE 시그니처)가 작성된다. Sysmon ID 8(CreateRemoteThread)과 ID 10이 동일 SourceProcessGuid에서 5초 이내에 함께 발생하면 인젝션 시그널이다.
시작 폴더에 임의 이름의 PE 파일이 추가된다. Sysmon 이벤트 ID 11(FileCreate)에서 TargetFilename 패턴이 Startup\\.+\.exe인 경우 합법 사용 사례는 거의 없다.
비표준 포트 3333/TCP로 외부 연결이 발생한다. 네트워크 IDS에서 단순 포트 기반 룰로 잡힌다. 여기에 TLS 핑거프린트가 알려진 원격 제어 도구 패턴과 일치하면 신뢰도가 더 높아진다.
filestreamingservice 경로가 정상 도메인이 아닌 IP에서 호출된다. Suricata나 Zeek HTTP 로그에서 잡을 수 있다. 룰은 host == IP literal AND uri matches /filestreamingservice/files/ 형태가 가장 강한 시그널이다. 다수 정보 탈취 도구가 같은 위장 경로를 공유한다.
Sigma 룰 예시(개념):
process_creation: Image\jsc.exe + ParentImage 사용자 다운로드/Temp 경로 → highimage_load: Image\jsc.exe 내부에서 clr.dll 적재 후 RWX 영역 작성 → highnetwork_connection: 비공인 IP + 비표준 포트(3333, 7707, 6606, 8808 등 RAT 디폴트) → mediumfile_create: %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\.+\.exe → highAhnLab ASEC가 2025년 11월부터 추적해 온 한국 IT 회사 사칭 변종은 다른 실행 체인을 사용한다. 그쪽은 LNK 단축아이콘 + PowerShell + mshta 조합이며 C2는 194.33.191[.]248:4449였다.
실행 경로는 다르지만 최종 페이로드 가족은 동일한 AsyncRAT/VenomRAT 계보다. 같은 빌더가 두 개 테마를 함께 생산한다. 한쪽은 한국어 송장·견적서 ISO, 다른 한쪽은 영문 비즈니스 메일 첨부(Quotes & Samples)다. 이 교차점이 ASEC 보고와 abuse.ch 스팸트랩 데이터에서 동시에 관측된다.
AI 활용 안내 이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 인용된 통계와 사례는 참고 자료에 명시된 출처에 근거하며, 설명을 위한 일부 표현은 각색되었습니다.
면책 조항 본 글은 보안 인식 제고를 위한 교육 목적으로 작성되었습니다. 언급된 공격 기법을 실제로 시도하는 행위는 「정보통신망법」, 「형법」 등에 따라 처벌받을 수 있으며, 본 블로그는 이에 대한 법적 책임을 지지 않습니다.