Back to Intelligence

Blind Eagle (APT-C-36) Evolved Toolkit: AsyncRAT, njRAT & LimeRAT via AutoIt RunPE and DuckDNS C2 — OTX Detection Pack

SA
Security Arsenal Team
August 17, 2026
10 min read

Between May and July 2026, the OTX community and LevelBlue SpiderLabs tracked Blind Eagle (APT-C-36) across multiple exposed staging servers, revealing a significant evolution of the group's malware toolkit. The campaign is squarely aimed at the Colombian financial sector, continuing the actor's long-standing Latin America banking-fraud mandate.

Four toolkit developments stand out:

  1. A third-generation string obfuscation scheme — JavaScript loaders now use a custom AES S-box substitution to defeat static detection and string-based YARA coverage.
  2. A RunPE loader built on the bare AutoIt3 interpreter, with payloads staged from GitHub — abusing a legitimate, signed automation binary to sidestep application control and inject the final RAT into a hollowed process.
  3. A reusable "Photo Studio" persistence component, giving operators a modular, campaign-independent foothold on victim machines.
  4. An expanded final-payload roster: AsyncRAT, njRAT (Bladabindi), Njw0rm, LV, and LimeRAT — configured with HVNC (hidden virtual network computing) and Chrome credential-theft modules for hands-on banking fraud.

The chain is consistent with the actor's historical tradecraft: Spanish-language phishing delivers a VBScript dropper, which launches the AutoIt-staged RunPE loader, which injects the RAT into a legitimate process. The implant then beacons to dynamic-DNS C2 (DuckDNS), harvests Chrome-stored credentials, and opens an HVNC channel so the operator can invisibly ride authenticated banking sessions.

Objective: credential theft and direct banking fraud against Colombian financial institutions and their customers.

Threat Actor & Malware Profile

Blind Eagle / APT-C-36

  • Attribution: Financially motivated, Latin America-focused group tracked since ~2018; consistently targets Colombian banks, financial services, and government-adjacent entities.
  • Distribution: Spanish-language spear-phishing (spoofed Colombian banks, tax/DIAN lures, courier notifications) delivering malicious links, .url files, or archives containing VBScript droppers.
  • Loader stage: VBScript executes a JavaScript layer using a custom AES S-box substitution for string obfuscation (the third such scheme observed), then retrieves a bare AutoIt3 interpreter plus compiled script staged on GitHub — living-off-trusted-hosts staging that blends with legitimate developer traffic.
  • Injection: The AutoIt loader performs RunPE / process hollowing, injecting the final RAT into a legitimate process to evade behavioral detection and per-process firewall rules. The final payload frequently never touches disk.

Payload Families

FamilyRoleNotes
AsyncRATPrimary RATHVNC, keylogging, credential theft, SOCKS proxying
njRAT / Bladabindi (S0385)RATLong-time Blind Eagle staple; DDNS C2, plugin-based theft
Njw0rmWorm/RATSpreads via removable media; credential theft
LVRATModular .NET stealer/RAT seen across LATAM operations
LimeRATRATHVNC, USB spread, DDNS support, ransomware module

C2, Persistence & Anti-Analysis

  • C2: Dynamic DNS (DuckDNS subdomain) fronting operator infrastructure; njRAT-family TCP beaconing on configurable ports; GitHub abused as a resilient staging tier.
  • Persistence: Reusable "Photo Studio" component plus registry Run keys and scheduled tasks invoking the script-interpreter chain.
  • Anti-analysis: Triple-evolved string obfuscation (custom AES S-box), signed-interpreter abuse (AutoIt3), in-memory injection, HVNC to hide fraud sessions from the user, and DDNS for fast C2 recovery.

IOC Analysis

The pulse carries three indicators across two types:

TypeIndicatorOperational Use
FileHash-SHA256a4fbd707f4ce7ca68e6137cef1c56b6f408e5f0a0f148434d996bb98c3a21fffEDR blocklist + retro-hunt across process and file events
FileHash-SHA256a73cb9d5d46e19f3daa4a14cfe5d8fa4319a3d62452039e4972e6a316bbb26f4EDR blocklist; check Amcache/ShimCache for historical execution
hostnamerema200426.duckdns.orgDNS sinkhole; proxy and firewall egress block; watchlist entry

Operationalization guidance:

  • Hashes go into EDR prevention policies and retro-hunts (the KQL below matches process execution against both). Because the final RAT is injected in memory, hash hits most often correspond to the dropper/loader stage — pivot on parent-child chains, not just the hash alert.
  • The DuckDNS hostname should be sinkholed at the DNS layer and flagged in proxy logs. Treat any *.duckdns.org resolution from non-IT hosts in a finance environment as a triage-worthy signal — dynamic DNS is near-zero-cost C2 infrastructure with virtually no legitimate enterprise use.
  • Tooling: pull and normalize indicators with the OTX DirectConnect SDK or otx CLI, detonate samples in ANY.RUN / Joe Sandbox / Hybrid Analysis / CAPE to extract RAT configs (njRAT and AsyncRAT config parsers exist in CAPE and MalDuck), and sync pulse indicators into SIEM watchlists automatically via TAXII.

Detection Engineering

Sigma Rules — Loader Execution, Dropper Chains & Credential Store Access

YAML
---
title: APT-C-36 RunPE Loader - Bare AutoIt3 Interpreter Execution
id: 7c1f9e2a-4b3d-4e5f-9a01-be2026a00001
status: experimental
description: Detects execution of a bare AutoIt3 interpreter with a script payload outside standard install paths, matching Blind Eagle (APT-C-36) RunPE loaders staged via GitHub during the May-July 2026 campaign
author: Security Arsenal Threat Intelligence
date: 2026/08/17
references:
    - https://www.levelblue.com/blogs/spiderlabs-blog/still-circling-blind-eagles-toolkit-keeps-evolving
logsource:
    category: process_creation
    product: windows
detection:
    selection_image:
        Image|endswith: '\AutoIt3.exe'
    selection_script:
        CommandLine|contains:
            - '.au3'
            - '.a3x'
    filter_legit_path:
        Image|startswith:
            - 'C:\Program Files\AutoIt3\'
            - 'C:\Program Files (x86)\AutoIt3\'
    condition: selection_image and selection_script and not filter_legit_path
falsepositives:
    - Legitimate AutoIt automation deployed outside standard install paths
level: high
tags:
    - attack.defense_evasion
    - attack.t1059
    - attack.t1055
    - attack.t1218
---
title: Blind Eagle VBScript Dropper Spawning Execution or Injection Tooling
id: 8d2a0f3b-5c4e-4f6a-0b12-be2026a00002
status: experimental
description: Detects wscript/cscript/mshta (the VBScript dropper stage used by APT-C-36) spawning command interpreters, script engines, or the AutoIt RunPE loader
author: Security Arsenal Threat Intelligence
date: 2026/08/17
references:
    - https://www.levelblue.com/blogs/spiderlabs-blog/still-circling-blind-eagles-toolkit-keeps-evolving
logsource:
    category: process_creation
    product: windows
detection:
    selection_parent:
        ParentImage|endswith:
            - '\wscript.exe'
            - '\cscript.exe'
            - '\mshta.exe'
    selection_child:
        Image|endswith:
            - '\powershell.exe'
            - '\pwsh.exe'
            - '\cmd.exe'
            - '\rundll32.exe'
            - '\regsvr32.exe'
            - '\AutoIt3.exe'
            - '\msbuild.exe'
    condition: selection_parent and selection_child
falsepositives:
    - Legacy logon scripts and enterprise VBScript administration tooling
level: high
tags:
    - attack.t1059.005
    - attack.t1204.002
    - attack.execution
---
title: Non-Browser Process Accessing Chrome Credential Store
id: 9e3b1a4c-6d5f-4a7b-1c23-be2026a00003
status: experimental
description: Detects non-Chrome processes opening Chrome Login Data, Local State, or Cookies files, consistent with the Chrome credential theft module in Blind Eagle (APT-C-36) njRAT/AsyncRAT payloads
author: Security Arsenal Threat Intelligence
date: 2026/08/17
references:
    - https://www.levelblue.com/blogs/spiderlabs-blog/still-circling-blind-eagles-toolkit-keeps-evolving
logsource:
    category: file_event
    product: windows
detection:
    selection:
        TargetFilename|contains: '\Google\Chrome\User Data\'
        TargetFilename|endswith:
            - '\Login Data'
            - '\Local State'
            - '\Cookies'
    filter_browser:
        Image|endswith: '\chrome.exe'
    condition: selection and not filter_browser
falsepositives:
    - EDR/AV scanners, backup agents, browser extension hosts. Baseline and exclude known security tooling by hash and signer.
level: high
tags:
    - attack.credential_access
    - attack.t1555.003
    - attack.t1539

Microsoft Sentinel KQL — DuckDNS C2, Dropper Chains & Payload Hashes

KQL — Microsoft Sentinel / Defender
// Blind Eagle (APT-C-36) hunt: DuckDNS C2, VBScript/AutoIt execution chain, known payload hashes
let Lookback = 14d;
let C2Hosts = dynamic(["rema200426.duckdns.org"]);
let PayloadHashes = dynamic(["a4fbd707f4ce7ca68e6137cef1c56b6f408e5f0a0f148434d996bb98c3a21fff", "a73cb9d5d46e19f3daa4a14cfe5d8fa4319a3d62452039e4972e6a316bbb26f4"]);
let NetworkSignals = DeviceNetworkEvents
    | where TimeGenerated > ago(Lookback)
    | where RemoteUrl has_any (C2Hosts) or RemoteUrl endswith ".duckdns.org"
    | project TimeGenerated, DeviceName, SignalType = "DuckDNS_C2",
        Details = strcat(InitiatingProcessFileName, " -> ", RemoteUrl, " (", RemoteIP, ":", RemotePort, ")");
let ExecutionSignals = DeviceProcessEvents
    | where TimeGenerated > ago(Lookback)
    | where (FileName =~ "AutoIt3.exe" and ProcessCommandLine has_any (".au3", ".a3x"))
        or (InitiatingProcessFileName in~ ("wscript.exe", "cscript.exe", "mshta.exe")
            and FileName in~ ("powershell.exe", "cmd.exe", "rundll32.exe", "regsvr32.exe", "AutoIt3.exe"))
    | project TimeGenerated, DeviceName, SignalType = "Dropper_Execution",
        Details = strcat(InitiatingProcessFileName, " -> ", FileName, " | ", ProcessCommandLine);
let HashSignals = DeviceProcessEvents
    | where TimeGenerated > ago(Lookback)
    | where SHA256 in~ (PayloadHashes)
    | project TimeGenerated, DeviceName, SignalType = "Known_Payload_Hash",
        Details = strcat(FileName, " SHA256=", SHA256, " | parent=", InitiatingProcessFileName);
union NetworkSignals, ExecutionSignals, HashSignals
| summarize FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), Signals = make_set(SignalType), Evidence = make_list(Details) by DeviceName
| order by LastSeen desc;

PowerShell — Host-Level IOC & Artifact Hunt

PowerShell
#requires -RunAsAdministrator
<#
.SYNOPSIS
    Blind Eagle (APT-C-36) host hunt: VBScript droppers, bare AutoIt3 RunPE loader,
    DuckDNS C2 sessions, persistence artifacts, Chrome credential-theft traces.
#>
$ErrorActionPreference = 'SilentlyContinue'
$Findings = New-Object System.Collections.Generic.List[object]

function Add-Finding($Type, $Detail) {
    $script:Findings.Add([pscustomobject]@{ Host = $env:COMPUTERNAME; FindingType = $Type; Detail = $Detail })
    Write-Host "[HIT] $Type :: $Detail" -ForegroundColor Red
}

Write-Host "[*] APT-C-36 hunt on $env:COMPUTERNAME - $(Get-Date)" -ForegroundColor Cyan

# --- 1. DuckDNS C2: resolution, DNS cache, live sessions ---
$C2 = 'rema200426.duckdns.org'
$dns = Resolve-DnsName -Name $C2
if ($dns) { Add-Finding 'C2-Resolution' ($dns | Out-String).Trim() }
Get-DnsClientCache | Where-Object Entry -like '*duckdns.org*' | ForEach-Object {
    Add-Finding 'DNS-Cache' ($_.Entry + ' -> ' + $_.Data)
}
$ips = @($dns | Where-Object IPAddress | Select-Object -ExpandProperty IPAddress)
Get-NetTCPConnection -State Established | Where-Object { $ips -contains $_.RemoteAddress } | ForEach-Object {
    $p = Get-Process -Id $_.OwningProcess
    Add-Finding 'C2-Session' ($p.ProcessName + ' (PID ' + $p.Id + ') -> ' + $_.RemoteAddress + ':' + $_.RemotePort)
}

# --- 2. Persistence: Run/RunOnce keys invoking scripts or AutoIt ---
$keys = @(
    'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
    'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
    'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce',
    'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce',
    'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run'
)
foreach ($k in $keys) {
    $props = Get-ItemProperty -Path $k
    if ($props) {
        $props.PSObject.Properties | Where-Object { $_.Value -match 'wscript|cscript|mshta|\.vbs|\.js|AutoIt3|\.au3|duckdns|AppData|Temp' } | ForEach-Object {
            Add-Finding 'Persistence-Registry' ($k + ' :: ' + $_.Name + ' = ' + $_.Value)
        }
    }
}

# --- 3. Scheduled tasks invoking script interpreters (Photo Studio-style persistence) ---
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'wscript|cscript|mshta|AutoIt3|powershell' -and $_.State -ne 'Disabled' } | ForEach-Object {
    Add-Finding 'Persistence-Task' ($_.TaskName + ' -> ' + $_.Actions.Execute + ' ' + $_.Actions.Arguments)
}

# --- 4. Staged scripts / bare AutoIt3 interpreter in common drop locations ---
$staging = @($env:TEMP, $env:APPDATA, $env:LOCALAPPDATA, 'C:\ProgramData', "$env:USERPROFILE\Downloads", 'C:\Users\Public')
Get-ChildItem -Path $staging -Recurse -Depth 3 -Include '*.au3','*.a3x','AutoIt3*.exe','*.vbs','*.vbe','*.js','*.jse' |
    Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-120) } | ForEach-Object {
        Add-Finding 'Staged-File' ($_.FullName + ' [' + $_.LastWriteTime + ']')
    }

# --- 5. Known payload hashes on disk ---
$hashes = @(
    'a4fbd707f4ce7ca68e6137cef1c56b6f408e5f0a0f148434d996bb98c3a21fff',
    'a73cb9d5d46e19f3daa4a14cfe5d8fa4319a3d62452039e4972e6a316bbb26f4'
)
Get-ChildItem -Path $staging -Recurse -Depth 3 -Include '*.exe','*.dll' | ForEach-Object {
    $h = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower()
    if ($hashes -contains $h) { Add-Finding 'Known-Payload' ($_.FullName + ' SHA256=' + $h) }
}

# --- 6. Chrome credential store copies outside the user profile (theft staging) ---
Get-ChildItem -Path $staging -Recurse -Depth 4 -Include 'Login Data','Local State' | ForEach-Object {
    Add-Finding 'Credential-Theft-Artifact' $_.FullName
}

Write-Host "`n[*] Hunt complete. Findings: $($Findings.Count)" -ForegroundColor Cyan
$Findings | Format-Table -AutoSize
$Findings | Export-Csv -Path "$env:TEMP\APT-C-36_hunt_$env:COMPUTERNAME.csv" -NoTypeInformation

Response Priorities

Immediate (0–4 hours)

  • Block rema200426.duckdns.org at DNS (sinkhole), proxy, and firewall egress; push both SHA256 hashes into EDR prevention policies.
  • Run the KQL and PowerShell hunts fleet-wide. Isolate any host showing a DuckDNS C2 session or a wscript → AutoIt3 execution chain. Capture memory before remediation — the final RAT runs injected and leaves minimal disk artifacts.
  • Pull email-gateway logs for the last 90 days: .vbs, .js, .url, and archive attachments carrying Spanish-language financial lures (banks, DIAN/tax, couriers).

Within 24 Hours

  • This is credential-theft malware: force password resets for every credential stored in Chrome on affected hosts, revoke active sessions and OAuth tokens, and reset MFA where session cookies may have been replayed via HVNC.
  • Review banking and ERP transaction logs for anomalous wires, ACH transfers, and new beneficiaries — HVNC fraud occurs inside authenticated sessions while the endpoint appears idle.
  • Sweep isolated hosts for the "Photo Studio" persistence component, Run-key entries, and scheduled tasks before re-imaging; check removable media for Njw0rm propagation.

Within 1 Week

  • Deploy WDAC/AppLocker policy blocking AutoIt3.exe outside approved installation paths, and block or restrict wscript.exe, cscript.exe, and mshta.exe for standard users (or re-associate .vbs files with Notepad).
  • Enable ASR rules: block execution of potentially obfuscated scripts, block process creations originating from script interpreters, and block credential theft from LSASS. Disable Chrome password storage via GPO and migrate users to an enterprise password vault.
  • DNS policy: sinkhole or alert on dynamic-DNS categories (DuckDNS, No-IP, DynDNS) across the estate, and alert on non-developer hosts fetching executables or scripts from raw.githubusercontent.com — this campaign stages its RunPE loader on GitHub.

Related Resources

Security Arsenal Incident Response

Managed SOC & MDR Services

AlertMonitor Threat Detection

From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.