Why Your MDI Alerts Are Noisy (And How to Fix Them)
- 2 days ago
- 6 min read
Microsoft Defender for Identity is one of the most powerful tools for detecting on-premises Active Directory attacks — but out of the box, it's also one of the noisiest. If you've deployed MDI sensors and found yourself drowning in alerts about suspicious LDAP queries, encryption downgrades, and "abnormal behavior" from service accounts that have behaved identically for years, you're not alone.
The problem isn't that MDI is broken. The problem is that most environments have legacy systems, service accounts, and operational patterns that trigger MDI's detection logic even though they're perfectly legitimate. Left untuned, this creates alert fatigue, and alert fatigue means real attacks get missed.
In this post, I'll walk through the most common sources of MDI noise, how to investigate them properly, and how to tune them without creating dangerous blind spots.
Prerequisites
Before you start tuning, you need:
Microsoft Defender for Identity deployed with sensors on domain controllers
Access to Microsoft Defender XDR (security.microsoft.com) or Microsoft Sentinel with MDI connector enabled
Security Administrator or Security Operator role in Defender XDR
At least 7 days of baseline data from MDI to identify patterns
A list of known service accounts and their expected behavior
Step 1 – Identify Your Noisiest Alerts
Start by understanding which alerts are firing most frequently. In Defender XDR, go to Incidents & alerts > Alerts and filter by:
Service source: Microsoft Defender for Identity
Status: New or In progress
Time range: Last 7 days
Sort by Alert count and look for patterns. In my experience, the top offenders are usually:
Suspicious LDAP queries (often from monitoring tools, backup agents, or privilege management systems)
Account enumeration (LDAP queries from vulnerability scanners or asset management)
Encryption downgrade attacks (legacy systems still using RC4 or DES Kerberos encryption)
Suspected DCSync attacks (backup software or federation services legitimately replicating directory data)
Abnormal protocol usage (NTLM from systems that can't do Kerberos)
Document which alerts are firing, which accounts are involved, and the frequency.
Step 2 – Investigate Before You Exclude
Never blindly exclude an alert. Even if you're confident it's a false positive, validate it first. For each noisy alert:
Identify the source account — is it a service account, user, or computer?
Identify the source device — hostname, IP, and role (DC, app server, scanner, etc.)
Review the activity timeline — does this happen daily at the same time? Only during maintenance windows?
Confirm legitimacy with the application owner — don't assume, verify.
In Defender XDR, click into the alert and check the Evidence tab. You'll see:
Source account
Source device
Queried attributes (for LDAP alerts)
Kerberos ticket details (for encryption alerts)
For deeper hunting, use Advanced Hunting in Defender XDR with KQL:
IdentityDirectoryEvents
| where Timestamp > ago(7d)
| where ActionType == "LDAP query"
| where AccountUpn == "svc-backup@contoso.com"
| summarize Count=count(),
DestinationDevices=make_set(DestinationDeviceName),
QueriedAttributes=make_set(AdditionalFields.SearchFilter)
by bin(Timestamp, 1d), AccountUpn
| order by Timestamp descThis shows you whether the service account queries the same attributes daily (legitimate pattern) or randomly probes sensitive attributes (suspicious).
Step 3 – Tune Service Account Alerts
The most common source of noise is service accounts doing legitimate but suspicious-looking things. Examples:
Backup agents querying all user objects
Monitoring tools enumerating group memberships
Privilege management systems checking adminCount attributes
Option A: Mark the Account as a Sensitive Account Exclusion
If the account is a known service account performing expected LDAP queries, you can exclude it from specific alert types.
In Defender XDR, go to:
Settings > Identities
Entity tags > Sensitive accounts
Add the service account to the exclusion list for the specific alert type
This is safer than a global exclusion because it's scoped to one alert category.
Option B: Use Sentinel Analytics Rule Tuning
If you're ingesting MDI data into Sentinel, you can create custom analytics rules with exclusion logic:
let ServiceAccounts = dynamic(["svc-backup@contoso.com", "svc-monitor@contoso.com"]);
IdentityDirectoryEvents
| where Timestamp > ago(1h)
| where ActionType == "LDAP query"
| where AccountUpn !in (ServiceAccounts)
| where AdditionalFields.SearchFilter contains "adminCount"
or AdditionalFields.SearchFilter contains "servicePrincipalName"
| project Timestamp, AccountUpn, DestinationDeviceName, AdditionalFieldsThis creates a clean separation: service accounts are excluded, but the same activity from user accounts still triggers an alert.
Step 4 – Handle Legacy Encryption Downgrade Alerts
MDI flags Kerberos encryption downgrade attacks when it sees RC4 or DES encryption instead of AES. This is a real attack technique (Skeleton Key, Golden Ticket), but it's also triggered by:
Legacy applications that only support RC4
Old network devices (firewalls, load balancers) authenticating via Kerberos
Third-party systems with hardcoded encryption settings
Investigate the Source
Run this query in Advanced Hunting:
IdentityLogonEvents
| where Timestamp > ago(7d)
| where Protocol == "Kerberos"
| extend EncryptionType = tostring(AdditionalFields.TicketEncryptionType)
| where EncryptionType in ("RC4", "DES")
| summarize Count=count() by DeviceName, AccountUpn, EncryptionType
| order by Count descIf you see the same device using RC4 every day, that's a known legacy system. If you see a workstation suddenly switching from AES to RC4, that's suspicious.
Exclusion Path
For confirmed legacy systems:
Document the exception (device name, reason, ticket number)
Request remediation from the app owner (upgrade to AES if possible)
If remediation isn't possible, exclude the specific device in MDI settings under Detection exclusions
Do not exclude the alert globally. Scope it to the specific device or service account.
Step 5 – Create Targeted Exclusions in MDI
For alerts you've validated as false positives, you can create exclusions directly in MDI:
Go to Defender XDR > Settings > Identities
Select Exclusions
Choose the alert type (e.g., "Suspicious LDAP query")
Add the specific account, IP, or device to exclude
Critical rule: Always scope exclusions as narrowly as possible. Excluding "all LDAP queries from svc-backup@contoso.com" is acceptable. Excluding "all LDAP queries from all service accounts" is dangerous.
Troubleshooting
Problem: I excluded an account, but alerts are still firing.
Cause: The exclusion is scoped to one alert type, but the account is triggering multiple types.
Fix: Review all active alerts for that account and add exclusions for each relevant type.
Problem: I can't tell if an LDAP query is legitimate.
Cause: Missing context on what attributes are being queried.
Fix: Use the KQL query in Step 2 to extract AdditionalFields.SearchFilter and compare against known baselines.
Problem: After tuning, I'm worried I've excluded a real attack.
Cause: Over-exclusion or lack of ongoing validation.
Fix: Schedule quarterly reviews of exclusions. Use Sentinel workbooks to track excluded accounts and their activity trends.
Hardening Considerations
Tuning alerts is about reducing noise, not ignoring risk. As you tune:
Enforce AES encryption across your domain (disable RC4 via GPO)
Migrate service accounts to gMSA (group Managed Service Accounts) to reduce static credential risk
Enable Advanced Audit Policy on DCs to capture additional telemetry for MDI
Review MDI security posture recommendations in Defender XDR under Secure Score
Monitor excluded accounts separately — create a Sentinel watchlist and alert on unexpected changes in behavior even if they're excluded from standard MDI alerts
Final Thoughts
Look, I get it — tuning alerts feels like busy work when you've got a backlog of incidents and three other projects on your plate. But here's the reality: if your team is ignoring 90% of MDI alerts because they're noise, you're not actually running a detection program. You're just paying for expensive log storage.
I've seen this play out too many times. A SOC gets MDI deployed, alerts start flooding in, analysts mark everything as false positive for a few weeks, and then they just… stop looking. Six months later, an attacker uses DCSync to pull password hashes, and the alert sits unread in a queue of 500 other "suspicious" activities.
The goal here isn't to silence everything until you have zero alerts. It's to get to a place where when MDI fires an alert, people actually investigate it. That means doing the work upfront — validating service accounts, understanding your legacy systems, scoping exclusions properly, and documenting why you made each decision.
Start small. Pick your top five noisiest alerts this week and work through them methodically. Don't rush it, and definitely don't create broad exclusions just to make the dashboard look clean. Every exclusion is a potential blind spot, so treat them seriously.
And once you've got things tuned? That's when MDI becomes genuinely useful. You'll start catching reconnaissance activity, lateral movement, and credential abuse that would've been invisible otherwise.
In a future post, I'll dig into advanced hunting for lateral movement chains using MDI telemetry — because once your alerts are actually actionable, the real fun is in proactive threat hunting.

Comments