MedusaHVNC는 숨겨진 데스크톱을 통해 실시간 Windows 세션을 탈취합니다.
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
MedusaHVNC는 Malware-as-a-Service (MaaS) 모델을 통해 배포되는 새로 식별된 원격 액세스 트로이 목마(RAT)입니다. 이는 숨겨진 Virtual Network Computing (HVNC) 모듈을 사용하여 별도의 보이지 않는 Windows 데스크톱 세션을 생성합니다. 이를 통해 공격자는 쿠키와 인증된 세션 상태를 포함한 활성 브라우저 세션을 피해자에게 경고하지 않고 탈취할 수 있습니다.
조사
연구원들은 MedusaHVNC 샘플을 분석하여 난독화된 JScript 실행기를 시작으로 하는 5단계 감염 체인을 밝혀냈습니다. 조사는 AutoIt가 암호 해독 및 합법적인 Windows 문자 맵 유틸리티(charmap.exe)에 프로세스 주입에 사용된다는 것을 보여주었습니다. 최종 페이로드는 ChaCha20 암호화에 의존하며 사용자 정의 TCP 프로토콜을 통해 하드코딩된 C2 서버와 통신합니다.
완화 조치
효과적인 완화 조치는 알려진 C2 인프라 차단 및 이상한 아웃바운드 네트워크 연결에 대한 엔드포인트 모니터링을 포함합니다. 조직은 프로세스 출처에 관계없이 아웃바운드 트래픽을 검사할 수 있는 데이터 유출 방지 제어를 배포해야 합니다. charmap.exe 와 같은 합법적인 시스템 바이너리를 포함한 의심스러운 자식 프로세스 또는 주입 활동 모니터링은 탐지를 개선할 수 있습니다.
대응
MedusaHVNC 활동이 탐지되면 보안 팀은 즉시 영향을 받은 엔드포인트를 분리하여 C2 서버와의 통신을 차단해야 합니다. 조사자는 JScript 실행기의 초기 전송 경로를 식별하고 시작 폴더의 지속성 메커니즘을 확인해야 합니다. 세션 및 인증 로그도 공격 기간 동안 발생한 승인되지 않은 활동을 위해 검토해야 합니다.
공격 흐름
탐지
LOLBAS WScript / CScript (프로세스 생성 통해)
Proof of Value
자동 시작 위치의 의심스러운 바이너리/스크립트 (파일 이벤트 통해)
Proof of Value
탐지할 IOCs (SourceIP): MedusaHVNC: 라이브 윈도우 세션을 탈취하는 숨겨진 데스크톱
Proof of Value
탐지할 IOCs (DestinationIP): MedusaHVNC: 라이브 윈도우 세션을 탈취하는 숨겨진 데스크톱
Proof of Value
MedusaHVNC C2 통신 탐지 [Windows 네트워크 연결]
Proof of Value
MedusaHVNC 감염 체인에서 JScript 실행기 및 AutoIt 인터프리터 탐지 [Windows 프로세스 생성]
Proof of Value
시뮬레이션 실행
전제 조건: 텔레메트리 및 기준 사전 비행 점검이 통과해야 합니다.
이유: 이 섹션은 탐지 규칙을 유발하도록 설계된 적 기법(TTP)의 정확한 실행을 자세히 설명합니다. 명령과 내러티브는 식별된 TTP를 직접 반영해야 하며 탐지 논리에 의해 예상되는 정확한 텔레메트리를 생성해야 합니다. 추상적이거나 관련이 없는 예는 오진을 초래할 것입니다.
-
공격 내러티브 및 명령: 공격자는 피해자 워크스테이션에 성공적으로 MedusaHVNC를 배포했습니다. 명령 및 제어(C2)를 확립하고 원격 데스크톱 상호작용을 시작하기 위해 악성 소프트웨어는 하드코딩된 리스너에 연결을 시도합니다. 이 시뮬레이션에서 우리는 포트 4444의 로컬 리스너에 연결을 강제하여 이러한 동작을 모방합니다. 이 작업은 MedusaHVNC 수명주기의 “폰 홈” 단계를 시뮬레이션하여, Sysmon 이벤트 ID 3 로그를 생성하는 데 의도되었습니다.
DestinationPort: 4444. -
회귀 테스트 스크립트:
# 시뮬레이션 스크립트: MedusaHVNC C2 통신 에뮬레이션 # 목표: Sigma 규칙을 트리거하기 위해 포트 4444에서 네트워크 연결 이벤트를 생성합니다. $TargetIP = "127.0.0.1" $TargetPort = 4444 Write-Host "[+] MedusaHVNC C2 시뮬레이션 시작..." -ForegroundColor Cyan # 단계 1: 연결을 포착하기 위한 로컬 리스너 생성 (C2 서버 시뮬레이션) $Listener = New-Object System.Net.Sockets.TcpListener([System.Net.IPAddress]::Loopback, $TargetPort) $Listener.Start() Write-Host "[+] 로컬 C2 리스너가 $TargetIP:$TargetPort에 시작되었습니다." -ForegroundColor Green try { # 단계 2: 악성 코드의 아웃바운드 연결 에뮬레이션 Write-Host "[+] C2에 대한 아웃바운드 연결 에뮬레이션 중..." -ForegroundColor Yellow $Client = New-Object System.Net.Sockets.TcpClient $Client.Connect($TargetIP, $TargetPort) Write-Host "[!] 성공: 연결이 설정되었습니다. SIEM에서 경고를 확인하십시오." -ForegroundColor Red } catch { Write-Host "[-] 연결 실패: $($_.Exception.Message)" -ForegroundColor Red } finally { # 연결 정리 if ($Client) { $Client.Close() } $Listener.Stop() Write-Host "[+] 시뮬레이션 정리 완료." -ForegroundColor Cyan } -
정리 명령:
# 남아있는 프로세스나 리스너가 존재하지 않도록 보장합니다. Stop-Process -Name "powershell" -Force -ErrorAction SilentlyContinue # (참고: 실제 환경에서는 수동으로 포트 4444가 닫혀있는지 확인하십시오.) Test-NetConnection -ComputerName 127.0.0.1 -Port 4444