MCADDF

[MISCONFIG-016]: Privileged Account Not Monitored

1. METADATA HEADER

Attribute Details
Technique ID MISCONFIG-016
MITRE ATT&CK v18.1 T1556 - Modify Authentication Process
Tactic Privilege Escalation / Persistence
Platforms Multi-Env (Windows AD, Entra ID, Azure, M365)
Severity Critical
Technique Status ACTIVE
Last Verified 2026-01-10
Affected Versions All versions (configuration oversight)
Patched In N/A (Configuration-based, requires monitoring setup)
Author SERVTEPArtur Pchelnikau

2. EXECUTIVE SUMMARY

Operational Risk

Compliance Mappings

Framework Control / ID Description
CIS Benchmark 1.1.1 Ensure Privileged Identity Management is Enabled for Entra ID Roles
CIS Benchmark 1.1.3 Ensure that Privileged Identity Management Alert for Azure Roles is Configured
DISA STIG V-226554 Entra ID must enforce monitoring of privileged account access
CISA SCuBA CA-7(1) Control Access Sessions – Privileged accounts must have real-time monitoring
NIST 800-53 AC-2(1) Account Management – Privileged accounts require separate monitoring
NIST 800-53 AU-2 Audit Events – Privileged account activity must be logged
NIST 800-53 SI-4(1) Information System Monitoring – Continuous monitoring of administrative access
GDPR Art. 5(1)(f) Accountability – Organizations must demonstrate monitoring of privileged access
DORA Art. 8 Third-Party Risk – Admin account monitoring is critical operational resilience
NIS2 Art. 21 Cyber Risk Management – Privileged account monitoring is mandatory
ISO 27001 A.9.1 User Access Management – All privileged accounts must be monitored
ISO 27001 A.12.4 Logging – Audit logs for privileged operations must be centralized and retained
ISO 27005 Risk Scenario “Undetected compromise of privileged account due to missing monitoring”

3. TECHNICAL PREREQUISITES

Supported Versions:

Tools for Monitoring Setup:


4. ENVIRONMENTAL RECONNAISSANCE

Check if Privileged Account Monitoring is Configured

PowerShell (Entra ID):

# Check if PIM is enabled
Connect-MgGraph -Scopes "RoleManagement.Read.Directory"

Get-MgRoleManagementDirectoryRoleEligibilitySchedule | Select-Object -First 5

# If empty, PIM is not configured for admin roles
if (-not (Get-MgRoleManagementDirectoryRoleEligibilitySchedule)) {
    Write-Host "[-] CRITICAL: PIM not configured for admin role assignments" -ForegroundColor Red
}

Azure CLI:

# Check if Sentinel is deployed and monitoring admin activities
az sentinel list --resource-group <rg> --workspace-name <workspace>

# Check if Analytics Rules exist for privileged account monitoring
az sentinel alert-rule list --resource-group <rg> --workspace-name <workspace> \
  | grep -i "privileged\|admin\|authentication"

Manual Check (Azure Portal):

  1. Go to Azure PortalMicrosoft SentinelAnalyticsRule templates
  2. Search for “Privileged Account”
  3. If no rules are enabled = monitoring gap exists

5. DETAILED EXECUTION METHODS AND THEIR STEPS

METHOD 1: Establish Privileged Account Monitoring (Microsoft Sentinel)

Supported Versions: Entra ID, Azure, M365 all versions

Step 1: Enable Audit Logging for Privileged Accounts

Objective: Ensure all admin operations are logged and forwarded to Sentinel.

Manual Steps (Entra ID Admin Center):

  1. Navigate to Entra IDAudit logs
  2. Verify that Audit log retention is set to Minimum 30 days (or your compliance requirement)
  3. Go to MonitoringDiagnostic settings
  4. Click Add diagnostic setting
  5. Configure:
    • Name: AAD-Audit-Logs-to-Sentinel
    • Categories: Select all (Sign-in logs, Audit logs, Provisioning logs)
    • Destination: Log Analytics Workspace (your Sentinel workspace)
  6. Click Save

Manual Steps (Unified Audit Log / M365):

  1. Go to Microsoft Purview Compliance Portal (compliance.microsoft.com)
  2. Audit (left menu)
  3. If not enabled, click Turn on auditing
  4. Navigate to Audit log retention policies
  5. Ensure retention is set to ≥90 days for admin activities
  6. Return to Audit and export logs to Log Analytics or Splunk

Step 2: Create Sentinel Analytics Rule for Privileged Account Access

Objective: Set up automated detection for unusual admin sign-ins.

Manual Steps (Sentinel):

  1. Go to Azure PortalMicrosoft Sentinel
  2. AnalyticsRule templates
  3. Search: “Authentications of Privileged Accounts Outside of Expected Controls”
  4. Click Create rule
  5. Configure:
    • General:
      • Status: Enabled
      • Severity: High
    • Set rule logic:
      • Paste the KQL query (see section 7 below)
      • Run query every: 1 hour
      • Lookup data from the last: 7 days
    • Incident settings:
      • Enable Create incidents from alerts triggered by this analytics rule
    • Actions:
      • (Optional) Attach playbook for automated response
  6. Click Review + createCreate

Step 3: Create Custom Alert for Privilege Escalation Attempts

Objective: Detect when non-admin users attempt to perform admin operations.

KQL Query (for manual implementation):

AuditLogs
| where OperationName contains "Add" and OperationName contains "role" and OperationName contains "assignment"
| where Result == "success"
| extend TargetUser = TargetResources[0].displayName
| extend InitiatedBy = InitiatedBy.user.userPrincipalName
| where not(InitiatedBy in ("admin@company.com", "serviceaccount@company.com"))
| project TimeGenerated, InitiatedBy, OperationName, TargetUser, Result

Manual Steps (Sentinel):

  1. AnalyticsCreateScheduled query rule
  2. Set rule logic:
    • Paste the KQL query above
    • Run every: 15 minutes
    • Lookup: 1 hour
  3. Incident settings:
    • Severity: Critical
    • Create incidents: Enabled
  4. Actions:
    • Configure email alert or Teams notification
  5. Click Create

Step 4: Deploy Playbook for Automated Response

Objective: Automatically disable compromised admin accounts pending investigation.

PowerShell (Azure Automation Runbook):

# This runbook will be triggered by Sentinel alert
# It disables the potentially compromised admin account

param(
    [Parameter(Mandatory = $true)]
    [string]$AdminUserPrincipalName
)

# Connect to Azure
Connect-AzAccount -Identity

# Disable the admin account
try {
    $user = Get-AzADUser -UserPrincipalName $AdminUserPrincipalName
    
    # Disable the account
    Update-AzADUser -ObjectId $user.Id -Enabled $false
    
    Write-Output "[+] Disabled admin account: $AdminUserPrincipalName"
    
    # Send alert email
    Send-NotificationEmail -To "securityteam@company.com" `
        -Subject "ALERT: Disabled admin account due to suspicious activity" `
        -Body "Admin account $AdminUserPrincipalName has been automatically disabled pending investigation."
        
    exit 0
    
} catch {
    Write-Error "[-] Failed to disable account: $_"
    exit 1
}

Manual Setup (Automation Account):

  1. Azure PortalAutomation Accounts → Create new automation account
  2. Runbooks+ Create a runbook
  3. Paste the PowerShell code above
  4. PublishStart
  5. Test by triggering manually
  6. Configure Sentinel playbook to invoke this runbook on high-severity alerts

Step 5: Set Up Conditional Access for Privileged Admin Accounts

Objective: Require extra authentication factors and device compliance for admin sign-ins.

Manual Steps (Conditional Access):

  1. Go to Entra IDSecurityConditional Access
  2. Click + New policy
  3. Name: Enforce MFA for Admins
  4. Assignments:
    • Users: Select users and groups → Search for “Global Admin” role
    • Cloud apps: All cloud apps
    • Conditions:
      • Sign-in risk: All
      • Device platforms: All platforms
  5. Access controls:
    • Grant:
      • Grant access: Require multi-factor authentication
      • Require device to be marked as compliant
      • Require approved client app
  6. Enable policy: On
  7. Click Create

METHOD 2: Establish Monitoring for On-Premises Privileged Accounts (Windows AD)

Supported Versions: Windows Server 2016-2025

Step 1: Enable Audit Logging for Domain Admin Actions

Objective: Configure Active Directory to log all admin operations.

Group Policy (Server 2016-2019):

  1. Open Group Policy Management Console (gpmc.msc)
  2. Navigate to Computer ConfigurationPoliciesWindows SettingsSecurity SettingsAdvanced Audit Policy Configuration
  3. Enable the following audit categories:
    • Account LogonAudit Credential Validation (Success and Failure)
    • Account ManagementAudit User Account Management (Success and Failure)
    • Privilege UseAudit Sensitive Privilege Use (Success and Failure)
    • Detailed TrackingAudit Process Creation (Success)
  4. Run gpupdate /force on domain controllers

PowerShell (Server 2022+):

# Enable advanced audit policies for domain controllers

# Credential validation
auditpol /set /subcategory:"Credential Validation" /success:enable /failure:enable

# User account management
auditpol /set /subcategory:"User Account Management" /success:enable /failure:enable

# Group membership (to track admin group changes)
auditpol /set /subcategory:"Distribution Group Management" /success:enable /failure:enable

# Sensitive privilege use
auditpol /set /subcategory:"Sensitive Privilege Use" /success:enable /failure:enable

# Verify configuration
auditpol /get /category:* /v

Step 2: Forward Windows Security Logs to Splunk/Sentinel

Objective: Centralize Windows event logs for correlation and analysis.

Using Windows Event Forwarding (WEF):

  1. Create a new Event Forwarding collector machine (or use existing SIEM agent)
  2. On each domain controller, create an Event Forwarding subscription:
    # Create WEF subscription to forward logs to collector
    wecutil cs <subscription_XML_file>
    
  3. Or use Splunk Universal Forwarder on each DC:
    # Install Splunk UF
    splunk add forward-server <splunk-indexer>:9997 -auth admin:password
       
    # Configure to forward security logs
    splunk add monitor "C:\Windows\System32\winevt\Logs\Security.evtx" -auth admin:password
    

Step 3: Create Detection Rules for Privileged Account Activity

PowerShell / Splunk Search:

# Splunk search: Detect Domain Admin activity
index=windows source="WinEventLog:Security" EventCode=4672 Account_Name!=SYSTEM AND Account_Name!="Window Manager"
| stats count by Account_Name, Computer, src_ip
| where count > 5

Windows Event ID Reference:


6. DETECTION & FORENSIC ARTIFACTS

Indicators of Compromise (IOCs) for Unmonitored Privileged Accounts

Forensic Artifacts (What Should Be Monitored)


7. DEFENSIVE MITIGATIONS

Priority 1: CRITICAL

Priority 2: HIGH

Access Control & Compliance Validation

Validation Command (Verify Monitoring is Active)

# Check if Sentinel is receiving admin logs
az sentinel list --resource-group <rg> --workspace-name <workspace> | jq '.[] | .kind'

# Should output: "Scheduled" or "NRT" (Near Real-Time) for analytics rules

Expected Output (If Monitoring Active):

[
  "Scheduled",
  "NRT",
  "Scheduled"
]

8. DETECTION & INCIDENT RESPONSE

Microsoft Sentinel KQL Queries

Query 1: Detect Unusual Admin Sign-Ins (Geographic Anomaly)

SigninLogs
| where tolower(UserPrincipalName) in ("admin1@company.com", "admin2@company.com")
| where ResultType == 0
| extend Location = parse_json(LocationDetails)
| summarize by Location.countryOrRegion, TimeGenerated, UserPrincipalName
| where Location.countryOrRegion !in ("United States", "France", "Germany")  // Set to org's normal countries

What This Detects:

Query 2: Privilege Escalation via Unexpected Role Assignment

AuditLogs
| where OperationName == "Add member to role"
| where Result == "success"
| extend Initiator = InitiatedBy.user.userPrincipalName
| extend TargetUser = TargetResources[0].displayName
| extend Role = TargetResources[0].modifiedProperties[0].newValue
| where not(Initiator in ("admin1@company.com", "changemanagement@company.com"))

What This Detects:

Query 3: Detect Suspicious OAuth Consent by Admin Accounts

AuditLogs
| where OperationName == "Consent to application"
| where InitiatedBy.user.userPrincipalName in (
    // List of known admin accounts
    "admin1@company.com", "admin2@company.com"
)
| where TargetResources[0].displayName !in ("Microsoft Graph", "Office 365 Management API")

What This Detects:


Step Phase Technique Description
1 Initial Access [IA-PHISH-001] Device Code Phishing Attacker compromises privileged user account
2 Privilege Escalation T1547 / T1556 Attacker elevates or maintains admin access
3 Current Step [MISCONFIG-016] Organization fails to detect admin activity
4 Persistence Golden Ticket / OAuth Token Theft Attacker establishes persistent backdoor
5 Impact Ransomware / Data Exfiltration Attacker operates undetected for weeks

10. REAL-WORLD EXAMPLES

Example 1: MOVEit Transfer Zero-Day (2023) – Undetected Admin Access

Example 2: Microsoft Exchange Server ProxyLogon / ProxyShell (2021) – Admin Account Compromise

Example 3: Okta Admin Console Breach (2023) – Undetected Admin Access


11. REMEDIATION CHECKLIST


12. ADDITIONAL NOTES