Security teams spend years refining infrastructure takedown playbooks — sinkhole the domain, seize the VPS, revoke the certificate. A new loader tracked by AlienVault OTX as Aeternum renders those playbooks obsolete. Instead of phoning home to a server that can be seized, Aeternum reads its instructions from the Polygon blockchain — a decentralized, immutable public ledger that no court order, registrar, or law enforcement agency can erase.
This briefing analyzes the OTX pulse "The Permanent Threat: Analyzing Blockchain-Based C2 Operations and Communications" (AlienVault, TLP:WHITE, modified 2026-09-10), which attributes the operation to threat actor LenAI and ties Aeternum to downstream deployment of XWorm, ZingoStealer, and XMRig.
Threat Summary
Aeternum is a C++ botnet loader that replaces traditional C2 infrastructure with smart contracts on the Polygon blockchain. Infected hosts query public RPC (Remote Procedure Call) endpoints — legitimate blockchain gateways operated by reputable infrastructure providers — and read instructions that operators have written directly into contract storage. Because blockchain data is replicated across thousands of nodes and cannot be modified or deleted, the C2 channel is effectively permanent and takedown-proof.
The attack chain is a classic multi-stage loader operation:
- Initial delivery of the Aeternum loader (C++ native binary) via untracked distribution vectors, with staging support from lookalike CDN domains such as
cdnjsdelivr.beer(typosquatting the legitimate jsDelivr CDN). - C2 resolution: the loader queries Polygon RPC endpoints (e.g.,
endpoints.omniatech.io,polygon-zkevm.drpc.org,api.zan.top,polygon-mumbai.gateway.tenderly.co) and parses encrypted/plaintext operator commands from smart contract data. - Payload decryption and staging: commands point to payloads protected by PBKDF2HMAC/AES-GCM — but implemented weakly, with self-salting passwords that allow static decryption of recovered samples.
- Monetization: deployment of XWorm (remote access trojan), ZingoStealer (credential/crypto-wallet stealer), and XMRig (Monero miner) — a triple-revenue model combining espionage access, credential theft, and cryptojacking.
A dynamic DNS node, sekirolegion.duckdns.org, supplements the blockchain channel, suggesting fallback or secondary staging infrastructure.
Objective: resilient, monetizable botnet access at scale. The use of blockchain C2 signals an operator — LenAI — that anticipates and intends to survive infrastructure takedown operations.
Threat Actor / Malware Profile
LenAI (Threat Actor)
The OTX pulse attributes this campaign to LenAI. Targeting is opportunistic rather than sector-specific (no industries or countries are tagged), consistent with a botnet-for-profit operation monetizing infections through mining, stolen credentials, and resold access.
Aeternum (Loader / Botnet)
- Language: C++ native binary — no managed-runtime artifacts, complicating static analysis and sandbox detonation.
- C2 communication: reads operator commands from Polygon smart contracts via public HTTPS RPC endpoints. All C2 traffic blends into legitimate blockchain API traffic over TLS 443 — no suspicious ports, no custom protocols, no beaconing to attacker-owned IPs.
- Cryptography: PBKDF2HMAC key derivation with AES-GCM encryption for payloads. The implementation is flawed — self-salting passwords mean the decryption material travels with the ciphertext, enabling analysts (and defenders) to decrypt recovered payloads.
- Payloads: arbitrary second-stage binaries; observed families below.
XWorm (RAT)
A commodity remote access trojan providing full host control: keylogging, screen capture, file exfiltration, and secondary payload execution. Its presence indicates LenAI monetizes persistent access, not just drive-by theft.
ZingoStealer (Infostealer)
Harvests browser credentials, session cookies, autofill data, and — critically for this campaign's crypto theme — cryptocurrency wallet data. Exfiltrated credentials and wallet keys feed both direct theft and dark web credential marketplaces. Any confirmed ZingoStealer execution triggers mandatory credential reset procedures.
XMRig (Cryptominer)
The open-source Monero miner, deployed for direct resource theft. Watch for sustained CPU saturation and outbound Stratum mining protocol traffic.
Persistence & Anti-Analysis
- Persistence typically via registry Run keys and/or scheduled tasks established by the loader or XWorm stage (hunt script below covers the common artifacts).
- Blockchain C2 is itself an anti-analysis technique: sandbox environments that block blockchain RPC egress will see a dormant, non-malicious binary.
- Lookalike CDN staging (
cdnjsdelivr.beer) evades reputation-based URL filtering.
IOC Analysis
The pulse contains 39 indicators across two primary types:
| Type | Examples | Operationalization |
|---|---|---|
| Hostnames/Domains | endpoints.omniatech.io, polygon-zkevm.drpc.org, api.zan.top, polygon-mumbai.gateway.tenderly.co | Do NOT blanket-block — these are legitimate public RPC providers. Instead, alert on workstation egress to RPC endpoints combined with non-browser process attribution. |
| Hostnames/Domains (malicious) | cdnjsdelivr.beer, sekirolegion.duckdns.org | Block immediately at DNS/proxy. These are pure attacker staging infrastructure. |
| FileHash-SHA256 | 5bfb25b8255b..., 1505eda3da68... (+31 more) | Load into EDR blocklists, match against proxy/ZIP carve logs, sweep all endpoints for hash presence. |
SOC tooling guidance:
- Ingest hashes into your EDR's custom indicator list (Defender: Settings → Indicators → File hashes; CrowdStrike: Custom IOCs) with Block action.
- For RPC hostnames, build detection logic, not blocks: a developer machine hitting
api.zan.topfrom Node.js is normal; a receptionist's workstation hitting it from an unsignedupdate.exein%TEMP%is not. Process attribution is the differentiator. - Query OTX for the full 39-indicator set and auto-sync into your SIEM via the OTX DirectConnect API or TAXII feed.
Detection Engineering
---
title: Aeternum Blockchain C2 - Non-Browser Process Querying Polygon RPC Endpoints
id: 8f3a2c1e-4b7d-4e9a-a1c5-6d2f8b3e9a01
status: experimental
description: Detects non-browser, non-developer processes establishing HTTPS connections to public Polygon blockchain RPC endpoints known to be abused by the Aeternum loader for smart-contract-based C2. Legitimate blockchain traffic originates from browsers, wallets, or developer tooling — not unsigned binaries in user-writable paths.
author: Security Arsenal Threat Intelligence
date: 2026/09/10
references:
- https://unit42.paloaltonetworks.com/aeternum-blockchain-c2-analysis/
logsource:
category: network_connection
product: windows
detection:
selection_rpc:
DestinationHostname|contains:
- 'endpoints.omniatech.io'
- 'polygon-zkevm.drpc.org'
- 'api.zan.top'
- 'polygon-mumbai.gateway.tenderly.co'
- 'polygon-rpc.com'
- 'rpc-mainnet.matic'
selection_suspicious_path:
Image|contains:
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
- '\ProgramData\'
- '\Users\Public\'
- '\Downloads\'
filter_known_good:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
- '\brave.exe'
- '\node.exe'
- '\MetaMask.exe'
condition: selection_rpc and selection_suspicious_path and not filter_known_good
falsepositives:
- Crypto trading or Web3 development workstations running unsigned tooling from user directories
level: high
tags:
- attack.command_and_control
- attack.t1102
- attack.t1102.003
---
title: Aeternum Staging via Lookalike CDN and Dynamic DNS Infrastructure
id: 2c7e1a94-9d3f-4b6c-8e2a-5f1d7c4b6a92
status: experimental
description: Detects DNS resolution or connection attempts to confirmed Aeternum/LenAI staging domains including the jsDelivr typosquat cdnjsdelivr.beer and the dynamic DNS fallback node sekirolegion.duckdns.org.
author: Security Arsenal Threat Intelligence
date: 2026/09/10
logsource:
category: dns
product: windows
detection:
selection:
query|contains:
- 'cdnjsdelivr.beer'
- 'sekirolegion.duckdns.org'
condition: selection
falsepositives:
- None expected; both domains are attacker-controlled staging infrastructure
level: critical
tags:
- attack.command_and_control
- attack.t1071.001
- attack.t1568
---
title: XMRig Cryptominer Deployment via Aeternum Loader Chain
id: 5b9d3f21-7a4e-4c8b-b3d1-9e6f2a8c5d74
status: experimental
description: Detects execution of XMRig or renamed Monero mining binaries based on command-line arguments (Stratum pool configuration) frequently deployed as the final stage of Aeternum loader infections alongside XWorm and ZingoStealer.
author: Security Arsenal Threat Intelligence
date: 2026/09/10
logsource:
category: process_creation
product: windows
detection:
selection_cli:
CommandLine|contains:
- 'stratum+tcp://'
- '--coin=monero'
- '--donate-level'
- 'xmr.pool'
- 'pool.minexmr'
- '--randomx'
selection_img:
Image|endswith:
- '\xmrig.exe'
filter_legit:
Image|startswith:
- 'C:\Program Files\'
condition: (selection_cli or selection_img) and not filter_legit
falsepositives:
- Sanctioned mining in research environments (rare in enterprise fleets)
level: high
tags:
- attack.impact
- attack.t1496
// Security Arsenal Hunt: Aeternum Blockchain C2 + LenAI Infrastructure
// Scope: Process-attributed network connections to Polygon RPC endpoints and confirmed staging domains
// Platform: Microsoft Sentinel / Defender for Endpoint | Lookback: 14 days
let RPCEndpoints = dynamic(["endpoints.omniatech.io","polygon-zkevm.drpc.org","api.zan.top","polygon-mumbai.gateway.tenderly.co","polygon-rpc.com"]);
let MaliciousInfra = dynamic(["cdnjsdelivr.beer","sekirolegion.duckdns.org"]);
let AeternumHashes = dynamic(["5bfb25b8255b61e5ffdf6804451534bcfa9f1dfd225e6c8cdcefb5f50d846898","1505eda3da68e2ff9919b55a31018bd30a991236f041aee835f3bc4e430ce505"]);
union
(DeviceNetworkEvents
| where Timestamp > ago(14d)
| where RemoteUrl has_any (RPCEndpoints)
| where not (InitiatingProcessFileName has_any ("chrome.exe","msedge.exe","firefox.exe","brave.exe","node.exe"))
| where InitiatingProcessFolderPath has_any ("\\Temp\\","\\Roaming\\","\\Public\\","\\Downloads\\","ProgramData")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessFolderPath, InitiatingProcessSHA256, RemoteUrl, RemoteIP, InitiatingProcessCommandLine
| extend HitType = "Suspicious RPC Egress"),
(DeviceNetworkEvents
| where Timestamp > ago(14d)
| where RemoteUrl has_any (MaliciousInfra)
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessFolderPath, InitiatingProcessSHA256, RemoteUrl, RemoteIP, InitiatingProcessCommandLine
| extend HitType = "Confirmed Malicious Infrastructure"),
(DeviceProcessEvents
| where Timestamp > ago(14d)
| where SHA256 has_any (AeternumHashes)
| project Timestamp, DeviceName, FileName, FolderPath, SHA256, ProcessCommandLine, InitiatingProcessFileName
| extend HitType = "Known Aeternum Hash Execution"),
(DeviceProcessEvents
| where Timestamp > ago(14d)
| where ProcessCommandLine has_any ("stratum+tcp://","--coin=monero","--donate-level")
| project Timestamp, DeviceName, FileName, FolderPath, SHA256, ProcessCommandLine, InitiatingProcessFileName
| extend HitType = "XMRig Mining Activity")
| sort by Timestamp desc
# Security Arsenal - Aeternum / XWorm / ZingoStealer / XMRig IOC Hunt Script
# Run elevated on suspected hosts or deploy fleet-wide via RMM/Intune
# Checks: known hashes, persistence artifacts, mining processes, C2 connections
$AeternumHashes = @(
"5bfb25b8255b61e5ffdf6804451534bcfa9f1dfd225e6c8cdcefb5f50d846898",
"1505eda3da68e2ff9919b55a31018bd30a991236f041aee835f3bc4e430ce505"
)
$MaliciousHosts = @("cdnjsdelivr.beer","sekirolegion.duckdns.org")
$RPCEndpoints = @("endpoints.omniatech.io","polygon-zkevm.drpc.org","api.zan.top","polygon-mumbai.gateway.tenderly.co")
$Findings = @()
Write-Host "[1/5] Scanning user-writable paths for known Aeternum hashes..." -ForegroundColor Cyan
$ScanPaths = @("$env:TEMP","$env:APPDATA","$env:LOCALAPPDATA","C:\ProgramData","C:\Users\Public","$env:USERPROFILE\Downloads")
foreach ($Path in $ScanPaths) {
if (Test-Path $Path) {
Get-ChildItem -Path $Path -Recurse -Include *.exe,*.dll -ErrorAction SilentlyContinue | ForEach-Object {
$Hash = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
if ($AeternumHashes -contains $Hash) {
$Findings += [PSCustomObject]@{Type="HASH MATCH"; Detail="$($_.FullName) [$Hash]"; Severity="CRITICAL"}
}
}
}
}
Write-Host "[2/5] Checking Run keys and persistence locations..." -ForegroundColor Cyan
$RunKeys = @(
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Run",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce",
"HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce"
)
foreach ($Key in $RunKeys) {
if (Test-Path $Key) {
Get-ItemProperty $Key | Get-Member -MemberType NoteProperty | ForEach-Object {
$Val = (Get-ItemProperty $Key).($_.Name)
if ($Val -match "Temp|AppData|Public|ProgramData" -and $Val -notmatch "OneDrive|Teams|Spotify|Zoom|Adobe") {
$Findings += [PSCustomObject]@{Type="PERSISTENCE"; Detail="$Key\$($_.Name) = $Val"; Severity="HIGH"}
}
}
}
}
Write-Host "[3/5] Checking scheduled tasks for suspicious user-context tasks..." -ForegroundColor Cyan
Get-ScheduledTask | Where-Object {$_.TaskPath -notlike "\Microsoft*"} | ForEach-Object {
$Action = ($_.Actions | Select-Object -First 1).Execute
if ($Action -match "Temp|AppData|Public" -and $Action -match "\.(exe|bat|ps1|vbs)$") {
$Findings += [PSCustomObject]@{Type="SCHEDTASK"; Detail="$($_.TaskName) -> $Action"; Severity="HIGH"}
}
}
Write-Host "[4/5] Checking active connections and DNS cache for C2 indicators..." -ForegroundColor Cyan
$Connections = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue
foreach ($Conn in $Connections) {
$Proc = Get-Process -Id $Conn.OwningProcess -ErrorAction SilentlyContinue
if ($Proc -and $Proc.Path -match "Temp|AppData|Public") {
$Findings += [PSCustomObject]@{Type="SUSP CONN"; Detail="$($Proc.Name) [$($Proc.Path)] -> $($Conn.RemoteAddress):$($Conn.RemotePort)"; Severity="MEDIUM"}
}
}
$DnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue
foreach ($Entry in $DnsCache) {
foreach ($Bad in ($MaliciousHosts + $RPCEndpoints)) {
if ($Entry.Entry -like "*$Bad*") {
$Sev = if ($MaliciousHosts -contains $Bad) {"CRITICAL"} else {"MEDIUM"}
$Findings += [PSCustomObject]@{Type="DNS CACHE"; Detail="$($Entry.Entry) -> $($Entry.Data)"; Severity=$Sev}
}
}
}
Write-Host "[5/5] Checking for mining processes and ZingoStealer staging directories..." -ForegroundColor Cyan
Get-Process -ErrorAction SilentlyContinue | Where-Object {$_.Name -match "xmrig|miner|monero"} | ForEach-Object {
$Findings += [PSCustomObject]@{Type="MINER"; Detail="$($_.Name) [$($_.Path)]"; Severity="CRITICAL"}
}
if ($Findings.Count -gt 0) {
Write-Host "`n=== FINDINGS: $($Findings.Count) indicator(s) detected ===" -ForegroundColor Red
$Findings | Sort-Object Severity | Format-Table -AutoSize | Out-String | Write-Host
$Findings | Export-Csv -Path ".\aeternum_hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" -NoTypeInformation
} else {
Write-Host "`n[+] No Aeternum campaign indicators detected on this host." -ForegroundColor Green
}
Response Priorities
Immediate (0–4 hours)
- Block
cdnjsdelivr.beerandsekirolegion.duckdns.orgat DNS, proxy, and EDR network layers. These are confirmed attacker staging nodes with no legitimate use. - Load all 39 pulse indicators into EDR custom IOC lists with block action; pull the complete hash set from the OTX pulse rather than relying on the samples above.
- Deploy the RPC egress Sigma rule — do not block Polygon RPC endpoints outright (legitimate Web3 traffic exists), but alert on any non-browser process in user-writable paths communicating with them.
- Run the hunt script on any host that has resolved the staging domains or shows RPC egress from suspicious binaries.
24 Hours
- ZingoStealer is a credential stealer. On any host with confirmed execution: force password resets for all accounts used on that machine, revoke active session tokens (especially browser sessions, OAuth grants, and enterprise SSO refresh tokens), and rotate any credentials stored in browser vaults on the host.
- Cryptocurrency wallet exposure: if the user held software wallets (MetaMask, Exodus, etc.) on the infected host, assume private keys are compromised and move funds to new wallets generated on a clean device.
- Review XWorm RAT exposure: check for unauthorized logins, lateral movement, and data staging from affected hosts over the infection window.
- Search email gateways and web logs for the initial loader delivery vector to close the entry point.
1 Week
- Architectural hardening: implement application control (WDAC/AppLocker) blocking unsigned executables in
%TEMP%,%APPDATA%, andC:\Users\Public— this breaks the Aeternum staging model regardless of C2 channel. - Egress intelligence: baseline which hosts have a legitimate business need for blockchain RPC traffic (dev teams, treasury) and deny RPC endpoints for all other VLANs. Blockchain C2 only works if the whole fleet can reach the chain.
- Add the detection rules above to continuous validation; LenAI will rotate hashes and staging domains but the behavior — non-browser RPC egress from user-writable paths — is far harder to change.
- Brief threat hunters on blockchain-C2 tradecraft: this is the second-generation evolution after dead-drop resolvers (pastebin, GitHub, Telegram). Expect copycats.
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.