SOC Prime Bias: 위험

09 4월 2026 17:52

체인셸: 머디워터 및 러시아 MaaS

Author Photo
Ruslan Mikhalov SOC Prime에서 위협 연구 책임자 linkedin icon 팔로우
체인셸: 머디워터 및 러시아 MaaS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

MuddyWater, 이란과 연계된 스파이 활동 그룹은 러시아의 TAG-150 멀웨어-서비스 플랫폼을 활용하여 CastleRAT 와 새로운 Node.js, 블록체인-기반 C2 에이전트 ChainShell을 이스라엘 및 다른 고가치 표적에 배치하고 있습니다. 이 활동은 노출된 잘못 구성된 C2 웹 서버, PowerShell 배포 스크립트(reset.ps1), 스테가노그래피로 숨겨진 PE 페이로드의 지원을 받고 있습니다. 다수의 CastleRAT 릴리스(빌드 120 및 빌드 13 포함)는 동일한 MaaS 계보를 가리키는 공통 하드 코드 식별자를 포함하고 있습니다. 백엔드 인프라는 캠페인화되어 있으며, 공유 도메인(예: serialmenot.com)과 개별 작업 JWT 자격 증명을 사용하여 배포 간 접근 및 추적을 분리하는 경향이 있습니다.

조사

JUMPSEC는 노출된 C2 호스트를 검토하고, 15개의 멀웨어 샘플을 복구했으며, reset.ps1 배포 로직을 ChainShell과 다수의 CastleRAT 빌드 전송과 연결지었습니다. 조사관들은 또한 알려진 MuddyWater 도구에서 발견된 코드 서명 인증서(Amy Cherne 및 Donald Gay)를 TAG-150 MSI 설치 프로그램과 연관하여 높은 신뢰 수준의 추적 기록을 형성했습니다. 추가적으로, 하드 코드 빌드 마커, 반복적인 스케줄된 작업 명칭 규칙 및 도구와 서버 측 아티팩트에 임베디드된 JWT 캠페인 ID 간의 겹침도 관찰되었습니다.

완화

reset.ps1, 관련된 스케줄 작업 및 CastleRAT과 ChainShell에 연결된 고유한 뮤텍스 또는 파일 경로 아티팩트를 모니터링하십시오. serialmenot.com, ttrdomennew.com 및 sharecodepro.com을 포함한 알려진 TAG-150 인프라를 차단하고 Node.js 구성 요소의 PowerShell-구동 설치를 정밀 조사하십시오. 엄격한 코드 서명 통제를 시행하고 수상한 인증서를 알려진 MuddyWater 관련 서명 자료와 대조하여 확인하십시오.

응답

표시자가 발견되면 영향을 받은 엔드포인트를 격리하고, 전체 디스크 및 메모리 이미지를 캡처하며, 추가적인 CastleRAT 및 ChainShell 잔존물을 스윕하십시오. 손상된 코드 서명 인증서를 취소하거나 불신하고, 영향을 받은 자격 증명을 재설정하고, 관련 국가 CERT와 보고를 조율하십시오. serialmenot.com 커맨드 앤드 컨트롤 워크플로와 연관된 이더리움 RPC 액세스 패턴 및 JWT 사용을 네트워크 텔레메트리에서 검토하십시오.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef technique fill:#c2f0c2 classDef malware fill:#ff9999 classDef process fill:#ffd966 %% Nodes action_phishing["<b>행동</b> – <b>T1566.002 피싱</b><br/>악성 매크로-활성화된 문서(ClickFix/BatClickFix)가 이메일을 통해 배달됨"] class action_phishing action action_user_exec["<b>행동</b> – <b>T1204.002 사용자 실행</b><br/>피해자가 문서를 열어 PowerShell을 트리거함"] class action_user_exec action tool_powershell["<b>도구</b> – <b>T1059.001 PowerShell</b><br/>로더를 로드하는 데 사용된 스크립트 해석기"] class tool_powershell tool tool_cmstp["<b>도구</b> – <b>T1218.003 CMSTP</b><br/>악성 INF를 로드하는 시스템 바이나리 프록시 실행"] class tool_cmstp tool technique_dll_sideload["<b>기술</b> – <b>T1574.002 DLL 사이드-로드</b><br/>악성 DLL이 INF를 통해 로드됨"] class technique_dll_sideload technique technique_dll_hijack["<b>기술</b> – <b>T1574.005 실행 흐름 납치</b><br/>합법적인 바이너리 옆에 악성 userenv.dll 및 xmllite.dll 배치됨"] class technique_dll_hijack technique technique_scheduled_task["<b>기술</b> – <b>T1543.001 시스템 프로세스 생성 또는 수정</b><br/>지속성을 위한 스케줄된 작업(VirtualSmokestGuy120/666)"] class technique_scheduled_task technique technique_steganography["<b>기술</b> – <b>T1027.003 스테가노그래피</b><br/>JPEG 이미지 내부에 감춰진 고유 PE 페이로드"] class technique_steganography technique technique_embedded_payload["<b>기술</b> – <b>T1027.009 내장된 페이로드</b><br/>추가적으로 더 감춰진 페이로드"] class technique_embedded_payload technique technique_data_obfusc["<b>기술</b> – <b>T1001 데이터 난독화</b><br/>AES-256-CBC 암호화를 통한 C2 트래픽"] class technique_data_obfusc technique technique_uac_bypass["<b>기술</b> – <b>T1548.002 권한 상승 제어 메커니즘 남용</b><br/>CMSTP 실행이 UAC를 우회함"] class technique_uac_bypass technique technique_steal_cookie["<b>기술</b> – <b>T1539 웹 세션 쿠키 탈취</b><br/>Chrome v127+ 앱-바운드 쿠키 복호화"] class technique_steal_cookie technique technique_forge_cookie["<b>기술</b> – <b>T1606.001 웹 자격 증명 위조</b><br/>추출된 쿠키를 사용한 인증"] class technique_forge_cookie technique technique_alt_auth["<b>기술</b> – <b>T1550.004 대체 인증 자료 사용</b><br/>쿠키를 사용한 측면 이동"] class technique_alt_auth technique technique_vnc["<b>기술</b> – <b>T1021.005 원격 서비스 VNC</b><br/>숨겨진 VNC가 보이지 않는 데스크톱 제어를 제공"] class technique_vnc technique technique_remote_service["<b>기술</b> – <b>T1021 원격 서비스</b><br/>원격 서비스를 통한 추가적인 측면 이동"] class technique_remote_service technique technique_dead_drop["<b>기술</b> – <b>T1102.001 데드 드롭 리졸버</b><br/>C2 주소가 이더리움 스마트 계약에서 해결됨"] class technique_dead_drop technique technique_websocket_bidirectional["<b>기술</b> – <b>T1102.002 WebSocket 양방향</b><br/>명령 교환을 위한 WebSocket 채널"] class technique_websocket_bidirectional technique technique_websocket_oneway["<b>기술</b> – <b>T1102.003 단방향 통신</b><br/>폴백 C2 경로"] class technique_websocket_oneway technique technique_web_protocol["<b>기술</b> – <b>T1071.001 응용 계층 프로토콜 웹 프로토콜</b><br/>HTTPS를 통한 WebSocket 트래픽"] class technique_web_protocol technique malware_chainshell["<b>멀웨어</b> – <b>이름</b>: ChainShell<br/>C2, 암호화 및 측면 이동을 처리하는 페이로드 오케스트레이터"] class malware_chainshell malware %% Connections action_phishing –>|leads_to| action_user_exec action_user_exec –>|executes| tool_powershell tool_powershell –>|loads| tool_cmstp tool_cmstp –>|uses| technique_dll_sideload tool_cmstp –>|bypasses| technique_uac_bypass technique_dll_sideload –>|enables| technique_dll_hijack technique_dll_hijack –>|supports| technique_scheduled_task technique_scheduled_task –>|creates| malware_chainshell malware_chainshell –>|contains| technique_steganography malware_chainshell –>|contains| technique_embedded_payload malware_chainshell –>|encrypts| technique_data_obfusc malware_chainshell –>|steals| technique_steal_cookie technique_steal_cookie –>|enables| technique_forge_cookie technique_forge_cookie –>|enables| technique_alt_auth technique_alt_auth –>|enables| technique_vnc technique_vnc –>|uses| technique_remote_service malware_chainshell –>|resolves C2 via| technique_dead_drop technique_dead_drop –>|communicates via| technique_websocket_bidirectional technique_websocket_bidirectional –>|fallback to| technique_websocket_oneway technique_websocket_bidirectional –>|uses protocol| technique_web_protocol "

공격 과정

시뮬레이션 실행

전제조건: Telemetry 및 기본 설정 사전 점검이 통과해야 합니다.

  • 공격 서사 및 명령:

    1. 1단계 – 단순 C2 서버 준비 (공격자 머신이나 제어된 VM에서 실행). 서버는 포트 9999에서 듣고 있으며, 수신된 데이터를 에코합니다.

    2. 2단계 – 대상 Windows 호스트에서 PowerShell 백도어 실행 C2 서버와 포트 9999에서 TCP 연결을 엽니다. 페이로드는 네이티브 .NET 클래스를 사용하여 별도의 실행 파일을 생성하지 않으며, ‘운영 환경에서 생활하기’ 접근 방식을 모방합니다.

    3. 3단계 – 선택적 프록시 홉: PowerShell 스크립트는 먼저 로컬 HTTP 프록시(127.0.0.1:8080에서 듣기)에 연락을 하고, 이는 리모트 C2 서버로 TCP 트래픽을 전달하여 대상 포트가 변경되지 않음을 보여줍니다.

    이 단계들은 방화벽 이벤트를 생성합니다. DestinationPort = 9999, Sigma 규칙을 충족합니다.

  • 회귀 테스트 스크립트:

    # -------------------------------------------------
    # CastleRAT‑스타일 C2 시뮬레이션 – PowerShell
    # -------------------------------------------------
    # 1. C2 서버 주소 정의(테스트 IP로 교체)
    $c2Ip = "10.0.0.50"
    $c2Port = 9999
    
    # 2. 선택사항: 로컬 프록시 정의(프록시 홉 테스트 원할 경우)
    $useProxy = $false
    $proxyHost = "127.0.0.1"
    $proxyPort = 8080
    
    # 3. TCP 스트림을 여는 함수(직접 또는 프록시 통해)
    function Invoke-C2Connection {
        param (
            [string]$destIp,
            [int]$destPort,
            [bool]$viaProxy
        )
        if ($viaProxy) {
            # 단순 HTTP CONNECT 터널
            $proxyUri = "http://$proxyHost`:$proxyPort"
            $client = New-Object System.Net.Sockets.TcpClient($proxyHost,$proxyPort)
            $stream = $client.GetStream()
            $connectRequest = "CONNECT $destIp`:$destPort HTTP/1.1`r`nHost: $destIp`r`n`r`n"
            $bytes = [System.Text.Encoding]::ASCII.GetBytes($connectRequest)
            $stream.Write($bytes,0,$bytes.Length)
            # 프록시 응답 무시
            $buffer = New-Object byte[] 1024
            $null = $stream.Read($buffer,0,$buffer.Length)
            Write-Host "[+] 프록시 터널 설정됨"
            return $stream
        } else {
            $client = New-Object System.Net.Sockets.TcpClient($destIp,$destPort)
            Write-Host "[+] 직접 TCP 연결 설정됨"
            return $client.GetStream()
        }
    }
    
    # 4. 연결 열기
    $stream = Invoke-C2Connection -destIp $c2Ip -destPort $c2Port -viaProxy:$useProxy
    
    # 5. 단순 비콘 전송
    $beacon = "CastleRAT Beacon $(Get-Date -Format o)`n"
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($beacon)
    $stream.Write($bytes,0,$bytes.Length)
    Write-Host "[+] 비콘 전송됨"
    
    # 6. 채널 유지하기 위한 짧은 기간 대기(영구성 시뮬레이트)
    Start-Sleep -Seconds 15
    
    # 7. 정리
    $stream.Close()
    Write-Host "[+] 연결 닫힘"
  • 정리 명령:

    # 지속적 TCP 연결을 닫습니다
    Get-NetTCPConnection -RemotePort 9999 -State Established | ForEach-Object {
        try {
            $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
            if ($proc) { Stop-Process -Id $proc.Id -Force }
        } catch {}
    }
    
    # 로컬에서 임시로 시작된 프록시 리스너가 있을 경우 제거
    Stop-Process -Name "python" -Force -ErrorAction SilentlyContinue

추가 관찰 및 보강 추천 사항

  1. 포트 기반 탐지 강화: 포트 확인을 알려진 악성 C2 IP/도메인, TLS 지문 인식 또는 비정상적인 트래픽 볼륨 휴리스틱과 결합하십시오.
  2. 합법적인 서비스 허용 목록: 데이터베이스 또는 관리 도구와 같은 포트 9999 또는 8888를 적법하게 사용하는 응용 프로그램에 대한 예외 목록을 생성하십시오.
  3. 행동 기준선: 비서버 엔드포인트에서 시작된 고위험 포트로의 저빈도 아웃바운드 연결을 플래그하기 위한 통계 모델을 배치하십시오.
  4. 프로세스 컨텍스트: 방화벽 이벤트를 발생시킨 프로세스와 상관하십시오 (이미지 파일 이름, 명령줄). 예상치 못한 프로세스에 의해 생성된 연결을 플래그로 지정하십시오 (예: powershell.exe, cmd.exe).

이러한 완화 조치를 적용하여 규칙의 탄력성을 현재의 2 에서 4-5 범위로 높여 실제 CastleRAT C2 트래픽 감지는 유지하면서도 오탐을 극적으로 줄일 수 있습니다.