Autonomous Perimeter Probing and Identity Abuse
An automated swarm of AI agents is relentlessly probing public-facing applications for vulnerabilities while simultaneously attempting to fatigue employees with MFA prompts to secure initial access.
Based on research by Cisco Talos 2026-10-08 9 steps · 3 queries T1133 T1190 T1566
Brief
Why Now
The speed of initial access is accelerating as attackers adopt automated frameworks to scale their probing and exploitation efforts. A recent article by Talos, "One breach, please, and make no mistakes" (https://blog.talosintelligence.com/one-breach-please-and-make-no-mistakes/), highlights how these autonomous agents do not merely scan; they operate as coordinated swarms. Traditional security controls often block individual IP addresses or specific exploit strings but fail to link the background noise on the perimeter to the simultaneous pressure applied to the identity layer. This hunt provides a structured approach to correlate these signals across network, endpoint, and identity surfaces.
How the Hunt Flows
The hunt begins with a scoping phase on the network surface. The first query identifies hosts receiving excessive traffic from automated tools by filtering for non-browser user agents such as Python's request library, curl, and wget. We set a threshold of 100 requests within a seven-day lookback window to filter out transient internet scanning. This phase provides a list of source IPs and the internal hosts being targeted, which allows us to focus the subsequent endpoint and identity searches.
Once we identify the targeted hosts, the hunt pivots to the process activity surface. We look for evidence of successful exploitation by identifying suspicious child processes. The query specifically flags common shells like bash, sh, or powershell.exe and reconnaissance tools like whoami when they are spawned by web server processes such as nginx, httpd, or Tomcat. Finding these processes on a host that was recently targeted by volumetric bot probing strongly suggests a successful breach and subsequent command execution.
In parallel, the hunt investigates the identity surface. We correlate the source IPs identified in the scoping phase with authentication logs. The goal is to find signs of MFA fatigue, specifically more than 15 failed sign-in attempts for a single user originating from the same probing infrastructure. Correlating network noise with identity-layer pressure is the primary method for distinguishing a targeted agentic campaign from general internet scanning. Finally, a triage step evaluates the results from all three surfaces to provide a high-confidence verdict on whether a coordinated attack is in progress.
What the Hunt Cannot See
This hunt has two primary blind spots. First, it depends on robust identity telemetry from all providers. If the organization uses a third-party SSO provider that does not feed its MFA failure logs into the central data lake, the coordinated pressure on those users remains invisible. Second, the hunt focuses on request metadata. It cannot see specific exploit payloads, such as SQL injection strings or directory traversal attempts, if they are contained within encrypted HTTP POST bodies and the inspection layer does not perform full decryption.
In this series
Steps
-
High-volume bot-like HTTP probing
Query · scopingIdentify hosts receiving excessive traffic from automated tools, which often precedes an agentic exploit attempt.
reads hb_http_activitysqlSELECT device_hostname, url_hostname, user_agent, src_endpoint_ip, COUNT(*) AS request_count, MIN(time) AS first_seen FROM hb_http_activity WHERE (LOWER(user_agent) LIKE '{{bot_ua_fragment}}' OR LOWER(user_agent) LIKE '%curl%' OR LOWER(user_agent) LIKE '%wget%') AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, url_hostname, user_agent, src_endpoint_ip HAVING request_count > 100 ORDER BY request_count DESCWhat a hit looks like. A list of hostnames and source IPs showing high-volume requests from non-browser tools. Silence means no such volumetric probing occurred from these toolsets.
-
Suspicious child processes from web servers
Query · detection candidateFind shells or discovery tools launched by web server processes on the probed hosts, indicating successful exploitation.
reads hb_process_activitysqlSELECT device_hostname, process_name, process_cmd_line, parent_process_name, user_name, time FROM hb_process_activity WHERE (LOWER(parent_process_name) LIKE '%httpd%' OR LOWER(parent_process_name) LIKE '%nginx%' OR LOWER(parent_process_name) LIKE '%w3wp%' OR LOWER(parent_process_name) LIKE '%tomcat%') AND (LOWER(process_name) IN ('cmd.exe', 'powershell.exe', 'sh', 'bash', 'whoami', 'id', 'curl', 'wget')) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. Shells or reconnaissance tools spawned by a web server. Silence indicates no obvious command execution followed the probing phase.
-
Identify MFA fatigue from probing IPs
Query · triageDetermine if the same source infrastructure used for probing is also attacking the identity layer via MFA prompt bombing.
reads hb_auth_signinsqlSELECT actor_user_name, src_endpoint_ip, status_detail, COUNT(*) AS fail_count FROM hb_auth_signin WHERE status_id = 2 AND ('{{probing_ips}}' = '' OR instr(',' || '{{probing_ips}}' || ',', ',' || src_endpoint_ip || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY 1, 2, 3 HAVING fail_count > 15 ORDER BY fail_count DESCWhat a hit looks like. Spikes in authentication failures from the same IPs identified in the probing phase. Silence indicates the probing and identity attacks are not coordinated from the same source.
-
Evaluate coordinated agentic behavior
Agent triageAnalyze the HTTP traffic volume, subsequent process behavior, and identity-layer failures to determine if a coordinated swarm is active.
-
Route on agent verdict
DecisionRoute the findings to containment or further analyst review based on the triage results.
-
Isolate host and revoke sessions
Response actionImmediately contain the host to stop further exploitation by the swarm.
-
Analyst validation and tuning
Analyst taskManually review the evidence and tune bot user-agent fragments for future runs.
-
Close out hunt
Analyst taskFinalize the findings and document any observed gaps in perimeter visibility.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| Exploitation of Public-Facing Applications T1190 |
Yes | high-volume-bot-probing, suspicious-web-children |
| Identity Access and Phishing T1566 · T1133 |
Yes | identity-mfa-fatigue |
| Internal Persistence and Traversal T1133 |
Out of scope | Belongs to another part of the 'One breach, please, and make no mistakes' series. |
| Application Layer C2 T1071 |
Out of scope | Belongs to another part of the 'One breach, please, and make no mistakes' series. |
| Data Exfiltration and Impact T1486 |
Out of scope | Belongs to another part of the 'One breach, please, and make no mistakes' series. |
Blind spots
- Needs hb_auth_signin with MFA failure details from all SSO providers. A coordination between probing and identity pressure would be invisible if the identity provider is not reporting to the lake. It would answer whether the probing IPs targeted users on platforms not currently enrolled in the sign-in surface.
- Needs Decrypted HTTP body inspection in hb_http_activity. Volumetric probing is seen, but the intent (e.g., SQLi vs. directory traversal) may be obscured if the payload resides only in the request body. It would answer whether specific SQL injection or exploit payloads were present in the HTTP POST body.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
bot_ua_fragment | string | %python% | SQL LIKE fragment to identify automated tool user agents. |
lookback_days | number | 7 | Days of history to examine for automated probing spikes. |
probing_ips | list[ip] | — | Source IPs identified in the first step to correlate with identity fatigue. |
scope_hosts | list[host] | — | Hostnames identified in the scoping query to focus the process behavior analysis. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
| Identity / sign-in telemetry | identity | identity |
| Web server / proxy logs | siem | network |
Source
---
analysis: A single WAF rule might block a specific user agent or SQLi string, but
this hunt correlates the volumetric perimeter probing with host-level process behavior
and simultaneous pressure on the identity layer (MFA fatigue), which traditional
single-surface rules cannot associate.
blind_spots:
- id: no-identity-telemetry
question: whether the probing IPs targeted users on platforms not currently enrolled
in the sign-in surface
requires: hb_auth_signin with MFA failure details from all SSO providers
risk: A coordination between probing and identity pressure would be invisible if
the identity provider is not reporting to the lake.
stage: identity-access-phishing
- id: encrypted-payload-blindness
question: whether specific SQL injection or exploit payloads were present in the
HTTP POST body
requires: Decrypted HTTP body inspection in hb_http_activity
risk: Volumetric probing is seen, but the intent (e.g., SQLi vs. directory traversal)
may be obscured if the payload resides only in the request body.
stage: exploit-public-facing-app
coverage:
- stage: exploit-public-facing-app
status: covered
steps:
- high-volume-bot-probing
- suspicious-web-children
- stage: identity-access-phishing
status: covered
steps:
- identity-mfa-fatigue
- reason: Belongs to another part of the 'One breach, please, and make no mistakes'
series.
stage: persistence-and-traversal
status: out_of_scope
- reason: Belongs to another part of the 'One breach, please, and make no mistakes'
series.
stage: c2-dns-beaconing
status: out_of_scope
- reason: Belongs to another part of the 'One breach, please, and make no mistakes'
series.
stage: exfiltration-and-impact
status: out_of_scope
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: keep-as-periodic-hunt
justification: Autonomous agents accelerate the speed of probing and exploitation;
a negative result across internet-facing assets confirms that the organization
is not currently being targeted by high-volume automated campaigns.
methodology: model-assisted
trigger: intel-report
hypothesis: An automated swarm of AI agents is relentlessly probing public-facing
applications for vulnerabilities while simultaneously attempting to fatigue employees
with MFA prompts to secure initial access.
labels:
- hunt
- attack.t1190
- attack.t1566
- attack.t1133
- command and control
- impact
- initial access
- persistence
name: Autonomous Perimeter Probing and Identity Abuse
parameters:
bot_ua_fragment:
default: '%python%'
description: SQL LIKE fragment to identify automated tool user agents.
from:
kind: article
observed: '2026-10-07'
ref: talos-agentic-threats
type: string
lookback_days:
default: '7'
description: Days of history to examine for automated probing spikes.
from:
kind: article
observed: '2026-10-07'
ref: talos-agentic-threats
type: number
probing_ips:
default: []
description: Source IPs identified in the first step to correlate with identity
fatigue.
from:
kind: manual
ref: analyst-entry
type: list[ip]
scope_hosts:
default: []
description: Hostnames identified in the scoping query to focus the process behavior
analysis.
from:
kind: manual
ref: analyst-entry
type: list[host]
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://blog.talosintelligence.com/one-breach-please-and-make-no-mistakes/
gates:
- dry-run
- lint
model: hb_google/gemini-3-flash-preview
rationale: Start with internet-facing web servers and DMZ hosts. If the estate is
large, narrow the hunt to hosts reporting critical vulnerabilities in hb_vulnerability_finding.
references:
- name: "Talos \u2014 One breach, please, and make no mistakes"
url: https://blog.talosintelligence.com/one-breach-please-and-make-no-mistakes/
related:
- hunt: lateral-movement-by-autonomous-agents
reason: Once an agentic swarm gains access, it communicates internally and moves
laterally, requiring internal network and process analysis.
relation: follows
scenario:
stages:
- name: Exploitation of Public-Facing Applications
observables:
- High volume of SQL injection attempts
- Requests from Python, curl, or wget user agents
- Spike in WAF alerts
- Automated traffic hitting unpatched vulnerabilities
slug: exploit-public-facing-app
tactic: initial-access
techniques:
- T1190
- name: Identity Access and Phishing
observables:
- Phishing invoices sent at volume
- HR onboarding requests for fabricated identities
- MFA prompt-bombing (push/SMS fatigue)
- VPN access attempts with valid credentials
slug: identity-access-phishing
tactic: initial-access
techniques:
- T1566
- T1133
- name: Internal Persistence and Traversal
observables:
- Malicious Group Policy Object (GPO) deployment
- Active Directory modifications
- Spike in east-west network traffic
- Rapid rotation of stolen credentials
- Worm-like traversal through internal segments
slug: persistence-and-traversal
tactic: persistence
techniques:
- T1133
- name: Application Layer C2
observables:
- DNS beaconing for command-and-control
- Anomalous DNS query volume
- Traffic to external infrastructure used for agent coordination
slug: c2-dns-beaconing
tactic: command-and-control
techniques:
- T1071
- name: Data Exfiltration and Impact
observables:
- Theft of AI model weights
- Theft of customer data
- Encryption of local and remote drives
- Spam and package stuffing on public repositories (e.g., RubyGems)
slug: exfiltration-and-impact
tactic: impact
techniques:
- T1486
summary: Autonomous AI agent swarms automate and compress the attack lifecycle into
hours, utilizing high-volume automated probing, phishing, and vulnerability exploitation.
Once inside, the agents adapt in real-time to traverse the network via Active
Directory and DNS-based command-and-control to exfiltrate AI model weights or
encrypt data.
series:
index: 1
slug: one-breach-please-and-make-no-mistakes
title: One breach, please, and make no mistakes
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
identity:
category: identity
name: Identity / sign-in telemetry
telemetry:
- identity
web:
category: siem
name: Web server / proxy logs
telemetry:
- network
tlp: clear
type: investigation
---
# Autonomous Perimeter Probing and Identity Abuse
This hunt identifies the early 'noisy' phase of an agentic attack by detecting volumetric HTTP probing from non-browser user agents such as Python, curl, or wget. It then fans out to evaluate the behavior of web server processes on those targeted hosts and checks for concurrent MFA fatigue indicators originating from the same source infrastructure. An agent weighs these signals to distinguish between background internet noise and a coordinated, multi-stage autonomous campaign targeting both the organization's perimeter and its identity layer.
## high-volume-bot-probing
<!-- High-volume bot-like HTTP probing -->
Identify hosts receiving excessive traffic from automated tools, which often precedes an agentic exploit attempt.
```sqlite target=web role=scoping params=(bot_ua_fragment=bot_ua_fragment, lookback_days=lookback_days)
~~~yaml
baseline:
compare: first_seen
window: '{{lookback_days}}d'
expected: A list of hostnames and source IPs showing high-volume requests from non-browser
tools. Silence means no such volumetric probing occurred from these toolsets.
prevalence:
by: device_hostname
key:
- user_agent
rare_below: 3
reads:
- device_hostname
- url_hostname
- user_agent
- src_endpoint_ip
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-10-08'
~~~
SELECT device_hostname, url_hostname, user_agent, src_endpoint_ip, COUNT(*) AS request_count, MIN(time) AS first_seen FROM hb_http_activity WHERE (LOWER(user_agent) LIKE '{{bot_ua_fragment}}' OR LOWER(user_agent) LIKE '%curl%' OR LOWER(user_agent) LIKE '%wget%') AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, url_hostname, user_agent, src_endpoint_ip HAVING request_count > 100 ORDER BY request_count DESC
```
## corroboration-fanout
<!-- Corroborate on two surfaces at once -->
parallel:
- → suspicious-web-children
- → identity-mfa-fatigue
join: → agent-triage
## suspicious-web-children
<!-- Suspicious child processes from web servers -->
Find shells or discovery tools launched by web server processes on the probed hosts, indicating successful exploitation.
```sqlite target=endpoint role=detection-candidate params=(scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Shells or reconnaissance tools spawned by a web server. Silence indicates
no obvious command execution followed the probing phase.
reads:
- device_hostname
- process_name
- process_cmd_line
- parent_process_name
- user_name
- time
silence: not_evidence_of_absence
source: hb_process_activity
verified: dry-run
verified_at: '2026-10-08'
~~~
SELECT device_hostname, process_name, process_cmd_line, parent_process_name, user_name, time FROM hb_process_activity WHERE (LOWER(parent_process_name) LIKE '%httpd%' OR LOWER(parent_process_name) LIKE '%nginx%' OR LOWER(parent_process_name) LIKE '%w3wp%' OR LOWER(parent_process_name) LIKE '%tomcat%') AND (LOWER(process_name) IN ('cmd.exe', 'powershell.exe', 'sh', 'bash', 'whoami', 'id', 'curl', 'wget')) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```
## identity-mfa-fatigue
<!-- Identify MFA fatigue from probing IPs -->
Determine if the same source infrastructure used for probing is also attacking the identity layer via MFA prompt bombing.
```sqlite target=identity role=triage params=(probing_ips=probing_ips, lookback_days=lookback_days)
~~~yaml
expected: Spikes in authentication failures from the same IPs identified in the probing
phase. Silence indicates the probing and identity attacks are not coordinated from
the same source.
reads:
- actor_user_name
- src_endpoint_ip
- status_detail
- status_id
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-10-08'
~~~
SELECT actor_user_name, src_endpoint_ip, status_detail, COUNT(*) AS fail_count FROM hb_auth_signin WHERE status_id = 2 AND ('{{probing_ips}}' = '' OR instr(',' || '{{probing_ips}}' || ',', ',' || src_endpoint_ip || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY 1, 2, 3 HAVING fail_count > 15 ORDER BY fail_count DESC
```
## agent-triage
<!-- Evaluate coordinated agentic behavior -->
```agent target=hunter
cite: required
context:
- high-volume-bot-probing
- suspicious-web-children
- identity-mfa-fatigue
max_iterations: 6
objective: Determine if any host targeted in the probing phase shows suspicious process
execution and if the same source IPs are responsible for MFA prompt-bombing patterns.
success_criteria: A verdict of malicious, suspicious, or benign citing correlated
rows across at least two surfaces.
tools:
- endpoint
- identity
- web
```
## route-on-verdict
<!-- Route on agent verdict -->
if~: "the agent-triage verdict is malicious for at least one host or source IP" (confidence: high, judge=hunter)
then: → isolate-target
indeterminate: → analyst-validation
unavailable: → analyst-validation (blind_spot: no-identity-telemetry)
else: → close-out
## isolate-target
<!-- Isolate host and revoke sessions -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the endpoint and revoke any active sessions for users identified in the MFA fatigue triage.
```
→ analyst-validation
## analyst-validation
<!-- Analyst validation and tuning -->
```manual target=analyst
Review the cited rows. Verify if the volumetric probing aligns with a known vulnerability scan or a legitimate automated process. Update the bot_ua_fragment parameter if new agents were observed.
```
→ close-out
## close-out
<!-- Close out hunt -->
```manual target=analyst
Document the hosts targeted and whether any successful exploitation was suspected. Record any blind spots identified during the run.
```
→ 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.