SOC-maturiteitsbeoordeling Voor Microsoft 365

💼 Management Samenvatting

Een gestructureerde maturiteitsbeoordeling van de Security Operations Center-functie voor Microsoft 365 helpt organisaties om de huidige staat te bepalen, verbeterkansen te identificeren en een routekaart te ontwikkelen naar een volwassen SOC die effectief bescherming biedt en voldoet aan compliance-eisen.

Aanbeveling
IMPLEMENT
Risico zonder
Medium
Risk Score
6/10
Implementatie
40u (tech: 16u)
Van toepassing op:
M365
Overheidsorganisaties
Security Operations Center

Zonder een gestructureerde maturiteitsbeoordeling blijven organisaties steken in ad-hoc beveiligingsoperaties waarbij niet duidelijk is welke aspecten goed functioneren en waar verbeteringen nodig zijn. Dit leidt tot verspilling van middelen door te investeren in aspecten die al volwassen zijn, terwijl kritieke hiaten onopgemerkt blijven. Een maturiteitsbeoordeling biedt een objectief kader om de SOC-functie te evalueren op verschillende dimensies zoals organisatie, processen, technologie, mensen en meetbaarheid. Dit stelt CISO's en bestuurders in staat om geïnformeerde beslissingen te nemen over investeringen, prioriteiten en roadmap-planning.

PowerShell Modules Vereist
Primary API: Microsoft 365 Defender, Microsoft Sentinel, Microsoft Graph
Connection: Connect-MgGraph, Connect-ExchangeOnline, Azure portal
Required Modules: Microsoft.Graph, ExchangeOnlineManagement, Az.Accounts

Implementatie

Dit artikel beschrijft een praktisch raamwerk voor het uitvoeren van een SOC-maturiteitsbeoordeling specifiek gericht op Microsoft 365. Het introduceert een model met vijf volwassenheidsniveaus per dimensie, legt uit hoe organisaties hun huidige staat kunnen bepalen via zelfevaluaties en assessments, en beschrijft hoe de resultaten kunnen worden gebruikt om een verbeterprogramma op te zetten. Het raamwerk is afgestemd op de Nederlandse Baseline voor Veilige Cloud en compliance-eisen zoals BIO en NIS2, zodat de maturiteitsbeoordeling direct relevant is voor Nederlandse overheidsorganisaties.

Het SOC-maturiteitsmodel: dimensies en niveaus

Een effectief SOC-maturiteitsmodel dekt alle aspecten van security operations die bijdragen aan effectieve dreigingsdetectie, incidentafhandeling en continue verbetering. Het model dat hier wordt beschreven bestaat uit vijf hoofd dimensies, elk verdeeld over vijf volwassenheidsniveaus van 'Ad-hoc' tot 'Geoptimaliseerd'. Deze structuur biedt organisaties een gemeenschappelijke taal om over SOC-volwassenheid te spreken en stelt hen in staat om gerichte verbeteracties te plannen.

De eerste dimensie omvat organisatie en governance. Op niveau 1 (Ad-hoc) ontbreekt een formele SOC-structuur en worden incidenten ad-hoc afgehandeld door verschillende teams zonder centrale coördinatie. Niveau 2 (Gedefinieerd) kent een basis SOC-organisatie met gedefinieerde rollen, maar processen zijn nog niet gestandaardiseerd. Niveau 3 (Geïmplementeerd) betekent dat een volledige SOC-organisatie operationeel is met gestandaardiseerde processen en duidelijke verantwoordelijkheden. Niveau 4 (Gemeet) gaat verder door expliciet metriek en key performance indicators te gebruiken voor sturing en besluitvorming. Niveau 5 (Geoptimaliseerd) vertegenwoordigt een SOC die continu leert, zich aanpast aan nieuwe dreigingen, en structureel bijdraagt aan risicoreductie en business value.

De tweede dimensie betreft detectie en monitoring. Op het laagste niveau worden alleen basissecurity tools gebruikt zonder centrale correlatie of prioritering. Naarmate de volwassenheid toeneemt, wordt detectie geïntegreerd in een SIEM-platform zoals Microsoft Sentinel, worden geautomatiseerde analytics rules ingezet, en worden threat intelligence-feeds geïntegreerd. Een volwassen detectie-capaciteit combineert reactieve detectie met proactieve threat hunting, gebruikt machine learning voor anomaliedetectie, en correleert signalen over verschillende Microsoft 365-workloads en externe systemen om complexe multi-stage aanvallen te identificeren.

Procesvolwassenheid, de derde dimensie, beschrijft hoe gestructureerd incidentafhandeling, triage, escalatie en afsluiting plaatsvinden. Een ad-hoc SOC reageert zonder gestandaardiseerde procedures, terwijl een volwassen SOC werkt met gedocumenteerde runbooks, duidelijke triage-criteria, gestructureerde escalatiepaden, en na-incident reviews die leiden tot continue verbetering. Processen worden regelmatig getest via oefeningen, runbooks worden bijgewerkt op basis van lessons learned, en er is een duidelijk onderscheid tussen verschillende incidenttypen met bijbehorende responseprocedures.

De vierde dimensie richt zich op technologie en automatisering. In een onvolwassen SOC worden handmatig veel repetitieve taken uitgevoerd, waardoor capaciteit beperkt is en inconsistente uitkomsten ontstaan. Automatisering groeit via playbooks die veelvoorkomende responsacties automatiseren, integraties tussen verschillende tools, en geautomatiseerde rapportage. Een geoptimaliseerde SOC gebruikt volledige SOAR-capaciteiten, waarbij detectie automatisch leidt tot geverifieerde responsacties, waarbij menselijke analisten zich kunnen focussen op complexe gevallen die oordelsvorming vereisen.

De vijfde en laatste dimensie omvat metriek, rapportage en continue verbetering. Zonder volwassenheid ontbreekt zicht op de effectiviteit van de SOC-functie. Een volwassen SOC meet systematisch metrics zoals Mean Time To Detect (MTTD), Mean Time To Respond (MTTR), false positive rates, detection coverage, en incidentclosure rates. Deze metrics worden gebruikt voor periodieke managementrapportages, voor het identificeren van verbeterkansen, en voor het aantonen van compliance richting bestuurders en toezichthouders. Een geoptimaliseerde SOC gebruikt metrics proactief om trends te voorspellen, capaciteitsbehoefte te plannen, en business value te demonstreren.

Assessmentmethodologie: zelfevaluatie en externe audits

Een SOC-maturiteitsbeoordeling kan op verschillende manieren worden uitgevoerd, afhankelijk van de doelstellingen, beschikbare middelen en gewenste objectiviteit. Zelfevaluaties zijn geschikt voor organisaties die een eerste beeld willen krijgen van hun huidige staat, die intern over voldoende expertise beschikken, en die een basis willen leggen voor verbeterprogramma's. Een zelfevaluatie wordt meestal uitgevoerd door een multidisciplinair team bestaande uit de CISO, SOC-manager, senior security analisten, en vertegenwoordigers van IT-beheer en compliance. Het team doorloopt systematisch alle dimensies en niveaus van het maturiteitsmodel en scoort per dimensie op basis van bewijsstukken zoals documentatie, configuraties, loggegevens en interviews met medewerkers.

Voor meer objectiviteit, diepgang en benchmarking met sectorgenoten kiezen organisaties voor externe assessments uitgevoerd door gespecialiseerde consultancyfirma's of auditors. Externe assessments bieden bovendien toegang tot best practices uit andere organisaties, onafhankelijke validatie van bevindingen, en vaak een gestructureerd rapport dat gebruikt kan worden voor managementpresentaties en compliance-doeleinden. Nederlandse overheidsorganisaties kunnen bovendien kiezen voor assessments door het NCSC of door door het NCSC gecertificeerde partijen, wat extra vertrouwen geeft en aansluiting biedt bij nationale normen en richtlijnen.

Ongeacht de gekozen methodologie volgt een assessment een gestructureerde aanpak. Eerst wordt het scope bepaald: welke Microsoft 365-workloads worden meegenomen, welke tijdperiode wordt geëvalueerd, en welke dimensies krijgen prioriteit. Vervolgens worden data verzameld: documentatie van SOC-beleid, processen en runbooks, configuratiebestanden van detectieplatforms, incidentregistraties en rapportages, en interviews met SOC-medewerkers en stakeholders. De verzamelde data wordt geanalyseerd tegen het maturiteitsmodel, waarbij per dimensie wordt bepaald welk niveau het beste past bij de huidige staat. Belangrijk is dat scores worden onderbouwd met concrete bewijsstukken; een score van niveau 3 kan alleen worden toegekend wanneer daadwerkelijk bewijs is dat de bijbehorende capaciteiten aanwezig zijn.

De resultaten van een assessment worden vastgelegd in een rapport dat een overzicht geeft van de scores per dimensie, een samenvatting van sterke punten en verbeterkansen, en concrete aanbevelingen voor verbeteracties. Het rapport moet begrijpelijk zijn voor zowel technische als bestuurlijke lezers, zodat het gebruikt kan worden voor roadmap-planning, budgetaanvragen en compliance-rapportages. Bij voorkeur worden resultaten ook visueel gepresenteerd, bijvoorbeeld via een radar chart die alle dimensies tegelijk toont, of via een heatmap die laat zien welke aspecten onderontwikkeld zijn ten opzichte van de gewenste volwassenheid.

Een volwassen organisatie voert periodiek assessments uit, bijvoorbeeld jaarlijks of na significante wijzigingen in de SOC-organisatie, technologiestack of bedreigingslandschap. Door de ontwikkeling over tijd te volgen kunnen organisaties meten of verbeterprogramma's effect hebben en of de SOC-functie daadwerkelijk volwassener wordt. Trends in de scores helpen ook om te identificeren welke dimensies aandacht nodig hebben en waar investeringen het meest effectief zijn. Voor Nederlandse overheidsorganisaties kunnen periodieke assessments bovendien dienen als bewijsstuk voor compliance met BIO en NIS2, door aan te tonen dat de SOC-functie structureel wordt geëvalueerd en verbeterd.

Gedetailleerde beoordeling per dimensie

Voor een effectieve maturiteitsbeoordeling is het essentieel om per dimensie te begrijpen welke concrete indicatoren bepalen op welk niveau een organisatie zich bevindt. Dit hoofdstuk beschrijft per dimensie welke aspecten worden beoordeeld en welke bewijsstukken nodig zijn om een bepaald niveau aan te tonen. Deze kennis helpt organisaties om een eerlijke en accurate zelfevaluatie uit te voeren en om te begrijpen wat nodig is om naar een volgend niveau te groeien.

Voor de dimensie Organisatie en Governance worden onder andere beoordeeld: de aanwezigheid van een formeel SOC-beleid dat rollen, verantwoordelijkheden en mandaten definieert, de organisatiestructuur met duidelijke hiërarchie en escalatiepaden, de beschikbaarheid van gespecialiseerde SOC-rollen zoals Level 1/2/3 analisten, threat hunters en forensisch onderzoekers, de aanwezigheid van 24/7 dekking of een duidelijk model voor buiten-kantooruren dekking, de integratie van de SOC met andere security- en riskmanagementfuncties, en de aanwezigheid van een formele governance-structuur waarbij de SOC periodiek rapporteert aan bestuur en CISO. Bewijsstukken omvatten organisatie-diagrammen, functiebeschrijvingen, shiftroosters, SLA-documenten en governance-rapporten.

Bij Detectie en Monitoring wordt gekeken naar: de aanwezigheid en configuratie van Microsoft Sentinel als centrale SIEM, de integratie van Microsoft 365 Defender signalen in Sentinel, het aantal en de kwaliteit van analytics rules die actief zijn voor Microsoft 365-dreigingen, de aanwezigheid van custom detection rules die zijn afgestemd op specifieke organisatierisico's, de integratie van threat intelligence-feeds zoals Microsoft Threat Intelligence, NCSC feeds of commerciële feeds, de aanwezigheid van een threat hunting-programma met gedocumenteerde jachtsessies, de dekking van monitoring over alle Microsoft 365-workloads, en de kwaliteit van dashboards en werkboeken voor real-time inzicht. Bewijsstukken zijn configuratiebestanden, query's, documentatie van threat hunting-activiteiten, en screenshots van dashboards.

Voor Procesvolwassenheid worden geëvalueerd: de aanwezigheid van gestandaardiseerde triage-procedures met duidelijke criteria voor prioritering, gedocumenteerde runbooks voor verschillende incidenttypen, gestructureerde escalatieprocedures die expliciet rekening houden met meldplichten onder AVG en NIS2, een formeel incidentclassificatiesysteem, processen voor after-action reviews en lessons learned, de aanwezigheid van een kennisbeheersysteem waarin incidenten en runbooks worden vastgelegd, en de regelmatige uitvoering van oefeningen om processen te testen. Bewijsstukken omvatten procesbeschrijvingen, runbooks, incidentregistraties, evaluatierapporten en oefenverslagen.

Bij Technologie en Automatisering wordt beoordeeld: het percentage van incidenten dat automatisch wordt gedetecteerd zonder menselijke tussenkomst, het aantal en de complexiteit van geautomatiseerde playbooks die actief zijn, de integratie tussen verschillende tools zoals Sentinel, Defender, en externe systemen, de aanwezigheid van geautomatiseerde rapportage voor management en compliance, het gebruik van machine learning en AI voor detectie en prioritering, en de mate waarin repetitieve taken zijn geautomatiseerd zodat analisten zich kunnen focussen op complexe analyses. Bewijsstukken zijn playbook-configuraties, automatiseringsstatistieken, en documentatie van integraties.

Voor Metriek, Rapportage en Continue Verbetering worden geëvalueerd: de aanwezigheid van een gestructureerd metrics-programma met gedefinieerde KPI's, de regelmatigheid en kwaliteit van managementrapportages, het gebruik van metrics voor capaciteitsplanning en resource allocation, de aanwezigheid van trendanalyses die ontwikkeling over tijd laten zien, de koppeling tussen SOC-metrics en risicobeheer, en de aanwezigheid van een formele verbetercyclus waarin metrics worden gebruikt om prioriteiten te stellen. Bewijsstukken zijn metrics-dashboards, managementrapporten, trendanalyses en verbeteractieplannen.

Gap-analyse en roadmap-ontwikkeling

Gebruik PowerShell-script maturity-assessment.ps1 (functie Invoke-Monitoring) – Voert een gestructureerde maturiteitsbeoordeling uit op basis van configuratie en verzamelde bewijsstukken, en genereert een rapport met scores per dimensie en aanbevelingen voor verbetering..

Na het voltooien van een maturiteitsbeoordeling volgt de cruciale stap van gap-analyse en roadmap-ontwikkeling. Een gap-analyse vergelijkt de huidige scores per dimensie met de gewenste of vereiste volwassenheid, en identificeert concrete verbeterkansen. De gewenste volwassenheid kan worden bepaald op basis van verschillende factoren: compliance-eisen zoals BIO en NIS2 die bepaalde minimale capaciteiten vereisen, de risicoprofiel van de organisatie waarbij kritieke overheidsorganisaties mogelijk hogere volwassenheid nodig hebben, sectorale normen zoals de Nederlandse Baseline voor Veilige Cloud, en strategische doelstellingen waarbij de organisatie bepaalde ambities heeft gesteld voor de komende jaren.

De gap-analyse resulteert in een prioriteitenlijst van verbeteracties, waarbij elke actie beschrijft wat er moet gebeuren, waarom het belangrijk is, welke middelen nodig zijn, en wat het verwachte effect is op de maturiteitsscore. Acties worden geprioriteerd op basis van verschillende criteria: de impact op security posture en risicoreductie, de urgentie gebaseerd op compliance-deadlines of bedreigingsniveau, de haalbaarheid gegeven beschikbare middelen en expertise, en de afhankelijkheden waarbij sommige verbeteringen alleen mogelijk zijn na voltooiing van andere acties. Door expliciet prioriteiten te stellen voorkomt een organisatie dat verbeterprogramma's verzanden in een lange lijst van acties zonder focus.

Een effectieve roadmap vertaalt de geprioriteerde verbeteracties naar een concreet implementatieplan met duidelijke mijlpalen, deadlines en eigenaars. De roadmap wordt meestal opgedeeld in fases, waarbij fase 1 focust op quick wins die snel resultaat opleveren en commitment creëren, fase 2 belangrijke infrastructurele verbeteringen bevat die de basis leggen voor verdere volwassenheid, en latere fases zich richten op geavanceerde capaciteiten zoals geavanceerde threat hunting of volledige SOAR-automatisering. Elke fase heeft duidelijke success criteria die aangeven wanneer een fase is voltooid, zodat progressie meetbaar is en bestuurders zicht hebben op de voortgang.

Belangrijk is dat een roadmap realistisch is en rekening houdt met praktische constraints zoals budget, beschikbare expertise, en operationele continuïteit. Een roadmap die te ambitieus is of te veel parallelle activiteiten bevat, loopt het risico om te falen doordat middelen versnipperd raken of doordat kritieke stappen worden overgeslagen. Daarom is het zinvol om een roadmap te ontwikkelen in overleg met alle betrokken stakeholders: de CISO die de strategische visie levert, de SOC-manager die de operationele haalbaarheid beoordeelt, IT-beheer die de technische randvoorwaarden schetst, en bestuurders die de beschikbare middelen en tijdlijnen bepalen.

Periodieke herbeoordeling van de roadmap zorgt ervoor dat deze relevant blijft wanneer de omgeving verandert. Nieuwe dreigingen kunnen bepaalde verbeteracties urgenter maken, nieuwe technologieën kunnen nieuwe mogelijkheden bieden, en wijzigingen in compliance-eisen kunnen aanpassingen vereisen. Door de roadmap te behandelen als een levend document dat regelmatig wordt bijgewerkt op basis van nieuwe inzichten en veranderende omstandigheden, blijft het verbeterprogramma wendbaar en effectief. Het bijbehorende PowerShell-script ondersteunt dit door een gestructureerd assessment-rapport te genereren dat kan worden gebruikt als basis voor gap-analyse en roadmap-ontwikkeling.

Monitoring van progressie en continue verbetering

Gebruik PowerShell-script maturity-assessment.ps1 (functie Invoke-Remediation) – Helpt bij het vastleggen van assessment-resultaten, gap-analyse en roadmap-acties in een gestructureerd formaat voor tracking en opvolging..

Een maturiteitsbeoordeling is geen eenmalige activiteit maar het begin van een continue verbetercyclus. Om ervoor te zorgen dat verbeteracties daadwerkelijk worden uitgevoerd en dat de SOC-functie volwassener wordt, is het essentieel om progressie te monitoren en periodiek te herbeoordelen. Monitoring gebeurt op verschillende niveaus: operationeel worden individuele verbeteracties getrackt met deadlines en statusupdates, tactisch worden periodiek assessments uitgevoerd om te meten of scores verbeteren, en strategisch worden trends geanalyseerd om te bepalen of de roadmap nog relevant is en of nieuwe prioriteiten zijn ontstaan.

Een effectieve monitoring-aanpak gebruikt zowel kwantitatieve als kwalitatieve indicatoren. Kwantitatieve indicatoren omvatten de maturiteitsscores per dimensie die periodiek worden herberekend, het aantal voltooide verbeteracties versus geplande acties, de doorlooptijd van verbeteracties, en de ontwikkeling van operationele metrics zoals MTTD en MTTR die indiceren of verbeteringen ook praktisch effect hebben. Kwalitatieve indicatoren omvatten feedback van SOC-medewerkers over de effectiviteit van verbeteringen, evaluaties van oefeningen die laten zien of processen daadwerkelijk verbeterd zijn, en feedback van stakeholders zoals bestuurders en proceseigenaren over de waarde die de SOC-functie levert.

Rapportage over progressie is essentieel om commitment te behouden en om bestuurders te informeren over de ontwikkeling van de SOC-functie. Periodieke rapportages, bijvoorbeeld kwartaalsgewijs of halfjaarlijks, presenteren de huidige maturiteitsscores, vergelijken deze met eerdere assessments, identificeren welke verbeteracties zijn voltooid en welke nog open staan, en schetsen de volgende stappen. Deze rapportages helpen bestuurders om geïnformeerde beslissingen te nemen over voortzetting van het verbeterprogramma, aanvullende investeringen, of aanpassingen in prioriteiten. Voor Nederlandse overheidsorganisaties kunnen deze rapportages bovendien dienen als bewijsstuk voor compliance, door aan te tonen dat de SOC-functie structureel wordt geëvalueerd en verbeterd.

Continue verbetering vereist een cultuur waarin leren en aanpassen worden gewaardeerd. Dit betekent dat wanneer verbeteracties niet het gewenste effect hebben, de organisatie bereid is om te leren van deze ervaringen en om de aanpak aan te passen. Het betekent ook dat nieuwe inzichten, bijvoorbeeld uit threat intelligence of sectorale kennisuitwisseling, worden gebruikt om de roadmap te verfijnen en nieuwe prioriteiten te stellen. Door expliciet tijd en middelen te reserveren voor leren en verbetering, zorgt een organisatie ervoor dat de SOC-functie niet stagneert maar continue evolueert naar een hoger niveau van volwassenheid.

Het bijbehorende PowerShell-script ondersteunt monitoring en continue verbetering door assessment-resultaten te structureren in een herbruikbaar formaat, door gap-analyses vast te leggen, en door verbeteracties te tracken. Door deze tooling te gebruiken kunnen organisaties gestructureerd werken aan SOC-volwassenheid en kunnen zij periodiek nieuwe assessments uitvoeren om te meten of verbeterprogramma's effect hebben. Op deze manier wordt een maturiteitsbeoordeling niet alleen een momentopname, maar de start van een duurzame verbetercyclus die bijdraagt aan hogere security posture, betere compliance, en meer vertrouwen van burgers en bestuur.

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 SOC-maturiteitsbeoordeling voor Microsoft 365 .DESCRIPTION Ondersteunt organisaties bij het uitvoeren van een gestructureerde maturiteitsbeoordeling van de Security Operations Center-functie voor Microsoft 365. Het script werkt met een lokale configuratiefile waarin assessment-resultaten, gap-analyses en roadmap-acties worden vastgelegd. .NOTES Filename: maturity-assessment.ps1 Author: Nederlandse Baseline voor Veilige Cloud Category: soc Workload: m365 .EXAMPLE .\maturity-assessment.ps1 -Monitoring Voert een maturiteitsbeoordeling uit op basis van de configuratiefile en genereert een rapport met scores per dimensie en aanbevelingen. .EXAMPLE .\maturity-assessment.ps1 -Remediation Initialiseert of actualiseert de configuratiefile voor SOC-maturiteitsbeoordelingen. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(Mandatory = $false, HelpMessage = "Voer maturiteitsbeoordeling uit en genereer rapport")] [switch]$Monitoring, [Parameter(Mandatory = $false, HelpMessage = "Initialiseer of actualiseer de assessment-configuratie")] [switch]$Remediation, [Parameter(Mandatory = $false, HelpMessage = "Verwijder optioneel de configuratiefile")] [switch]$Revert, [Parameter(Mandatory = $false, HelpMessage = "Toon wat er zou gebeuren zonder wijzigingen door te voeren")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "SOC Maturiteitsbeoordeling (M365)" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Get-ConfigPath { <# .SYNOPSIS Bepaalt het pad naar de lokale configuratiefile. #> $scriptDir = Split-Path -Parent $PSCommandPath $configPath = Join-Path -Path $scriptDir -ChildPath "soc-maturity-assessment.config.json" return $configPath } function Initialize-DefaultConfig { <# .SYNOPSIS Maakt een basisconfiguratie voor SOC-maturiteitsbeoordelingen aan. #> $config = [ordered]@{ version = "1.0" lastUpdated = (Get-Date).ToString("yyyy-MM-dd") owner = "SOC Manager / CISO" assessmentDate = "" assessor = "" scope = @( "Microsoft 365 (Entra ID, Exchange Online, SharePoint, OneDrive, Teams)", "Microsoft 365 Defender (Email, Identity, Endpoint, Cloud Apps)", "Microsoft Sentinel (SIEM, Analytics, Playbooks)", "SOC-organisatie en processen", "Automatisering en technologie", "Metriek en rapportage" ) maturityDimensions = [ordered]@{ organization = @{ level = 0 description = "" evidence = @() gaps = @() } detection = @{ level = 0 description = "" evidence = @() gaps = @() } processes = @{ level = 0 description = "" evidence = @() gaps = @() } technology = @{ level = 0 description = "" evidence = @() gaps = @() } metrics = @{ level = 0 description = "" evidence = @() gaps = @() } } targetMaturity = [ordered]@{ organization = 3 detection = 3 processes = 3 technology = 3 metrics = 3 } roadmap = @( @{ action = "" priority = "" owner = "" targetDate = "" status = "Planned" } ) lastReview = "" nextPlannedReview = "" } return $config } function Invoke-Monitoring { <# .SYNOPSIS Voert een maturiteitsbeoordeling uit en genereert een rapport. #> try { $configPath = Get-ConfigPath if (-not (Test-Path -Path $configPath)) { Write-Host "[WARN] Geen assessment-configuratie gevonden." -ForegroundColor Yellow Write-Host " Verwacht bestand: $configPath" -ForegroundColor Yellow Write-Host " Voer '.\maturity-assessment.ps1 -Remediation' uit om een configuratie aan te maken.`n" -ForegroundColor Yellow exit 1 } $rawContent = Get-Content -Path $configPath -Raw -ErrorAction Stop $config = $rawContent | ConvertFrom-Json -ErrorAction Stop Write-Host "Assessment-configuratie: $configPath" -ForegroundColor Gray Write-Host "Versie: $($config.version)" -ForegroundColor Gray Write-Host "Eigenaar: $($config.owner)" -ForegroundColor Gray if ($config.assessmentDate) { Write-Host "Laatste assessment: $($config.assessmentDate)" -ForegroundColor Gray } if ($config.assessor) { Write-Host "Assessor: $($config.assessor)`n" -ForegroundColor Gray } Write-Host "Maturiteitsscores per dimensie:" -ForegroundColor Cyan Write-Host "================================`n" -ForegroundColor Cyan $dimensionNames = @{ organization = "Organisatie en Governance" detection = "Detectie en Monitoring" processes = "Procesvolwassenheid" technology = "Technologie en Automatisering" metrics = "Metriek, Rapportage en Verbetering" } $totalScore = 0 $dimensionCount = 0 foreach ($dimension in $config.maturityDimensions.PSObject.Properties) { $dimName = $dimension.Name $dimData = $dimension.Value $currentLevel = $dimData.level $targetLevel = $config.targetMaturity.$dimName if ($currentLevel -gt 0) { $dimensionCount++ $totalScore += $currentLevel } $displayName = $dimensionNames[$dimName] if (-not $displayName) { $displayName = $dimName } $levelColor = switch ($currentLevel) { 0 { "Gray" } 1 { "Red" } 2 { "Yellow" } 3 { "Cyan" } 4 { "Green" } 5 { "Green" } default { "Gray" } } Write-Host "$displayName" -ForegroundColor White -NoNewline Write-Host ":" -ForegroundColor White -NoNewline Write-Host " Niveau $currentLevel/5" -ForegroundColor $levelColor -NoNewline if ($currentLevel -gt 0 -and $targetLevel -gt $currentLevel) { Write-Host " (Doel: $targetLevel)" -ForegroundColor Yellow } else { Write-Host "" } if ($dimData.description) { Write-Host " Omschrijving: $($dimData.description)" -ForegroundColor Gray } if ($dimData.gaps.Count -gt 0) { Write-Host " Geïdentificeerde gaps:" -ForegroundColor Yellow foreach ($gap in $dimData.gaps) { Write-Host " - $gap" -ForegroundColor Yellow } } Write-Host "" } if ($dimensionCount -gt 0) { $averageScore = [math]::Round($totalScore / $dimensionCount, 1) Write-Host "Gemiddelde maturiteitsscore: $averageScore/5`n" -ForegroundColor Cyan } else { Write-Host "[WARN] Geen dimensies zijn gescoord. Vul de assessment-resultaten in.`n" -ForegroundColor Yellow } if ($config.roadmap.Count -gt 0 -and $config.roadmap[0].action) { Write-Host "Roadmap-acties:" -ForegroundColor Cyan Write-Host "===============`n" -ForegroundColor Cyan foreach ($action in $config.roadmap) { if ($action.action) { $statusColor = switch ($action.status) { "Completed" { "Green" } "InProgress" { "Cyan" } "Planned" { "Yellow" } "Blocked" { "Red" } default { "Gray" } } Write-Host " [$($action.status)] " -ForegroundColor $statusColor -NoNewline Write-Host "$($action.action)" -ForegroundColor White if ($action.owner) { Write-Host " Eigenaar: $($action.owner)" -ForegroundColor Gray } if ($action.targetDate) { Write-Host " Doeldatum: $($action.targetDate)" -ForegroundColor Gray } Write-Host "" } } } $now = Get-Date $reviewStatus = "Onbekend" $reviewIsOverdue = $false if ($config.nextPlannedReview) { $nextReview = Get-Date $config.nextPlannedReview $reviewStatus = "Volgende geplande review: $($nextReview.ToString('yyyy-MM-dd'))" $reviewIsOverdue = $nextReview -lt $now } Write-Host "Review-status:" -ForegroundColor Cyan Write-Host " $reviewStatus" -ForegroundColor White if ($reviewIsOverdue) { Write-Host " [WARN] De geplande review-datum is verstreken." -ForegroundColor Yellow } Write-Host "" $hasCompleteAssessment = $dimensionCount -eq 5 -and $averageScore -gt 0 Write-Host "Samenvatting:" -ForegroundColor Cyan if ($hasCompleteAssessment) { Write-Host " [OK] Assessment-configuratie is ingevuld met maturiteitsscores." -ForegroundColor Green if ($averageScore -lt 3) { Write-Host " [INFO] Gemiddelde score is lager dan 3. Overweeg een verbeterprogramma." -ForegroundColor Yellow } if ($config.roadmap.Count -eq 0 -or -not $config.roadmap[0].action) { Write-Host " [INFO] Geen roadmap-acties gedefinieerd. Overweeg een gap-analyse en roadmap-ontwikkeling." -ForegroundColor Yellow } exit 0 } else { Write-Host " [WARN] Assessment is niet compleet. Vul alle dimensiescores in." -ForegroundColor Yellow exit 1 } } catch { Write-Host "`n[FAIL] Er is een fout opgetreden tijdens monitoring: $_" -ForegroundColor Red Write-Host "Details: $($_.Exception.Message)" -ForegroundColor Red exit 2 } } function Invoke-Remediation { <# .SYNOPSIS Maakt of actualiseert de assessment-configuratie. #> try { $configPath = Get-ConfigPath if (Test-Path -Path $configPath) { Write-Host "[INFO] Bestaande configuratie gevonden op: $configPath" -ForegroundColor Cyan Write-Host " Er wordt een back-up gemaakt voordat de configuratie wordt bijgewerkt." -ForegroundColor Cyan $backupPath = "$configPath.bak_{0}" -f (Get-Date -Format "yyyyMMddHHmmss") if (-not $WhatIf) { Copy-Item -Path $configPath -Destination $backupPath -ErrorAction Stop } Write-Host " Back-up opgeslagen als: $backupPath`n" -ForegroundColor Gray } $config = Initialize-DefaultConfig # Als er al een configuratie bestaat, behoud de bestaande assessment-resultaten if (Test-Path -Path $configPath) { $existingConfig = Get-Content -Path $configPath -Raw | ConvertFrom-Json if ($existingConfig.maturityDimensions) { $config.maturityDimensions = $existingConfig.maturityDimensions } if ($existingConfig.targetMaturity) { $config.targetMaturity = $existingConfig.targetMaturity } if ($existingConfig.roadmap) { $config.roadmap = $existingConfig.roadmap } if ($existingConfig.assessmentDate) { $config.assessmentDate = $existingConfig.assessmentDate } if ($existingConfig.assessor) { $config.assessor = $existingConfig.assessor } } $json = $config | ConvertTo-Json -Depth 10 if ($WhatIf) { Write-Host "[WhatIf] Configuratie zou worden geschreven naar: $configPath" -ForegroundColor Yellow Write-Host $json } else { $configDir = Split-Path -Parent $configPath if (-not (Test-Path -Path $configDir)) { New-Item -ItemType Directory -Path $configDir -Force | Out-Null } $json | Out-File -FilePath $configPath -Encoding UTF8 -Force Write-Host "[OK] Assessment-configuratie is aangemaakt of bijgewerkt." -ForegroundColor Green Write-Host " Bestand: $configPath" -ForegroundColor Green } Write-Host "`nAanbevolen vervolgstappen:" -ForegroundColor Cyan Write-Host " 1. Voer een maturiteitsbeoordeling uit en score per dimensie het huidige niveau (0-5)." -ForegroundColor Gray Write-Host " 2. Documenteer per dimensie bewijsstukken, omschrijvingen en geïdentificeerde gaps." -ForegroundColor Gray Write-Host " 3. Bepaal gewenste doelmatuur per dimensie en voeg deze toe aan targetMaturity." -ForegroundColor Gray Write-Host " 4. Ontwikkel een roadmap met verbeteracties, prioriteiten, eigenaars en doeldatums." -ForegroundColor Gray Write-Host " 5. Gebruik -Monitoring om periodiek de maturiteitsscores te rapporteren en progressie te volgen." -ForegroundColor Gray exit 0 } catch { Write-Host "`n[FAIL] Er is een fout opgetreden tijdens remediatie: $_" -ForegroundColor Red Write-Host "Details: $($_.Exception.Message)" -ForegroundColor Red exit 2 } } function Invoke-Revert { <# .SYNOPSIS Verwijdert optioneel de assessment-configuratiefile. #> try { $configPath = Get-ConfigPath if (-not (Test-Path -Path $configPath)) { Write-Host "[INFO] Er is geen configuratiefile om te verwijderen." -ForegroundColor Cyan exit 0 } if ($WhatIf) { Write-Host "[WhatIf] Configuratiefile zou worden verwijderd: $configPath" -ForegroundColor Yellow } else { Remove-Item -Path $configPath -Force -ErrorAction Stop Write-Host "[OK] Configuratiefile verwijderd: $configPath" -ForegroundColor Green } exit 0 } catch { Write-Host "`n[FAIL] Er is een fout opgetreden tijdens het verwijderen van de configuratie: $_" -ForegroundColor Red Write-Host "Details: $($_.Exception.Message)" -ForegroundColor Red exit 2 } } try { if ($Revert) { Invoke-Revert } elseif ($Monitoring) { Invoke-Monitoring } elseif ($Remediation) { Invoke-Remediation } else { Write-Host "Gebruik:" -ForegroundColor Yellow Write-Host " -Monitoring Voer maturiteitsbeoordeling uit en genereer rapport" -ForegroundColor Gray Write-Host " -Remediation Maak of actualiseer de assessment-configuratie" -ForegroundColor Gray Write-Host " -Revert Verwijder de configuratiefile (optioneel, met -WhatIf voor dry-run)" -ForegroundColor Gray } } catch { throw } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Medium: Wanneer organisaties geen gestructureerde maturiteitsbeoordelingen uitvoeren, ontbreekt objectief inzicht in de effectiviteit van de SOC-functie, blijven verbeterkansen onbenut, en is het moeilijk om geïnformeerde beslissingen te nemen over investeringen en roadmap-planning. Dit kan leiden tot inefficiënt gebruik van middelen, gemiste compliance-kansen, en een SOC die niet meegroeit met veranderende dreigingen en eisen.

Management Samenvatting

Voer periodiek gestructureerde SOC-maturiteitsbeoordelingen uit op basis van een model met vijf dimensies (organisatie, detectie, processen, technologie, metriek) en vijf volwassenheidsniveaus. Gebruik de resultaten voor gap-analyse, roadmap-ontwikkeling en continue verbetering. Assessments kunnen intern worden uitgevoerd via zelfevaluaties of extern via gespecialiseerde partijen. Voor Nederlandse overheidsorganisaties dragen periodieke assessments bij aan compliance met BIO en NIS2 door aan te tonen dat de SOC-functie structureel wordt geëvalueerd en verbeterd.