← Back to Explore
elasticlowTTP
Entra ID Windows Hello for Business Credential Registered
Identifies the first-seen registration of a Windows Hello for Business (WHfB) credential for a Microsoft Entra ID user from a given source ASN in a tenant, based on a prefixed historic window. Enrollment is commonly part of legitimate onboarding or passwordless rollout and is not inherently malicious. Adversaries who have obtained a token that satisfies fresh (NGC) multi-factor authentication, for example by borrowing an existing WHfB key or passkey, can also enroll their own WHfB credential to establish durable, phishing-resistant persistence that survives password resets and standard session revocation. Correlate first-seen enrollments with the sign-in and device state that preceded them.
Detection Query
data_stream.dataset: "azure.auditlogs" and
azure.auditlogs.operation_name: "Add Windows Hello for Business credential" and
event.outcome: ("Success" or "success") and
azure.tenant_id: * and
azure.auditlogs.properties.initiated_by.user.userPrincipalName: * and
source.as.number: *
Author
Elastic
Created
2026/08/07
Data Sources
AzureEntra ID Audit LogsMicrosoft Entra IDMicrosoft Entra ID Audit Logslogs-azure.auditlogs-*
Tags
Domain: CloudDomain: IdentityPlatform: Entra IDUse Case: Identity and Access AuditUse Case: Threat DetectionTactic: PersistenceRule Type: New TermsData Source: AzureData Source: Entra ID Audit LogsData Source: Microsoft Entra IDData Source: Microsoft Entra ID Audit LogsResources: Investigation Guide
Raw Content
[metadata]
creation_date = "2026/08/07"
integration = ["azure"]
maturity = "production"
updated_date = "2026/09/18"
[rule]
author = ["Elastic"]
description = """
Identifies the first-seen registration of a Windows Hello for Business (WHfB) credential for a Microsoft Entra ID user
from a given source ASN in a tenant, based on a prefixed historic window. Enrollment is commonly part of legitimate
onboarding or passwordless rollout and is not inherently malicious. Adversaries who have obtained a token that satisfies
fresh (NGC) multi-factor authentication, for example by borrowing an existing WHfB key or passkey, can also enroll their
own WHfB credential to establish durable, phishing-resistant persistence that survives password resets and standard
session revocation. Correlate first-seen enrollments with the sign-in and device state that preceded them.
"""
false_positives = [
"""
Legitimate WHfB and passwordless onboarding commonly generate this event, especially for new users or users
enrolling from a new network ASN. This rule fires only on first-seen combinations of tenant, user, and source ASN
over 14 days. Investigate unexpected ASNs, users outside the enrollment population, or enrollments preceded by
anomalous sign-ins.
""",
]
from = "now-9m"
index = ["logs-azure.auditlogs-*"]
language = "kuery"
license = "Elastic License v2"
name = "Entra ID Windows Hello for Business Credential Registered"
note = """## Triage and analysis
### Investigating Entra ID Windows Hello for Business Credential Registered
This is a first-seen (new_terms) signal: a WHfB credential was registered for a tenant/user/source-ASN combination not observed in the prior 14 days. Enrollment is often legitimate onboarding, but adversaries abuse the same action as persistence - after borrowing an existing WHfB key or passkey to satisfy fresh MFA, they enroll their own credential, which survives password resets and ordinary session revocation.
### Possible investigation steps
- Identify the target (`target_resources.0.user_principal_name`) and initiator (`initiated_by.user.userPrincipalName`), confirm whether WHfB enrollment was expected, and check whether the source ASN is new for that user.
- Correlate with `azure.signinlogs` shortly before for a deviceless WHfB/passkey sign-in, device-code flow, or attacker device registration/PRT issuance; an additional credential from a new ASN on an established account is more suspicious. Examine the preceding sign-in's source IP/geo and user agent for automation or hosting/VPS origins.
### False positive analysis
- First-time WHfB enrollment during onboarding/passwordless rollout is expected; repeat enrollments from the same tenant/user/ASN within 14 days don't fire.
- Users traveling or switching ISP/VPN may appear as a new ASN - validate against known networks before treating as suspicious.
### Response and remediation
- If unauthorized, delete the WHfB credential and any attacker-registered device via Graph or the Entra portal, revoke sessions and refresh tokens (delete devices first, to break device-bound PRT persistence), reset credentials, and re-enroll from a trusted device.
- Review the sign-in that authorized the enrollment to determine the initial access vector.
"""
references = ["https://dirkjanm.io/borrowing-windows-hello-keys/"]
risk_score = 21
rule_id = "8c6f8cca-f730-4cdd-93a7-d65f087a4116"
setup = """#### Required Microsoft Entra ID Audit Logs
This rule requires the Azure integration with Microsoft Entra ID Audit logs enabled and collected via Azure Event Hub.
"""
severity = "low"
tags = [
"Domain: Cloud",
"Domain: Identity",
"Platform: Entra ID",
"Use Case: Identity and Access Audit",
"Use Case: Threat Detection",
"Tactic: Persistence",
"Rule Type: New Terms",
"Data Source: Azure",
"Data Source: Entra ID Audit Logs",
"Data Source: Microsoft Entra ID",
"Data Source: Microsoft Entra ID Audit Logs",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "new_terms"
query = '''
data_stream.dataset: "azure.auditlogs" and
azure.auditlogs.operation_name: "Add Windows Hello for Business credential" and
event.outcome: ("Success" or "success") and
azure.tenant_id: * and
azure.auditlogs.properties.initiated_by.user.userPrincipalName: * and
source.as.number: *
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1098"
name = "Account Manipulation"
reference = "https://attack.mitre.org/techniques/T1098/"
[[rule.threat.technique.subtechnique]]
id = "T1098.001"
name = "Additional Cloud Credentials"
reference = "https://attack.mitre.org/techniques/T1098/001/"
[rule.threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"
[rule.new_terms]
field = "new_terms_fields"
value = [
"azure.tenant_id",
"azure.auditlogs.properties.initiated_by.user.userPrincipalName",
"source.as.number",
]
[[rule.new_terms.history_window_start]]
field = "history_window_start"
value = "now-14d"