Back to Intelligence

Autonomous AI Agent Credential Harvesting Campaign: Defending Identity Against Machine-Speed Attacks (GTIG 2026)

SA
Security Arsenal Team
September 8, 2026
11 min read

Google Threat Intelligence Group (GTIG) has documented what many of us in IR have been bracing for: a financially motivated threat actor deploying an autonomous, multi-agent attack framework to execute a large-scale credential harvesting campaign — compromising thousands of credentials in under six hours.

Let that sink in. A credential harvesting operation that would previously have taken a human-run crew days of scripting, proxy rotation, target list management, and manual pivoting was executed end-to-end by orchestrated AI agents in a single afternoon shift. GTIG also notes that attackers with diverse motivations — not just this financially motivated group — are now actively targeting proprietary AI systems themselves, meaning this is a two-sided problem: AI as an attack accelerator, and AI infrastructure as a target.

If your detection strategy is still calibrated around human-speed attacker behavior — a handful of failed logons per minute, obvious password spray patterns spread over hours, slow enumeration — you are already behind. Machine-speed offense requires machine-speed defense.

Technical Analysis: How a Multi-Agent Credential Campaign Works

Based on the GTIG reporting, the observed framework chains multiple autonomous agents, each handling a distinct phase of the attack lifecycle. From a defender's perspective, here's what that pipeline looks like in observable terms:

Phase 1 — Reconnaissance and Target Enumeration

Agents autonomously enumerate target organizations, harvest email formats and employee names from public sources, and build validated target lists. This happens at scale and speed — expect enumeration traffic that looks like distributed, low-and-slow scraping from rotating infrastructure, but executed continuously rather than in human work sessions.

Phase 2 — Credential Attack Execution

This is where the telemetry gets loud if you're watching the right places:

  • Password spraying at machine velocity: Instead of the classic 3-5 attempts per account per hour (tuned to avoid lockout), AI-orchestrated spraying distributes attempts intelligently across thousands of accounts and proxy endpoints simultaneously, staying under per-account thresholds while generating enormous aggregate failure volume.
  • Credential stuffing from breach corpora: Stolen credential pairs from prior breaches are validated against identity providers (Microsoft Entra ID, Okta, Google Workspace, VPN concentrators, OWA) at rates no human team could sustain.
  • Adaptive MFA handling: Agents dynamically shift to MFA fatigue (push bombing), AiTM phishing kit redirection, or session token theft when they detect MFA enforcement — a decision loop that used to require a human operator.

Phase 3 — Post-Compromise Pivot

Validated credentials are immediately tested against adjacent services: VPN portals, SaaS tenants, cloud consoles, and email (for internal phishing pre-positioning and financial fraud, consistent with the financially motivated attribution). The six-hour window includes this pivot — meaning by the time your SIEM correlates the spray, the actor may already be inside.

Why Traditional Controls Strain Here

ControlWhy AI-Agent Campaigns Stress It
Account lockout policiesPer-account thresholds avoided by spreading attempts across thousands of accounts
Rate limiting per IPDistributed residential proxy / botnet infrastructure rotates source IPs
Basic MFA (push/SMS)Push bombing and AiTM phishing bypass or socially engineer it at scale
Manual SOC triageAlert volume generated in minutes overwhelms human-speed queues

Exploitation status: This is confirmed, in-the-wild activity observed by GTIG — not a theoretical capability. There is no CVE here; this is a technique-level threat against identity infrastructure, and every organization with internet-facing authentication is in scope.

Detection & Response

The detection opportunity is real: machine-speed attacks are fast, but they are also loud in aggregate. The key is correlation across accounts and time windows, not per-event thresholds.

Sigma Rules

YAML
---
title: High-Volume Failed Network Authentications From Single Source
description: Detects a single source generating failed logons against multiple distinct accounts within a short window, consistent with AI-orchestrated password spraying that spreads attempts across many accounts while reusing infrastructure. Tune the per-source aggregation in your SIEM pipeline.
status: experimental
references:
  - https://thehackernews.com/2026/09/autonomous-ai-agents-compromise.html
  - https://attack.mitre.org/techniques/T1110/003/
author: Security Arsenal
date: 2026/09/15
tags:
  - attack.credential_access
  - attack.t1110.003
logsource:
  product: windows
  service: security
detection:
  selection:
    EventID: 4625
    LogonType:
      - 3
      - 10
    SubStatus: '0xC000006A'
  filter_known_sprays:
    IpAddress:
      - '127.0.0.1'
      - '-'
  condition: selection and not filter_known_sprays
falsepositives:
  - Misconfigured service accounts with stale credentials
  - Mobile email clients with expired passwords
level: medium
---
title: LSASS Memory Access By Non-System Process
description: Detects credential dumping attempts against LSASS memory, a likely post-compromise step after AI-agent credential campaigns achieve initial access. Legitimate access is limited to a small set of system and security tooling processes.
status: experimental
references:
  - https://attack.mitre.org/techniques/T1003/001/
author: Security Arsenal
date: 2026/09/15
tags:
  - attack.credential_access
  - attack.t1003.001
logsource:
  category: process_access
  product: windows
detection:
  selection:
    TargetImage|endswith: '\lsass.exe'
    GrantedAccess|contains:
      - '0x1010'
      - '0x1410'
      - '0x1438'
      - '0x143a'
      - '0x1fffff'
  filter_system:
    SourceImage|endswith:
      - '\wininit.exe'
      - '\csrss.exe'
      - '\MsMpEng.exe'
      - '\svchost.exe'
  condition: selection and not filter_system
falsepositives:
  - EDR and DLP tooling with legitimate LSASS inspection
  - Backup and forensic agents
level: high
---
title: Browser Credential Store Access By Non-Browser Process
description: Detects non-browser processes reading Chromium or Firefox credential databases (Login Data, Cookies, logins.json), a common technique for harvesting additional credentials and session tokens after initial access. AI-agent campaigns that validate stolen browser-stored credentials make this a high-value post-compromise signal.
status: experimental
references:
  - https://attack.mitre.org/techniques/T1555/003/
  - https://attack.mitre.org/techniques/T1539/
author: Security Arsenal
date: 2026/09/15
tags:
  - attack.credential_access
  - attack.t1555.003
  - attack.t1539
logsource:
  category: file_event
  product: windows
detection:
  selection_paths:
    TargetFilename|contains:
      - '\Google\Chrome\User Data\'
      - '\Microsoft\Edge\User Data\'
      - '\BraveSoftware\Brave-Browser\User Data\'
    TargetFilename|endswith:
      - '\Login Data'
      - '\Cookies'
      - '\Web Data'
      - '\logins.json'
  filter_browsers:
    Image|endswith:
      - '\chrome.exe'
      - '\msedge.exe'
      - '\brave.exe'
      - '\firefox.exe'
      - '\MsMpEng.exe'
  condition: selection_paths and not filter_browsers
falsepositives:
  - EDR/AV scanning of browser profiles
  - Enterprise password managers or backup agents
level: high

KQL Hunt — Microsoft Sentinel / Defender

This query hunts the signature behavior of the GTIG-observed campaign: a single source failing authentication against many distinct accounts in a short window (spray), optionally followed by a success from the same or related infrastructure (validated credential). Run it against SigninLogs in Sentinel; if you ingest Okta, VPN, or other IdP logs via CEF/Syslog, adapt to CommonSecurityLog.

KQL — Microsoft Sentinel / Defender
// Machine-speed password spray / credential stuffing detection
// Looks for sources failing auth against many distinct users in a 10-minute bin,
// then checks whether any success followed from the same source IP.
let window = 10m;
let failureThreshold = 15;   // distinct users failing from one IP per window
let failures = SigninLogs
| where TimeGenerated > ago(24h)
| where ResultType != 0
| summarize
    FailedUsers = dcount(UserPrincipalName),
    FailedUserList = make_set(UserPrincipalName, 50),
    FailureCount = count(),
    Apps = make_set(AppDisplayName, 10)
    by IPAddress, bin(TimeGenerated, window)
| where FailedUsers >= failureThreshold;
let successes = SigninLogs
| where TimeGenerated > ago(24h)
| where ResultType == 0
| project SuccessTime = TimeGenerated, IPAddress, UserPrincipalName, AppDisplayName,
    UserAgent, LocationDetails;
failures
| join kind=leftouter successes on IPAddress
| extend SprayThenSuccess = SuccessTime between (TimeGenerated .. TimeGenerated + 2h)
| project TimeGenerated, IPAddress, FailedUsers, FailureCount, Apps,
    SprayThenSuccess, SuccessTime, UserPrincipalName, AppDisplayName, LocationDetails
| order by FailedUsers desc;

Supplementary endpoint hunt for post-compromise token/cookie theft on Windows endpoints via Defender:

KQL — Microsoft Sentinel / Defender
// Hunt for non-browser processes touching Chromium credential stores
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where FolderPath has_any ("Login Data", "Cookies", "Web Data")
| where FolderPath has_any ("\\Google\\Chrome\\", "\\Microsoft\\Edge\\", "\\BraveSoftware\\")
| where InitiatingProcessFileName !in~ ("chrome.exe", "msedge.exe", "brave.exe", "MsMpEng.exe")
| where InitiatingProcessFileName !endswith ".tmp"
| summarize FileHits = count(),
    Files = make_set(FileName, 10)
    by DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine
| order by FileHits desc;

Velociraptor VQL

Use this hunt across your fleet to identify processes — particularly unusual binaries or scripts spawned from non-standard locations — that have open handles or network behavior consistent with credential validation tooling, plus browser credential store reads:

VQL — Velociraptor
-- Fleet-wide hunt: processes accessing browser credential stores or
-- holding suspicious numbers of outbound TLS connections to IdP endpoints
SELECT Pid, Name, Exe, CommandLine, Username,
       CreateTime,
       read_file(filename=Exe, length=0) AS _ExeExists
FROM pslist()
WHERE CommandLine =~ '(?i)(login data|cookies|logins\.json|key4\.db|ntds\.dit|lsass)'
   OR Exe =~ '(?i)(temp|tmp|appdata\\\\local\\\\temp|programdata\\\\[^\\\\]+\.(exe|bat|ps1))'
VQL — Velociraptor
-- Identify endpoints with abnormally high concurrent outbound 443 connections
-- from a single non-browser process (credential validation at machine speed)
SELECT Pid, Name, Status,
       count(group=Pid) AS ConnCount,
       set(items=RemoteAddress.IP, maximum=20) AS RemoteIPs
FROM netstat()
WHERE RemotePort = 443
  AND Status =~ 'ESTAB'
  AND Name !~ '(?i)(chrome|msedge|firefox|brave|teams|onedrive|outlook|svchost)'
GROUP BY Pid, Name, Status
HAVING ConnCount > 40
ORDER BY ConnCount DESC

Remediation / Hardening Script

The single highest-leverage control against credential campaigns is phishing-resistant MFA coverage and elimination of legacy authentication. This PowerShell audit uses the Microsoft Graph SDK to surface exactly where your gaps are — users without strong MFA registered, and recent sign-ins via legacy protocols that bypass Conditional Access.

PowerShell
# Requires: Microsoft.Graph PowerShell SDK, scopes: User.Read.All,
#           UserAuthenticationMethod.Read.All, AuditLog.Read.All, Policy.Read.All
# Install-Module Microsoft.Graph -Scope CurrentUser

Connect-MgGraph -Scopes "User.Read.All","UserAuthenticationMethod.Read.All","AuditLog.Read.All","Policy.Read.All"

# 1. Report users WITHOUT phishing-resistant MFA methods registered
$weakMethods = @("password", "sms", "voice")
$users = Get-MgUser -All -Property "Id,DisplayName,UserPrincipalName,AccountEnabled" | Where-Object AccountEnabled -eq $true
$report = foreach ($u in $users) {
    $methods = (Get-MgUserAuthenticationMethod -UserId $u.Id -ErrorAction SilentlyContinue).AdditionalProperties.'@odata.type'
    $strong = $methods | Where-Object { $_ -match 'fido2|windowsHello|microsoftAuthenticator|certificateBased' }
    [PSCustomObject]@{
        User            = $u.UserPrincipalName
        StrongMFA       = [bool]$strong
        RegisteredTypes = ($methods -replace '#microsoft.graph.','') -join ';'
    }
}
$report | Where-Object { -not $_.StrongMFA } | Export-Csv -Path ".\Users_Without_PhishingResistantMFA.csv" -NoTypeInformation
Write-Host "Users lacking phishing-resistant MFA: $(( $report | Where-Object { -not $_.StrongMFA } ).Count) / $($users.Count)" -ForegroundColor Yellow

# 2. Flag legacy-auth sign-ins in the last 7 days (bypass Conditional Access)
$start = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ")
$legacy = Get-MgAuditLogSignIn -All -Filter "createdDateTime ge $start" -Property "ClientAppUsed,Status,IPAddress,UserPrincipalName" |
    Where-Object { $_.ClientAppUsed -in @("Exchange ActiveSync","IMAP","POP3","SMTP","MAPI Over HTTP","Other clients") -and $_.Status.ErrorCode -eq 0 }
$legacy | Select-Object CreatedDateTime, UserPrincipalName, IPAddress, ClientAppUsed |
    Export-Csv -Path ".\LegacyAuth_Successes_7d.csv" -NoTypeInformation
Write-Host "Successful legacy-auth sign-ins (7d): $($legacy.Count)" -ForegroundColor Red

# 3. Verify a Conditional Access policy blocks legacy authentication
$caPolicies = Get-MgIdentityConditionalAccessPolicy
$legacyBlock = $caPolicies | Where-Object {
    $_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -or
    $_.Conditions.ClientAppTypes -contains "other"
} | Where-Object { $_.GrantControls.BuiltInControls -contains "block" -and $_.State -eq "enabled" }
if (-not $legacyBlock) {
    Write-Host "WARNING: No enabled CA policy blocking legacy authentication found. Create one immediately." -ForegroundColor Red
} else {
    Write-Host "Legacy auth block CA policy present: $($legacyBlock.DisplayName -join ', ')" -ForegroundColor Green
}

Remediation and Hardening Priorities

There is no patch for this threat — it is an operational tempo problem, not a software bug. Prioritize in this order:

Immediate (24-72 hours):

  1. Deploy the identity-layer detections above. Tune the spray thresholds to your baseline; investigate any source failing auth against 15+ distinct users in 10 minutes.
  2. Enforce MFA everywhere it isn't. Any internet-facing authentication path (VPN, OWA, SSO, RDP gateways) without MFA is a guaranteed entry point in a campaign like this.
  3. Block legacy authentication (IMAP, POP3, SMTP basic auth, MAPI) via Conditional Access — these protocols bypass MFA entirely and are the first thing automated validators test.
  4. Enable number matching and disable SMS/voice as MFA factors where push-based MFA is in use; push bombing is the standard agent response to enforced MFA.

Short term (1-4 weeks): 5. Migrate to phishing-resistant MFA — FIDO2/passkeys or certificate-based authentication — starting with privileged users, finance, and executives. AiTM phishing kits defeat OTP and push; they do not defeat WebAuthn. 6. Implement token protection / Continuous Access Evaluation for Microsoft 365 workloads to limit the value of stolen session tokens. 7. Tighten IdP throttling and anomaly policies: impossible travel, atypical velocity (one source touching many accounts), and impossible-tenant sign-ins. In Entra ID, ensure Identity Protection risk policies are set to block (not just flag) medium+ sign-in risk. 8. Rotate credentials exposed in known breach corpora and enforce banned-password lists (Entra Password Protection or equivalent) — stuffing campaigns live and die on reused passwords.

Structural: 9. Reduce credential blast radius: eliminate standing privilege via PAM/JIT access, shorten session lifetimes, and segment SaaS access with device-compliance conditions. 10. Automate your response: when a spray is detected, the containment action (IP block at the IdP/edge, forced password reset for touched accounts, session revocation) must be a SOAR playbook executed in seconds — because the attacker's pivot is already underway. 11. Monitor your own AI estate: GTIG's parallel observation — attackers targeting proprietary AI systems — means your LLM endpoints, API keys, and model-serving infrastructure need the same identity hardening and logging as any other crown-jewel asset.

The Bottom Line

The six-hour credential campaign is not an anomaly — it is the new baseline for financially motivated intrusion tempo. Defenders who win this fight will do it on three axes: phishing-resistant authentication that removes the credential as a usable artifact, correlated identity telemetry that sees aggregate machine-speed behavior rather than individual events, and automated containment that operates at the same speed as the adversary. If your mean-time-to-contain an identity compromise is measured in hours, you are now defending at exactly the speed the attacker has already finished.

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

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