Microsoft 365 Security Baselines: Configuratie En Borging Met Defender Voor Endpoint

💼 Management Samenvatting

Security baselines vormen het fundament van een betrouwbare Microsoft 365-werkplekomgeving. Ze vertalen de principes uit de Nederlandse Baseline voor Veilige Cloud naar concrete instellingen in Defender voor Endpoint, Windows, Edge en Intune, waardoor bestuurders, architecten en beheerders hetzelfde referentiepunt hanteren. Door een baseline centraal vast te leggen ontstaat er één gedeelde waarheid over welke configuraties minimaal vereist zijn voor iedere endpoint, ongeacht of deze wordt beheerd door een intern team, een shared service of een externe leverancier. Het resultaat is een voorspelbare beveiligingspositie die zich sneller laat verbeteren en eenvoudiger is uit te leggen aan bestuur, audit en toezichthouders.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
88u (tech: 40u)
Van toepassing op:
Microsoft 365 E5
Microsoft 365 E3
Microsoft Defender voor Endpoint Plan 1
Microsoft Defender voor Endpoint Plan 2

De druk vanuit BIO, NIS2 en sectorspecifieke regelgeving dwingt organisaties om aantoonbaar te maken dat ze passende maatregelen hebben getroffen. Incidentonderzoek toont keer op keer dat aanvallers misbruik maken van endpoints waarop Network Protection is uitgeschakeld, ASR-regels ontbreken of lokale beheerders niet zijn beperkt. Toezichthouders accepteren geen mondelinge uitleg meer; zij verwachten versiebeheer, dashboards en empirisch bewijs dat instellingen echt actief zijn. Security baselines brengen orde in dat speelveld: ze definiëren de gewenste staat, koppelen die aan risicoafwegingen en beschrijven hoe afwijkingen worden geaccepteerd of opgelost. Daarmee vormen ze het sluitstuk van het verantwoordingsproces richting bestuur, rekenkamer en Autoriteit Persoonsgegevens.

PowerShell Modules Vereist
Primary API: Microsoft Graph Security API, Microsoft Intune API, Microsoft 365 Defender portal
Connection: Connect-MgGraph, Intune reporting endpoints, PowerShell remoting
Required Modules: Microsoft.Graph, Microsoft.Graph.DeviceManagement, Microsoft.Graph.Security

Implementatie

Dit artikel beschrijft hoe u security baselines ontwerpt, uitrolt en borgt binnen Microsoft 365 en Defender voor Endpoint. Eerst behandelen we de strategische noodzaak en de waarde van een eenduidig besliskader. Daarna bespreken we de technische en organisatorische randvoorwaarden, gevolgd door een gedetailleerde implementatie via Intune en Group Policy met ondersteuning van het meegeleverde PowerShell-script. Vervolgens leggen we uit hoe monitoring, governance en continue verbetering worden georganiseerd en hoe het geheel aansluit op compliance- en auditvereisten.

Strategische context en waarde van security baselines

Een security baseline is meer dan een lijst technologische instellingen; het is een bestuurlijke afspraak over het minimumbeveiligingsniveau van de organisatie. Binnen de Nederlandse Baseline voor Veilige Cloud fungeert de baseline als vertaling van principes als proportioneel risicobeheer, privacy by design en secure by default naar uitvoerbare maatregelen. Door de baseline te koppelen aan enterprise-architectuur en portfoliosturing weten projectteams exact welk beveiligingsniveau zij moeten leveren voordat een nieuwe dienst naar productie mag. Dit voorkomt discussie achteraf en creëert vertrouwen bij bestuurders dat iedere werkplek dezelfde stevige basis heeft, ongeacht de leverancier of het type apparaat. Bovendien geeft de baseline duidelijke taal richting leverancierscontracten zodat prestatie-indicatoren objectief meetbaar worden.

Baselines versnellen besluitvorming doordat niet iedere wijziging een volledige risicobeoordeling vereist. Wie afwijkt van de standaard moet aantonen waarom dat noodzakelijk is en welke compenserende maatregelen worden getroffen. Dit sluit naadloos aan op het comply-or-explain-principe dat in veel ministeries gebruikelijk is. Tegelijkertijd stimuleren baselines innovatie omdat teams precies weten waar de ruimte zit voor experimentele functies. In plaats van maandenlange discussies over elk register- of Intune-setting, ligt de nadruk op het toetsen van nieuwe scenario's aan een stabiele basis en het documenteren van tijdelijke afwijkingen. Zo ontstaat een cultuur waarin snelheid en controle elkaar niet bijten.

De waarde van een baseline blijkt vooral tijdens incidentrespons en audits. Zodra zich een penetratie-onderzoek of een daadwerkelijk beveiligingsincident voordoet, kan de organisatie meteen aantonen welke controles actief waren en welke endpoints buiten scope vielen. Het bijbehorende PowerShell-script levert concrete meetpunten op endpointniveau, waardoor forensische teams exact zien of Network Protection, cloud-delivered protection en de belangrijkste ASR-regels actief waren. Daardoor verschuift de discussie van aannames naar feiten en kunnen lessons learned direct worden vertaald naar nieuwe baseline-versies. Auditcommissies waarderen deze aanpak omdat zij inzicht krijgen in zowel beleidskeuzes als operationele bewijslast.

Een baseline versterkt tot slot de samenwerking in de keten. Overheidsorganisaties werken met shared service centra, regionale uitvoeringsdiensten en private partners die allemaal endpoints beheren binnen hetzelfde stelsel. Door de baseline als contractuele bijlage op te nemen, ontstaat er geen discussie meer over minimale beveiliging. Leveranciers leveren aantoonbaar dezelfde configuratie, terwijl afwijkingen centraal worden geregistreerd en beoordeeld. Wanneer Microsoft nieuwe functionaliteit introduceert kan die gecontroleerd worden toegevoegd aan de baseline, waarna alle ketenpartners weten welke nieuwe instellingen gelden en welke testscenario's moeten worden doorlopen. Daarmee groeit de baseline mee met technologische vernieuwing zonder dat de regie verloren gaat.

Technische en organisatorische vereisten voor baselines

Het ontwerpen van een baseline begint met het inventariseren van technische randvoorwaarden. Alle endpoints moeten zijn opgenomen in Entra ID, Intune moet modern beheer mogelijk maken en traditionele domeinomgevingen moeten gezonde Active Directory- en Group Policy-infrastructuur hebben. Defender voor Endpoint Plan 2 licenties zijn nodig voor functies als attack surface reduction en automatische remediatie; organisaties die nog op E3 draaien moeten daarom Security-add-ons of step-up licenties plannen. Daarnaast moeten netwerkfirewalls verkeer naar Microsoft Defender cloud endpoints toestaan, anders kunnen modules als Network Protection en cloud-delivered protection niet functioneren. Zonder deze fundamenten levert de baseline vooral papieren zekerheid.

Naast techniek is governance cruciaal. Een baseline heeft een eigenaar nodig die wijzigingen bewaakt, wijzigingen door de Design Authority loodst en zorgt voor transparante documentatie. Iedere instelling moet terug te voeren zijn op een risicoanalyse en een normenkader zoals BIO of CIS. Documentatie wordt het liefst opgeslagen in een Git-repository waar zowel Intune JSON-exporten als GPO-back-ups, architectuurbesluiten en changelog staan. Hierdoor kunnen auditors op elk moment terugzien welke versie wanneer is vrijgegeven en waarom. Dit niveau van discipline voorkomt dat individuele beheerders ongecontroleerde wijzigingen uitvoeren en maakt het eenvoudiger om audits te doorstaan.

Telemetry en operationele tooling moeten beschikbaar zijn om naleving te meten. Microsoft 365 Defender, Intune reporting, Sentinel en het PowerShell-script leveren samen de dataset waarmee compliance dashboards worden gevoed. Om dat mogelijk te maken moeten endpoints hun status kunnen rapporteren: Windows Defender mag niet worden overschreven door derde partijen, Windows event logging moet actief zijn en er moet voldoende opslagcapaciteit zijn voor logbestanden. Tevens is een centraal SIEM of datawarehouse nodig waarin baseline-rapportages worden opgeslagen, zodat trends zichtbaar blijven over meerdere jaren. De investering in meetbare telemetrie betaalt zich terug wanneer bestuurders of toezichthouders op korte termijn bewijs vragen.

Tot slot vergt een baseline multidisciplinair vakmanschap. Werkplekbeheer, identity, netwerksecurity, privacy, compliance en leveranciersmanagement moeten samenwerken in een vast ritme. Veel organisaties richten een baseline board in die maandelijks wijzingen bespreekt, uitzonderingen beoordeelt en releases plant. Dit overleg bewaakt de samenhang tussen Windows-, Edge- en Office-baselines en zorgt dat wijzigingen eerst in test- en acceptatieomgevingen landen voordat productie volgt. Door expliciete rollen en overlegmomenten vast te leggen, blijft de baseline geen eenmalig project maar een blijvend onderdeel van enterprise governance.

Implementatie via Intune, Group Policy en lokale validatie

Gebruik PowerShell-script security-baselines-configured.ps1 (functie Invoke-BaselineAssessment) – Voert een lokale controle uit op kerninstellingen uit de Microsoft 365 security baseline, inclusief Defender-onboarding, Network Protection, cloud-delivered protection en een subset aan ASR-regels, met optionele DebugMode voor veilige testen..

De implementatie start met een technische blauwdruk waarin per thema beveiligingsprofielen worden gedefinieerd en voorzien van versiebeheer. Deze profielen worden gekoppeld aan een releasekalender, zodat helder is wanneer wijzigingen naar test, acceptatie en productie gaan. Referentie-endpoints voor kantoorwerkplekken, beheerdersstations en gespecialiseerde apparaten worden volledig geautomatiseerd ingericht, zodat iedere release reproduceerbaar kan worden gevalideerd en vergeleken met eerdere versies.

Wanneer de blauwdruk stabiel is, worden policies uitgerold via Intune Endpoint Security en Configuration Profiles, terwijl bestaande Group Policy Objects worden opgeschoond. Intune bedient moderne, hybride en thuiswerkplekken; GPO's blijven relevant voor servers en apparaten die permanent aan een domein hangen. Door instellingen thematisch te groeperen blijven wijzigingen beheersbaar en kunnen problemen gericht worden teruggedraaid. Dynamische Entra ID-groepen op basis van device-tags zorgen ervoor dat profielen automatisch bij de juiste apparaten terechtkomen.

Het PowerShell-script fungeert als onafhankelijke verificatie. In Invoke-BaselineAssessment wordt gecontroleerd of Defender voor Endpoint daadwerkelijk is geactiveerd, of real-time bescherming, cloud-delivered protection en Block at First Sight de juiste waarden hebben en of kritieke ASR-regels zijn ingeschakeld. Dankzij de DebugMode kan dezelfde controle worden uitgevoerd op images of offline machines zonder systeemwijzigingen. Bij afwijkingen wordt exact vermeld welke instelling ontbreekt, waardoor beheerders gericht kunnen bijsturen in Intune of GPO's.

De implementatie eindigt met verander- en communicatiemanagement. Servicedesks ontvangen draaiboeken voor veelvoorkomende meldingen, gebruikers krijgen uitleg over nieuwe beveiligingspop-ups en leveranciers weten hoe zij wijzigingen moeten aanvragen. Elk releasepakket bevat een rollbackplan en een checklist voor gecontroleerde livegang. Zo ontstaat een herhaalbaar proces dat niet afhankelijk is van een enkele expert, maar gestoeld is op documentatie, tooling en duidelijke verantwoordelijkheden.

Monitoring, governance en continue verbetering

Gebruik PowerShell-script security-baselines-configured.ps1 (functie Invoke-BaselineRemediation) – Voert waar toegestaan gerichte remediatieacties uit voor Defender-instellingen, zet Network Protection in block-modus en registreert afwijkingen zodat centrale teams follow-up kunnen plannen..

Na de uitrol verschuift de aandacht naar borging via monitoring en rapportage. Intune, Microsoft 365 Defender en Sentinel leveren dashboards voor dagelijkse opvolging, maar organisaties plannen daarnaast maandelijkse steekproeven waarbij Invoke-BaselineAssessment op een representatieve selectie wordt uitgevoerd. De resultaten worden opgeslagen in het centrale datawarehouse zodat trends over meerdere kwartalen zichtbaar zijn en de CISO direct ziet welke organisatieonderdelen structureel achterlopen.

Een volwassen governance-model kent duidelijke rollen. De CISO bewaakt risicobereidheid en rapportage richting bestuur, de CIO faciliteert middelen en planning, service-eigenaren sturen hun beheerleveranciers aan en proceseigenaren blijven verantwoordelijk voor systemen binnen hun scope. Afwijkingen worden geregistreerd in een uitzonderingsregister met eigenaar, einddatum en compenserende maatregel. Het script levert daarbij concrete technische details die aan het register worden toegevoegd, zodat auditors altijd kunnen nagaan waarom een endpoint tijdelijk afwijkt.

Monitoring is alleen zinvol wanneer indicatoren aan acties zijn gekoppeld. Organisaties definiëren Key Risk Indicators zoals het percentage endpoints met Network Protection in blokmodus, het aantal apparaten waarop Controlled Folder Access uitstaat of het aantal openstaande uitzonderingen ouder dan dertig dagen. Deze indicatoren worden besproken in het beveiligingsoverleg en leiden tot concrete opdrachten, variërend van Intune-campagnes tot gerichte remediatie met Invoke-BaselineRemediation. Zo blijft de baseline actueel en worden afwijkingen binnen afgesproken termijnen opgelost.

Continue verbetering vraagt tenslotte om een ritme van evaluaties. Elk kwartaal worden nieuwe Microsoft-baselines, opgedane incidentlessons en veranderde dreigingen beoordeeld. Wijzigingen worden vastgelegd in een changelog, voorzien van impactanalyse en communicatiestrategie. Door lessons learned uit oefeningen en audits direct te vertalen naar een nieuwe release behouden organisaties het initiatief in plaats van achteraf te reageren op eisen van toezichthouders.

Compliance, risicobeheersing en auditvoorbereiding

Security baselines maken compliance tastbaar. Voor de BIO kunnen maatregelen uit hoofdstukken twaalf en zestien direct worden gekoppeld aan concrete Intune-profielen en Defender-instellingen. Wanneer auditors vragen hoe malwarebescherming of configuratiebeheer is ingericht, kan de organisatie verwijzen naar de baseline, het changelog en de scriptresultaten. Dit versnelt audits, vermindert subjectieve discussies en geeft bestuurders vertrouwen dat veiligheidsclaims met feiten zijn onderbouwd.

NIS2 legt nadruk op aantoonbaar risicobeheer en incidentrespons. Een up-to-date baseline toont dat de organisatie passende maatregelen heeft getroffen voor preventie en detectie. Het registreren van baseline-afwijkingen, de doorlooptijd van remediatie en de betrokkenheid van leveranciers levert precies de KPI's die NIS2-rapportages vragen. Bij een incident kan onmiddellijk worden aangetoond welk percentage endpoints volledig compliant was en waar gerichte aanvullende maatregelen nodig zijn.

Ook de AVG profiteert van een consistente baseline. Artikel vijfentwintig over privacy by design en artikel tweeëndertig over passende technische maatregelen vragen om aantonen dat systemen standaard veilig zijn ingericht. Door endpoints met gevoelige persoonsgegevens onder een strengere variant van de baseline te plaatsen, bijvoorbeeld met extra logging, BitLocker-eisen en strengere ASR-profielen, kan de organisatie laten zien dat gegevensbescherming is ingebakken in de standaardconfiguratie. Scriptresultaten fungeren hierbij als bewijs dat cruciale instellingen daadwerkelijk actief waren.

Auditvoorbereiding vereist een integraal dossier. Daarin worden baseline-documentatie, Intune- en GPO-exporten, scriptuitvoer, uitzonderingsregisters en herijkingsbesluiten samengebracht. Het dossier wordt minimaal zeven jaar bewaard en jaarlijks geactualiseerd. Elke audit start met het delen van dit dossier, waarna steekproeven eenvoudig zijn te organiseren omdat alle feiten al klaarstaan. Deze aanpak bespaart weken aan voorbereidingstijd en vergroot de voorspelbaarheid van audituitkomsten.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Microsoft 365 Security Baseline controle voor Defender voor Endpoint-werkplekken .DESCRIPTION Controleert op een Windows-endpoint of een aantal kerninstellingen uit de Microsoft 365 security baseline voor Defender voor Endpoint is geconfigureerd, zoals: - Onboarding naar Microsoft Defender voor Endpoint - Real-time bescherming en cloud-delivered protection - Network Protection - Controlled Folder Access - Een subset van kritieke Attack Surface Reduction (ASR)-regels Het script kan in drie modi worden gebruikt: - DebugMode: genereert voorbeeldoutput zonder systeemconfiguratie uit te lezen - BaselineAssessment: leest lokale instellingen uit en rapporteert compliance - BaselineRemediation: geeft aanbevelingen en kan optioneel beperkte remediatie-acties uitvoeren .NOTES Filename: security-baselines-configured.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-27 Last Modified: 2025-11-27 Version: 1.0 Related JSON: content/m365/defender-endpoint/security-baselines-configured.json .EXAMPLE .\security-baselines-configured.ps1 -BaselineAssessment -DebugMode Voert een veilige lokale test uit met voorbeelddata, zonder afhankelijk te zijn van Defender-cmdlets. .EXAMPLE .\security-baselines-configured.ps1 -BaselineAssessment Controleert de lokale configuratie ten opzichte van de beoogde security baseline. .EXAMPLE .\security-baselines-configured.ps1 -BaselineRemediation -WhatIf Toont welke gerichte remediatie-acties zouden worden uitgevoerd zonder daadwerkelijk instellingen te wijzigen. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een baseline-assessment uit op dit endpoint.")] [switch]$BaselineAssessment, [Parameter(HelpMessage = "Voer beperkte remediatie-acties uit om de baseline te herstellen.")] [switch]$BaselineRemediation, [Parameter(HelpMessage = "Voer een veilige lokale test uit met voorbeelddata, zonder systeemwijzigingen.")] [switch]$DebugMode, [Parameter(HelpMessage = "Toon welke acties zouden worden uitgevoerd zonder wijzigingen toe te passen.")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' # Verwachte instellingen voor de baseline (afgeleid van ransomware- en network-protection-artikelen) $Expected = [PSCustomObject]@{ RealTimeProtectionRequired = $true CloudProtectionMinLevel = 2 # MAPSReporting: Advanced BlockAtFirstSeenRequired = $true NetworkProtectionMode = 1 # 1 = Block, 2 = Audit ControlledFolderAccessMode = 1 # 1 = Block } # Subset van ASR-regels die in vrijwel iedere baseline terugkomen $BaselineAsrRules = @{ # Block executable content from email and webmail "D4F940AB-401B-4EFC-AADC-AD5F3C50688A" = "Enabled"; # Block all Office applications from creating child processes "26190899-1602-49E8-8B27-EB1D0A1CE869" = "Enabled"; # Block Office applications from creating executable content "3B576869-A4EC-4529-8536-B80A7769E899" = "Enabled"; # Block credential stealing from the Windows local security authority subsystem (lsass.exe) "9E6C4E1F-7D60-472F-BA1A-A39EF669E4B2" = "Enabled" } function Test-AdminContext { <# .SYNOPSIS Controleert of het script met administratorrechten draait. #> [CmdletBinding()] param() $principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) if (-not $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { Write-Error "Dit script vereist administratorrechten. Start PowerShell als administrator of gebruik DebugMode voor een lokale test." return $false } return $true } function Get-DebugBaselineResult { <# .SYNOPSIS Levert een voorbeeldresultaat voor lokale debugging zonder systeemafhankelijkheden. #> [CmdletBinding()] param() $sample = [PSCustomObject]@{ ScriptName = "security-baselines-configured.ps1" PolicyName = "Microsoft 365 Security Baseline (voorbeeld)" IsCompliant = $false DefenderOnboarded = $true RealTimeProtection = $true CloudProtectionLevel = 1 BlockAtFirstSeen = $false NetworkProtection = 2 ControlledFolderAccess = 0 AsrRules = @() NonCompliantItems = @( "Cloud-delivered protection staat lager dan aanbevolen niveau (2).", "Block at first sight is niet ingeschakeld.", "Network Protection staat in Audit-modus in plaats van Block-modus.", "Controlled Folder Access is niet ingeschakeld." ) } foreach ($ruleId in $BaselineAsrRules.Keys) { $sample.AsrRules += [PSCustomObject]@{ RuleId = $ruleId DesiredState = $BaselineAsrRules[$ruleId] CurrentState = "NotSet" IsCompliant = $false } } return $sample } function Test-SecurityBaselineConfiguration { <# .SYNOPSIS Controleert de lokale configuratie ten opzichte van de verwachte security baseline. .OUTPUTS PSCustomObject met compliance-informatie. #> [CmdletBinding()] param() $result = [PSCustomObject]@{ ScriptName = "security-baselines-configured.ps1" PolicyName = "Microsoft 365 Security Baseline" IsCompliant = $false DefenderOnboarded = $null RealTimeProtection = $null CloudProtectionLevel = $null BlockAtFirstSeen = $null NetworkProtection = $null ControlledFolderAccess = $null AsrRules = @() NonCompliantItems = @() } try { # Defender-status $mpStatus = Get-MpComputerStatus -ErrorAction SilentlyContinue $mpPref = Get-MpPreference -ErrorAction SilentlyContinue if (-not $mpStatus -or -not $mpPref) { $result.NonCompliantItems += "Kon Microsoft Defender-status niet ophalen; controleer of Defender voor Endpoint/Antivirus is geïnstalleerd." return $result } # Onboarding naar Defender voor Endpoint (best-effort check) try { $senseKey = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows Advanced Threat Protection" -ErrorAction SilentlyContinue if ($senseKey -and $senseKey.OnboardingState -ge 1) { $result.DefenderOnboarded = $true } else { $result.DefenderOnboarded = $false $result.NonCompliantItems += "Endpoint lijkt niet volledig te zijn onboarded naar Microsoft Defender voor Endpoint." } } catch { $result.NonCompliantItems += "Kon onboardingstatus van Defender voor Endpoint niet bepalen: $($_.Exception.Message)" } # Kerninstellingen $result.RealTimeProtection = $mpStatus.RealTimeProtectionEnabled $result.CloudProtectionLevel = $mpPref.MAPSReporting $result.BlockAtFirstSeen = $mpPref.EnableBlockAtFirstSeen $result.NetworkProtection = $mpPref.EnableNetworkProtection $result.ControlledFolderAccess = $mpPref.EnableControlledFolderAccess if ($Expected.RealTimeProtectionRequired -and -not $result.RealTimeProtection) { $result.NonCompliantItems += "Real-time bescherming is niet ingeschakeld." } if ($null -ne $result.CloudProtectionLevel -and $result.CloudProtectionLevel -lt $Expected.CloudProtectionMinLevel) { $result.NonCompliantItems += "Cloud-delivered protection (MAPSReporting) staat lager dan aanbevolen niveau ($($Expected.CloudProtectionMinLevel))." } if ($Expected.BlockAtFirstSeenRequired -and -not $result.BlockAtFirstSeen) { $result.NonCompliantItems += "Block at first sight is niet ingeschakeld." } if ($result.NetworkProtection -ne $Expected.NetworkProtectionMode) { $result.NonCompliantItems += "Network Protection staat niet in Block-modus (waarde $($Expected.NetworkProtectionMode))." } if ($result.ControlledFolderAccess -ne $Expected.ControlledFolderAccessMode) { $result.NonCompliantItems += "Controlled Folder Access staat niet in Block-modus (waarde $($Expected.ControlledFolderAccessMode))." } # ASR-regels foreach ($ruleId in $BaselineAsrRules.Keys) { $desiredState = $BaselineAsrRules[$ruleId] $currentState = $null if ($mpPref.AttackSurfaceReductionRules_Ids -and $mpPref.AttackSurfaceReductionRules_Actions) { for ($i = 0; $i -lt $mpPref.AttackSurfaceReductionRules_Ids.Count; $i++) { if ($mpPref.AttackSurfaceReductionRules_Ids[$i] -eq $ruleId) { $currentState = $mpPref.AttackSurfaceReductionRules_Actions[$i] break } } } $ruleResult = [PSCustomObject]@{ RuleId = $ruleId DesiredState = $desiredState CurrentState = $currentState IsCompliant = $currentState -eq $desiredState } $result.AsrRules += $ruleResult if (-not $ruleResult.IsCompliant) { $result.NonCompliantItems += "ASR-regel $($ruleResult.RuleId) is niet in gewenste staat ($desiredState)." } } if ($result.NonCompliantItems.Count -eq 0) { $result.IsCompliant = $true } } catch { $result.NonCompliantItems += "Onverwachte fout tijdens baselinecontrole: $($_.Exception.Message)" Write-Error "Fout in Test-SecurityBaselineConfiguration: $_" } return $result } function Invoke-BaselineAssessment { <# .SYNOPSIS Rapporteert de status van de security baseline op dit endpoint. #> [CmdletBinding()] param() Write-Host "" Write-Host "Security Baseline – Assessment" -ForegroundColor Yellow Write-Host "================================" -ForegroundColor Yellow if ($DebugMode) { Write-Host "" Write-Host "DebugMode ingeschakeld: er worden geen systeeminstellingen uitgelezen." -ForegroundColor Yellow $status = Get-DebugBaselineResult } else { if (-not (Test-AdminContext)) { return } $status = Test-SecurityBaselineConfiguration } Write-Host "" if ($status.IsCompliant) { Write-Host " Status: ✅ COMPLIANT met Microsoft 365 security baseline" -ForegroundColor Green } else { Write-Host " Status: ❌ NON-COMPLIANT met Microsoft 365 security baseline" -ForegroundColor Red } Write-Host "" Write-Host " Kerninstellingen:" -ForegroundColor Cyan Write-Host (" Defender onboarded : {0}" -f $status.DefenderOnboarded) -ForegroundColor White Write-Host (" Real-time bescherming : {0}" -f $status.RealTimeProtection) -ForegroundColor White Write-Host (" Cloud-delivered protection : {0}" -f $status.CloudProtectionLevel) -ForegroundColor White Write-Host (" Block at first sight : {0}" -f $status.BlockAtFirstSeen) -ForegroundColor White Write-Host (" Network Protection (EnableNetworkProtection) : {0}" -f $status.NetworkProtection) -ForegroundColor White Write-Host (" Controlled Folder Access (EnableControlledFolderAccess): {0}" -f $status.ControlledFolderAccess) -ForegroundColor White Write-Host "" Write-Host " ASR-regels (subset baseline):" -ForegroundColor Cyan foreach ($rule in $status.AsrRules) { $color = if ($rule.IsCompliant) { 'Green' } else { 'Yellow' } $icon = if ($rule.IsCompliant) { "✅" } else { "⚠️" } $current = if ($rule.CurrentState) { $rule.CurrentState } else { "NotSet" } Write-Host (" {0} {1} - Desired: {2}, Current: {3}" -f $icon, $rule.RuleId, $rule.DesiredState, $current) -ForegroundColor $color } if (-not $status.IsCompliant -and $status.NonCompliantItems.Count -gt 0) { Write-Host "" Write-Host " Niet-compliante onderdelen:" -ForegroundColor Cyan foreach ($item in $status.NonCompliantItems) { Write-Host " - $item" -ForegroundColor Yellow } } Write-Host "" Write-Host "Aanbeveling: gebruik -BaselineRemediation (eventueel met -WhatIf) om gerichte correcties uit te voeren." -ForegroundColor Yellow } function Invoke-BaselineRemediation { <# .SYNOPSIS Voert beperkte remediatie-acties uit om de security baseline te herstellen. .DESCRIPTION Past alleen instellingen toe die direct samenhangen met Defender voor Endpoint-configuratie. Andere hardeningmaatregelen blijven de verantwoordelijkheid van centrale GPO- of Intune-profielen. #> [CmdletBinding()] param() Write-Host "" Write-Host "Security Baseline – Remediation" -ForegroundColor Yellow Write-Host "================================" -ForegroundColor Yellow if ($DebugMode) { Write-Host "" Write-Host "DebugMode ingeschakeld: er worden geen wijzigingen uitgevoerd. Alleen voorbeeldacties worden getoond." -ForegroundColor Yellow $status = Get-DebugBaselineResult } else { if (-not (Test-AdminContext)) { return } $status = Test-SecurityBaselineConfiguration } if ($status.IsCompliant) { Write-Host "" Write-Host " Endpoint voldoet al aan de belangrijkste onderdelen van de security baseline. Geen actie vereist." -ForegroundColor Green return } Write-Host "" Write-Host " Geplande remediatie-acties:" -ForegroundColor Cyan $actions = @() if (-not $status.RealTimeProtection) { $actions += "Real-time bescherming inschakelen." } if ($null -ne $status.CloudProtectionLevel -and $status.CloudProtectionLevel -lt $Expected.CloudProtectionMinLevel) { $actions += "Cloud-delivered protection op aanbevolen niveau instellen (MAPSReporting=$($Expected.CloudProtectionMinLevel))." } if (-not $status.BlockAtFirstSeen) { $actions += "Block at first sight inschakelen." } if ($status.NetworkProtection -ne $Expected.NetworkProtectionMode) { $actions += "Network Protection in Block-modus inschakelen." } if ($status.ControlledFolderAccess -ne $Expected.ControlledFolderAccessMode) { $actions += "Controlled Folder Access in Block-modus inschakelen." } foreach ($action in $actions) { Write-Host " - $action" -ForegroundColor White } if ($WhatIf -or $DebugMode) { Write-Host "" Write-Host " [WhatIf] of DebugMode actief: er worden geen wijzigingen doorgevoerd." -ForegroundColor Yellow return } try { Write-Host "" Write-Host " Toepassen van geselecteerde wijzigingen..." -ForegroundColor Cyan if (-not $status.RealTimeProtection) { Write-Verbose "Real-time bescherming inschakelen..." Set-MpPreference -DisableRealtimeMonitoring $false } if ($null -ne $status.CloudProtectionLevel -and $status.CloudProtectionLevel -lt $Expected.CloudProtectionMinLevel) { Write-Verbose "Cloud-delivered protection op aanbevolen niveau instellen..." Set-MpPreference -MAPSReporting $Expected.CloudProtectionMinLevel } if (-not $status.BlockAtFirstSeen) { Write-Verbose "Block at first sight inschakelen..." Set-MpPreference -EnableBlockAtFirstSeen $true } if ($status.NetworkProtection -ne $Expected.NetworkProtectionMode) { Write-Verbose "Network Protection in Block-modus configureren..." Set-MpPreference -EnableNetworkProtection $Expected.NetworkProtectionMode } if ($status.ControlledFolderAccess -ne $Expected.ControlledFolderAccessMode) { Write-Verbose "Controlled Folder Access in Block-modus configureren..." Set-MpPreference -EnableControlledFolderAccess $Expected.ControlledFolderAccessMode } Start-Sleep -Seconds 2 $verify = Test-SecurityBaselineConfiguration Write-Host "" if ($verify.IsCompliant) { Write-Host "✅ Security baseline is grotendeels hersteld op dit endpoint." -ForegroundColor Green } else { Write-Host "⚠️ Na remediatie zijn nog afwijkingen aanwezig:" -ForegroundColor Yellow foreach ($item in $verify.NonCompliantItems) { Write-Host " - $item" -ForegroundColor Yellow } } } catch { Write-Error "Fout tijdens het toepassen van security baseline-remediatie: $_" } } try { Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host "Microsoft 365 Security Baseline Check" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan if ($BaselineRemediation) { Invoke-BaselineRemediation } elseif ($BaselineAssessment -or -not ($BaselineAssessment -or $BaselineRemediation)) { # Standaardgedrag: assessment uitvoeren Invoke-BaselineAssessment } } catch { Write-Error "Onverwachte fout in security-baselines-configured.ps1: $_" throw } finally { Write-Host "" Write-Host "========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder Microsoft 365 security baselines blijft endpointbeveiliging versnipperd, moeilijk te controleren en afhankelijk van individuen. Dit vergroot de kans op succesvolle aanvallen via zwakke configuraties, vertraagt incidentrespons en maakt het nagenoeg onmogelijk om snel aan te tonen dat BIO, NIS2 en AVG naleving op orde is.

Management Samenvatting

Ontwerp en implementeer een organisatiebrede security baseline voor Windows- en Defender-configuraties, vertaal deze naar Intune- en GPO-profielen en gebruik het PowerShell-script voor steekproeven en gerichte remediatie. Borg governance, uitzonderingsbeheer en versiecontrole zodat de baseline meegroeit met nieuwe dreigingen en auditvereisten.