T1598.004

Spearphishing Voice

Adversaries may use voice communications (phone calls, VoIP) to elicit sensitive information from targets. Known as voice phishing or 'vishing', adversaries pose as trusted entities—IT support, executive staff, financial institutions, or business partners—to convince victims to divulge credentials, MFA codes, or other sensitive data. Callback phishing is a variant where malicious emails direct victims to call an adversary-controlled phone number. Threat actors including LAPSUS$ and Scattered Spider have weaponized vishing to compromise help desk personnel into resetting privileged account credentials and bypassing MFA, enabling subsequent account takeover without any malware or exploit.

Microsoft Sentinel / Defender
kusto
// Detect downstream consequences of vishing: admin-initiated password resets
// immediately followed by MFA method changes — consistent with LAPSUS$/Scattered Spider TTP
let VishingWindow = 4h;
let PasswordResets = AuditLogs
| where TimeGenerated > ago(7d)
| where OperationName in ("Reset user password", "Change user password", "Reset password (by admin)")
| where Category == "UserManagement"
| extend TargetUser = tostring(TargetResources[0].userPrincipalName)
| extend InitiatorUPN = tostring(InitiatedBy.user.userPrincipalName)
| extend InitiatorIPAddress = tostring(InitiatedBy.user.ipAddress)
| extend InitiatorAppName = tostring(InitiatedBy.app.displayName)
// Exclude self-service resets (initiator == target)
| where InitiatorUPN != TargetUser and isnotempty(InitiatorUPN)
| project ResetTime=TimeGenerated, TargetUser, InitiatorUPN, InitiatorIPAddress, InitiatorAppName, ResetOperation=OperationName;
let MFAChanges = AuditLogs
| where TimeGenerated > ago(7d)
| where OperationName in (
    "User registered security info",
    "User deleted security info",
    "Admin registered security info for a user",
    "Admin deleted security info for a user",
    "User changed default security info",
    "User registered all required security info"
  )
| extend TargetUser = tostring(TargetResources[0].userPrincipalName)
| extend MFADetail = tostring(TargetResources[0].modifiedProperties)
| project MFATime=TimeGenerated, TargetUser, MFAOperation=OperationName, MFADetail;
// Correlate reset + MFA change within window for same account
PasswordResets
| join kind=inner (MFAChanges) on TargetUser
| where MFATime between (ResetTime .. (ResetTime + VishingWindow))
| extend MinutesBetween = datetime_diff('minute', MFATime, ResetTime)
// Rapid MFA enrollment after reset is highest-fidelity indicator
| extend HighConfidence = MinutesBetween < 30
| project
    ResetTime,
    MFATime,
    MinutesBetween,
    HighConfidence,
    TargetUser,
    InitiatorUPN,
    InitiatorIPAddress,
    InitiatorAppName,
    ResetOperation,
    MFAOperation,
    MFADetail
| sort by HighConfidence desc, ResetTime desc
high severity medium confidence

Data Sources

Identity: User Account Modification Application Log: Application Log Content Azure Active Directory Audit Logs

Required Tables

AuditLogs SigninLogs

False Positives

  • Legitimate help desk resets for users who forgot passwords and need MFA re-enrollment simultaneously — correlate with open service desk ticket for the account
  • New employee onboarding: IT staff reset initial temporary password and assist with MFA enrollment in the same session
  • Scheduled bulk account management operations during maintenance windows where multiple resets occur for role transitions or system migrations
  • Automated provisioning workflows (Okta Workflows, Microsoft Lifecycle Workflows) where service principals perform password initialization followed by MFA policy enforcement

Unlock Pro Content

Get the full detection package for T1598.004 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections