Protective Security Monitoring
Alert monitoring workflows, Secure Score management, ASR rules monitoring, EDR telemetry baselines, and false positive reduction procedures.
1 Alert Monitoring Workflows
Standardized monitoring workflows ensure consistent coverage across shifts and reduce the risk of missed detections. These checklists and procedures define the minimum operational expectations for SOC analysts monitoring Microsoft Defender for Endpoint.
Shift Handover Procedure
Daily Monitoring Checklist
Alert Queue Management
High/Critical — Real-time (continuous monitoring) | Medium — Every 15 minutes | Low — Hourly sweep | Informational — Daily review batch
2 MDE Secure Score
Microsoft Secure Score for Devices provides a quantitative measure of your endpoint security posture. Regular monitoring and improvement of this score reduces attack surface and strengthens defensive coverage across the fleet.
Secure Score Review Procedure
- Navigate to Microsoft 365 Defender portal → Secure Score
- Review current Exposure Score (lower is better) and Secure Score for Devices
- Identify top security recommendations sorted by impact
- Assess implementation feasibility for each recommendation
- Create remediation tickets for approved recommendations
- Track implementation progress weekly
- Report Secure Score trends to management monthly
Devices Not Meeting Secure Configuration
Identifies the top 20 non-compliant secure configurations across the device fleet. Groups by configuration ID and name with a count of non-compliant devices and a sample list of affected device names.
DeviceTvmSecureConfigurationAssessment
| where IsCompliant == 0
| where IsApplicable == 1
| summarize NonCompliantCount = count(),
Devices = make_set(DeviceName, 10)
by ConfigurationId, ConfigurationName, ConfigurationCategory
| sort by NonCompliantCount desc
| take 20
Expected Output
Top 20 non-compliant configurations across the fleet. Each row includes the configuration ID, name, category, count of non-compliant devices, and a sample of up to 10 affected device names.
When to Use
Weekly secure posture review. Prioritize remediation tickets based on the non-compliant count to maximize security improvement per remediation effort.
Configuration Compliance Trend
Calculates the daily compliance percentage over the past 30 days. Tracks the ratio of compliant configurations to total applicable configurations, providing a trend line for security posture improvement.
DeviceTvmSecureConfigurationAssessment
| where Timestamp > ago(30d)
| summarize CompliantCount = countif(IsCompliant == 1),
TotalCount = count()
by bin(Timestamp, 1d)
| extend ComplianceRate = round(CompliantCount * 100.0 / TotalCount, 1)
| project Timestamp, ComplianceRate, CompliantCount, TotalCount
| sort by Timestamp asc
Expected Output
Daily compliance percentage over 30 days. Each row includes the date, compliance rate, compliant count, and total count for trending posture improvement over time.
When to Use
Trending posture improvement. Include in monthly management reports to demonstrate security posture trajectory and the impact of remediation efforts.
3 ASR Rules Monitoring
Attack Surface Reduction (ASR) rules are critical preventive controls in Microsoft Defender for Endpoint. Monitoring ASR events ensures rules are operating as expected, identifies candidates for mode promotion (Audit to Block), and surfaces potential business impact from blocked legitimate activities.
ASR Rules Reference
| GUID | Rule Name | Recommended Mode |
|---|---|---|
56a863a9-875e-4185-98a7-b882c64b5ce5 |
Block abuse of exploited vulnerable signed drivers | Block |
7674ba52-37eb-4a4f-a9a1-f0f9a1619a2c |
Block Adobe Reader from creating child processes | Block |
d4f940ab-401b-4efc-aadc-ad5f3c50688a |
Block all Office applications from creating child processes | Block |
9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 |
Block credential stealing from LSASS | Block |
be9ba2d9-53ea-4cdc-84e5-9b1eeee46550 |
Block executable content from email client and webmail | Block |
01443614-cd74-433a-b99e-2ecdc07bfc25 |
Block executable files from running unless they meet criteria | Audit |
5beb7efe-fd9a-4556-801d-275e5ffc04cc |
Block execution of potentially obfuscated scripts | Block |
d3e037e1-3eb8-44c8-a917-57927947596d |
Block JavaScript or VBScript from launching downloaded content | Block |
3b576869-a4ec-4529-8536-b80a7769e899 |
Block Office applications from creating executable content | Block |
75668c1f-73b5-4cf0-bb93-3ecf5cb7cc84 |
Block Office applications from injecting code into other processes | Block |
26190899-1602-49e8-8b27-eb1d0a1ce869 |
Block Office communication apps from creating child processes | Block |
e6db77e5-3df2-4cf1-b95a-636979351e5b |
Block persistence through WMI event subscription | Block |
d1e49aac-8f56-4280-b9ba-993a6d77406c |
Block process creations originating from PSExec and WMI commands | Block |
33ddedf1-c6e0-47cb-833e-de6133960387 |
Block rebooting machine in Safe Mode | Block |
b2b3f03d-6a65-4f7b-a9c7-1c7ef74a9ba4 |
Block untrusted and unsigned processes that run from USB | Block |
c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb |
Block use of copied or impersonated system tools | Block |
a8f5898e-1dc8-49a9-9878-85004b8a61e6 |
Block Webshell creation for Servers | Block |
92e97fa1-2edf-4476-bdd6-9dd0b4dddc7b |
Block Win32 API calls from Office macros | Block |
c1db55ab-c21a-4637-bb3f-a12568109d35 |
Use advanced protection against ransomware | Block |
ASR KQL Queries
ASR Events Summary (Last 30 Days)
Provides a high-level summary of all ASR rule events over the past 30 days, grouped by action type. Use this to understand the overall volume and distribution of ASR activity across the environment.
DeviceEvents
| where Timestamp > ago(30d)
| where ActionType startswith "Asr"
| summarize EventCount = count() by ActionType
| sort by EventCount desc
Expected Output
List of all ASR action types with their event counts over the last 30 days. Includes both blocked and audited events for each rule.
When to Use
Weekly ASR review meetings. Provides the baseline view of ASR activity to identify noisy rules and confirm expected coverage across the fleet.
ASR Blocked Events with Process Details
Retrieves the most recent 100 ASR blocked events with full process details including file name, folder path, command line, and the initiating process. Critical for investigating what was blocked and determining if the block was appropriate.
DeviceEvents
| where Timestamp > ago(7d)
| where ActionType startswith "Asr"
| where ActionType endswith "Blocked"
| project Timestamp, DeviceName, ActionType, FileName,
FolderPath, ProcessCommandLine, InitiatingProcessFileName
| sort by Timestamp desc
| take 100
Expected Output
Last 100 ASR blocked events with timestamps, device names, rule action types, file names, folder paths, command lines, and parent process names for each blocked action.
When to Use
Daily monitoring of ASR blocks. Investigate any unexpected blocks that may indicate either a real attack or a legitimate application being incorrectly blocked.
ASR Audit Events — Candidates for Block Mode
Summarizes ASR rules currently in audit mode, showing event counts, affected device counts, and sample file names. Used to assess whether audit-mode rules are safe to promote to block mode without causing business disruption.
DeviceEvents
| where Timestamp > ago(30d)
| where ActionType startswith "Asr"
| where ActionType endswith "Audited"
| summarize AuditCount = count(),
Devices = dcount(DeviceName),
SampleFiles = make_set(FileName, 5)
by ActionType
| sort by AuditCount desc
Expected Output
List of audited ASR rules with event count, number of affected devices, and up to 5 sample file names that triggered each audit event.
When to Use
Monthly ASR rule promotion review. Rules in audit mode with zero or very low legitimate application triggers are candidates for promotion to block mode.
Top ASR-Triggering Applications
Identifies the top 25 applications that trigger ASR rules most frequently, along with which specific rules they trigger. Useful for identifying applications that may need exclusions or that represent a security risk.
DeviceEvents
| where Timestamp > ago(30d)
| where ActionType startswith "Asr"
| summarize TriggerCount = count(),
Rules = make_set(ActionType)
by FileName, FolderPath
| sort by TriggerCount desc
| take 25
Expected Output
Top 25 applications by ASR trigger count, including file name, folder path, total trigger count, and the list of ASR rules each application triggered.
When to Use
Identifying noisy applications for ASR exclusion review. Applications with high trigger counts across multiple rules may need targeted exclusions or further security assessment.
ASR Rule Coverage per Device
Shows the number of distinct active ASR rules per device, sorted by fewest rules first. Devices with low active rule counts may have incomplete ASR policy deployment and need investigation.
DeviceEvents
| where Timestamp > ago(7d)
| where ActionType startswith "Asr"
| summarize ActiveRules = dcount(ActionType),
RuleList = make_set(ActionType)
by DeviceName
| sort by ActiveRules asc
Expected Output
List of devices with their active ASR rule count and the specific rules observed. Devices at the top (fewest rules) are the priority for ASR policy review.
When to Use
Weekly coverage gap analysis. Cross-reference with device groups to identify policy deployment failures or devices that should have additional ASR rules enabled.
4 EDR Telemetry Reference
Microsoft Defender for Endpoint collects telemetry across multiple data tables in Advanced Hunting. Understanding the purpose, key fields, and common use cases for each table is essential for effective threat hunting and alert investigation.
| Table Name | Description | Key Fields | Common Use Cases |
|---|---|---|---|
| DeviceProcessEvents | Process creation and termination | FileName, ProcessCommandLine, InitiatingProcessFileName, SHA256 |
Suspicious execution, process chains, LOLBins |
| DeviceNetworkEvents | Outbound network connections | RemoteIP, RemotePort, RemoteUrl, InitiatingProcessFileName |
C2 detection, data exfiltration, lateral movement |
| DeviceFileEvents | File system operations | FileName, FolderPath, SHA256, ActionType, FileSize |
Malware drops, config changes, staging |
| DeviceRegistryEvents | Registry modifications | RegistryKey, RegistryValueName, RegistryValueData, ActionType |
Persistence, config tampering |
| DeviceLogonEvents | Authentication events | AccountName, LogonType, RemoteDeviceName, IsLocalAdmin |
Lateral movement, brute force, anomalous logons |
| DeviceImageLoadEvents | DLL/module loading | FileName, FolderPath, SHA256, InitiatingProcessFileName |
DLL sideloading, injection |
| DeviceEvents | Miscellaneous security events | ActionType, AdditionalFields |
ASR, exploit guard, tamper protection, AMSI |
| DeviceInfo | Device metadata | OSPlatform, OSVersion, MachineGroup, PublicIP |
Asset inventory, compliance |
5 Baseline Monitoring KQL Queries
Baseline monitoring identifies deviations from normal environment behavior. These queries compare recent activity against established baselines to surface anomalous processes, network connections, file operations, and authentication patterns that warrant investigation.
Unusual Process Execution (First Seen)
Identifies processes seen for the first time in the last day by comparing against a 30-day baseline. New processes that have never been observed before may indicate malware deployment, unauthorized software, or attacker tools.
let knownProcesses = DeviceProcessEvents
| where Timestamp between (ago(30d) .. ago(1d))
| distinct FileName;
DeviceProcessEvents
| where Timestamp > ago(1d)
| where FileName !in (knownProcesses)
| summarize FirstSeen = min(Timestamp),
Devices = make_set(DeviceName, 5),
DeviceCount = dcount(DeviceName),
CommandLines = make_set(ProcessCommandLine, 3)
by FileName, InitiatingProcessFileName
| sort by DeviceCount asc
Expected Output
Processes seen for the first time in the last day. Includes file name, parent process, first seen timestamp, sample devices, device count, and sample command lines.
When to Use
Daily baseline deviation check. Processes appearing on a single device are the highest priority for investigation, as they may indicate targeted compromise.
Anomalous Outbound Network Connections
Detects outbound connections to public IP addresses not seen in the prior 30 days. New external connections may indicate C2 communication, data exfiltration, or newly deployed applications reaching out to the internet.
let baselineIPs = DeviceNetworkEvents
| where Timestamp between (ago(30d) .. ago(1d))
| where RemoteIPType == "Public"
| distinct RemoteIP;
DeviceNetworkEvents
| where Timestamp > ago(1d)
| where RemoteIPType == "Public"
| where RemoteIP !in (baselineIPs)
| summarize ConnectionCount = count(),
Devices = make_set(DeviceName, 5),
Ports = make_set(RemotePort),
Processes = make_set(InitiatingProcessFileName)
by RemoteIP
| sort by ConnectionCount desc
| take 50
Expected Output
Top 50 new public IP addresses contacted in the last 24 hours. Includes connection count, affected devices, destination ports, and the processes initiating connections.
When to Use
Daily network anomaly detection. Cross-reference flagged IPs with threat intelligence feeds. IPs contacted by a single device on unusual ports are highest priority.
Suspicious File Creation in Temp Directories
Detects creation of executable or script files in temporary directories. Malware frequently stages payloads in temp folders before execution. Legitimate software rarely drops executables into these locations.
DeviceFileEvents
| where Timestamp > ago(24h)
| where ActionType == "FileCreated"
| where FolderPath has_any (@"\Temp\", @"\tmp\", @"\AppData\Local\Temp", @"C:\Windows\Temp")
| where FileName endswith ".exe" or FileName endswith ".dll"
or FileName endswith ".ps1" or FileName endswith ".bat"
or FileName endswith ".vbs" or FileName endswith ".hta"
| project Timestamp, DeviceName, FileName, FolderPath, SHA256,
InitiatingProcessFileName, InitiatingProcessCommandLine
| sort by Timestamp desc
Expected Output
All executable and script file creations in temp directories over the last 24 hours. Includes timestamps, device names, file details, SHA256 hashes, and the process that created the file.
When to Use
Daily sweep for malware staging. Pay special attention to executables created by browser processes, Office applications, or scripting engines, as these indicate likely payload delivery.
Registry Run Key Modifications
Monitors modifications to common persistence-related registry keys including Run, RunOnce, Shell Folders, and Winlogon. These are frequently abused by attackers to maintain persistence across reboots.
DeviceRegistryEvents
| where Timestamp > ago(24h)
| where ActionType == "RegistryValueSet"
| where RegistryKey has_any (
@"CurrentVersion\Run",
@"CurrentVersion\RunOnce",
@"CurrentVersion\Explorer\Shell Folders",
@"CurrentVersion\Winlogon"
)
| project Timestamp, DeviceName, RegistryKey, RegistryValueName,
RegistryValueData, InitiatingProcessFileName,
InitiatingProcessCommandLine, AccountName
| sort by Timestamp desc
Expected Output
All registry run key modifications in the last 24 hours with the full registry path, value name, value data, and the process and account that made the modification.
When to Use
Daily persistence monitoring. Correlate with process and file events to build a complete picture of potential persistence mechanisms being established by suspicious actors.
Failed Logon Attempts Spike
Detects devices with more than 10 failed logon attempts in a single hour, which may indicate brute force attacks, password spraying, or misconfigured services. Also captures the unique accounts targeted.
DeviceLogonEvents
| where Timestamp > ago(24h)
| where ActionType == "LogonFailed"
| summarize FailedCount = count(),
UniqueAccounts = dcount(AccountName),
Accounts = make_set(AccountName, 10)
by DeviceName, bin(Timestamp, 1h)
| where FailedCount > 10
| sort by FailedCount desc
Expected Output
Devices with more than 10 failed logon attempts per hour. Includes device name, time bucket, failure count, number of unique accounts, and a sample of the targeted account names.
When to Use
Daily authentication monitoring. High failure counts against multiple unique accounts suggest password spraying. Failures against a single account suggest brute force or lockout issues.
Unsigned DLL Loads in System Processes
Identifies DLLs loaded by critical system processes (svchost, lsass, services, explorer) from outside the Windows directory. This pattern is commonly associated with DLL sideloading and process injection attacks.
DeviceImageLoadEvents
| where Timestamp > ago(24h)
| where InitiatingProcessFileName in ("svchost.exe", "lsass.exe", "services.exe", "explorer.exe")
| where InitiatingProcessFolderPath startswith @"C:\Windows\System32"
| where not(FolderPath startswith @"C:\Windows")
| project Timestamp, DeviceName, FileName, FolderPath, SHA256,
InitiatingProcessFileName, InitiatingProcessFolderPath
| sort by Timestamp desc
Expected Output
DLLs loaded from non-Windows paths by system-critical processes. Includes timestamps, device names, DLL file details, SHA256 hashes, and the system process that loaded the DLL.
When to Use
Daily DLL injection detection. Any results from this query should be treated as high priority and investigated immediately, as legitimate DLL loads into system processes should originate from Windows directories.
PowerShell Encoded Command Execution
Detects PowerShell execution using encoded commands or Base64 conversion. Encoded PowerShell is a common technique used by attackers to bypass command-line logging and evade signature-based detections.
DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName in ("powershell.exe", "pwsh.exe")
| where ProcessCommandLine has_any ("-enc", "-EncodedCommand", "-e ", "FromBase64")
| project Timestamp, DeviceName, ProcessCommandLine, AccountName,
InitiatingProcessFileName, InitiatingProcessCommandLine
| sort by Timestamp desc
Expected Output
All encoded PowerShell executions in the last 24 hours with timestamps, device names, full command lines, user accounts, and parent process details.
When to Use
Daily obfuscation detection. Decode the Base64 payload for analysis. Legitimate encoded PowerShell (e.g., SCCM, DSC) should be documented in the approved software list.
Tamper Protection Events
Monitors tamper protection events which fire when something attempts to modify or disable Defender security settings. Tamper protection alerts are high-confidence indicators of malicious activity attempting to weaken defenses.
DeviceEvents
| where Timestamp > ago(7d)
| where ActionType == "TamperProtection"
| project Timestamp, DeviceName,
TamperAction = tostring(AdditionalFields.TamperAction),
TamperTarget = tostring(AdditionalFields.TamperTarget),
InitiatingProcessFileName, AccountName
| sort by Timestamp desc
Expected Output
All tamper protection events over the last 7 days. Includes timestamps, device names, the specific tamper action attempted, the target setting, the process that attempted the modification, and the account used.
When to Use
Weekly tamper protection review. Any tamper protection event should be treated as a potential indicator of compromise and escalated for immediate investigation.
6 Alert Tuning Procedures
Alert tuning reduces false positive noise while maintaining detection coverage. A disciplined tuning process ensures that suppression rules are well-documented, regularly reviewed, and do not inadvertently mask real threats.
Tuning Procedure Steps
- Identify alert generating excessive false positives (>20% FP rate over 7 days)
- Analyze FP patterns — common file, process, path, or user
- Determine appropriate tuning action (suppression, exclusion, custom detection modification)
- Document tuning rationale and expected impact
- Implement tuning in MDE portal (suppression rules, indicators with Allow action)
- Monitor for 7 days to validate tuning effectiveness
- Verify true positives are not being suppressed
Alert Quality Metrics
| Metric | Description | Target | Formula |
|---|---|---|---|
| True Positive Rate | Percentage of alerts that are actual threats | >80% | TP / (TP + FP) * 100 |
| False Positive Rate | Percentage of alerts that are not threats | <20% | FP / (TP + FP) * 100 |
| MTTD (Mean Time to Detect) | Average time from threat occurrence to alert | <1 hour | Sum(detection times) / count |
| MTTT (Mean Time to Triage) | Average time from alert to initial assessment | <15 min (High) | Sum(triage times) / count |
7 False Positive Reduction
Systematic false positive reduction improves analyst efficiency, reduces alert fatigue, and allows the team to focus on genuine threats. This section provides a decision tree for FP classification and a documentation template for suppression rules.
FP Decision Tree
-
ALERT RECEIVED — Begin FP Assessment
-
Is the activity from a known legitimate application?
-
YES — Is it in the approved software list?
-
YES — Document as FP, create suppression rule
-
NO — Escalate for software approval review
-
-
NO — Is it a known testing/admin activity?
-
YES — Verify with activity owner
-
Confirmed legitimate — Document as BTP, consider suppression
-
Not confirmed — Continue investigation
-
-
NO — Continue full investigation
-
-
-
FP Documentation Template
All suppression rules and exclusions must be reviewed quarterly. Stale exclusions may hide real threats. Maintain an exclusion inventory with justifications and expiry dates.