SOC Prime Bias: 높음

12 Jun 2026 06:33 UTC

호텔 산업을 겨냥한 의심스러운 이메일의 기술적 분석

Author Photo
SOC Prime Team linkedin icon 팔로우
호텔 산업을 겨냥한 의심스러운 이메일의 기술적 분석
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

요약

복잡한 다단계 악성코드 캠페인이 Booking.com 알림으로 가장한 이메일을 통해 호텔 섹터를 노리고 있습니다. 침투 체인은 악성 LNK 파일, PowerShell 스크립트, 그리고 TonRAT로 알려진 Node.js 기반 원격 접근 트로이목마를 결합합니다. 이번 작전에서 가장 주목할만한 점은 The Open Network (TON) API를 사용하여 명령 및 제어 도메인을 동적으로 획득하는 것인데, 이는 전통적인 도메인 기반 차단을 덜 신뢰하게 만듭니다.

조사

조사 결과, 초기 ZIP 아카이브가 LNK 파일을 포함하며, 이 파일이 PowerShell을 실행하여 2차 스크립트를 가져오는 계층화된 실행 흐름이 밝혀졌습니다. 해당 스크립트는 AES를 사용하여 TonRAT로 식별된 JavaScript 페이로드를 복호화하고, 에서 다운로드한 정식 Node.js 런타임을 통해 실행합니다. nodejs.org. 활성화되면 악성코드는 WebSocket 기반 명령 및 제어 통신을 시작하며, 이는 TON 블록체인 API 요청에서 가져온 도메인 정보를 사용합니다.

완화

권장 방어책에는 PowerShell 실행 제한, Node.js 런타임 (node.exe)의 무단 사용 모니터링, 비정상적인 WebSocket 트래픽 탐지가 포함됩니다. 조직은 또한, tonapi.io에 대한 연결을 주의 깊게 관찰하고, 호텔 직원에게 향한 위조 도메인, 의심스러운 첨부 파일 및 피싱 미끼를 포착하기 위해 이메일 필터링을 강화해야 합니다.

대응

침해가 의심될 경우, 보안 팀은 추가적인 명령 및 제어 트래픽과 데이터 유출을 방지하기 위해 즉시 영향을 받은 엔드포인트를 격리해야 합니다. PowerShell 운영 로그 및 프로세스 실행 기록을 검토하여 무단 node.exe 활동을 확인해야 합니다. 또한, TonRAT의 JavaScript 해시가 알려진 경우에 대비하여 포렌식 검사를 수행하고 식별된 명령 및 제어 인프라에 대한 모든 연결을 조사해야 합니다.

"graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef process fill:#ccffcc %% Node Definitions action_phishing["<b>Action</b> – <b id='T1566.002'>T1566.002 Phishing: Spearphishing Link</b><br/>Description: Attackers send emails impersonating Booking.com<br/>containing links to download a malicious ZIP file."] class action_phishing action action_execution["<b id='T1204.002'>T1204.002 User Execution: Malicious File</b><br/>Description: User executes a .lnk file contained within the ZIP archive."] class action_execution action process_cmd["<b id='T1059.003'>T1059.003 Command and Scripting Interpreter: Windows Command Shell</b><br/>Description: Triggered via PowerShell command using Invoke-WebRequest<br/>to download a secondary script."] class process_cmd process malware_script["<b id='T1027'>T1027 Obfuscated Files or Information</b><br/>Description: PowerShell script LE3f0MRT.ps1 uses AES encryption<br/>to decrypt a JavaScript file (TonRAT)."] class malware_script malware action_transfer["<b id='T1105'>T1105 Ingress Tool Transfer</b><br/>Description: Malware downloads a legitimate Node.js runtime<br/>from nodejs.org to execute the payload."] class action_transfer action action_indirect["<b id='T1202'>T1202 Indirect Command Execution</b><br/>Description: Used to maintain persistence and evade detection."] class action_indirect action action_resolution["<b id='T1568'>T1568 Dynamic Resolution</b><br/>Description: Queries the TON API (tonapi.io) to retrieve<br/>the Command and Control C2 domain."] class action_resolution action malware_tonrat["<b id='T1568'>T1568 Command and Control</b><br/>Description: TonRAT establishes communication via WebSocket<br/>using an ECDH handshake for encrypted C2."] class malware_tonrat malware %% Connections action_phishing –>|leads_to| action_execution action_execution –>|triggers| process_cmd process_cmd –>|downloads| malware_script malware_script –>|performs| action_transfer action_transfer –>|enables| action_indirect action_indirect –>|performs| action_resolution action_resolution –>|resolves_C2_for| malware_tonrat malware_tonrat –>|allows| action_indirect "

공격 흐름

시뮬레이션 실행

필수 사항: 텔레메트리 및 기준 프리플라이트 검사에 통과해야 합니다.

논리: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적의 기술적 방법(TTP)의 정확한 실행을 자세히 설명합니다. 명령과 이야기는 식별된 TTP와 직접 반영되어야 하며 탐지 논리에 의해 기대되는 정확한 텔레메트리를 생성하는 것을 목표로 합니다. 추상적이거나 관련 없는 예제는 오진으로 이어질 것입니다.

  • 공격 서사 및 명령: 적은 WebSocket 기반의 Command and Control (C2) 채널을 설정하고자 합니다. 정당한 트래픽과 섞이기 위해 악성코드는 먼저 C2 인프라를 해석하기 위해 tonapi.io 서비스와 쿼리를 수행합니다. “정당한” API 상호작용이 확립되면, 악성코드는 WebSocket 핸드셰이크 (wss://)를 하드코딩된 악성 도메인 zloapobikahy23.bond로 시작합니다. 이 시퀀스는 TON API의 평판을 활용하여 이후의 악성 연결을 숨기기 위해 설계되었습니다.

  • 회귀 테스트 스크립트:

    # TonRAT WebSocket C2 통신 시뮬레이션
    # 1단계: TON API와의 상호작용 시뮬레이션
    Write-Host "[+] tonapi.io와의 상호작용 시뮬레이션 중..."
    $api_url = "https://tonapi.io/v2/blockchain/accounts/EQ..."
    Invoke-WebRequest -Uri $api_url -Method Get -UseBasicParsing
    
    # 2단계: 악성 C2 도메인으로의 WebSocket 연결 시뮬레이션
    # 참고: 'wss://' 및 도메인 논리를 트리거하기 위해 PowerShell 클라이언트를 사용하여 WSS 요청을 시작
    Write-Host "[+] 악성 도메인으로의 WebSocket 연결 시뮬레이션 중..."
    $c2_url = "wss://zloapobikahy23.bond/control"
    
    # .NET WebSockets 클라이언트를 사용하여 'wss://'가 텔레메트리에 나타나도록 보장
    $ws = New-Object System.Net.WebSockets.ClientWebSocket
    $cts = New-Object System.Threading.CancellationTokenSource
    $uri = New-Object System.Uri($c2_url)
    
    try {
        $task = $ws.ConnectAsync($uri, $cts.Token)
        # 성공적인 연결이 필요하지 않으며, 로그 생성을 위한 시도만 필요
        $task.Wait(5000) 
    } catch {
        Write-Host "[!] 도메인이 존재하지 않기 때문에 예상대로 연결 실패, 그러나 텔레메트리는 생성되어야 합니다."
    } finally {
        $ws.Dispose()
    }
  • 정리 명령:

    # 이 스크립트에 의해 생성된 지속적 아티팩트는 없지만, 콘솔을 정리합니다.
    Clear-Host
    Write-Host "시뮬레이션 정리 완료."