Bypass of Legacy Identity Controls and Persistence via NHIs
An intruder has bypassed traditional MFA via session hijacking or push fatigue and established persistence using overprivileged non-human identities or standing administrative accounts.
Based on research by Proofpoint 2026-11-13 12 steps · 5 queries T1078 T1133 T1190 T1550 T1566
Brief
Why identity resilience matters
Proofpoint recently published 18 Outdated Identity And Access Management Assumptions To Retire, highlighting how traditional security boundaries have dissolved. Static MFA and permanent administrative rights create a false sense of security. Modern attackers do not break in; they log in using stolen sessions or by exhausting users through MFA fatigue. This hunt provides a structured way to verify if these identity-centric defenses are holding or if an intruder has already pivoted to persistent, non-human identities.
How the Hunt Flows
The hunt starts by scoping the environment for remote access gateways. It queries the software inventory for VPN and remote access packages to determine which hosts serve as the primary entry points for external traffic. Once gateways are identified, the hunt runs parallel queries to detect initial access anomalies. One query looks for MFA push fatigue: a sequence of multiple authentication failures followed by a single success for the same user and IP. Another query checks for outbound connections to known VPN indicators of compromise. An analyst triages these leads to confirm suspicious entry. This verdict then triggers the persistence phase. The hunt searches for rare sign-ins from non-human identities (NHIs) like service accounts or bots. It baselines these accounts to find instances where they appear on an unusual number of hosts or from new source IPs. Finally, the hunt pulls an inventory of standing administrative accounts. An agent correlates the initial access findings with any subsequent NHI or admin activity. If an account compromised via push fatigue is seen using service account credentials from the same infrastructure, the analyst confirms a malicious linkage.
Blind Spots
The hunt cannot determine if a specific session token was hijacked from a trusted device without debug-level IDP logs that track session identifiers. We also face a visibility gap regarding Just-In-Time (JIT) elevations. Without JIT logs, we cannot distinguish between a malicious actor using standing admin rights and a legitimate administrator performing unscheduled maintenance.
Steps
-
Identify Remote Access Gateways
Query · scopingIdentify hosts running VPN or remote access software to focus the later network traffic analysis.
reads hb_software_inventorysqlSELECT DISTINCT device_hostname, package_name, package_version FROM hb_software_inventory WHERE (LOWER(package_name) LIKE '%checkpoint%' OR LOWER(package_name) LIKE '%vpn%')What a hit looks like. A list of hosts acting as remote gateways. Silence indicates no managed VPN software is recorded in inventory.
-
Patterns of MFA Push Fatigue
Query · detection candidateIdentify accounts experiencing high failure rates followed by a successful login, typical of push fatigue.
reads hb_auth_signinsqlSELECT actor_user_name, src_endpoint_ip, activity_id, COUNT(*) AS count, MIN(time) AS first_event, MAX(time) AS last_event FROM hb_auth_signin WHERE activity_id IN (1, 5) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY actor_user_name, src_endpoint_ip, activity_idWhat a hit looks like. High failure counts (activity_id 5) coupled with a final success (activity_id 1) for the same user and IP.
-
Connections to VPN IOC Domains
Query · enrichmentCorroborate whether identified gateways or other hosts are communicating with the reported VPN IOC domain.
reads hb_network_connectionsqlSELECT time, device_hostname, dst_endpoint_hostname, dst_endpoint_ip, dst_endpoint_port FROM hb_network_connection WHERE instr(',' || '{{vpn_domains}}' || ',', ',' || LOWER(dst_endpoint_hostname) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')What a hit looks like. Outbound traffic to vpn.com or related domains from internal hosts. Silence indicates no traffic to these domains in the window.
-
Triage Initial Access Lead
Agent triageEvaluate whether the MFA patterns and network traffic indicate a successful session hijack or gateway compromise.
-
Rare Non-Human Identity Sign-ins
Query · baselineIdentify service accounts signing in from unusual or rare source IPs, which may indicate attacker reuse.
reads hb_auth_signinsqlSELECT actor_user_name, src_endpoint_ip, COUNT(DISTINCT device_hostname) AS host_count, MIN(time) AS first_seen FROM hb_auth_signin WHERE (LOWER(actor_user_name) LIKE 'svc_%' OR LOWER(actor_user_name) LIKE '%bot%') AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY actor_user_name, src_endpoint_ip HAVING host_count < 3What a hit looks like. Service accounts appearing on a small number of hosts or new IPs. Silence means no service accounts matched naming patterns in the window.
-
Inventory of Standing Administrative Privileges
Query · enrichmentRetrieve a list of accounts with permanent administrative roles to cross-reference with early-stage anomalies.
reads hb_userssqlSELECT id, name, email, privileged, status, provider FROM hb_users WHERE (LOWER(privileged) = 'true') AND status = 'active'What a hit looks like. A list of standing administrators. The agent will compare these against identities performing suspicious transactions.
-
Triage Identity Persistence
Agent triageCorrelate early access anomalies with follow-on service account and admin activity to confirm an ongoing threat.
-
Route on Persistence Verdict
DecisionDirect the response based on whether a confirmed identity compromise has reached the persistence phase.
-
Suspend Compromised Accounts
Response actionImmediately revoke access for compromised users and service accounts to stop further lateral movement.
-
IAM Governance Review
Analyst taskPerform a broader audit to identify systematic failures in identity resilience and governance.
-
Hunt Close-out
Analyst taskDocument findings and telemetry gaps discovered during the hunt.
Coverage
Scenario coverage
| Stage | Covered | How, or why not |
|---|---|---|
| AitM Phishing and Push Fatigue T1566 |
Yes | mfa-push-fatigue, triage-access |
| Exploitation of External Remote Services T1133 · T1190 |
Yes | scoping-vpn-gateways, vpn-ioc-traffic |
| Session Token Theft and MFA Bypass T1550 |
Yes | triage-access |
| Abuse of Non-Human Identities T1133 |
Yes | rare-nhi-signins, triage-persistence |
| Exploitation of Standing Privileges T1078 |
Yes | standing-admin-inventory, triage-persistence |
Blind spots
- Needs Advanced IDP logging for session-specific attributes. Without session-level tracking, attackers can mask shifts using proxies that mimic a user's known geolocation. It would answer Was a specific session token hijacked from a trusted device?. Remediation: Enable and ingest debug-level IDP logs including user_agent and session identifiers.
- Needs Just-In-Time (JIT) access logs from a PAM solution. In the absence of JIT logs, malicious use of standing admin rights is indistinguishable from legitimate maintenance. It would answer Was an administrative action preceded by a legitimate JIT elevation request?. Remediation: Integrate a PAM solution that logs JIT elevations into the primary telemetry stream.
Parameters & data
Parameters
| Parameter | Type | Default | What it is |
|---|---|---|---|
lookback_days | number | 14 | Days of history to examine. |
scope_hosts | list[host] | — | Optional list of hostnames to focus the network search. |
vpn_domains | list[domain] | vpn.com | Known VPN or remote access domains to monitor. |
Telemetry
| Source | Category | Telemetry |
|---|---|---|
| Endpoint telemetry (hb_ surfaces) | endpoint | endpoint |
| Identity / sign-in telemetry | identity | identity |
| Network telemetry | network | network |
Source
---
analysis: A single rule might catch a login from a new country, but it cannot weigh
that against a subsequent shift to service-account behavior or the context of a
long-standing unrotated admin credential. This hunt uses a phased flow and two agents
to bridge the gap between individual authentication events and the lifecycle of
identity abuse.
blind_spots:
- id: no-session-details
owner: IAM Operations
question: Was a specific session token hijacked from a trusted device?
remediation: Enable and ingest debug-level IDP logs including user_agent and session
identifiers.
requires: Advanced IDP logging for session-specific attributes
risk: Without session-level tracking, attackers can mask shifts using proxies that
mimic a user's known geolocation.
stage: defense-evasion-session-hijacking
- id: jit-log-absence
owner: Security Engineering
question: Was an administrative action preceded by a legitimate JIT elevation request?
remediation: Integrate a PAM solution that logs JIT elevations into the primary
telemetry stream.
requires: Just-In-Time (JIT) access logs from a PAM solution
risk: In the absence of JIT logs, malicious use of standing admin rights is indistinguishable
from legitimate maintenance.
stage: privilege-escalation-standing-admin
coverage:
- stage: initial-access-aitm-phishing
status: covered
steps:
- mfa-push-fatigue
- triage-access
- stage: initial-access-vpn-exploitation
status: covered
steps:
- scoping-vpn-gateways
- vpn-ioc-traffic
- stage: defense-evasion-session-hijacking
status: covered
steps:
- triage-access
- stage: persistence-non-human-identities
status: covered
steps:
- rare-nhi-signins
- triage-persistence
- stage: privilege-escalation-standing-admin
status: covered
steps:
- standing-admin-inventory
- triage-persistence
guardrails:
claims: no_unsupported
evidence: citation_required
missing_data: not_benign
telemetry: untrusted
hunt:
applicability: campaign-specific
handoff: promote-to-detection
justification: Modern identity attacks frequently bypass static MFA and exploit
the lack of governance over non-human identities; a negative result confirms that
identity resilience controls are effective.
methodology: model-assisted
trigger: intel-report
hypothesis: An intruder has bypassed traditional MFA via session hijacking or push
fatigue and established persistence using overprivileged non-human identities or
standing administrative accounts.
labels:
- hunt
- attack.t1566
- attack.t1133
- attack.t1190
- attack.t1550
- attack.t1078
- defense evasion
- initial access
- persistence
- privilege escalation
name: Bypass of Legacy Identity Controls and Persistence via NHIs
parameters:
lookback_days:
default: '14'
description: Days of history to examine.
type: number
scope_hosts:
default: []
description: Optional list of hostnames to focus the network search.
type: list[host]
vpn_domains:
default:
- vpn.com
description: Known VPN or remote access domains to monitor.
from:
kind: article
observed: '2026-11-10'
ref: proofpoint-iam-assumptions
type: list[domain]
provenance:
authors:
- name: Huntbase hunt generation
org: huntbase.io
generated:
by: huntbase-hunt-generation
from: https://www.proofpoint.com/us/newsroom/news/18-outdated-identity-and-access-management-assumptions-retire
gates:
- dry-run
- lint
- critic
model: hb_google/gemini-3-flash-preview
rationale: Start with internet-facing gateways identified in software inventory; focus
the identity search on accounts with privileged status if the estate size requires
narrowing.
references:
- name: "Proofpoint \u2014 18 Outdated Identity And Access Management Assumptions\
\ To Retire"
url: https://www.proofpoint.com/us/newsroom/news/18-outdated-identity-and-access-management-assumptions-retire
related:
- hunt: non-human-identity-governance-audit
reason: This hunt identifies active abuse; a full audit is required to identify
all overprivileged NHIs regardless of current activity.
relation: follows
scenario:
stages:
- name: AitM Phishing and Push Fatigue
observables:
- Adversary-in-the-middle (AitM) proxies
- SMS code interception
- MFA push notification fatigue (multiple rapid requests)
- Phishing domains mimicking login portals
slug: initial-access-aitm-phishing
tactic: initial-access
techniques:
- T1566
- name: Exploitation of External Remote Services
observables:
- VPN connections (vpn.com)
- Checkpoint VPN gateway logs
- Exploitation of vulnerabilities in internet-facing access gateways
slug: initial-access-vpn-exploitation
tactic: initial-access
techniques:
- T1133
- T1190
- name: Session Token Theft and MFA Bypass
observables:
- Captured session tokens used from new/unknown devices
- Bypassing push-based MFA via fatigue
- Login from anonymizing proxies or unusual geolocations
slug: defense-evasion-session-hijacking
tactic: defense-evasion
techniques:
- T1550
- name: Abuse of Non-Human Identities
observables:
- Service accounts with standing overprivileged access
- AI agents performing actions outside of normal user intent
- Orchestrator sub-agents acting within application processes
- Stale service accounts from offboarded employees
slug: persistence-non-human-identities
tactic: persistence
techniques:
- T1133
- name: Exploitation of Standing Privileges
observables:
- Permanent administrative credentials used for high-impact tasks
- Lack of Just-In-Time (JIT) elevation for sensitive commands
- Administrative access to service accounts
slug: privilege-escalation-standing-admin
tactic: privilege-escalation
techniques:
- T1078
summary: This scenario represents a modern identity-focused intrusion where attackers
bypass traditional MFA via adversary-in-the-middle phishing or push-fatigue tactics
to hijack sessions. The campaign transitions from human identity compromise to
long-term persistence by exploiting overprivileged non-human identities (NHIs)
and standing administrative permissions that lack continuous verification.
severity: medium
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
network:
category: network
name: Network telemetry
telemetry:
- network
tlp: clear
type: investigation
---
# Bypass of Legacy Identity Controls and Persistence via NHIs
An adversary steals active sessions or triggers push fatigue to bypass traditional authentication hurdles. The hunt first identifies internet-facing gateways and scans for high-frequency MFA failures that culminate in a single success. By correlating these access anomalies with the behavior of non-human identities and standing administrative accounts, the hunt identifies identities an intruder has repurposed for persistence. An analyst then reviews the linked chain of events to revoke compromised credentials and recommend phishing-resistant controls.
## scoping-vpn-gateways
<!-- Identify Remote Access Gateways -->
Identify hosts running VPN or remote access software to focus the later network traffic analysis.
```sqlite target=endpoint role=scoping
~~~yaml
expected: A list of hosts acting as remote gateways. Silence indicates no managed
VPN software is recorded in inventory.
reads:
- device_hostname
- package_name
- package_version
silence: not_evidence_of_absence
source: hb_software_inventory
verified: dry-run
verified_at: '2026-11-13'
~~~
SELECT DISTINCT device_hostname, package_name, package_version FROM hb_software_inventory WHERE (LOWER(package_name) LIKE '%checkpoint%' OR LOWER(package_name) LIKE '%vpn%')
```
## initial-access-parallel
<!-- Monitor for Early-Stage Identity Bypass -->
parallel:
- → mfa-push-fatigue
- → vpn-ioc-traffic
join: → triage-access
## mfa-push-fatigue
<!-- Patterns of MFA Push Fatigue -->
Identify accounts experiencing high failure rates followed by a successful login, typical of push fatigue.
```sqlite target=identity role=detection-candidate params=(lookback_days=lookback_days)
~~~yaml
expected: High failure counts (activity_id 5) coupled with a final success (activity_id
1) for the same user and IP.
reads:
- actor_user_name
- src_endpoint_ip
- activity_id
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-11-13'
~~~
SELECT actor_user_name, src_endpoint_ip, activity_id, COUNT(*) AS count, MIN(time) AS first_event, MAX(time) AS last_event FROM hb_auth_signin WHERE activity_id IN (1, 5) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY actor_user_name, src_endpoint_ip, activity_id
```
## vpn-ioc-traffic
<!-- Connections to VPN IOC Domains -->
Corroborate whether identified gateways or other hosts are communicating with the reported VPN IOC domain.
```sqlite target=network role=enrichment params=(vpn_domains=vpn_domains, scope_hosts=scope_hosts, lookback_days=lookback_days)
~~~yaml
expected: Outbound traffic to vpn.com or related domains from internal hosts. Silence
indicates no traffic to these domains in the window.
reads:
- time
- device_hostname
- dst_endpoint_hostname
- dst_endpoint_ip
- dst_endpoint_port
silence: not_evidence_of_absence
source: hb_network_connection
verified: dry-run
verified_at: '2026-11-13'
~~~
SELECT time, device_hostname, dst_endpoint_hostname, dst_endpoint_ip, dst_endpoint_port FROM hb_network_connection WHERE instr(',' || '{{vpn_domains}}' || ',', ',' || LOWER(dst_endpoint_hostname) || ',') > 0 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```
## triage-access
<!-- Triage Initial Access Lead -->
```agent target=hunter
cite: required
context:
- mfa-push-fatigue
- vpn-ioc-traffic
max_iterations: 5
objective: Determine if the patterns of MFA fatigue and VPN connections identify compromised
user accounts or exposed gateways.
success_criteria: A per-user or per-host verdict of suspicious or malicious, citing
specific failure/success sequences or IOC connections.
tools:
- endpoint
- identity
- network
```
## persistence-parallel
<!-- Hunt for Identity Persistence -->
parallel:
- → rare-nhi-signins
- → standing-admin-inventory
join: → triage-persistence
## rare-nhi-signins
<!-- Rare Non-Human Identity Sign-ins -->
Identify service accounts signing in from unusual or rare source IPs, which may indicate attacker reuse.
```sqlite target=identity role=baseline params=(lookback_days=lookback_days)
~~~yaml
baseline:
compare: first_seen
window: '{{lookback_days}}d'
expected: Service accounts appearing on a small number of hosts or new IPs. Silence
means no service accounts matched naming patterns in the window.
prevalence:
by: device_hostname
key:
- actor_user_name
- src_endpoint_ip
rare_below: 3
reads:
- actor_user_name
- src_endpoint_ip
- device_hostname
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-11-13'
~~~
SELECT actor_user_name, src_endpoint_ip, COUNT(DISTINCT device_hostname) AS host_count, MIN(time) AS first_seen FROM hb_auth_signin WHERE (LOWER(actor_user_name) LIKE 'svc_%' OR LOWER(actor_user_name) LIKE '%bot%') AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY actor_user_name, src_endpoint_ip HAVING host_count < 3
```
## standing-admin-inventory
<!-- Inventory of Standing Administrative Privileges -->
Retrieve a list of accounts with permanent administrative roles to cross-reference with early-stage anomalies.
```sqlite target=identity role=enrichment
~~~yaml
expected: A list of standing administrators. The agent will compare these against
identities performing suspicious transactions.
reads:
- id
- name
- email
- privileged
- status
- provider
silence: not_evidence_of_absence
source: hb_users
verified: dry-run
verified_at: '2026-11-13'
~~~
SELECT id, name, email, privileged, status, provider FROM hb_users WHERE (LOWER(privileged) = 'true') AND status = 'active'
```
## triage-persistence
<!-- Triage Identity Persistence -->
```agent target=hunter
cite: required
context:
- triage-access
- rare-nhi-signins
- standing-admin-inventory
max_iterations: 6
objective: Determine if the suspicious access identified in the first triage stage
has transitioned into persistence through service accounts or standing administrative
abuse.
success_criteria: A final malicious verdict if an account compromised via fatigue/session
theft is seen interacting with or utilizing administrative or service account privileges
from the same source infrastructure.
tools:
- endpoint
- identity
- network
```
## route-on-risk
<!-- Route on Persistence Verdict -->
if~: "The triage-persistence verdict identifies a malicious linkage between initial access anomalies and subsequent NHI or standing administrative abuse." (confidence: high, judge=hunter)
then: → suspend-account
indeterminate: → iam-governance-review
unavailable: → iam-governance-review (blind_spot: no-session-details)
else: → iam-governance-review
## suspend-account
<!-- Suspend Compromised Accounts -->
```action target=identity
~~~yaml
approval: required
~~~
Suspend the primary user account and any service accounts identified by the agent as being under attacker control. Revoke all active session tokens immediately.
```
→ iam-governance-review
## iam-governance-review
<!-- IAM Governance Review -->
```manual target=analyst
Evaluate why standing privileges were available to the compromised user. Identify service accounts that lack distinct ownership or periodic review. Propose moving to FIDO2 or phishing-resistant MFA for the affected groups.
```
→ close-out
## close-out
<!-- Hunt Close-out -->
```manual target=analyst
Document all malicious activity confirmed. Record any telemetry blind spots identified, such as lack of session-level IDP tracking.
```
→ 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.