← All hunts high TLP:CLEAR Part 2 of 2

AI Infrastructure Host Monetization and Persistence

An attacker has compromised an AI gateway or retrieval engine and is now deploying masqueraded payloads to monetize the host via cryptomining and establish durable SSH or systemd persistence.

Based on research by Microsoft 2026-09-20 13 steps · 6 queries T1036.005 T1046 T1053.003 T1082 T1090.003 T1098.004 T1105 T1496

Brief

Why this hunt

Microsoft's recent analysis, When AI infrastructure becomes the target: Securing gateways and control points, details how attackers exploit AI management layers. Once inside, an adversary rarely stays within the application. They move to the host to monetize compute resources or solidify access. This hunt provides the steps to find that transition.

How the hunt flows

The first query scopes the environment using hb_software_inventory. The analyst identifies Linux hosts running specific AI software such as LiteLLM, RAGFlow, or Kestra. This establishes the target population before looking for behavioral anomalies.

The hunt then pivots to hb_process_activity to find masqueraded binaries. It uses a prevalence baseline to highlight processes executing from world-writable paths like /tmp or /dev/shm that appear on only a few hosts. Simultaneously, the hunt looks for environment fingerprinting commands like sudo -l or crontab -l launched directly from AI gateway parent processes.

Next, the analyst examines indicators of host abuse and persistence. A query on hb_module_activity searches for the msr module, which attackers load to tune CPUs for cryptomining. Another query checks hb_file_activity for unauthorized modifications to SSH authorized_keys or systemd service files. An analyst also uses hb_process_activity to detect credential harvesting by searching for commands reading /proc/1/environ or environment variables like DATABASE_URL and API_KEY.

Finally, the hunt uses an agent triage step to synthesize these findings. The agent correlates the presence of rare binaries with the follow-on discovery and persistence activity to provide a final verdict. If the analyst confirms a compromise, they proceed to isolate the host and perform a forensic review of the modified configurations.

What the hunt cannot see

This hunt has three primary blind spots. First, it cannot determine if the msr module was loaded with allow_writes=1, which is the specific setting required for mining optimization. Second, short-lived payloads that execute and terminate between snapshots may not appear in process telemetry depending on the data source frequency. Third, while we detect modifications to SSH keys, we cannot see the actual public key content being added, which prevents immediate attribution without further host-level forensics.

In this series

Steps

  1. Identify AI infrastructure hosts

    Query · scoping

    Scope the hunt to Linux hosts running targeted AI software or retrieval engines, retrieving both UIDs and hostnames for precise filtering.

    reads hb_software_inventorysql
    SELECT DISTINCT device_uid, device_hostname FROM hb_software_inventory WHERE (instr(',' || '{{ai_apps}}' || ',', ',' || LOWER(package_name) || ',') > 0 OR instr(',' || '{{ai_apps}}' || ',', ',' || LOWER(vendor_name) || ',') > 0)

    What a hit looks like. A list of host UIDs and names currently running AI gateways or retrieval engines. This narrows the search for subsequent behavioural telemetry.

  2. Rare binaries in temporary paths

    Query · baseline

    Find masqueraded payloads by stack-counting binaries executed from world-writable directories.

    reads hb_process_activitysql
    SELECT LOWER(process_path) AS path, COUNT(DISTINCT device_hostname) AS hosts, COUNT(*) AS executions, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(process_path) LIKE '/tmp/%' OR LOWER(process_path) LIKE '/var/tmp/%' OR LOWER(process_path) LIKE '/dev/shm/%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY 1 HAVING executions <= 10 AND hosts <= 3 ORDER BY hosts ASC

    What a hit looks like. Rare binaries executing from world-writable paths. Malicious binaries may run many times on a single victim but are rare across the fleet.

  3. Host discovery and cleanup

    Query · enrichment

    Detect commands used for environment fingerprinting launched directly from AI gateway parent processes.

    reads hb_process_activitysql
    SELECT device_hostname, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE (LOWER(process_cmd_line) LIKE '%sudo -l%' OR LOWER(process_cmd_line) LIKE '%crontab -l%' OR LOWER(process_cmd_line) LIKE '%netstat -anp%' OR LOWER(process_cmd_line) LIKE '%rm %crontab%') AND (instr(',' || '{{ai_apps}}' || ',', ',' || LOWER(parent_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. A sequence of discovery commands or crontab modifications appearing on the same hosts that launched rare temporary binaries from the gateway context.

  4. Early stage triage

    Agent triage

    Evaluate whether rare payloads and discovery commands indicate an active host compromise.

  5. MSR module loading

    Query · triage

    Detect the Linux Model-Specific Register module loading, a marker for cryptominer CPU tuning.

    reads hb_module_activitysql
    SELECT device_hostname, module_name, process_name, time FROM hb_module_activity WHERE LOWER(module_name) = 'msr' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. The msr module being loaded by an unexpected process, suggesting RandomX/XMRig optimization.

  6. Gateway config and environment harvesting

    Query · enrichment

    Detect attempts to read gateway process environments or configuration files for secret harvesting.

    reads hb_process_activitysql
    SELECT device_hostname, process_cmd_line, user_name, time FROM hb_process_activity WHERE (process_cmd_line LIKE '%/proc/1/environ%' OR process_cmd_line LIKE '%DATABASE_URL%' OR process_cmd_line LIKE '%API_KEY%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Commands targeting process environments or database connection strings, indicating follow-on credential harvesting.

  7. Persistence via systemd and SSH

    Query · detection candidate

    Identify changes to SSH authorized_keys or systemd service configurations.

    reads hb_file_activitysql
    SELECT device_hostname, file_path, LOWER(process_name) AS normalized_process_name, time FROM hb_file_activity WHERE (LOWER(file_path) LIKE '%/authorized_keys' OR LOWER(file_path) LIKE '/etc/systemd/system/%') AND activity_id IN (1, 3, 5) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Unauthorized file modifications to persistent Linux system paths, often by masqueraded processes.

  8. Follow-on triage and correlation

    Agent triage

    Synthesize the entire attack chain from delivery through to impact.

  9. Route based on compromise

    Decision

    Direct action based on the agent's confidence in the intrusion.

  10. Isolate compromised host

    Response action

    Sever attacker access and stop resource abuse.

  11. Forensic review

    Analyst task

    Verify the agent's findings and extract indicators.

  12. Close out hunt

    Analyst task

    Document the hunt outcome and any identified gaps.

Coverage

Scenario coverage

StageCoveredHow, or why not
Masqueraded Payload Delivery and Execution
T1105 · T1036.005
Yes payload-delivery-prevalence
Host Discovery and Competitor Cleanup
T1082 · T1046
Yes discovery-and-cleanup
Compute Resource Hijacking
T1496
Yes msr-module-load
System Persistence and C2
T1098.004 · T1053.003 · T1090.003
Yes persistence-activity
Exploitation of Exposed AI Control Points
T1190
Out of scope Belongs to another part of the 'When AI infrastructure becomes the target: Securing gateways and control points' series.
Gateway Runtime Secret Harvesting
T1552.001
Out of scope Belongs to another part of the 'When AI infrastructure becomes the target: Securing gateways and control points' series.
AI Gateway Database Exfiltration
T1041
Out of scope Belongs to another part of the 'When AI infrastructure becomes the target: Securing gateways and control points' series.

Blind spots

  • Needs hb_module_activity with module parameters. Legitimate system utilities might load the msr module; without seeing the write parameter, we cannot confirm if it was for mining tuning. It would answer Was the msr module loaded with write access enabled (allow_writes=1)?.
  • Needs continuous event stream for hb_process_activity. Short-lived payloads might be missed if the data source relies on periodic process snapshots rather than an execution stream. It would answer Did the payload execute and terminate between snapshots?.
  • Needs hb_file_activity with content capture. We can see the file was touched but not what key was added, preventing attribution to a known actor without host forensics. It would answer What public key was added to authorized_keys?.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
ai_appslist[string]litellm, ragflow, kestraAI infrastructure software names to scope the hunt.
lookback_daysnumber14Days of history to examine.
scope_hostslist[host]Optional list of hostnames to focus on; leave empty to hunt across the entire estate.

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: This hunt uses a fleet-wide prevalence baseline to find masqueraded payloads
  launched from temporary paths, then pivots to low-signal hardware tuning events
  (MSR loading) and configuration harvesting that single rules would find too noisy.
blind_spots:
- id: msr-write-parameters
  question: Was the msr module loaded with write access enabled (allow_writes=1)?
  requires: hb_module_activity with module parameters
  risk: Legitimate system utilities might load the msr module; without seeing the
    write parameter, we cannot confirm if it was for mining tuning.
  stage: resource-hijacking-cryptomining
- id: limited-snapshot-visibility
  question: Did the payload execute and terminate between snapshots?
  requires: continuous event stream for hb_process_activity
  risk: Short-lived payloads might be missed if the data source relies on periodic
    process snapshots rather than an execution stream.
  stage: masqueraded-payload-delivery
- id: ssh-key-content
  question: What public key was added to authorized_keys?
  requires: hb_file_activity with content capture
  risk: We can see the file was touched but not what key was added, preventing attribution
    to a known actor without host forensics.
  stage: host-persistence-mechanisms
coverage:
- stage: masqueraded-payload-delivery
  status: covered
  steps:
  - payload-delivery-prevalence
- stage: host-and-miner-discovery
  status: covered
  steps:
  - discovery-and-cleanup
- stage: resource-hijacking-cryptomining
  status: covered
  steps:
  - msr-module-load
- stage: host-persistence-mechanisms
  status: covered
  steps:
  - persistence-activity
- reason: 'Belongs to another part of the ''When AI infrastructure becomes the target:
    Securing gateways and control points'' series.'
  stage: initial-access-ai-gateway-exploitation
  status: out_of_scope
- reason: 'Belongs to another part of the ''When AI infrastructure becomes the target:
    Securing gateways and control points'' series.'
  stage: runtime-credential-harvesting
  status: out_of_scope
- reason: 'Belongs to another part of the ''When AI infrastructure becomes the target:
    Securing gateways and control points'' series.'
  stage: application-layer-data-exfiltration
  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: AI infrastructure components are becoming high-value control points.
    Intruders target them to monetize compute resources and establish persistence
    near high-value credential material.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An attacker has compromised an AI gateway or retrieval engine and is now
  deploying masqueraded payloads to monetize the host via cryptomining and establish
  durable SSH or systemd persistence.
labels:
- hunt
- attack.t1105
- attack.t1036.005
- attack.t1082
- attack.t1046
- attack.t1496
- attack.t1098.004
- attack.t1053.003
- attack.t1090.003
name: AI Infrastructure Host Monetization and Persistence
parameters:
  ai_apps:
    default:
    - litellm
    - ragflow
    - kestra
    description: AI infrastructure software names to scope the hunt.
    type: list[string]
  lookback_days:
    default: '14'
    description: Days of history to examine.
    type: number
  scope_hosts:
    default: []
    description: Optional list of hostnames to focus on; leave empty to hunt across
      the entire estate.
    type: list[host]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://www.microsoft.com/en-us/security/blog/2026/08/26/when-ai-infrastructure-becomes-target-securing-gateways-control-points/
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: The hunt should initially focus on hosts identified as running LiteLLM,
  RAGFlow, or Kestra using the software inventory step.
references:
- name: 'MSRC - When AI infrastructure becomes the target: Securing gateways and control
    points'
  url: https://www.microsoft.com/en-us/security/blog/2026/08/26/when-ai-infrastructure-becomes-target-securing-gateways-control-points/
related:
- hunt: ai-gateway-credential-theft
  reason: Credential harvesting from gateway memory or databases is handled in the
    sibling hunt.
  relation: out-of-scope-alternative
- hunt: ai-gateway-exploitation-credential-theft
  relation: follows
scenario:
  stages:
  - name: Exploitation of Exposed AI Control Points
    observables:
    - CVE-2026-42271
    - CVE-2026-48710
    - CVE-2026-49869
    - CVE-2026-45312
    - CVE-2026-28797
    - CVE-2026-24770
    - CVE-2025-68700
    - Outbound Burp Collaborator callbacks from RAGFlow server
    - POST /mcp-rest/test/connection
    - POST /mcp-rest/test/tools/list
    slug: initial-access-ai-gateway-exploitation
    tactic: initial-access
    techniques:
    - T1190
  - name: Gateway Runtime Secret Harvesting
    observables:
    - Reading /proc/1/environ from gateway PID 1
    - Filtering environment for 'master', 'API key', 'token', 'password', 'DATABASE_URL'
    - Python urllib, curl, or wget used for exfiltration of environment blocks
    slug: runtime-credential-harvesting
    tactic: credential-access
    techniques:
    - T1552.001
  - name: Masqueraded Payload Delivery and Execution
    observables:
    - ELF binaries staged in temporary paths
    - Service-style naming masquerading as benign Linux daemons
    - Shell-stage downloaders with short timeouts and fallbacks
    - python3 -c commands retrieving remote payloads
    slug: masqueraded-payload-delivery
    tactic: execution
    techniques:
    - T1105
    - T1036.005
  - name: Host Discovery and Competitor Cleanup
    observables:
    - Silent passwordless sudo checks
    - Listening port inspection
    - Process sweeps for competing miners or remote shells
    - Modification of crontab to remove other miner entries
    slug: host-and-miner-discovery
    tactic: discovery
    techniques:
    - T1082
    - T1046
  - name: AI Gateway Database Exfiltration
    observables:
    - Access to postgres.database.azure.com
    - Queries against LiteLLM_ProxyModelTable and LiteLLM_VerificationToken
    - Self-contained python3 one-liners installing PostgreSQL support
    - Base64-encoded exfiltration in small chunks
    slug: application-layer-data-exfiltration
    tactic: collection
    techniques:
    - T1041
  - name: Compute Resource Hijacking
    observables:
    - XMRig deployment
    - Loading Linux Model-Specific Register (msr) module with write access
    - RandomX-related CPU tuning
    slug: resource-hijacking-cryptomining
    tactic: impact
    techniques:
    - T1496
  - name: System Persistence and C2
    observables:
    - Modification of SSH authorized_keys under service accounts
    - Hidden-file relay execution
    - Masqueraded systemd service names
    - Periodic out-of-band callbacks (C2 relay)
    slug: host-persistence-mechanisms
    tactic: persistence
    techniques:
    - T1098.004
    - T1053.003
    - T1090.003
  summary: Attackers are targeting exposed AI infrastructure components like LiteLLM
    gateways, RAGFlow document engines, and Kestra orchestrators to harvest LLM provider
    keys and credentials. Once access is gained, they pivot to container host persistence
    and monetize compromised compute resources through cryptomining.
series:
  index: 2
  slug: when-ai-infrastructure-becomes-the-target-securing-gateways-and-control-points
  title: 'When AI infrastructure becomes the target: Securing gateways and control
    points'
  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
---


# AI Infrastructure Host Monetization and Persistence

This hunt focuses on the post-exploitation phase of attacks targeting AI infrastructure like LiteLLM, RAGFlow, and Kestra. It examines the transition from initial gateway command execution to host-level abuse. We first identify hosts running AI software, then hunt for masqueraded binaries in temporary paths using a prevalence baseline to find rare items. We corroborate these with host discovery commands, cryptomining indicators such as MSR module loading, and persistence mechanisms like SSH authorized_keys modifications.

## identify-ai-hosts
<!-- Identify AI infrastructure hosts -->
Scope the hunt to Linux hosts running targeted AI software or retrieval engines, retrieving both UIDs and hostnames for precise filtering.

```sqlite target=endpoint role=scoping params=(ai_apps=ai_apps)
~~~yaml
expected: A list of host UIDs and names currently running AI gateways or retrieval
  engines. This narrows the search for subsequent behavioural telemetry.
reads:
- device_uid
- 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_uid, device_hostname FROM hb_software_inventory WHERE (instr(',' || '{{ai_apps}}' || ',', ',' || LOWER(package_name) || ',') > 0 OR instr(',' || '{{ai_apps}}' || ',', ',' || LOWER(vendor_name) || ',') > 0)
```

## early-stage-parallel
<!-- Early stage delivery and discovery -->
parallel:
- → payload-delivery-prevalence
- → discovery-and-cleanup
join: → agent-early-read

## payload-delivery-prevalence
<!-- Rare binaries in temporary paths -->
Find masqueraded payloads by stack-counting binaries executed from world-writable directories.

```sqlite target=endpoint role=baseline params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Rare binaries executing from world-writable paths. Malicious binaries may
  run many times on a single victim but are rare across the fleet.
prevalence:
  by: device_hostname
  key:
  - process_path
  rare_below: 3
reads:
- process_path
- device_hostname
- 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 executions, MIN(time) AS first_seen FROM hb_process_activity WHERE (LOWER(process_path) LIKE '/tmp/%' OR LOWER(process_path) LIKE '/var/tmp/%' OR LOWER(process_path) LIKE '/dev/shm/%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY 1 HAVING executions <= 10 AND hosts <= 3 ORDER BY hosts ASC
```

## discovery-and-cleanup
<!-- Host discovery and cleanup -->
Detect commands used for environment fingerprinting launched directly from AI gateway parent processes.

```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts, ai_apps=ai_apps)
~~~yaml
expected: A sequence of discovery commands or crontab modifications appearing on the
  same hosts that launched rare temporary binaries from the gateway context.
reads:
- device_hostname
- process_cmd_line
- parent_process_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_cmd_line, parent_process_name, time FROM hb_process_activity WHERE (LOWER(process_cmd_line) LIKE '%sudo -l%' OR LOWER(process_cmd_line) LIKE '%crontab -l%' OR LOWER(process_cmd_line) LIKE '%netstat -anp%' OR LOWER(process_cmd_line) LIKE '%rm %crontab%') AND (instr(',' || '{{ai_apps}}' || ',', ',' || LOWER(parent_process_name) || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## agent-early-read
<!-- Early stage triage -->
```agent target=hunter
cite: required
context:
- payload-delivery-prevalence
- discovery-and-cleanup
max_iterations: 3
objective: Determine if the rare binaries in /tmp and the discovery commands suggest
  an attacker is prepping the host for monetization or persistence.
success_criteria: A per-host verdict of malicious | suspicious | benign, citing specific
  binary paths and command lines.
tools:
- endpoint
```

## follow-on-parallel
<!-- Follow-on impact and persistence -->
parallel:
- → msr-module-load
- → config-env-harvesting
- → persistence-activity
join: → agent-follow-on-read

## msr-module-load
<!-- MSR module loading -->
Detect the Linux Model-Specific Register module loading, a marker for cryptominer CPU tuning.

```sqlite target=endpoint role=triage params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: The msr module being loaded by an unexpected process, suggesting RandomX/XMRig
  optimization.
reads:
- device_hostname
- module_name
- process_name
- time
silence: not_evidence_of_absence
source: hb_module_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, module_name, process_name, time FROM hb_module_activity WHERE LOWER(module_name) = 'msr' AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## config-env-harvesting
<!-- Gateway config and environment harvesting -->
Detect attempts to read gateway process environments or configuration files for secret harvesting.

```sqlite target=endpoint role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Commands targeting process environments or database connection strings,
  indicating follow-on credential harvesting.
reads:
- device_hostname
- process_cmd_line
- user_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, process_cmd_line, user_name, time FROM hb_process_activity WHERE (process_cmd_line LIKE '%/proc/1/environ%' OR process_cmd_line LIKE '%DATABASE_URL%' OR process_cmd_line LIKE '%API_KEY%') AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## persistence-activity
<!-- Persistence via systemd and SSH -->
Identify changes to SSH authorized_keys or systemd service configurations.

```sqlite target=endpoint role=detection-candidate params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Unauthorized file modifications to persistent Linux system paths, often
  by masqueraded processes.
reads:
- device_hostname
- file_path
- process_name
- time
- activity_id
silence: not_evidence_of_absence
source: hb_file_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, file_path, LOWER(process_name) AS normalized_process_name, time FROM hb_file_activity WHERE (LOWER(file_path) LIKE '%/authorized_keys' OR LOWER(file_path) LIKE '/etc/systemd/system/%') AND activity_id IN (1, 3, 5) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## agent-follow-on-read
<!-- Follow-on triage and correlation -->
```agent target=hunter
cite: required
context:
- agent-early-read
- msr-module-load
- config-env-harvesting
- persistence-activity
max_iterations: 4
objective: Decide if the suspicious early activity on a host is confirmed as a malicious
  compromise by the presence of cryptomining, harvesting, or persistence indicators.
success_criteria: A final verdict citing the linkage between rare binaries, discovery,
  harvesting attempts, MSR loading, and persistence.
tools:
- endpoint
```

## route-on-verdict
<!-- Route based on compromise -->
if~: "the final triage verdict is malicious for at least one host" (confidence: high, judge=hunter)
then: → isolate-host
indeterminate: → forensic-review
unavailable: → forensic-review (blind_spot: limited-snapshot-visibility)
else: → close-out

## isolate-host
<!-- Isolate compromised host -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the host immediately. Prevent any further outbound connections to C2 or mining pools.
```
→ forensic-review

## forensic-review
<!-- Forensic review -->
```manual target=analyst
Review the binaries identified in the prevalence step. Collect the modified SSH keys and systemd unit files. Determine if the initial access vulnerability in the AI software was patched.
```
→ close-out

## close-out
<!-- Close out hunt -->
```manual target=analyst
Log the number of affected hosts and the specific AI workloads involved. Update any detection rules based on the observed masquerading patterns.
```
→ 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, then reviewed by a person.