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 SERVTEP – Artur 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 Portal → Microsoft Sentinel → Analytics → Rule 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 ID → Audit logs
  2. Verify that Audit log retention is set to Minimum 30 days (or your compliance requirement)
  3. Go to Monitoring → Diagnostic 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 Portal → Microsoft Sentinel
  2. Analytics → Rule 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 + create → Create

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. Analytics → Create → Scheduled 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 Portal → Automation Accounts → Create new automation account
  2. Runbooks → + Create a runbook
  3. Paste the PowerShell code above
  4. Publish → Start
  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 ID → Security → Conditional 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 Configuration → Policies → Windows Settings → Security Settings → Advanced Audit Policy Configuration
  3. Enable the following audit categories:
    • Account Logon → Audit Credential Validation (Success and Failure)
    • Account Management → Audit User Account Management (Success and Failure)
    • Privilege Use → Audit Sensitive Privilege Use (Success and Failure)
    • Detailed Tracking → Audit 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