TL;DR
- Breaches don't exploit zero-days. They exploit defaults. Almost every M365 breach we've reviewed traces back to a setting Microsoft ships open that the customer never closed.
- The CIS Microsoft 365 Foundations Benchmark is the named-and-numbered list of those defaults, recast as "configure this away from default to be defended."
- Five attack paths cover most SMB incidents: credential stuffing into BEC, OAuth consent phishing, mailbox-rule exfiltration, admin-account takeover, and external-sharing leaks. CIS has specific recommendations for each one.
- Four CIS controls do most of the work: enforce MFA via Conditional Access, block legacy authentication, restrict tenant-wide outbound forwarding, and extend audit log retention so you can detect what slips through.
- CIS won't stop everything. AiTM token theft, vendor supply-chain compromise, insider threats, and Microsoft-side zero-days sit outside its scope. Plan accordingly.
Why the CIS Benchmark is a breach-prevention framework, not a compliance checkbox
Pull the post-incident reports for ten SMB M365 breaches and you'll find roughly the same nine or ten findings each time. Legacy authentication still on. Conditional Access scoped too narrowly. Mailbox-level forwarding allowed. Anonymous SharePoint links with no expiration. User consent to OAuth apps wide open. The Unified Audit Log enabled but with default retention so the forensic window has already closed.
None of those are zero-days. None require a sophisticated attacker. They're configuration defaults that Microsoft ships permissive for backwards compatibility, and that the customer never tightened. The Center for Internet Security publishes the Microsoft 365 Foundations Benchmark precisely to enumerate those defaults and tell you which way to flip them.
Read the benchmark cover-to-cover and a pattern emerges. Every recommendation is essentially a sentence of the form "Microsoft's default allows X. Configure it to deny X unless explicitly permitted." That's not compliance. That's breach prevention written in declarative form. The rest of this post takes the five attack paths we see most often and walks through which CIS recommendations would have stopped each one.
Attack path 1: credential stuffing leading to business email compromise
The chain. Attacker buys a list of leaked email-and-password pairs from a third-party breach. Sprays them against Microsoft's authentication endpoints, often via a legacy protocol like IMAP or SMTP AUTH because those skip MFA entirely. One pair works. The attacker logs into Outlook Web, reads recent threads, identifies a pending wire transfer, sends a spoofed reply with updated wire instructions, and walks off with the funds.
The CIS recommendations that prevent it. Three controls combine to close this path:
- 1.1.1 Ensure multifactor authentication is enabled for all users. Specifically, MFA enforced through Conditional Access (not the legacy per-user MFA toggle, which is weaker and harder to manage). Stolen passwords stop being credentials when a second factor is required.
- 1.1.4 Ensure Sign-in risk policy is enabled. Microsoft Entra ID assigns each sign-in a risk score based on impossible-travel patterns, anonymizer use, leaked-credential matches, and unfamiliar IP. The CA policy blocks or steps up authentication for high-risk sign-ins, catching credential-stuffing waves before the first password lands.
- 5.1.2.1 Ensure legacy authentication is blocked. POP3, IMAP4, SMTP AUTH, and the rest never support MFA at the protocol level. Block them via Conditional Access and the credential-stuffing wave can't even reach a successful login.
What changes if CIS is in place: the attacker's stolen-credentials list becomes worthless against your tenant. The first authentication attempt over IMAP gets a "blocked by Conditional Access" rejection. An attempt against the modern auth endpoint trips the MFA prompt. A high-risk sign-in from a known anonymizer IP is blocked outright. The breach simply doesn't start. The deeper walkthrough on the legacy-auth half of this is on implement the CIS M365 Benchmark for small business.
Attack path 2: OAuth consent phishing leading to mailbox access
The chain. User receives a link that looks like a Microsoft security prompt: "A new app is requesting access. Click here to review." They click. The page is a real Microsoft consent screen, but the app behind it is malicious, registered by the attacker, requesting Mail.Read, Mail.ReadWrite, or full_access_as_app. The user clicks Accept. The attacker's app now has its own refresh token and reads the mailbox indefinitely, regardless of password resets or MFA changes. This is the persistence mechanism that survives most breach response.
The CIS recommendations that prevent it.
- 5.1.5.1 Ensure 'user consent for applications' is configured to require admin consent. The default lets any user grant any third-party app access to their mailbox and files. CIS flips that: users can request, but an admin has to approve. The malicious-app consent flow dies at the click.
- 5.1.5.2 Ensure 'user consent for verified publishers' is enabled with low-risk permissions only. A middle ground for tenants that don't want every consent crossing the admin's desk: allow users to consent only to verified publishers and only for low-risk scopes. Mail.ReadWrite isn't on that list.
- 5.1.5.3 Ensure the admin consent workflow is enabled. Gives users a "Request approval" button so they're not blocked outright. They submit, an admin reviews, the workflow logs the decision.
What changes if CIS is in place: the attacker's consent page still loads, but the user's click does nothing. The request lands in the admin's queue. The admin sees "Mail.ReadWrite for unverified publisher 'AcmeMailReader'" and rejects it. No app gets installed. No refresh token gets issued. Persistence never establishes.
Attack path 3: mailbox compromise leading to forwarding-rule exfiltration
The chain. Attacker gets into a single mailbox by any means: phished password, stolen token, weak app password. First action: create an inbox rule that forwards every message matching keywords like "wire," "invoice," or "ACH" to an external address. Optionally a second rule that auto-deletes the bounce-back from the spoofed reply. The attacker now has a passive intelligence feed on the company's financial communications, and the user sees nothing in their inbox to suggest anything is wrong.
The CIS recommendations that prevent it.
- 6.2.1 Ensure all forms of mail forwarding are blocked and/or disabled. The remote domains policy: set
AutoForwardEnabled $falseon the default remote domain. This is a tenant-wide transport-layer control. No mailbox can forward outside the tenant, regardless of what rules exist. - 6.2.2 Ensure mail transport rules do not whitelist specific domains. Closes the side door where a transport rule allows forwarding to a "trusted partner" domain that an attacker can later compromise or impersonate.
- 6.2.3 Ensure external sender warnings are enabled. Doesn't stop forwarding. Helps the user spot the spoofed reply that often accompanies it.
The PowerShell to verify this is in place tenant-wide:
Connect-ExchangeOnline
# Tenant-wide remote-domain default; AutoForwardEnabled should be False
Get-RemoteDomain Default | Select-Object Name, AutoForwardEnabled
# Audit any anti-spam outbound policy that still permits external forwarding
Get-HostedOutboundSpamFilterPolicy |
Select-Object Name, AutoForwardingMode
# Snapshot of mailboxes with mailbox-level forwarding configured
Get-EXOMailbox -ResultSize Unlimited |
Where-Object { $_.ForwardingSmtpAddress -or $_.ForwardingAddress } |
Select-Object UserPrincipalName, ForwardingSmtpAddress, ForwardingAddress,
DeliverToMailboxAndForward
What changes if CIS is in place: the attacker's inbox rule still saves successfully (Outlook lets users create rules), but the forward action never executes against an external recipient. The transport layer drops it. The attacker's exfiltration channel is gone. The deeper attack mechanics are documented on how email forwarding attacks work in Microsoft 365.
See How M365Shield Deploys These Controls
M365Shield deploys the CIS-aligned baseline across your tenant in 72 hours. No multi-month consulting engagement, no quote process.
See How It WorksAttack path 4: compromised admin account leading to tenant takeover
The chain. The IT contractor has Global Administrator. They use the same account to read their own email, browse the web, install software, and configure the tenant. The account gets phished. The attacker now has Global Admin. They create a new admin account with an obscure name, disable Conditional Access policies that would block them, exfiltrate at leisure, and re-enter weeks later through the backdoor admin even after passwords are reset.
The CIS recommendations that prevent it.
- 1.1.3 Ensure that between two and four global administrators are designated. Two for resilience, four as the upper bound. Most SMBs have either one (single point of compromise) or seven (sprawl). CIS forces a deliberate count.
- 1.1.5 Ensure 'Privileged Identity Management' is used to manage roles. Roles are not assigned standing. They're activated on-demand with justification, time-limited, optionally requiring approval. A phished credential without active PIM elevation has no admin power until the elevation request is approved.
- 1.1.6 Ensure separate accounts are used for administrative tasks. The contractor gets
[email protected]for tenant work and[email protected]for daily email. The admin account doesn't read external email. Doesn't browse. Doesn't get phished. - 1.1.7 Ensure multifactor authentication is enabled for all users in administrative roles. Including phishing-resistant MFA (FIDO2 hardware key) for Global Admin. Push-notification MFA is not enough at this tier; AiTM phishing kits beat it.
A quick PowerShell health check that maps to these recommendations:
Connect-MgGraph -Scopes "RoleManagement.Read.Directory","User.Read.All","Policy.Read.All"
# Count of standing Global Administrator assignments
$gaRoleId = (Get-MgRoleManagementDirectoryRoleDefinition `
-Filter "displayName eq 'Global Administrator'").Id
Get-MgRoleManagementDirectoryRoleAssignment `
-Filter "roleDefinitionId eq '$gaRoleId'" |
Select-Object PrincipalId, DirectoryScopeId
# Conditional Access policies covering admin roles
Get-MgIdentityConditionalAccessPolicy |
Where-Object { $_.Conditions.Users.IncludeRoles.Count -gt 0 } |
Select-Object DisplayName, State,
@{N='AdminRoles';E={$_.Conditions.Users.IncludeRoles.Count}}
What changes if CIS is in place: the contractor's daily-email account gets phished, the daily account has no admin role, and the admin account isn't sitting in the same browser session. PIM means even a successful theft of the admin account's password yields nothing without the elevation flow. The takeover never happens.
Attack path 5: external-sharing leak leading to unintended data exposure
The chain. An employee shares a SharePoint folder with "Anyone with the link" so a vendor can grab a file quickly. The link gets forwarded. The folder still has every quarterly financial document going back three years. Six months later the company finds it indexed by a search engine. No attacker, no malware, no MFA bypass. Just the default sharing setting doing exactly what it was set to do.
The CIS recommendations that prevent it.
- 7.2.1 Ensure modern authentication for SharePoint applications is required. Closes the legacy-protocol equivalent for SharePoint.
- 7.2.3 Ensure external content sharing is restricted. The default is "Anyone." CIS recommends "New and existing guests" at most, with "Existing guests only" or "Only people in your organization" as stronger options. Anonymous links go away.
- 7.2.4 Ensure OneDrive content sharing is restricted. Same control surface, applied to OneDrive personal sites where most accidental over-sharing happens.
- 7.2.6 Ensure that SharePoint guest users cannot share items they don't own. Caps the blast radius of a compromised guest account.
- 7.2.7 Ensure 'Anyone' links expire within an organization-defined period. If anonymous links are allowed for some scenarios, they auto-expire (CIS-recommended ceiling is 30 days).
- 7.3.1 Ensure custom script execution is restricted. Stops attackers who do get a guest account from hosting JavaScript-based stealer pages on SharePoint.
What changes if CIS is in place: the employee tries to share with "Anyone" and the option isn't in the menu. Only "Specific people" or "People in your organization." If they pick a specific external email, that email becomes a tracked guest with auditable access. If anonymous links are still permitted under tighter conditions, they expire automatically before a leaked URL can sit indexed for six months.
The four CIS controls that prevent the most attacks
The full benchmark is over 150 recommendations. SMBs working through it for the first time always ask the same question: which ones matter most? Based on incident patterns, four controls disrupt the largest share of attack chains. Deploy these first; everything else is hardening on top of them.
1. MFA enforcement via Conditional Access (recommendations 1.1.1, 1.1.4, 1.1.7). Mitigates credential theft, password spraying, credential stuffing, and most phishing kits that don't use AiTM. This is the highest-leverage control in the entire benchmark. Per-user MFA does not count. The CA-driven version is what survives audit.
2. Legacy authentication blocking (recommendation 5.1.2.1). Eliminates the protocol-level bypass that lets stolen credentials walk past MFA entirely. This is the control that catches organizations off guard most often: they enable MFA, breathe out, and then discover the breach came in through IMAP.
3. Audit log retention extended (recommendation 3.1.1, 3.1.2). The Unified Audit Log is enabled by default for most SKUs, but retention defaults to 90 or 180 days depending on license. CIS pushes it to one year (E5/G5) and treats the longer retention as foundational for incident investigation. This control doesn't prevent breaches; it enables detection and forensic reconstruction so the response is fact-based instead of speculative.
4. Tenant-wide outbound forwarding restriction (recommendation 6.2.1). Cuts the most common exfiltration channel in BEC and account-takeover incidents. One transport-layer setting closes the door for every mailbox in the tenant.
Together these four controls disrupt the initial access, the persistence pivot, the exfiltration channel, and the detection blind spot that most SMB M365 breaches rely on. They are the highest-ROI deploys in the benchmark.
Quick verification: are the four high-leverage controls actually in place?
A short PowerShell sweep that audits Conditional Access policy effectiveness for the four controls above. Run it after any tenant change to confirm nothing drifted.
Connect-MgGraph -Scopes "Policy.Read.All","Directory.Read.All"
Connect-ExchangeOnline
# 1. MFA-via-Conditional-Access policy enabled and broad
$mfaPolicies = Get-MgIdentityConditionalAccessPolicy |
Where-Object {
$_.GrantControls.BuiltInControls -contains "mfa" -and
$_.State -eq "enabled" -and
$_.Conditions.Applications.IncludeApplications -contains "All"
}
"MFA-enforcing CA policies (enabled, all apps): $($mfaPolicies.Count)"
# 2. Legacy auth blocking policy
$legacyBlock = Get-MgIdentityConditionalAccessPolicy |
Where-Object {
$_.Conditions.ClientAppTypes -contains "exchangeActiveSync" -and
$_.Conditions.ClientAppTypes -contains "other" -and
$_.GrantControls.BuiltInControls -contains "block" -and
$_.State -eq "enabled"
}
"Legacy-auth blocking CA policies: $($legacyBlock.Count)"
# 3. Audit log retention (org default policy)
Get-AdminAuditLogConfig |
Select-Object UnifiedAuditLogIngestionEnabled, AdminAuditLogEnabled
# 4. Tenant-wide outbound forwarding
Get-RemoteDomain Default | Select-Object Name, AutoForwardEnabled
Get-HostedOutboundSpamFilterPolicy |
Select-Object Name, AutoForwardingMode
A pass looks like: at least one MFA-enforcing policy, at least one legacy-auth-blocking policy, audit log ingestion enabled, default remote domain AutoForwardEnabled set to False, and the outbound spam policy set to AutoForwardingMode = Off. Anything else gets a finding.
What CIS won't prevent
A baseline that prevents most attacks isn't the same as a baseline that prevents all attacks. Four classes of incident sit outside what the CIS Benchmark addresses, and pretending otherwise creates false confidence:
- Token theft via adversary-in-the-middle phishing. Frameworks like Evilginx and EvilNoVNC sit between the user and Microsoft, harvest the post-MFA session cookie, and replay it. Modern auth, MFA completed, CIS-compliant tenant, and the attacker still gets in. Defense lives outside CIS: phishing-resistant MFA (FIDO2, Windows Hello for Business, certificate-based auth), short token lifetimes, and sign-in risk policies that look at the cookie's behavior post-issue.
- Supply-chain compromise via vendors. A trusted partner's account gets compromised, and they email a malicious file to your team from a real address; everything looks legitimate to your CIS-compliant tenant. Defense: vendor risk programs, content-disarm-and-reconstruct on inbound mail, and out-of-band verification for any wire-related instruction.
- Insider threats. A legitimate employee with legitimate access exfiltrates data on purpose. CIS controls that constrain external sharing don't help if the actor is inside. Defense: data loss prevention policies, sensitivity labels on regulated data, and access reviews that catch unused permissions.
- Zero-days in Microsoft services themselves. Storm-0558 (the 2023 Outlook signing-key compromise) is the canonical example. No customer configuration could have prevented it. Defense: detection capability through extended audit retention, plus a tested incident response plan for the day a Microsoft advisory lands.
A defensible posture pairs the CIS Benchmark with phishing-resistant MFA, vendor risk discipline, DLP, and a current IR plan. CIS is the foundation; it isn't the whole house.
Prevention versus response: where CIS sits and what it doesn't replace
Two distinct disciplines often get confused. Breach prevention is configuration: settings, policies, and architectural choices that make it harder for an attack to succeed. Breach response is operational: the procedure executed when prevention fails. CIS is the prevention framework. It does not tell you how to handle an active incident.
When prevention fails, and at some point it will, because no baseline is perfect, the operational document you reach for is a response checklist with hour-by-hour actions, command-line snippets, and the legal-notification window. We maintain one for M365: the data breach response checklist (25 steps) covers the 0-24 hour containment, days 1-7 persistence hunt, days 1-60 notification window, days 7-30 recovery, and 30+ days hardening. After the response is over, the rebuild back to a CIS-compliant state is in the post-breach CIS M365 Benchmark recovery guide, and the operator-level cleanup of a compromised tenant is the M365 tenant compromised recovery checklist.
Same incident, three perspectives: prevention (this post), response (the 25-step checklist), and rebuild (the post-breach recovery guide). A mature program runs all three.
IG1 first, IG2 next: how to sequence the rollout for an SMB
The CIS Benchmark labels each recommendation with an Implementation Group: IG1 for foundational controls every organization should implement, IG2 for controls that handle elevated risk profiles, IG3 for high-security environments. SMBs almost always start with IG1. Several IG2 controls matter specifically for breach prevention. Here's a sequence that gets a 30-250 seat business to defensible posture without overwhelming the team.
Week 1: IG1 identity and authentication.
- Conditional Access policy requiring MFA for all users (1.1.1)
- Conditional Access policy blocking legacy authentication (5.1.2.1)
- Phishing-resistant MFA for global administrators (1.1.7)
- Designated 2-4 Global Administrators, separated from daily-use accounts (1.1.3, 1.1.6)
Week 2: IG1 mail and detection.
- Tenant-wide outbound forwarding disabled (6.2.1)
- Anti-phishing policy with mailbox intelligence (6.5.x series)
- Unified Audit Log enabled with maximum retention available on the SKU (3.1.1)
- Admin consent workflow for OAuth applications (5.1.5.1, 5.1.5.3)
Week 3: IG1 collaboration and data.
- External sharing restricted on SharePoint and OneDrive (7.2.3, 7.2.4)
- Anonymous link expiration set (7.2.7)
- Default DLP policy for credit card and other sensitive data types
Week 4 onward: IG2 priorities for breach prevention.
- Privileged Identity Management for all admin roles (1.1.5)
- Sign-in risk and user risk Conditional Access policies (1.1.4)
- Sensitivity labels deployed for regulated content
- Continuous monitoring via Defender for Cloud Apps or Sentinel
IG3 controls (privileged access workstations, full FIDO2 rollout to all users, custom Microsoft Defender XDR detection rules) generally wait for organizations with regulated data, board-level risk reporting, or specific compliance drivers. Most SMBs spend their first year living in IG1 and IG2, and that's the right call.
Where to start if your tenant has never been hardened
Every benchmark assessment starts the same way: a snapshot of the current configuration against the published recommendations. For an SMB that has never deployed CIS, the first run usually returns 60-80 findings. That number is normal and not a cause for alarm. The question is which ones to fix first. The four high-leverage controls above answer that question. Everything else is sequencing.
Two paths to get there. The first is in-house: read the CIS Microsoft 365 Foundations Benchmark document, work through each recommendation, configure your tenant, and verify with PowerShell. Realistic time investment: 80-120 hours of admin work over two months. The companion CIS Benchmark as a cyber insurance requirement covers why insurers increasingly ask about this on renewal and what evidence they expect.
The second is a managed deployment that takes the benchmark and applies it as a baseline in days rather than weeks. M365Shield does this in 72 hours: assess current state, deploy the IG1 controls in priority order, verify each one is active, and hand back a documented baseline.
Frequently asked questions about the CIS M365 Benchmark and breach prevention
Does CIS Benchmark compliance mean we're breach-proof?
No. CIS prevents the most common attack chains by closing default-permissive settings, but it doesn't address adversary-in-the-middle token theft, supply-chain compromise via trusted vendors, insider threats, or zero-days in Microsoft's own services. Treat CIS as the foundation of breach prevention, not the totality of it. Pair it with phishing-resistant MFA, DLP, vendor risk reviews, and a tested incident response plan.
We have Microsoft 365 Business Premium. Can we even implement CIS?
Yes, with one caveat. Business Premium covers most IG1 controls including Conditional Access, MFA enforcement, basic Defender for Office 365, and Intune. It doesn't cover Microsoft Sentinel, Privileged Identity Management, or the deeper Microsoft Defender XDR features that some IG2 and IG3 recommendations rely on. For an SMB doing breach prevention, Business Premium is genuinely sufficient for IG1. You reach the SKU ceiling around the time you'd be looking at IG2 detection rules anyway.
If we already had a breach, where does CIS fit in the recovery?
Two places. During active response (days 0-30), CIS provides the target state for hardening once containment holds. You're not configuring from scratch, you're aligning to a known baseline. After response closes (day 30+), CIS becomes the audit yardstick for "are we actually hardened or are we just declaring victory?" The full sequencing for that path is documented separately on post-breach CIS M365 Benchmark recovery.
How often does the CIS M365 Benchmark change?
CIS publishes a major version annually and minor revisions quarterly. The benchmark tracks Microsoft's roadmap, which means new recommendations appear when Microsoft introduces a new feature surface (Microsoft 365 Copilot, Loop, the unified Defender XDR portal). Existing recommendations sometimes shift between IG1 and IG2 as Microsoft changes default permissiveness. Plan to re-run the benchmark assessment at least quarterly. That's the cadence at which most drift becomes material.
Do cyber insurance carriers actually check for CIS Benchmark alignment?
Increasingly, yes. The renewal questionnaire wording varies. Carriers may ask directly about CIS, or they may ask about specific controls that map cleanly to CIS recommendations (MFA enforcement, legacy auth, audit log retention, external forwarding). Either way, a tenant that has implemented CIS answers those questions in the affirmative without manual mapping. The detailed insurer perspective is on CIS Benchmark as a cyber insurance requirement.
Find out which CIS controls your tenant is missing
M365Shield's risk check identifies the configuration gaps attackers exploit and shows you exactly which CIS recommendations close them.
Check My Tenant Risk