SOC Prime Bias: Medium

18 Dec 2025 21:42

Phantom 3.5 – redential stealing malware delivered via a fake Adobe installer

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Phantom 3.5 – redential stealing malware delivered via a fake Adobe installer
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Summary

Phantom 3.5 is a credential-stealing malware distributed through a counterfeit Adobe installer. Once executed, the installer drops a PowerShell script that pulls down an obfuscated .NET DLL (BLACKHAWK.dll) and injects the final payload into Aspnet_compiler.exe to run under a trusted-looking process context.

Investigation

Researchers detonated the fake installer in a sandbox and captured the downloader location (positivepay-messages.com/file/floor.ps1). They decoded the Base64/RC4-protected script, identified the retrieved .NET DLL, and confirmed injection into Aspnet_compiler.exe using tools such as hollows_hunter and ProcDump. Analysis indicates the DLL includes anti-analysis measures, Heaven’s Gate techniques, and multiple exfiltration channels, including SMTP, FTP, Telegram, and Discord.

Mitigation

Restrict or block execution of unsigned PowerShell scripts, prevent untrusted DLL loading, and monitor for abnormal Aspnet_compiler.exe process creation. Apply URL filtering to deny access to the malicious domain and its paths. Ensure endpoint controls can detect process injection patterns and common credential-stealer behaviors.

Response

Trigger alerts on outbound connections to positivepay-messages.com, memory or module artifacts related to BLACKHAWK.dll, and evidence of code injection into Aspnet_compiler.exe. Quarantine the affected host, acquire memory images, and perform full forensic triage to eradicate the malicious DLL and associated payloads.

"graph TB %% Class Definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef tool fill:#cccccc classDef process fill:#c2f0c2 classDef malware fill:#f9d5e5 %% Nodes u2013 Initial Access and Execution action_user_execution["<b>Action</b> – <b>T1204.002 User Execution</b>: Victim runs a fake u201cAdobe 11.7.7 installeru201d that appears legitimate."] class action_user_execution action tech_masquerade["<b>Technique</b> – <b>T1036.008 Masquerading</b>: Installer file is renamed and masked to look like an Adobe installer."] class tech_masquerade technique tool_powershell["<b>Tool</b> – <b>Name</b>: PowerShell<br/><b>Description</b>: Used to download and execute a malicious script with window hidden and execution policy bypass."] class tool_powershell tool %% Nodes u2013 Obfuscation and Decoding tech_deobfuscate["<b>Technique</b> – <b>T1140 Deobfuscate/Decode Files</b>: Base64u2011RC4 payload is decoded and decrypted before execution."] class tech_deobfuscate technique tech_obfuscate["<b>Technique</b> – <b>T1027 Obfuscated Files</b>: Malware scripts are heavily obfuscated to evade static analysis."] class tech_obfuscate technique %% Nodes u2013 Process Injection and Reflective Loading tech_process_injection["<b>Technique</b> – <b>T1055 Process Injection</b>: BLACKHAWK.dll is injected into Aspnet_compiler.exe to run the payload."] class tech_process_injection technique process_aspnet_compiler["<b>Process</b> – <b>Name</b>: Aspnet_compiler.exe"] class process_aspnet_compiler process tech_reflective_load["<b>Technique</b> – <b>T1620 Reflective Code Loading</b>: .NET assembly is loaded in memory using System.Reflection.Assembly::Load."] class tech_reflective_load technique %% Nodes u2013 Defense Evasion tech_sandbox_evasion["<b>Technique</b> – <b>T1497.002 Virtualization Sandbox Evasion</b>: Checks usernames and environment variables to detect analysis machines."] class tech_sandbox_evasion technique %% Nodes u2013 Persistence tech_active_setup["<b>Technique</b> – <b>T1547.014 Active Setup Persistence</b>: Creates a Run registry key via Active Setup for automatic execution at logon."] class tech_active_setup technique %% Nodes u2013 Credential Access and Collection tech_keylogging["<b>Technique</b> – <b>T1056.001 Keylogging</b>: Captures keystrokes from the user."] class tech_keylogging technique tech_browser_cred["<b>Technique</b> – <b>T1555.003 Browser Credential Access</b>: Steals master keys, passwords, cookies, and wallet data from web browsers."] class tech_browser_cred technique tech_clipboard["<b>Technique</b> – <b>T1115 Clipboard Data</b>: Harvests data from the system clipboard."] class tech_clipboard technique tech_screen_capture["<b>Technique</b> – <b>T1113 Screen Capture</b>: Takes screenshots at oneu2011second intervals."] class tech_screen_capture technique tech_video_capture["<b>Technique</b> – <b>T1125 Video Capture</b>: Records video footage of the useru2019s desktop."] class tech_video_capture technique %% Nodes u2013 Exfiltration tech_smtp_ftp["<b>Technique</b> – <b>T1048 Exfiltration Over Alternative Protocol</b>: Sends stolen data via SMTP email and FTP transfers."] class tech_smtp_ftp technique tech_telegram_discord["<b>Technique</b> – <b>T1567 Exfiltration Over Web Service</b>: Transfers data through Telegram and Discord APIs."] class tech_telegram_discord technique %% Nodes u2013 Command and Control tech_web_service["<b>Technique</b> – <b>T1102.002 Web Service Bidirectional C2</b>: Uses Telegram and Discord as bidirectional communication channels for command and control."] class tech_web_service technique %% Connections u2013 Flow of Attack action_user_execution –>|leads to| tech_masquerade tech_masquerade –>|leads to| tool_powershell tool_powershell –>|executes| tech_deobfuscate tech_deobfuscate –>|supports| tech_obfuscate tech_obfuscate –>|enables| tech_process_injection tech_process_injection –>|targets| process_aspnet_compiler process_aspnet_compiler –>|loads| tech_reflective_load tech_reflective_load –>|facilitates| tech_sandbox_evasion tech_sandbox_evasion –>|allows| tech_active_setup tech_active_setup –>|enables| tech_keylogging tech_keylogging –>|collects| tech_browser_cred tech_browser_cred –>|adds to| tech_clipboard tech_clipboard –>|adds to| tech_screen_capture tech_screen_capture –>|adds to| tech_video_capture tech_video_capture –>|feeds| tech_smtp_ftp tech_video_capture –>|feeds| tech_telegram_discord tech_smtp_ftp –>|exfiltrates via| tech_web_service tech_telegram_discord –>|exfiltrates via| tech_web_service %% Styling class action_user_execution action class tech_masquerade,tech_deobfuscate,tech_obfuscate,tech_process_injection,tech_reflective_load,tech_sandbox_evasion,tech_active_setup,tech_keylogging,tech_browser_cred,tech_clipboard,tech_screen_capture,tech_video_capture,tech_smtp_ftp,tech_telegram_discord,tech_web_service technique class tool_powershell tool class process_aspnet_compiler process "

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:
    The adversary has obtained the Phantom 3.5 payload and wishes to execute it in memory to evade disk‑based defenses. They leverage Aspnet_compiler.exe, a trusted Windows binary, to load the malicious managed assembly via the Invoke-ManagedAssembly argument. This causes the compiler process to spawn, inject the payload into the current process space, and persist by creating a scheduled task that repeatedly runs the same command.

    1. Stage the malicious managed assembly (phantom_payload.dll) on the target host.

    2. Execute the injection using Aspnet_compiler.exe:

       $maliciousDll = "C:Tempphantom_payload.dll"
       $cmd = "`"$env:WINDIRMicrosoft.NETFramework64v4.0.30319Aspnet_compiler.exe`" -p `"$maliciousDll`" -c `Invoke-ManagedAssembly`"
       Start-Process -FilePath $cmd -WindowStyle Hidden
    3. Create persistence (optional) by registering a scheduled task that reruns the same command every hour.

  • Regression Test Script: The script below reproduces the above steps in a self‑contained, repeatable manner.

    <#
    .SYNOPSIS
        Simulates Phantom 3.5 process‑injection using Aspnet_compiler.exe.
    .DESCRIPTION
        Copies a dummy malicious DLL to a known location, then launches Aspnet_compiler.exe
        with the `Invoke-ManagedAssembly` flag to generate the exact process‑creation event
        that the detection rule watches for.
    #>
    
    # --- Preparation -----------------------------------------------------------
    $dllPath = "$env:TEMPphantom_payload.dll"
    # Create a tiny dummy DLL (placeholder for the real payload)
    Set-Content -Path $dllPath -Value ([byte[]](0x4D,0x5A,0x90,0x00,0x03,0x00,0x00,0x00)) -Encoding Byte
    
    # --- Execution -------------------------------------------------------------
    $aspnetPath = "$env:WINDIRMicrosoft.NETFramework64v4.0.30319Aspnet_compiler.exe"
    if (-Not (Test-Path $aspnetPath)) {
        Write-Error "Aspnet_compiler.exe not found at expected location."
        exit 1
    }
    
    $arguments = "-p `"$dllPath`" -c `Invoke-ManagedAssembly`"
    Write-Host "Launching Aspnet_compiler.exe with malicious arguments..."
    Start-Process -FilePath $aspnetPath -ArgumentList $arguments -WindowStyle Hidden -PassThru
    
    # --- Optional Persistence ----------------------------------------------------
    # Register a scheduled task that repeats the injection every hour
    $taskName = "PhantomInject"
    $action = New-ScheduledTaskAction -Execute $aspnetPath -Argument $arguments
    $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(5) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration ([TimeSpan]::MaxValue)
    Register-ScheduledTask -TaskName $taskName -Action $action -Trigger $trigger -RunLevel Highest -Force
    
    Write-Host "Simulation complete. Check the SIEM for the generated alert."
  • Cleanup Commands: Remove the dummy DLL, scheduled task, and any leftover processes.

    # Remove the dummy DLL
    Remove-Item -Path "$env:TEMPphantom_payload.dll" -Force -ErrorAction SilentlyContinue
    
    # Unregister the scheduled task
    Unregister-ScheduledTask -TaskName "PhantomInject" -Confirm:$false -ErrorAction SilentlyContinue
    
    # Kill any lingering Aspnet_compiler.exe processes started by the test
    Get-Process -Name "Aspnet_compiler" -ErrorAction SilentlyContinue | Stop-Process -Force