Misconfigurations That Passed Health Checks But Failed Reality
Microsoft Defender was deployed. Microsoft Sentinel was collecting logs. MFA was enabled. Conditional Access policies existed. Secure Score looked healthy.
On paper, everything looked secure.
But during investigation, the environment told a different story. This Agent Foskett briefing looks at the quiet cracks that survive inside apparently healthy Microsoft environments — exclusions, assumptions, configuration drift, incomplete telemetry and security settings that slowly move away from operational reality.
Briefing summary
Healthy dashboards do not always mean operational security. GEMXIT looks beneath the green ticks to find the exclusions, telemetry gaps and configuration drift that attackers can use before anyone notices.
What we actually found
The dangerous illusion of configured
First hunt: legacy authentication and risky client behaviour
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
SigninLogs | where TimeGenerated > ago(14d) | where ClientAppUsed !in ("Browser", "Mobile Apps and Desktop clients") | project TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName, ClientAppUsed, ConditionalAccessStatus, ResultType | order by TimeGenerated desc
Second hunt: DMARC failures that still reached users
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
EmailEvents | where Timestamp > ago(14d) | where AuthenticationDetails has "dmarc=fail" | where DeliveryAction !in ("Blocked", "Quarantined") | project Timestamp, SenderFromAddress, SenderMailFromAddress, RecipientEmailAddress, Subject, DeliveryAction, AuthenticationDetails | order by Timestamp desc
Third hunt: after-hours activity hiding inside normal operations
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
AuditLogs | where TimeGenerated > ago(14d) | where Operation has_any ("FileDownloaded", "FileAccessed") | extend Hour = datetime_part("hour", TimeGenerated) | where Hour < 6 or Hour > 20 | project TimeGenerated, Operation, UserId, IPAddress | order by TimeGenerated desc
Fourth hunt: Defender visibility gaps
- 1
- 2
- 3
- 4
- 5
- 6
- 7
DeviceInfo | summarize LastSeen = max(Timestamp) by DeviceName, OSPlatform, OnboardingStatus | extend DaysSinceSeen = datetime_diff("day", now(), LastSeen) | where DaysSinceSeen > 7 or OnboardingStatus != "Onboarded" | order by DaysSinceSeen desc
How GEMXIT approaches Microsoft security reviews
Final thought
Continue the investigation with the KQL Threat Hunting Guide, Microsoft Defender KQL Guide and Microsoft Security Operations.
Develop IT. Protect IT. GEMXIT PTY LTD | GEMXIT UK LTD