← All hunts high TLP:CLEAR Part 1 of 2

Aeternum Loader Persistence and Execution

The Aeternum loader has established persistence by creating a uniquely named LNK file in the user Startup directory and is executing auxiliary binaries from the local AppData profile.

Based on research by Unit 42 2026-09-20 12 steps · 4 queries T1106 T1204.002 T1547.001

Brief

Why Now

Unit 42 recently detailed a persistent threat in their report, The Permanent Threat: Analyzing Aeternum’s Blockchain-Based C2 Operations and Communications. This adversary uses the Polygon blockchain for command and control, making network-based detection difficult. Because the network traffic often resembles legitimate blockchain RPC calls, hunting for the botnet's host-side persistence and execution patterns provides a more reliable path to discovery.

How the Hunt Flows

The first phase identifies Windows endpoints where the Aeternum PE loader can execute. The hunt begins with a cheap lead query that searches for specific shortcut file patterns, such as wmi_framework_apikey_wmsnet_%.lnk, within user Startup folders. This initial check acts as a high-confidence trigger for the rest of the investigation.

If the lead query returns results, the hunt enters a triage phase. An analyst or automated agent evaluates the file activity to confirm the shortcut matches the known Aeternum pattern. This gating step ensures that more resource-intensive queries only run when evidence of persistence exists.

Once a lead is confirmed, the hunt expands into two parallel paths. The first path searches for known auxiliary binaries used by the loader, including wmiframework.exe and zrvesjqzwq.exe. The second path performs a frequency analysis of all executables running from user-writable paths like AppData\Local and Users\Public. By stacking these binaries across the fleet, the hunt identifies the primary loader even if the adversary has renamed the original Build.exe file.

In the final phase, the hunt correlates the persistence shortcut with the execution evidence. A host showing both a malicious shortcut and rare process execution in a user profile confirms an active infection. The hunt then provides instructions to isolate the affected host and remove the malicious files.

Blind Spots

This hunt relies on file activity telemetry for user profile Startup paths. If the endpoint agent does not capture file creation events in these specific directories, the lead query will return no results. Additionally, the hunt cannot see activity on unmanaged hosts that lack a reporting agent. While the persistence mechanism is a strong indicator, an adversary who moves away from Startup-based persistence would bypass the initial trigger of this specific playbook.

In this series

Steps

  1. Scope Windows hosts

    Query · scoping

    Identify Windows endpoints where the Aeternum PE loader could execute.

    reads hb_software_inventorysql
    SELECT DISTINCT device_hostname FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%windows%' OR LOWER(vendor_name) LIKE '%microsoft%'

    What a hit looks like. A list of hostnames representing the Windows estate. Silence means no Windows software is indexed.

  2. Lead: Startup shortcut creation

    Query · triage

    Find the creation of uniquely named LNK files in user Startup directories used for Aeternum persistence.

    reads hb_file_activitysql
    SELECT device_hostname, file_name, file_path, process_name, time FROM hb_file_activity WHERE LOWER(file_name) LIKE '{{startup_pattern}}' AND (LOWER(file_path) LIKE '%\\startup\\%' OR LOWER(file_path) LIKE '%\\start menu\\%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Rows naming the Aeternum shortcut and the host. Silence means the specific persistence mechanism was not observed.

  3. Evaluate startup lead

    Agent triage

    Determine if the observed file activity represents the Aeternum botnet's persistence behavior.

  4. Gate on startup lead

    Decision

    Halt the hunt if no persistence was found, or open expensive queries if the lead is suspicious.

  5. Check auxiliary binaries

    Query · detection candidate

    Identify execution of supporting binaries that the Aeternum loader drops and runs.

    reads hb_process_activitysql
    SELECT device_hostname, process_name, process_path, process_cmd_line, time FROM hb_process_activity WHERE instr(',' || '{{auxiliary_binaries}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Rows naming wmiframework.exe or other auxiliary processes on the affected hosts.

  6. Stack rare AppData binaries

    Query · baseline

    Find the primary loader (Build.exe) even if renamed by identifying rare processes in user-writable paths.

    reads hb_process_activitysql
    SELECT LOWER(process_path) AS path, COUNT(DISTINCT device_hostname) AS hosts, COUNT(*) AS runs, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(process_path) LIKE '%\\appdata\\local\\%' OR LOWER(process_path) LIKE '%\\users\\public\\%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY LOWER(process_path) HAVING hosts <= 3 ORDER BY hosts, runs

    What a hit looks like. A small number of rare executables appearing on only 1-3 hosts. Legitimate updaters will be filtered out by fleet-wide counts.

  7. Triage infection context

    Agent triage

    Correlate the persistence shortcut lead with evidence of execution to confirm the Aeternum infection.

  8. Route on verdict

    Decision

    Direct confirmed infections to containment and others to manual review.

  9. Isolate host

    Response action

    Prevent further botnet activity by isolating the infected endpoint.

  10. Analyst review

    Analyst task

    Manually verify suspicious findings and confirm containment results.

  11. Close out

    Analyst task

    Log the negative finding and end the hunt.

Coverage

Scenario coverage

StageCoveredHow, or why not
Aeternum Loader Execution
T1204.002
Yes stack-rare-appdata-binaries
Persistence via Startup Folder
T1547.001
Yes lead-startup-lnk
Auxiliary Binary Execution
T1106
Yes check-auxiliary-binaries
Blockchain-based C2 Communication
T1102.001 · T1071.001
Out of scope Belongs to a network-based sibling hunt for RPC traffic.
Payload Download from GitHub
T1105
Out of scope Belongs to a hunt focusing on GitHub and Telegram API traffic.
Data Exfiltration via Telegram API
T1567.002 · T1041
Out of scope Belongs to a hunt focusing on HTTPS exfiltration patterns.

Blind spots

  • Needs hb_file_activity with coverage for user profile Startup paths. The gated hunt may stop at the lead step for an infected host if shortcut creation is not captured. It would answer whether the shortcut was created on hosts where file event logging is limited or disabled.
  • Needs hb_process_activity from an installed agent. Persistence might exist, but the hunt will miss the active execution stage on unmanaged hosts. It would answer whether the botnet binaries are running on systems without a reporting agent.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
auxiliary_binarieslist[string]wmiframework.exe, zrvesjqzwq.exe, staaaaas.exeSupporting binaries executed by the Aeternum loader.
lookback_daysnumber14Days of history to examine.
scope_hostslist[host]Hostnames to narrow the search; leave empty to hunt the whole estate.
startup_patternstringwmi_framework_apikey_wmsnet_%.lnkSQL LIKE pattern for the Aeternum persistence shortcut name.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A single detection rule for the shortcut name is fragile as names can change;
  this hunt uses the shortcut as a trigger to then baseline all rare binaries in the
  user's profile and check for a set of related malicious executables. This multi-surface
  correlation confirms an infection that no single signature could definitively prove.
blind_spots:
- id: missing-file-telemetry
  question: whether the shortcut was created on hosts where file event logging is
    limited or disabled
  requires: hb_file_activity with coverage for user profile Startup paths
  risk: The gated hunt may stop at the lead step for an infected host if shortcut
    creation is not captured.
  stage: persistence-via-startup-folder
- id: no-endpoint-coverage
  question: whether the botnet binaries are running on systems without a reporting
    agent
  requires: hb_process_activity from an installed agent
  risk: Persistence might exist, but the hunt will miss the active execution stage
    on unmanaged hosts.
  stage: aeternum-initial-execution
coverage:
- stage: aeternum-initial-execution
  status: covered
  steps:
  - stack-rare-appdata-binaries
- stage: persistence-via-startup-folder
  status: covered
  steps:
  - lead-startup-lnk
- stage: auxiliary-binary-execution
  status: covered
  steps:
  - check-auxiliary-binaries
- reason: Belongs to a network-based sibling hunt for RPC traffic.
  stage: blockchain-c2-communication
  status: out_of_scope
- reason: Belongs to a hunt focusing on GitHub and Telegram API traffic.
  stage: payload-download-and-loading
  status: out_of_scope
- reason: Belongs to a hunt focusing on HTTPS exfiltration patterns.
  stage: data-exfiltration-via-telegram
  status: out_of_scope
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: promote-to-detection
  justification: The Aeternum botnet's decentralized C2 on the Polygon blockchain
    makes network-based detection extremely difficult; hunting for its unique host-side
    persistence and auxiliary process patterns provides a resilient detection path
    for this permanent threat.
  methodology: model-assisted
  trigger: intel-report
hypothesis: The Aeternum loader has established persistence by creating a uniquely
  named LNK file in the user Startup directory and is executing auxiliary binaries
  from the local AppData profile.
labels:
- hunt
- attack.t1204.002
- attack.t1547.001
- attack.t1106
name: Aeternum Loader Persistence and Execution
parameters:
  auxiliary_binaries:
    default:
    - wmiframework.exe
    - zrvesjqzwq.exe
    - staaaaas.exe
    description: Supporting binaries executed by the Aeternum loader.
    from:
      kind: article
      observed: '2026-08-10'
      ref: unit42-aeternum-c2
    type: list[string]
  lookback_days:
    default: '14'
    description: Days of history to examine.
    type: number
  scope_hosts:
    default: []
    description: Hostnames to narrow the search; leave empty to hunt the whole estate.
    type: list[host]
  startup_pattern:
    default: wmi_framework_apikey_wmsnet_%.lnk
    description: SQL LIKE pattern for the Aeternum persistence shortcut name.
    from:
      kind: article
      observed: '2026-08-10'
      ref: unit42-aeternum-c2
    type: string
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://unit42.paloaltonetworks.com/aeternum-blockchain-c2-analysis/
    gates:
    - dry-run
    - lint
    - critic
    model: hb_google/gemini-3-flash-preview
rationale: Scope to Windows systems. The Aeternum loader specifically targets Windows
  endpoints and utilizes standard user profile paths for its initial footprint.
references:
- name: "Unit 42 \u2014 The Permanent Threat: Analyzing Aeternum\u2019s Blockchain-Based\
    \ C2 Operations and Communications"
  url: https://unit42.paloaltonetworks.com/aeternum-blockchain-c2-analysis/
related:
- hunt: aeternum-blockchain-c2-network
  reason: This hunt focuses on endpoint footprint; network activity to Polygon RPC
    and Telegram APIs requires a separate network-centric hunt.
  relation: out-of-scope-alternative
scenario:
  stages:
  - name: Aeternum Loader Execution
    observables:
    - Build.exe
    - UPX-packed binary
    slug: aeternum-initial-execution
    tactic: execution
    techniques:
    - T1204.002
  - name: Persistence via Startup Folder
    observables:
    - AppData\Local
    - Wmi_Framework_APIKEY_wmsnet_*.lnk
    slug: persistence-via-startup-folder
    tactic: persistence
    techniques:
    - T1547.001
  - name: Auxiliary Binary Execution
    observables:
    - wmiframework.exe
    - ZrvEsJQzWQ.exe
    - STAAAAAS.exe
    slug: auxiliary-binary-execution
    tactic: execution
    techniques:
    - T1106
  - name: Blockchain-based C2 Communication
    observables:
    - polygon-mumbai-bor-rpc.publicnode.com
    - '0xb68d1809'
    - getDomain()
    slug: blockchain-c2-communication
    tactic: command-and-control
    techniques:
    - T1102.001
    - T1071.001
  - name: Payload Download from GitHub
    observables:
    - github.com
    - DotNetZip.dll
    - putty.exe
    slug: payload-download-and-loading
    tactic: command-and-control
    techniques:
    - T1105
  - name: Data Exfiltration via Telegram API
    observables:
    - api.telegram.org
    - SystemInfo Bot/2.0
    - screenshot.png
    - /sendDocument
    slug: data-exfiltration-via-telegram
    tactic: exfiltration
    techniques:
    - T1567.002
    - T1041
  summary: Aeternum is a C++ botnet loader that leverages the Polygon blockchain's
    smart contracts for decentralized command-and-control infrastructure. The loader
    establishes persistence via the Windows Startup folder and retrieves instructions
    through Polygon RPC endpoints before downloading secondary payloads from GitHub
    and exfiltrating system data via the Telegram API.
series:
  index: 1
  slug: the-permanent-threat-analyzing-aeternum-s-blockchain-based-c2-operations-and-communications
  title: "The Permanent Threat: Analyzing Aeternum\u2019s Blockchain-Based C2 Operations\
    \ and Communications"
  total: 2
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
tlp: clear
type: investigation
---


# Aeternum Loader Persistence and Execution

This hunt identifies the initial host-based footprint of the Aeternum botnet. It begins by scoping to Windows systems and uses a cheap lead query to find uniquely named persistence shortcuts in user Startup folders. If a shortcut is found, the hunt expands to search for specifically named auxiliary binaries and stacks rare executables running from user-writable paths to confirm the infection. The gated flow ensures expensive fleet-wide analysis only occurs when a high-confidence indicator is present.

## scope-windows-hosts
<!-- Scope Windows hosts -->
Identify Windows endpoints where the Aeternum PE loader could execute.

```sqlite target=endpoint role=scoping
~~~yaml
expected: A list of hostnames representing the Windows estate. Silence means no Windows
  software is indexed.
reads:
- device_hostname
- package_name
- vendor_name
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT DISTINCT device_hostname FROM hb_software_inventory WHERE LOWER(package_name) LIKE '%windows%' OR LOWER(vendor_name) LIKE '%microsoft%'
```

## lead-startup-lnk
<!-- Lead: Startup shortcut creation -->
Find the creation of uniquely named LNK files in user Startup directories used for Aeternum persistence.

```sqlite target=endpoint role=triage params=(startup_pattern=startup_pattern, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Rows naming the Aeternum shortcut and the host. Silence means the specific
  persistence mechanism was not observed.
reads:
- device_hostname
- file_name
- file_path
- process_name
- time
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, file_name, file_path, process_name, time FROM hb_file_activity WHERE LOWER(file_name) LIKE '{{startup_pattern}}' AND (LOWER(file_path) LIKE '%\\startup\\%' OR LOWER(file_path) LIKE '%\\start menu\\%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## evaluate-startup-lead
<!-- Evaluate startup lead -->
```agent target=hunter
cite: required
context:
- lead-startup-lnk
max_iterations: 3
objective: Decide if the file name and path in lead-startup-lnk match the Aeternum
  persistence pattern and warrant further investigation.
success_criteria: A verdict for each host citing the specific shortcut path and naming
  the creator process.
tools:
- endpoint
```

## gate-on-startup
<!-- Gate on startup lead -->
if~: "the evaluate-startup-lead verdict is malicious or suspicious for at least one host" (confidence: high, judge=hunter)
then: → parallel-expansion
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: missing-file-telemetry)
else: → close-out

## parallel-expansion
<!-- Expanded investigation -->
parallel:
- → check-auxiliary-binaries
- → stack-rare-appdata-binaries
join: → triage-infection-context

## check-auxiliary-binaries
<!-- Check auxiliary binaries -->
Identify execution of supporting binaries that the Aeternum loader drops and runs.

```sqlite target=endpoint role=detection-candidate params=(auxiliary_binaries=auxiliary_binaries, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Rows naming wmiframework.exe or other auxiliary processes on the affected
  hosts.
reads:
- device_hostname
- process_name
- process_path
- process_cmd_line
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_name, process_path, process_cmd_line, time FROM hb_process_activity WHERE instr(',' || '{{auxiliary_binaries}}' || ',', ',' || LOWER(process_name) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## stack-rare-appdata-binaries
<!-- Stack rare AppData binaries -->
Find the primary loader (Build.exe) even if renamed by identifying rare processes in user-writable paths.

```sqlite target=endpoint role=baseline params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: A small number of rare executables appearing on only 1-3 hosts. Legitimate
  updaters will be filtered out by fleet-wide counts.
prevalence:
  by: device_hostname
  key:
  - path
  rare_below: 3
reads:
- device_hostname
- process_path
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT LOWER(process_path) AS path, COUNT(DISTINCT device_hostname) AS hosts, COUNT(*) AS runs, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(process_path) LIKE '%\\appdata\\local\\%' OR LOWER(process_path) LIKE '%\\users\\public\\%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY LOWER(process_path) HAVING hosts <= 3 ORDER BY hosts, runs
```

## triage-infection-context
<!-- Triage infection context -->
```agent target=hunter
cite: required
context:
- evaluate-startup-lead
- check-auxiliary-binaries
- stack-rare-appdata-binaries
max_iterations: 6
objective: Determine if any host shows both the Aeternum persistence shortcut and
  active execution of the loader or its auxiliary binaries.
success_criteria: A per-host verdict of malicious, suspicious, or benign, citing specific
  rows and paths.
tools:
- endpoint
```

## route-on-verdict
<!-- Route on verdict -->
if~: "the triage-infection-context verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → analyst-review
unavailable: → analyst-review (blind_spot: no-endpoint-coverage)
else: → analyst-review

## isolate-host
<!-- Isolate host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host and remove the malicious shortcut from the Startup folder.
```
→ analyst-review

## analyst-review
<!-- Analyst review -->
```manual target=analyst
Review the identified process command lines and shortcut paths. Check for network traffic to Polygon RPC nodes if possible.
```
→ end

## close-out
<!-- Close out -->
```manual target=analyst
Record that no Aeternum persistence or auxiliary execution was detected in the given window.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, critic, then reviewed by a person.