클릭픽스에서 MaaS까지: 모듈형 윈도우 RAT 및 제어 패널 내부
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
Netskope 위협 연구소는 Node.js로 만든 맞춤형 Windows RAT를 악성 MSI 설치 파일을 통해 전달하는 ClickFix 캠페인을 관찰했습니다. 페이로드는 주요 모듈을 메모리에 유지하며, Tor를 통한 gRPC 스트리밍을 사용하여 C2를 수행합니다. OPSEC의 실수로 관리 패널 프로토콜이 노출되었으며, 지갑 추적을 포함한 멀웨어-서비스-모델로 나타났습니다. 지속성은 사용자 수준의 HKCU 실행 값으로 설정됩니다.
조사
연구원들은 MSI를 확보하고 PowerShell 부트스트랩을 디코딩하여 Node.js 모듈의 동적 로딩을 추적했습니다. 그들은 구성 데이터를 추출하고 암호를 해독하여 .onion C2 주소를 복원했습니다. 유출된 admin.proto 파일에서 다중 운영자 관리 및 지갑 모니터링과 같은 MaaS 기능이 드러났고, 분석가들은 Tor 사용 및 자체 복구 감시 프로세스를 주목했습니다.
완화 조치
신뢰할 수 없는 출처의 서명되지 않은 MSI 실행을 차단하고, HKCU…Run에서 새롭고 의심스러운 항목을 모니터링하세요. cloud-verificate.com과 같은 도메인에서 MSI 페이로드를 다운로드하는 PowerShell을 탐지합니다. 숨겨진 인수로 시작된 conhost.exe 또는 node.exe와 필요하지 않은 엔드포인트에 나타나는 tor.exe에 대한 경고를 설정하세요.
대응
영향을 받는 호스트를 격리하고, 메모리 모듈 분석을 위해 메모리를 수집하며, HKCU 실행 지속성을 제거합니다. %LOCALAPPDATA%LogicOptimizer에서 단계화된 아티팩트 및 예약된 tor.exe 활동을 검토한 후, onion 엔드포인트 및 관련 도메인/IP를 차단합니다. 동일한 설치자 아티팩트 및 프로세스 체인을 엔터프라이즈 전반적으로 추적합니다.
graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef process fill:#ccffcc %% Nodes action_user_exec[“<b>행위</b> – <b>T1204.001 사용자 실행: 악성 링크</b><br/>사용자가 악성 링크 클릭 후 PowerShell 실행”] class action_user_exec action process_powershell_cmd[“<b>프로세스</b> – <b>T1059.001 PowerShell</b><br/>Base64 명령으로 MSI 다운로드”] class process_powershell_cmd process action_msi_install[“<b>행위</b> – <b>T1546.016 설치 패키지</b><br/>Node.js를 포함한 MSI 설치”] class action_msi_install action tool_msiexec[“<b>도구</b> – msiexec.exe<br/>시스템 바이너리 프록시 실행”] class tool_msiexec tool action_persistence[“<b>지속성</b> – Run 키<br/>HKCU Run에 등록”] class action_persistence action tool_tor[“<b>도구</b> – tor.exe<br/>외부 프록시”] class tool_tor tool action_tor_proxy[“<b>행위</b> – 멀티홉 프록시<br/>Tor SOCKS5를 통한 C2 통신”] class action_tor_proxy action action_grpc_comm[“<b>행위</b> – gRPC 통신<br/>.onion C2와 통신”] class action_grpc_comm action action_encrypted_channel[“<b>행위</b> – 암호화 채널<br/>AES-256-CBC 또는 XOR”] class action_encrypted_channel action action_collection[“<b>행위</b> – 호스트 정보 수집<br/>시스템 정보 수집”] class action_collection action action_archive[“<b>행위</b> – 커스텀 아카이브<br/>다중 레이어 암호화”] class action_archive action action_config_repo[“<b>행위</b> – 설정 데이터<br/>C2 정보 추출”] class action_config_repo action action_dynamic_resolution[“<b>행위</b> – 동적 해석<br/>.onion 런타임 해석”] class action_dynamic_resolution action action_ip_discovery[“<b>행위</b> – IP 탐지<br/>외부 IP 확인”] class action_ip_discovery action %% Edges action_user_exec –>|triggers| process_powershell_cmd process_powershell_cmd –>|downloads| action_msi_install action_msi_install –>|uses| tool_msiexec action_msi_install –>|enables| action_persistence action_persistence –>|downloads| tool_tor tool_tor –>|enables| action_tor_proxy action_tor_proxy –>|routes| action_grpc_comm action_grpc_comm –>|encrypted via| action_encrypted_channel action_encrypted_channel –>|carries| action_collection action_collection –>|archives| action_archive action_archive –>|stores config in| action_config_repo action_config_repo –>|provides| action_dynamic_resolution action_dynamic_resolution –>|connects to| action_ip_discovery action_collection –>|discovers| action_ip_discovery
공격 흐름
탐지
비정상 경로에서 실행되는 NodeJS 바이너리 (명령줄을 통해)
보기
가능한 지속성 지점 [ASEPs – 소프트웨어/NTUSER 하이브] (레지스트리 이벤트를 통해)
보기
PowerShell을 통한 다운로드 또는 업로드 (명령줄을 통해)
보기
LOLBAS Conhost (명령줄을 통해)
보기
쉘 프로세스에 의해 생성된 MsiExec (명령줄을 통해)
보기
시도된 가능한 IP 조회 도메인 통신 (DNS를 통해)
보기
가능한 Tor 네트워크 도구 (명령줄을 통해)
보기
부트스트랩 스크립트를 시작하기 위한 Conhost 실행 탐지 [Windows 프로세스 생성]
보기
악성 PowerShell 명령을 실행하여 MSI를 다운로드 및 설치 [Windows PowerShell]
보기
시뮬레이션 실행
필수조건: 텔레메트리 및 기준선 사전 비행 검사가 통과되어야 합니다.
이유: 이 섹션은 탐지 규칙을 작동시키기 위해 설계된 적의 기술 (TTP)의 정확한 실행을 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영하고 탐지 로직의 기대 텔레메트리를 생성함을 목표로 합니다.
-
공격 내러티브 및 명령:
- 목적: 공격자는 악성 Node.js 페이로드 (
bootstrap.js)를 의심 없이 부트스트랩 하기를 원합니다. - 방법: 서명된 Windows 바이너리 (
conhost.exe)를 프록시로 사용하여node.exe를 헤드리스 모드로 실행하며 부트스트랩 스크립트를 인수로 전달합니다. - 단계:
- 악성
bootstrap.js를 쓰기 가능한 디렉토리 (예:%TEMP%). - 에 내려놓습니다.
conhost.exe탐지 규칙이 감시하는 인수 문자열을 정확히 사용하여 실행합니다. - 커렌트 사용자의 컨텍스트에서 실행하여 정당한 프로세스 생성처럼 가장합니다.
- 악성
# 1. 악성 bootstrap.js를 떨어뜨립니다 (테스트를 위해 시뮬레이션된 무해한 내용) $bootstrapPath = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrapPath -Value "// malicious bootstrap placeholder" # 2. conhost.exe를 실행하여 필요한 플래그로 node.exe를 호출합니다 $conhost = "$env:windirsystem32conhost.exe" $args = '--headless "node.exe" "bootstrap.js"' Start-Process -FilePath $conhost -ArgumentList $args -WorkingDirectory $env:TEMP - 목적: 공격자는 악성 Node.js 페이로드 (
-
회귀 테스트 스크립트:
# ------------------------------------------------- # 회귀 테스트: Conhost → Node 부트스트랩 트리거 # ------------------------------------------------- # Sysmon이 실행 중이고 ProcessCreate 이벤트를 로깅 중인지 확인합니다. # 더미 부트스트랩 스크립트를 떨어뜨립니다 $bootstrap = "$env:TEMPbootstrap.js" Set-Content -Path $bootstrap -Value "// 테스트 부트스트랩 내용" # 탐지 규칙이 찾는 정확한 명령줄을 정의합니다 $conhostPath = "$env:windirsystem32conhost.exe" $cmdLine = '--headless "node.exe" "bootstrap.js"' # 악성으로 보이는 인수와 함께 conhost를 실행합니다 Start-Process -FilePath $conhostPath -ArgumentList $cmdLine -WorkingDirectory $env:TEMP Write-Host "시뮬레이션 완료 – SIEM에서 경고를 확인하세요." -
정리 명령:
# 테스트로 시작된 남아있는 node 또는 conhost 프로세스를 종료합니다 Get-Process -Name node, conhost -ErrorAction SilentlyContinue | Stop-Process -Force # 임시 부트스트랩 스크립트를 제거합니다 Remove-Item -Path "$env:TEMPbootstrap.js" -Force -ErrorAction SilentlyContinue Write-Host "정리 완료."