Microsoft Defender XDR: Geïntegreerde Detectie En Respons Voor De Nederlandse Publieke Sector

💼 Management Samenvatting

Microsoft Defender XDR is de geïntegreerde detectie- en responslaag bovenop alle Defender-producten en Microsoft Sentinel. Het platform voegt signalen uit endpoints, identiteiten, cloudapplicaties, e-mail, IoT en SaaS samen tot één incidenttijdlijn en past automatisch correlatieregels, threat intelligence en response-automatisering toe. Voor Nederlandse overheidsorganisaties vormt Defender XDR daarmee de kern van een gezamenlijke SOC-strategie waarin vitale processen, ketenpartners en leveranciers op uniforme wijze worden bewaakt en aangestuurd.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
180u (tech: 110u)
Van toepassing op:
Microsoft 365 Defender
Defender for Endpoint
Defender for Office 365
Defender for Identity
Defender for Cloud Apps
Microsoft Sentinel
Azure AD
Publieke Sector

Zonder een uniform XDR-platform ontstaan blinde vlekken tussen diensten en bestuurslagen. Incidenten worden pas zichtbaar wanneer schade is aangericht, draaiboeken zijn versnipperd en bewijsvoering voor toezichthouders ontbreekt. Dit leidt tot vertraging bij datalekmeldingen, onvoldoende naleving van BIO- en NIS2-eisen en verhoogde kans op langdurige verstoringen. Daarnaast wordt personele capaciteit verspild aan handmatig correlatiewerk terwijl aanvallers zich razendsnel verplaatsen tussen workloads. Defender XDR lost dit op door alle signalen in realtime te combineren, geprioriteerde incidenten aan te leveren en meteen de juiste playbooks te activeren.

PowerShell Modules Vereist
Primary API: Microsoft Defender XDR API, Microsoft Graph Security API
Connection: Connect-AzAccount, Get-AzAccessToken, Connect-MgGraph
Required Modules: Az.Accounts, Microsoft.Graph

Implementatie

Dit artikel beschrijft hoe Microsoft Defender XDR wordt ontworpen, geïmplementeerd en beheerd binnen de "Nederlandse Baseline voor Veilige Cloud". We behandelen de strategische plaats van XDR in de Nederlandse publieke sector, de architectuurkeuzes voor data-inname en automatisering, de dagelijkse SOC-operatie inclusief scriptgestuurde monitoring en de manier waarop remediatie en maturity management worden ingericht. De bijbehorende PowerShell-script `code/m365/defender-xdr/index.ps1` bewaakt de consistentie tussen documentatie en techniek, controleert lokale sensoren en haalt telemetrie op uit de Defender XDR API, zodat beleid en uitvoering aantoonbaar synchroon lopen.

Strategische positie van Microsoft Defender XDR binnen de Nederlandse overheid

Microsoft Defender XDR bundelt detecties en responsacties uit Defender for Endpoint, Defender for Office 365, Defender for Identity, Defender for Cloud Apps en Microsoft Sentinel in één operationeel platform. Voor Nederlandse overheidsorganisaties betekent dit dat beveiligingssignalen uit het Rijksdienstennetwerk, gemeentelijke samenwerkingen, onderwijskoepels en leveranciersketens dezelfde context delen. In plaats van afzonderlijke consoles met verschillende classificaties biedt Defender XDR één tijdlijn met automatisch gecorreleerde incidenten, waardoor SOC-analisten sneller oorzaak en impact bepalen. Deze geïntegreerde benadering is essentieel nu hybride werken, keten-digitalisering en de inzet van AI-gedreven diensten het aanvalsoppervlak vergroten. De nationale aanpak voor vitale infrastructuur en het Rijksbrede programma Veiligheid Digitale Overheid benadrukken dat detectie en respons niet langer silo’s mogen zijn; Defender XDR vormt het platform waarop centrale regie en decentrale uitvoering elkaar ontmoeten.

In de context van wet- en regelgeving fungeert Microsoft Defender XDR als bewijs dat technische maatregelen daadwerkelijk aansluiten op verplichtingen uit BIO, NIS2 en AVG. De BIO verlangt dat beveiligingsgebeurtenissen integraal worden gelogd, dat afwijkingen binnen afgesproken responstijden worden behandeld en dat maatregelen aantoonbaar zijn. NIS2 voegt daar ketenverantwoordelijkheid, supply-chain-monitoring en continue verbetering aan toe. Defender XDR ondersteunt dit door gegevens uit alle Defender-componenten centraal te bewaren, inclusief context zoals toegepaste beleidsregels, blootgestelde identiteiten en gebruikte cloudbronnen. Wanneer auditors vragen welke responsmaatregelen zijn uitgevoerd na een phishingaanval of privilege-escalatie, kan een organisatie rechtstreeks naar de XDR-incidentkaart verwijzen en aantonen welke playbooks zijn gestart, welke identiteiten zijn geïsoleerd en welke notificaties naar toezichthouders zijn verstuurd. Zo wordt compliance niet alleen gedocumenteerd, maar zichtbaar in het dagelijkse SOC-proces.

De dreigingen waarmee Nederlandse publieke instellingen te maken hebben, worden steeds vaker uitgevoerd door goed gefinancierde groepen die meerdere aanvalskanalen tegelijk gebruiken. Een aanvaller kan een gemeente binnenkomen via een gecompromitteerde SaaS-app, lateraal bewegen via Teams-bestanden, toegang escaleren via een kwetsbare on-premises server en uiteindelijk gegevens exfiltreren via een Exchange Online mailbox. Zonder XDR zien analisten slechts losse incidenten; met Defender XDR worden deze stappen automatisch aan elkaar geregen en aangevuld met threat intelligence, device exposure data en real-time aanbevelingen. Hierdoor kunnen SOC’s prioriteren op basis van risicoscore in plaats van op basis van ruwe alertvolumes. Bovendien ondersteunt Defender XDR geïntegreerde jagers via Kusto Query Language, waardoor security teams scenario’s zoals living-off-the-land, token theft of MFA-bypass over EDR-, mail-, identity- en cloudlogs heen analyseren. Die multidisciplinaire zichtbaarheid is noodzakelijk om moderne aanvallen te stoppen voordat burgers hinder ondervinden.

De "Nederlandse Baseline voor Veilige Cloud" positioneert Defender XDR als de laag waarin operationele werkelijkheid en bestuurlijke eisen elkaar ontmoeten. Het platform fungeert als referentie voor architectuurprincipes, integratierichtlijnen, runbooks en meetwaarden. Door een gestandaardiseerde XDR-implementatie te documenteren, ontstaat een herbruikbare blauwdruk voor ministeries, uitvoeringsorganisaties en regionale samenwerkingen. Dit artikel beschrijft hoe deze blauwdruk wordt opgebouwd: welke componenten onmisbaar zijn, hoe gegevensstromen worden beveiligd, hoe werkzaamheden tussen SOC, CERT, privacyteams en bedrijfscontinuïteit worden afgestemd en hoe scripts de kwaliteit borgen. Het resultaat is een consistente aanpak waarmee organisaties aantonen dat zij zowel technische diepgang als bestuurlijke verantwoording beheersen, precies zoals de baseline voorschrijft.

Referentiearchitectuur, datastromen en integratiepatronen

Een volwassen Defender XDR-architectuur bestaat uit drie lagen: data-inname, analyse en orchestratie. In de innamelaag worden telemetriebronnen gekoppeld via Defender-agents, Microsoft Graph connectors, Microsoft Sentinel en API-integraties met SaaS-diensten of OT-bronnen. Nederlandse overheidsorganisaties voegen daar vaak logging uit Rijkskoppelvlakken, Digikoppeling-endpoints en sectorale platforms aan toe. De analysekern bestaat uit Microsoft Defender XDR zelf, aangevuld met Sentinel-workbooks en KQL-huntingqueries. Hier worden machine-learningmodellen, fusiegrafen en threat intelligence toegepast om ruwe gebeurtenissen te verrijken. De orchestratie- en automatiseringslaag bestaat uit Microsoft Defender automation rules, Logic Apps, Power Automate en bestaande SOAR-platformen. Architectuurprincipes bepalen welke data waar wordt opgeslagen, hoe classificatie en data residency worden geborgd en hoe fallback-methoden werken bij verstoringen in hybride omgevingen.

Identiteiten vormen het zenuwstelsel van Defender XDR. Azure AD Conditional Access signalen, Defender for Identity sensoren en PIM-logs worden samengebracht zodat een incident direct laat zien welke accounts betrokken zijn, welke privilege-paden openstonden en welke governance-controls zijn toegepast. Device-gegevens uit Defender for Endpoint leveren inzicht in exposure levels, OS-builds, misconfiguraties en geprioriteerde aanbevelingen. Defender for Office 365 voegt analyses toe over phishingcampagnes, BEC-aanvallen, schadelijke links en geavanceerde spoofingdetectie. Defender for Cloud Apps (nu Fabric-beheer) brengt schaduw-IT, OAuth-apps en data movement in kaart. Door deze gegevensbronnen in één datamodel te combineren krijgen architecten een integraal beeld van risico’s over workloads heen en kunnen zij richtlijnen opstellen voor segmentatie, zero-trust en data loss prevention.

Gegevenssoevereiniteit en privacy spelen een prominente rol. De EU Data Boundary voor Microsoft 365 en de Nederlandse eisen rond verwerking in de EU moeten expliciet worden meegenomen bij de keuze van regio’s voor Log Analytics, Sentinel en long-term retention. Architecten documenteren welke data de EU verlaat, hoe PII wordt geminimaliseerd in huntingqueries en welke pseudonimisering wordt toegepast tijdens export naar SIEM of datawarehouses. Voor DPIA’s en FG-toetsen is het belangrijk dat Defender XDR logging kan worden herleid tot specifieke doeleinden (bijvoorbeeld fraudedetectie of nationale veiligheid) en dat bewaartermijnen aansluiten op de Archiefwet. Deze juridische kaders worden vertaald naar technische instellingen zoals role-based access controls, customer-managed keys en regeleigen definities voor data labeling.

Automatisering vormt het sluitstuk van de architectuur. Door Defender automation rules te koppelen aan Logic Apps kunnen notificaties automatisch naar het Nationaal Cyber Security Centrum, sectorale CERT’s of crisisorganisaties worden gestuurd zodra een incident aan vooraf gedefinieerde criteria voldoet. Integraties met ITSM-platformen zorgen ervoor dat XDR-incidenten automatisch worden omgezet in tickets met rijke context, wat essentieel is voor change- en problemmanagement binnen de overheid. Scripted interfaces, zoals het PowerShell-bestand dat bij dit artikel hoort, bewaken of alle benodigde configuratie-artikelen aanwezig zijn, controleren de status van lokale sensoren en maken API-rapportages reproduceerbaar. Zo ontstaat een architectuur waarin techniek, processen en documentatie altijd synchroon lopen.

SOC-operaties, monitoring en continu inzicht

Gebruik PowerShell-script index.ps1 (functie Invoke-Monitoring) – Haalt telemetrie op uit de Defender XDR API, controleert de lokale Defender-sensor en verifieert of alle content- en scriptbestanden voor het Defender XDR-domein aanwezig zijn. Ondersteunt lokale debugmodus en export naar JSON-rapportages..

De dagelijkse operatie van een overheids-SOC draait om reproduceerbaar inzicht. Analisten starten hun dienst met een overzicht van incidenten, open playbooks, high-risk identiteiten en exposure-trends. Het PowerShell-script `index.ps1` voorziet hierin door de Defender XDR API te bevragen en de resultaten te combineren met lokale sensorinformatie. Het script controleert of de Sense-service draait, of onboarding-registries aanwezig zijn en of de machine succesvol telemetrie verstuurt. Tegelijkertijd maakt het script een inventarisatie van alle JSON- en PS1-bestanden in de map `content/m365/defender-xdr` en `code/m365/defender-xdr`, zodat de documentatiegraad van de baseline zichtbaar blijft. Deze combinatie van technische en documentaire checks zorgt ervoor dat SOC-teams niet afhankelijk zijn van handmatig bijgehouden spreadsheets.

Het script ondersteunt een lokale debugmodus voor situaties waarin een analist geen verbinding kan maken met de productieomgeving, bijvoorbeeld tijdens een oefening of wanneer alleen een gesandboxte laptop beschikbaar is. In debugmodus genereert het script realistische voorbeelddata en kan de volledige rapportagestroom worden getest zonder access tokens uit te wisselen. Wanneer wel verbinding wordt gemaakt, vraagt het script via `Get-AzAccessToken` een token aan voor `https://api.securitycenter.microsoft.com` en haalt het de meest recente incidenten, exposureScore en machine-overzichten op. Resultaten worden geclassificeerd naar prioriteit, zodat het SOC direct ziet welke hiaten in onboarding of licenties aandacht vragen. Exportopties naar JSON of CSV maken het mogelijk om rapportages te voeden van kwartaalreviews, BIO-audits of dashboards in Power BI.

Naast de scriptmatige controles blijft operationele discipline noodzakelijk. Playbooks voor triage, containment en communicatie worden in Defender XDR vastgelegd en gekoppeld aan automation rules zodat analisten op een uniforme manier werken. Threat hunting-teams gebruiken KQL-queries die zowel endpoints, identiteiten als SaaS-data omvatten en leggen bevindingen vast in Git-repositories zodat versies beheerd blijven. Lessons learned uit incidenten worden direct vertaald naar aangepaste policies (bijvoorbeeld strengere anti-phishingregels) en naar verbeterde queries in Microsoft Sentinel. Door de combinatie van tooling, scripts en strakke processen ontstaat een ritme waarin monitoring geen reactieve activiteit is, maar een continue kwaliteitscontrole op de gehele beveiligingsketen.

SOC-leiders gebruiken de data uit Defender XDR om prestatiedoelen te monitoren: Mean Time To Triage (MTTT), Mean Time To Contain (MTTC), percentage automatisch afgehandelde alerts en naleving van responstijden uit NIS2. Het script kan deze KPI’s berekenen door incidentgegevens te groeperen en de looptijd tussen detectie, toewijzing en afsluiting te bepalen. Hierdoor ontstaat een objectieve basis voor rapportages richting CISO, bestuur en toezichthouders. Bovendien kan dezelfde output worden gekoppeld aan continue trainingsprogramma’s; wanneer blijkt dat een bepaald type incident structureel langer open blijft staan, wordt gericht geïnvesteerd in playbooktraining of aanvullende automatisering.

Remediatie, maturity management en borging

Gebruik PowerShell-script index.ps1 (functie Invoke-Remediation) – Activeert lokale Defender-sensoren, zet vereiste registry-waarden, voert optioneel een onboardingpakket uit en genereert een overzicht van ontbrekende XDR-dekking binnen de tenant..

Remediatie in de context van Defender XDR betekent meer dan het oplossen van individuele alerts; het gaat om het structureel dichten van gaten in dekking, processen en documentatie. Het script biedt hiervoor een pragmatische aanpak. Wanneer `Invoke-Remediation` wordt uitgevoerd, controleert het of de Windows Defender Advanced Threat Protection-service actief is, of sensorkeys aanwezig zijn en of de endpoint zich in Block-modus bevindt voor netwerk- en gedragssignalering. Indien nodig zet het script registry-sleutels en start de benodigde services opnieuw. Indien een onboardingpakket beschikbaar is, kan het script dit automatisch uitvoeren, waardoor nieuwe werkplekken snel aan de XDR-tenant worden gekoppeld. Deze automatisering is essentieel voor organisaties met duizenden apparaten en wisselende projectomgevingen.

Maturity management vereist een cyclische aanpak waarbij elke verbetering wordt vastgelegd, getest en geborgd. De Nederlandse baseline schrijft voor dat wijzigingen in detectie- en responsprocessen worden beoordeeld door zowel security- als privacyfunctionarissen. Daarom logt het script elke remediatie-actie naar de console en kan het optioneel een JSON-rapport wegschrijven, zodat audits exact kunnen herleiden wanneer een apparaat is voorbereid, welke stappen zijn doorlopen en of er uitzonderingen zijn gemaakt. Deze rapportages worden gekoppeld aan change-records in ITSM en aan het informatiebeveiligingsmanagementsysteem (ISMS), waardoor remediatie onderdeel wordt van de formele governancecyclus.

Een volwassen XDR-operatie verbindt technische maatregelen rechtstreeks met bestuurlijke dashboards. ExposureScores worden vertaald naar risicoklassen die aansluiten op het organisatiebrede risicoregister. Playbookresultaten worden gekoppeld aan business impact analyses en business continuity plans. Lessons learned uit incidenten leiden tot updates van beleidsdocumenten, awarenesscampagnes en contractuele eisen richting leveranciers. Door deze terugkoppeling ontstaat een feedbackloop waarin Defender XDR zowel sensor als stuurinstrument is. Het artikel beschrijft hoe deze loop wordt ingericht, welke overlegstructuren noodzakelijk zijn en hoe escalaties naar bestuur en toezichthouders plaatsvinden zonder ruis.

Tot slot vraagt remediatie om samenwerking voorbij de grenzen van het eigen SOC. Nederlandse overheden werken steeds vaker samen in regionale of sectorale SOC’s. Defender XDR ondersteunt dit via multi-tenant incident sharing en granular role-based access. Het script helpt beheerders om per tenant te controleren of alle basisvereisten zijn ingevuld voordat data wordt gedeeld, zodat vertrouwelijkheid en proportionaliteit geborgd blijven. Door deze aanpak kunnen organisaties veilig deelnemen aan gezamenlijke detectieprogramma’s, threat intelligence uitwisselen en gezamenlijk voldoen aan de rapportageplichten van NIS2 en BIO, terwijl ze toch de regie houden over hun eigen configuraties en verbeterplannen.

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 Defender XDR: Monitoring en remediatie volgens de Nederlandse Baseline voor Veilige Cloud. .DESCRIPTION Dit script controleert de staat van de lokale Microsoft Defender-sensor, haalt telemetrie op uit de Defender XDR API en valideert of alle JSON/PS1-bestanden voor het Defender-XDR-domein aanwezig zijn. Met de Remediation-parameter kunnen services en registry-instellingen automatisch worden hersteld en kan optioneel een onboardingpakket worden uitgevoerd. Het script ondersteunt een LocalDebug-modus waarmee zonder tenantverbinding kan worden getest. .NOTES Filename: index.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-10-01 Version: 1.0 Related JSON: content/m365/defender-xdr/index.json .LINK https://github.com/[org]/m365-tenant-best-practise .EXAMPLE ./index.ps1 -Monitoring Voert alle controles uit, toont de resultaten in de console en controleert de documentatiekoppelingen. .EXAMPLE ./index.ps1 -Remediation -OnboardingPackagePath C:\Temp\MDEOnboarding.ps1 Zet services en registry-waarden juist en voert daarna het opgegeven onboardingpakket uit. #> #Requires -Version 5.1 #Requires -Modules Az.Accounts [CmdletBinding()] param( [Parameter()] [switch]$Monitoring, [Parameter()] [switch]$Remediation, [Parameter()] [switch]$LocalDebug, [Parameter()] [switch]$WhatIf, [Parameter()] [string]$ExportPath, [Parameter()] [string]$OnboardingPackagePath ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' $script:XdrBaseUri = "https://api.securitycenter.microsoft.com/api" $script:Report = @{} function Test-LocalSensor { <# .SYNOPSIS Controleert de status van lokale Defender-services en onboardingregistries. #> [CmdletBinding()] param() $result = [PSCustomObject]@{ ComputerName = $env:COMPUTERNAME SenseServiceRunning = $false DefenderServiceRunning= $false OnboardingKeyExists = $false OrgId = $null ServiceState = $null Errors = @() } try { $sense = Get-Service -Name "Sense" -ErrorAction Stop $result.SenseServiceRunning = $sense.Status -eq 'Running' $result.ServiceState = $sense.Status } catch { $result.Errors += "Sense-service niet gevonden: $($_.Exception.Message)" } try { $defender = Get-Service -Name "WinDefend" -ErrorAction Stop $result.DefenderServiceRunning = $defender.Status -eq 'Running' } catch { $result.Errors += "WinDefend-service niet beschikbaar: $($_.Exception.Message)" } $regPath = "HKLM:\SOFTWARE\Microsoft\Windows Advanced Threat Protection" if (Test-Path $regPath) { $result.OnboardingKeyExists = $true $orgId = Get-ItemProperty -Path $regPath -Name "OrgId" -ErrorAction SilentlyContinue if ($orgId) { $result.OrgId = $orgId.OrgId } } else { $result.Errors += "Onboardingregistry ontbreekt: $regPath" } return $result } function Get-XdrAccessToken { <# .SYNOPSIS Haalt een access token op voor de Defender XDR API. #> [CmdletBinding()] param() if ($LocalDebug) { return $null } try { if (-not (Get-AzContext -ErrorAction Stop)) { throw "Geen actieve Az-context gevonden. Voer eerst Connect-AzAccount uit." } $token = Get-AzAccessToken -ResourceUrl "https://api.securitycenter.microsoft.com" return $token } catch { throw "Kon geen toegangs-token ophalen voor Defender XDR: $($_.Exception.Message)" } } function Invoke-XdrApi { <# .SYNOPSIS Roept de Defender XDR API aan. #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$Uri, [Parameter()] [ValidateSet("GET","POST")] [string]$Method = "GET" ) if ($LocalDebug) { throw "Invoke-XdrApi is niet beschikbaar in LocalDebug-modus." } $token = Get-XdrAccessToken $headers = @{ "Authorization" = "Bearer $($token.Token)" "Content-Type" = "application/json" } try { $response = Invoke-RestMethod -Method $Method -Uri $Uri -Headers $headers -ErrorAction Stop return $response } catch { throw "XDR API-call mislukt ($Uri): $($_.Exception.Message)" } } function Get-XdrOverview { <# .SYNOPSIS Bepaalt onboardingstatus, incidenten en exposures. #> [CmdletBinding()] param() if ($LocalDebug) { return [PSCustomObject]@{ TotalMachines = 1250 InactiveMachines = 42 OffboardedMachines = 18 OpenIncidents = 7 HighSeverityIncidents = 2 ExposureScore = 42 LastExposureRefresh = (Get-Date).AddHours(-3) MissingContentFiles = Get-ContentCoverage } } $machines = Invoke-XdrApi -Uri "$script:XdrBaseUri/machines?`$top=2000" $incidents = Invoke-XdrApi -Uri "$script:XdrBaseUri/incidents?`$top=200&`$filter=status ne 'Resolved'" $exposure = Invoke-XdrApi -Uri "$script:XdrBaseUri/exposureScore" $machineValues = $machines.value $incidentValues = $incidents.value $result = [PSCustomObject]@{ TotalMachines = $machineValues.Count InactiveMachines = ($machineValues | Where-Object { $_.lastSeen -lt (Get-Date).AddDays(-7) }).Count OffboardedMachines = ($machineValues | Where-Object { $_.onboardingStatus -eq "Offboarded" }).Count OpenIncidents = $incidentValues.Count HighSeverityIncidents = ($incidentValues | Where-Object { $_.severity -eq "High" -or $_.severity -eq "InformationalHigh" }).Count ExposureScore = $null LastExposureRefresh = $null MissingContentFiles = @() } if ($exposure.value) { $scoreObject = $exposure.value | Sort-Object -Property lastUpdatedTime -Descending | Select-Object -First 1 $result.ExposureScore = $scoreObject.overallScore $result.LastExposureRefresh = $scoreObject.lastUpdatedTime } $result.MissingContentFiles = Get-ContentCoverage return $result } function Get-ContentCoverage { <# .SYNOPSIS Controleert of er ontbrekende koppelingen zijn tussen JSON en PS1. #> [CmdletBinding()] param() $contentFolder = Join-Path $PSScriptRoot "..\..\content\m365\defender-xdr" | Resolve-Path $codeFolder = Join-Path $PSScriptRoot "." | Resolve-Path $jsonFiles = Get-ChildItem -Path $contentFolder -Filter "*.json" -Recurse $psFiles = Get-ChildItem -Path $codeFolder -Filter "*.ps1" -Recurse $missing = @() foreach ($json in $jsonFiles) { $relativeName = ($json.BaseName + ".ps1") $matchingScript = $psFiles | Where-Object { $_.Name -eq $relativeName } if (-not $matchingScript) { $missing += "Script ontbreekt voor $($json.Name)" } } if (-not $psFiles) { $missing += "Geen PowerShell-bestanden gevonden in $codeFolder" } return $missing } function Save-XdrReport { <# .SYNOPSIS Exporteert resultaten naar JSON. #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$Path, [Parameter(Mandatory)] [psobject]$Data ) try { $directory = Split-Path -Path $Path -Parent if ($directory -and -not (Test-Path $directory)) { New-Item -ItemType Directory -Path $directory -Force | Out-Null } $Data | ConvertTo-Json -Depth 5 | Out-File -FilePath $Path -Encoding utf8 } catch { Write-Warning "Kon rapport niet opslaan op $Path: $($_.Exception.Message)" } } function Invoke-Monitoring { <# .SYNOPSIS Voert alle controles uit en toont de resultaten. #> [CmdletBinding()] param() Write-Host "" Write-Host "============================================" -ForegroundColor Cyan Write-Host "Defender XDR Monitoring - Nederlandse Baseline" -ForegroundColor Cyan Write-Host "============================================" -ForegroundColor Cyan $sensor = Test-LocalSensor $overview = Get-XdrOverview $script:Report = [PSCustomObject]@{ Timestamp = (Get-Date) SensorStatus = $sensor XdrOverview = $overview LocalDebugMode = [bool]$LocalDebug } Write-Host "" Write-Host "Lokale sensor:" -ForegroundColor Yellow Write-Host " Computer : $($sensor.ComputerName)" Write-Host " Sense-service : $($sensor.ServiceState)" Write-Host " Defender actief : $($sensor.DefenderServiceRunning)" Write-Host " Onboarding key : $($sensor.OnboardingKeyExists)" if ($sensor.Errors.Count -gt 0) { Write-Host " Waarschuwingen :" -ForegroundColor Red $sensor.Errors | ForEach-Object { Write-Host " $_" -ForegroundColor Red } } Write-Host "" Write-Host "Tenantdekking:" -ForegroundColor Yellow Write-Host " Apparaten totaal : $($overview.TotalMachines)" Write-Host " Inactief (>7 dagen): $($overview.InactiveMachines)" Write-Host " Offboarded : $($overview.OffboardedMachines)" Write-Host " Open incidenten : $($overview.OpenIncidents)" Write-Host " Hoge prioriteit : $($overview.HighSeverityIncidents)" Write-Host " Exposure score : $($overview.ExposureScore) (laatst ververst: $($overview.LastExposureRefresh))" if ($overview.MissingContentFiles.Count -gt 0) { Write-Host "" Write-Host "Documentatie-hiaten:" -ForegroundColor Yellow $overview.MissingContentFiles | ForEach-Object { Write-Host " $_" -ForegroundColor Red } } else { Write-Host "" Write-Host "Alle JSON/PS1-koppelingen aanwezig." -ForegroundColor Green } if ($ExportPath) { Save-XdrReport -Path $ExportPath -Data $script:Report Write-Host "" Write-Host "Rapport opgeslagen op $ExportPath" -ForegroundColor Green } } function Invoke-Remediation { <# .SYNOPSIS Herstelt lokale sensorconfiguratie en voert optioneel onboarding uit. #> [CmdletBinding()] param() Write-Host "" Write-Host "===============================" -ForegroundColor Cyan Write-Host "Defender XDR Remediatie gestart" -ForegroundColor Cyan Write-Host "===============================" -ForegroundColor Cyan $sensor = Test-LocalSensor $regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection" if (-not (Test-Path $regPath)) { if ($WhatIf) { Write-Host "[WhatIf] Zou registry-pad $regPath aanmaken" -ForegroundColor Yellow } else { New-Item -Path $regPath -Force | Out-Null } } $desiredValues = @{ "ServiceState" = 1 "ForceDefenderPassiveMode" = 0 } foreach ($key in $desiredValues.Keys) { if ($WhatIf) { Write-Host "[WhatIf] Zou $key = $($desiredValues[$key]) zetten in $regPath" -ForegroundColor Yellow continue } New-ItemProperty -Path $regPath -Name $key -Value $desiredValues[$key] -PropertyType DWord -Force | Out-Null } if (-not $sensor.SenseServiceRunning) { if ($WhatIf) { Write-Host "[WhatIf] Zou Sense-service starten" -ForegroundColor Yellow } else { Write-Verbose "Starten van Sense-service..." Start-Service -Name "Sense" -ErrorAction Stop } } if (-not $sensor.DefenderServiceRunning) { if ($WhatIf) { Write-Host "[WhatIf] Zou WinDefend-service starten" -ForegroundColor Yellow } else { Start-Service -Name "WinDefend" -ErrorAction Stop } } if ($OnboardingPackagePath) { if (-not (Test-Path $OnboardingPackagePath)) { Write-Warning "Onboardingpakket niet gevonden op $OnboardingPackagePath" } elseif ($WhatIf) { Write-Host "[WhatIf] Zou onboardingpakket uitvoeren: $OnboardingPackagePath" -ForegroundColor Yellow } else { Write-Verbose "Uitvoeren van onboardingpakket $OnboardingPackagePath" if ($OnboardingPackagePath.ToLower().EndsWith(".ps1")) { & $OnboardingPackagePath } else { Start-Process -FilePath $OnboardingPackagePath -Wait } } } Write-Host "" Write-Host "Remediatie voltooid. Voer -Monitoring uit om de status te verifiëren." -ForegroundColor Green } try { Write-Host "" Write-Host "============================================" -ForegroundColor Cyan Write-Host "Microsoft Defender XDR - Baseline Script" -ForegroundColor Cyan Write-Host "============================================" -ForegroundColor Cyan if ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { Invoke-Monitoring } } catch { Write-Error "Er is een fout opgetreden: $($_.Exception.Message)" exit 1 } finally { Write-Host "" Write-Host "Script afgerond." -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder Defender XDR ontstaat versnipperde detectie, ontbreekt een betrouwbaar bewijs van responsmaatregelen en is naleving van NIS2 en BIO nauwelijks aantoonbaar. Incidenten escaleren sneller en blijven langer onopgemerkt.

Management Samenvatting

Implementeer Microsoft Defender XDR als centrale detectie- en responslaag voor alle Microsoft 365-werkstromen, borg integratie met governanceprocessen en gebruik het bijbehorende script om zowel technische dekking als documentatieconsistentie continu te controleren.