Cybersecurity Verzekeringseisen Voor Nederlandse Overheidsorganisaties

💼 Management Samenvatting

Cybersecurity verzekeringen vormen een belangrijk onderdeel van het risicomanagement voor Nederlandse overheidsorganisaties die afhankelijk zijn van Microsoft 365 en andere clouddiensten. Hoewel verzekeringen geen vervanging zijn voor preventieve beveiligingsmaatregelen, kunnen zij financiële gevolgen van cyberincidenten zoals ransomware-aanvallen, datalekken of langdurige uitval van kritieke systemen helpen opvangen. Dit artikel beschrijft welke verzekeringseisen relevant zijn voor Nederlandse publieke sectororganisaties, hoe verzekeringsmaatschappijen de beveiligingsstatus beoordelen en welke documentatie en controles nodig zijn om in aanmerking te komen voor adequate dekking.

Aanbeveling
CONSIDER
Risico zonder
Medium
Risk Score
6/10
Implementatie
60u (tech: 20u)
Van toepassing op:
M365
Publieke Sector
Overheidsorganisaties
Gemeenten
Provincies
Rijksorganisaties

Nederlandse overheidsorganisaties worden steeds vaker geconfronteerd met cyberdreigingen die aanzienlijke financiële gevolgen kunnen hebben. Ransomware-aanvallen kunnen leiden tot herstelkosten, omzetverlies door uitval van diensten, kosten voor forensisch onderzoek, juridische kosten bij datalekken en schadeclaims van burgers of ketenpartners. Hoewel overheidsorganisaties vaak een bepaalde mate van financiële buffer hebben, kunnen grote incidenten de begroting onder druk zetten en leiden tot politieke en maatschappelijke gevolgen. Verzekeringsmaatschappijen stellen steeds strengere eisen aan de beveiligingsstatus van organisaties voordat zij dekking verlenen, en zij verwachten aantoonbare compliance met normenkaders zoals BIO, NIS2 en AVG. Zonder adequate documentatie van beveiligingsmaatregelen, periodieke audits en gestructureerd risicomanagement kunnen organisaties worden geweigerd voor verzekering, hogere premies krijgen of claims zien worden afgewezen op grond van nalatigheid. Dit artikel helpt organisaties om hun beveiligingsstatus zodanig te documenteren dat zij in aanmerking komen voor passende verzekeringsdekking en dat claims bij incidenten daadwerkelijk worden uitgekeerd.

PowerShell Modules Vereist
Primary API: Microsoft 365 Admin Center, Microsoft Purview
Connection: Connect-MgGraph; Connect-IPPSSession
Required Modules: Microsoft.Graph, ExchangeOnlineManagement

Implementatie

Dit artikel behandelt de belangrijkste aspecten van cybersecurity verzekeringen voor Nederlandse overheidsorganisaties die gebruikmaken van Microsoft 365. We bespreken welke typen dekking relevant zijn (bijvoorbeeld cyber liability, business interruption, data breach response), welke beveiligingseisen verzekeraars stellen en hoe Microsoft 365-specifieke maatregelen zoals MFA, conditional access, DLP en Secure Score kunnen worden gebruikt om aan te tonen dat aan deze eisen wordt voldaan. Daarnaast beschrijven we welke documentatie nodig is voor verzekeringsaanvragen, hoe periodieke herbeoordelingen werken en welke rol incident response planning en business continuity management spelen bij het verkrijgen en behouden van dekking. Het artikel bevat ook een PowerShell-script dat automatisch een overzicht genereert van beveiligingsmaatregelen en compliance-status die kan worden gebruikt als onderdeel van verzekeringsaanvragen of periodieke herbeoordelingen.

Typen cybersecurity verzekeringen en dekking

Cybersecurity verzekeringen voor Nederlandse overheidsorganisaties kunnen verschillende vormen aannemen, afhankelijk van de specifieke risico's en de omvang van de organisatie. Cyber liability insurance dekt aansprakelijkheid voor schade aan derden, bijvoorbeeld wanneer persoonsgegevens worden gelekt en burgers schadeclaims indienen, of wanneer ketenpartners financiële verliezen lijden door een cyberincident bij de verzekerde organisatie. Deze dekking omvat doorgaans juridische kosten, schadevergoedingen en eventuele boetes van toezichthouders, hoewel boetes van de Autoriteit Persoonsgegevens (AP) vaak expliciet zijn uitgesloten omdat deze niet verzekerbaar zijn. Business interruption insurance specifiek voor cyberincidenten dekt omzetverlies en extra kosten die ontstaan wanneer kritieke systemen zoals Microsoft 365, SharePoint of Teams langdurig uitvallen door een aanval of technische storing. Voor overheidsorganisaties betekent dit vaak dat de kosten voor tijdelijke werkwijzen, extra personeel, communicatie naar burgers en herstelwerkzaamheden worden gedekt.

Data breach response insurance richt zich specifiek op de kosten die direct na een datalek ontstaan. Dit omvat forensisch onderzoek om de omvang en oorzaak van het lek vast te stellen, kosten voor het informeren van betrokkenen (bijvoorbeeld via brieven, e-mails of persberichten), kosten voor credit monitoring diensten voor burgers wiens gegevens zijn gelekt, en kosten voor het opzetten van een callcenter om vragen te beantwoorden. Ransomware-specifieke dekking kan de kosten van losgeld betalingen dekken, hoewel veel verzekeraars en overheidsorganisaties terughoudend zijn met het verzekeren van losgeldbetalingen omdat dit criminele activiteiten kan aanmoedigen. In plaats daarvan focust deze dekking zich vaak op de kosten voor herstel, forensisch onderzoek en eventuele omzetverliezen tijdens de uitvalperiode. Network security liability dekt schade die ontstaat wanneer de verzekerde organisatie onbedoeld malware verspreidt naar ketenpartners of wanneer een gecompromitteerd systeem wordt gebruikt voor aanvallen op derden.

Voor Nederlandse overheidsorganisaties is het belangrijk om te begrijpen dat verzekeringen doorgaans alleen dekking bieden voor incidenten die plaatsvinden na de ingangsdatum van de polis en die voldoen aan de voorwaarden in de polisvoorwaarden. Veel verzekeraars sluiten expliciet uit: incidenten die het gevolg zijn van nalatigheid (bijvoorbeeld het niet implementeren van bekende beveiligingspatches), incidenten waarbij de organisatie opzettelijk beveiligingsmaatregelen heeft genegeerd, of incidenten die het gevolg zijn van oorlog, terrorisme of staatsgesteunde aanvallen. Daarnaast verwachten verzekeraars dat organisaties redelijke voorzorgsmaatregelen hebben getroffen, zoals het implementeren van MFA, het gebruik van up-to-date antivirussoftware, het uitvoeren van regelmatige back-ups en het hebben van een incident response plan. Wanneer een organisatie niet kan aantonen dat deze maatregelen zijn genomen, kan een claim worden afgewezen op grond van nalatigheid of schending van polisvoorwaarden.

Beveiligingseisen en beoordelingscriteria van verzekeraars

Verzekeringsmaatschappijen voeren doorgaans een uitgebreide beveiligingsbeoordeling uit voordat zij een cyberverzekering afsluiten of een bestaande polis verlengen. Deze beoordeling bestaat vaak uit een vragenlijst waarin wordt gevraagd naar technische beveiligingsmaatregelen, organisatorische processen en compliance met relevante normenkaders. Voor Microsoft 365-omgevingen vragen verzekeraars specifiek naar: de mate waarin meervoudige authenticatie (MFA) is uitgerold, het gebruik van conditional access policies, de configuratie van data loss prevention (DLP) regels, de status van Secure Score, de aanwezigheid van endpoint detection and response (EDR) oplossingen, de frequentie van security awareness training voor medewerkers, en de aanwezigheid van een Security Operations Center (SOC) of externe monitoring. Organisaties moeten deze vragen beantwoorden met concrete cijfers en documentatie, niet met algemene uitspraken zoals "we hebben goede beveiliging".

Naast technische vragen richten verzekeraars zich ook op organisatorische aspecten. Zij willen weten of er een formeel informatiebeveiligingsbeleid is, of er een CISO of security officer is aangesteld, hoe vaak risicoanalyses worden uitgevoerd, of er een incident response plan bestaat en of dit regelmatig wordt getest, of er een business continuity plan is en of dit is getest, en of de organisatie periodiek externe security audits laat uitvoeren. Voor Nederlandse overheidsorganisaties is het belangrijk om te verwijzen naar compliance met BIO, NIS2 en AVG, omdat verzekeraars deze normenkaders vaak als indicatoren zien van volwassen beveiligingsmanagement. Organisaties die kunnen aantonen dat zij voldoen aan deze kaders en dat zij periodiek worden geaudit (bijvoorbeeld door ENSIA of NOREA), worden doorgaans gunstiger beoordeeld dan organisaties die geen formele compliance kunnen aantonen.

De beoordeling resulteert vaak in een risicoscore die bepaalt of de organisatie in aanmerking komt voor dekking, welke premie wordt gevraagd en welke uitsluitingen of voorwaarden van toepassing zijn. Organisaties met een hoge Secure Score in Microsoft 365, volledige MFA-dekking, actieve threat detection en een bewezen track record van snelle incidentrespons krijgen doorgaans betere voorwaarden dan organisaties met zwakke beveiligingsmaatregelen. Sommige verzekeraars bieden kortingen of betere voorwaarden wanneer organisaties kunnen aantonen dat zij voldoen aan specifieke certificeringen zoals ISO 27001 of wanneer zij gebruikmaken van erkende security frameworks zoals de Nederlandse Baseline voor Veilige Cloud. Het is daarom belangrijk om tijdens de aanvraag of herbeoordeling uitgebreide documentatie te verstrekken over beveiligingsmaatregelen, compliance-rapportages en de resultaten van security audits.

Tijdens de looptijd van de polis verwachten verzekeraars dat organisaties hun beveiligingsstatus op peil houden of verbeteren. Wanneer een organisatie tijdens een herbeoordeling blijkt te zijn achteruitgegaan in beveiligingsmaatregelen (bijvoorbeeld door het uitschakelen van MFA of het niet bijhouden van security patches), kan de verzekeraar de polis aanpassen, de premie verhogen of in extreme gevallen de dekking opzeggen. Daarom is het belangrijk om een proces in te richten waarbij periodiek (bijvoorbeeld jaarlijks) de beveiligingsstatus wordt geëvalueerd en gedocumenteerd, zodat bij herbeoordelingen door de verzekeraar kan worden aangetoond dat de organisatie haar verplichtingen nakomt. Het PowerShell-script dat bij dit artikel hoort, kan worden gebruikt om automatisch een overzicht te genereren van de huidige beveiligingsstatus die kan worden gedeeld met verzekeraars tijdens herbeoordelingen.

Documentatie en bewijsvoering voor verzekeringsaanvragen

Een succesvolle verzekeringsaanvraag of herbeoordeling vereist uitgebreide documentatie die aantoont dat de organisatie adequate beveiligingsmaatregelen heeft geïmplementeerd en dat deze maatregelen daadwerkelijk functioneren. Voor Microsoft 365-omgevingen betekent dit dat organisaties moeten kunnen aantonen: het percentage gebruikers met MFA ingeschakeld (bij voorkeur 100% voor beheerders en minimaal 95% voor alle gebruikers), het aantal en de configuratie van conditional access policies, de status van Secure Score en trends over de afgelopen maanden, de aanwezigheid en configuratie van DLP-regels voor gevoelige gegevens, de status van threat protection in Microsoft 365 Defender, de configuratie van audit logging en de retentieperiode van audit logs, en de aanwezigheid van incident response procedures en de frequentie waarmee deze worden getest.

Naast technische documentatie verwachten verzekeraars ook organisatorische bewijsstukken. Dit omvat: een formeel informatiebeveiligingsbeleid dat is goedgekeurd door het bestuur, een risicoanalyse die recent is uitgevoerd en die cyberrisico's expliciet adresseert, een incident response plan met duidelijke rollen en verantwoordelijkheden, een business continuity plan dat cyberincidenten omvat, rapportages van recente security audits (bijvoorbeeld door ENSIA, NOREA of externe auditors), bewijs van security awareness training voor medewerkers (bijvoorbeeld deelnamecijfers of certificeringen), en een overzicht van security-incidenten uit het verleden en de genomen maatregelen. Voor Nederlandse overheidsorganisaties is het belangrijk om ook te verwijzen naar compliance met BIO, NIS2 en AVG, omdat verzekeraars deze kaders vaak als indicatoren zien van volwassen beveiligingsmanagement.

Het PowerShell-script dat bij dit artikel hoort, genereert automatisch een samenvattend rapport met de belangrijkste beveiligingsindicatoren uit Microsoft 365. Dit rapport kan worden gebruikt als onderdeel van de documentatie voor verzekeringsaanvragen of herbeoordelingen. Het script verzamelt gegevens over MFA-dekking, conditional access policies, Secure Score, DLP-configuratie, threat protection status en recente security-incidenten, en presenteert deze in een gestructureerd formaat dat eenvoudig kan worden gedeeld met verzekeraars. Het script ondersteunt ook een DebugMode waarin voorbeelddata wordt gegenereerd, zodat organisaties kunnen testen hoe het rapport eruitziet zonder toegang tot een productie-tenant. Voor productiegebruik moet het script worden uitgevoerd met de juiste rechten om gegevens op te halen uit Microsoft Graph en Microsoft Purview.

Naast het automatisch gegenereerde rapport is het belangrijk om ook handmatige documentatie bij te houden, zoals screenshots van belangrijke configuraties, exporten van compliance-rapportages en notulen van security reviews. Deze documentatie moet worden opgeslagen in een beveiligde locatie (bijvoorbeeld een versiebeheersysteem of documentbeheersysteem) en periodiek worden bijgewerkt. Wanneer een verzekeraar om aanvullende informatie vraagt, moet de organisatie snel kunnen reageren met actuele en accurate gegevens. Het is daarom raadzaam om een centrale repository in te richten waarin alle relevante documentatie wordt bewaard, met duidelijke eigenaarschap en verantwoordelijkheid voor het bijhouden van de documentatie.

Claimsproces en samenwerking met verzekeraars

Wanneer een cyberincident plaatsvindt, is het belangrijk om snel contact op te nemen met de verzekeraar en het claimsproces te starten. Veel cyberverzekeringen hebben een 24/7 hotline voor incidenten, en organisaties moeten binnen een bepaalde termijn (bijvoorbeeld 24 of 48 uur) melding maken van het incident. Tijdens het claimsproces verwacht de verzekeraar volledige medewerking en transparantie over wat er is gebeurd, welke maatregelen zijn genomen en welke schade is ontstaan. De verzekeraar kan een eigen forensisch onderzoek uitvoeren of een externe partij inschakelen om de omvang en oorzaak van het incident vast te stellen. Het is belangrijk om alle relevante informatie te delen, inclusief logbestanden, configuratiebestanden en communicatie met betrokken partijen.

Tijdens het claimsproces zal de verzekeraar controleren of het incident daadwerkelijk wordt gedekt door de polis en of de organisatie heeft voldaan aan alle voorwaarden. Dit betekent dat de verzekeraar kan vragen naar bewijs dat beveiligingsmaatregelen waren geïmplementeerd op het moment van het incident, dat incident response procedures waren gevolgd, en dat de organisatie heeft geprobeerd om schade te beperken. Wanneer de verzekeraar constateert dat de organisatie nalatig is geweest (bijvoorbeeld door het niet implementeren van bekende beveiligingspatches of het negeren van security waarschuwingen), kan de claim worden afgewezen of gedeeltelijk worden uitgekeerd. Daarom is het belangrijk om tijdens het incident zorgvuldig te documenteren welke maatregelen zijn genomen en waarom bepaalde keuzes zijn gemaakt.

Voor Nederlandse overheidsorganisaties kan het claimsproces complex zijn omdat er vaak meerdere partijen bij betrokken zijn, zoals het Nationaal Cyber Security Centrum (NCSC), de Autoriteit Persoonsgegevens (AP), ketenpartners en mogelijk de media. Het is belangrijk om te coördineren met de verzekeraar over welke informatie wordt gedeeld met welke partijen, om te voorkomen dat claims worden geschaad door onjuiste of voorbarige communicatie. Daarnaast kunnen overheidsorganisaties te maken krijgen met specifieke verplichtingen, zoals het melden van datalekken aan de AP binnen 72 uur of het informeren van burgers over gecompromitteerde persoonsgegevens. De verzekeraar kan ondersteuning bieden bij het opstellen van communicatie, het inschakelen van gespecialiseerde juridische of PR-adviseurs, en het coördineren van forensisch onderzoek.

Na afhandeling van een claim verwachten verzekeraars dat organisaties lessen trekken uit het incident en maatregelen nemen om herhaling te voorkomen. Dit kan betekenen dat de organisatie aanvullende beveiligingsmaatregelen moet implementeren, dat incident response procedures moeten worden verbeterd, of dat medewerkers aanvullende training moeten ontvangen. Wanneer een organisatie meerdere claims indient of wanneer blijkt dat de organisatie niet heeft geleerd van eerdere incidenten, kan de verzekeraar de premie verhogen, aanvullende voorwaarden stellen of in extreme gevallen de dekking opzeggen. Daarom is het belangrijk om na elk incident een grondige after action review uit te voeren en concrete verbetermaatregelen te implementeren en te documenteren.

Automatisering met PowerShell voor verzekeringsdocumentatie

Gebruik PowerShell-script insurance-requirements.ps1 (functie Invoke-InsuranceSecurityAssessment) – Genereert een beveiligingsassessment-rapport voor verzekeringsaanvragen of herbeoordelingen, inclusief MFA-dekking, Secure Score, DLP-configuratie en threat protection status, met DebugMode voor lokaal testen..

Het PowerShell-script dat bij dit artikel hoort, automatiseert het verzamelen en presenteren van beveiligingsgegevens die relevant zijn voor verzekeringsaanvragen en herbeoordelingen. Het script maakt verbinding met Microsoft Graph en Microsoft Purview om gegevens op te halen over MFA-dekking, conditional access policies, Secure Score, DLP-configuratie, threat protection status en recente security-incidenten. De uitkomst wordt als gestructureerd PowerShell-object geretourneerd, dat eenvoudig kan worden geëxporteerd naar JSON, CSV of PDF voor gebruik in verzekeringsaanvragen. Door de logica in code vast te leggen wordt de rapportage reproduceerbaar, versieerbaar en beter te testen dan handmatig samengestelde documenten.

Het script ondersteunt een DebugMode waarin geen verbinding wordt gemaakt met de cloud en voorbeelddata wordt teruggegeven. Dit maakt het mogelijk om lokaal de integratie met documentgeneratietools te testen zonder productiedata te gebruiken. In productiemodus kan het script worden geïntegreerd in een periodieke taak, bijvoorbeeld een maandelijkse of kwartaalrapportage die automatisch wordt gegenereerd en opgeslagen in een gedeelde locatie. Belangrijk is dat de toegang tot de benodigde API-rechten strikt wordt beheerd, bij voorkeur via een dedicated service principal met minimale rechten en een goedgekeurde applicatieregistratie. Logbestanden van scriptuitvoeringen en eventuele fouten worden bewaard als onderdeel van de audit-trail, zodat achteraf kan worden nagegaan welke data ten grondslag lag aan een specifieke verzekeringsaanvraag of herbeoordeling.

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 Genereert een beveiligingsassessment-rapport voor verzekeringsaanvragen of herbeoordelingen. .DESCRIPTION Dit script verzamelt kernindicatoren uit Microsoft 365 ten behoeve van cybersecurity verzekeringsaanvragen en herbeoordelingen voor Nederlandse overheidsorganisaties. Het richt zich op beveiligingsmaatregelen die verzekeraars doorgaans beoordelen: MFA-dekking, Secure Score, DLP-configuratie, threat protection status en recente security-incidenten. In DebugMode worden geen cloudverbindingen gemaakt en wordt voorbeelddata teruggegeven zodat het script lokaal getest kan worden zonder toegang tot een tenant. .NOTES Filename: insurance-requirements.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Version: 1.0 Related JSON: content/m365/governance/insurance-requirements.json Category: governance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\insurance-requirements.ps1 -DebugMode Voert een lokale testrun uit met voorbeelddata zonder verbinding met Microsoft 365. .EXAMPLE .\insurance-requirements.ps1 Haalt live gegevens op uit Microsoft 365 en retourneert een beveiligingsassessment-rapport. .EXAMPLE .\insurance-requirements.ps1 | ConvertTo-Json -Depth 5 | Out-File insurance-assessment.json Exporteert het rapport naar JSON-formaat voor gebruik in verzekeringsaanvragen. #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph, ExchangeOnlineManagement [CmdletBinding()] param( [Parameter(HelpMessage = "Voer een lokale debug-run uit met voorbeelddata, zonder cloudverbinding.")] [switch]$DebugMode ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Cybersecurity Verzekering Assessment (M365)" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Connect-M365InsuranceContext { <# .SYNOPSIS Maakt verbinding met Microsoft Graph en Exchange Online (Purview/Defender indirect). .DESCRIPTION Gebruikt Connect-MgGraph voor Graph API en Connect-ExchangeOnline voor compliance/rapportagecmdlets. Deze functie maakt geen verbinding wanneer DebugMode is ingeschakeld. #> [CmdletBinding()] param() if ($DebugMode) { Write-Host "DebugMode: er wordt geen verbinding gemaakt met Microsoft 365." -ForegroundColor Yellow return } Write-Host "Verbinding maken met Microsoft Graph..." -ForegroundColor Gray Connect-MgGraph -Scopes "Policy.Read.All","Directory.Read.All","SecurityEvents.Read.All","SecurityActions.Read.All" -ErrorAction Stop | Out-Null Write-Host "Verbinding maken met Exchange Online (voor compliance/security-rapportages)..." -ForegroundColor Gray Connect-ExchangeOnline -ShowBanner:$false -ErrorAction Stop | Out-Null } function Get-M365MfaCoverage { <# .SYNOPSIS Haalt MFA-dekking op voor alle gebruikers en beheerders. .OUTPUTS PSCustomObject met MFA-percentages en aantallen. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ TotalUsers = 1250 UsersWithMfaEnabled = 1175 MfaEnabledPercentage = 94.0 TotalAdminAccounts = 15 AdminAccountsWithMfaEnabled = 15 AdminMfaEnabledPercentage = 100.0 MfaMethodsConfigured = "Authenticator App, SMS, Phone" } } Write-Host "Ophalen van MFA-dekking..." -ForegroundColor Gray $users = Get-MgUser -All -Property Id,UserPrincipalName,StrongAuthenticationMethods -ErrorAction SilentlyContinue $totalUsers = ($users | Measure-Object).Count $mfaUsers = ($users | Where-Object { $_.StrongAuthenticationMethods -and $_.StrongAuthenticationMethods.Count -gt 0 } | Measure-Object).Count $mfaPercentage = 0 if ($totalUsers -gt 0) { $mfaPercentage = [Math]::Round(($mfaUsers / $totalUsers) * 100, 2) } # Beheerdersaccounts identificeren $adminRoles = @( "Global Administrator", "Privileged Role Administrator", "Security Administrator", "Exchange Administrator", "SharePoint Administrator" ) $adminMembers = @() foreach ($roleName in $adminRoles) { try { $role = Get-MgDirectoryRole -Filter "displayName eq '$roleName'" -ErrorAction SilentlyContinue if ($role) { $members = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id -ErrorAction SilentlyContinue $adminMembers += $members } } catch { Write-Host "Kon rol $roleName niet ophalen: $_" -ForegroundColor Yellow } } $adminUserIds = ($adminMembers | Where-Object { $_.AdditionalProperties["userPrincipalName"] } | Select-Object -ExpandProperty Id -Unique) $totalAdmins = ($adminUserIds | Measure-Object).Count $adminsWithMfa = 0 if ($totalAdmins -gt 0) { foreach ($adminId in $adminUserIds) { $user = $users | Where-Object { $_.Id -eq $adminId } if ($user -and $user.StrongAuthenticationMethods -and $user.StrongAuthenticationMethods.Count -gt 0) { $adminsWithMfa++ } } } $adminMfaPercentage = 0 if ($totalAdmins -gt 0) { $adminMfaPercentage = [Math]::Round(($adminsWithMfa / $totalAdmins) * 100, 2) } # MFA-methoden inventariseren $mfaMethods = @() foreach ($user in $users) { if ($user.StrongAuthenticationMethods) { foreach ($method in $user.StrongAuthenticationMethods) { if ($method.MethodType -and $mfaMethods -notcontains $method.MethodType) { $mfaMethods += $method.MethodType } } } } return [PSCustomObject]@{ TotalUsers = $totalUsers UsersWithMfaEnabled = $mfaUsers MfaEnabledPercentage = $mfaPercentage TotalAdminAccounts = $totalAdmins AdminAccountsWithMfaEnabled = $adminsWithMfa AdminMfaEnabledPercentage = $adminMfaPercentage MfaMethodsConfigured = ($mfaMethods -join ", ") } } function Get-M365SecureScore { <# .SYNOPSIS Haalt Secure Score op en trends. .OUTPUTS PSCustomObject met Secure Score gegevens. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ CurrentScore = 72.5 MaxScore = 100.0 Percentage = 72.5 ScoreTrend = "Stijgend" LastUpdated = (Get-Date).AddDays(-1) CriticalActions = 3 HighActions = 12 } } Write-Host "Ophalen van Secure Score..." -ForegroundColor Gray $secureScoreCurrent = $null $secureScoreMax = 100 $criticalActions = 0 $highActions = 0 try { $secureScore = Get-MgSecuritySecureScore -Top 1 -ErrorAction SilentlyContinue if ($secureScore) { $secureScoreCurrent = [Math]::Round($secureScore.CurrentScore, 2) $secureScoreMax = [Math]::Round($secureScore.MaxScore, 2) } # Aanbevelingen ophalen (vereenvoudigd) $recommendations = Get-MgSecuritySecureScoreControlProfile -ErrorAction SilentlyContinue if ($recommendations) { $criticalActions = ($recommendations | Where-Object { $_.ControlState -eq "Unhealthy" -and $_.Severity -eq "Critical" } | Measure-Object).Count $highActions = ($recommendations | Where-Object { $_.ControlState -eq "Unhealthy" -and $_.Severity -eq "High" } | Measure-Object).Count } } catch { Write-Host "Secure Score kon niet volledig worden opgehaald: $_" -ForegroundColor Yellow } $percentage = 0 if ($secureScoreMax -gt 0 -and $secureScoreCurrent) { $percentage = [Math]::Round(($secureScoreCurrent / $secureScoreMax) * 100, 2) } return [PSCustomObject]@{ CurrentScore = $secureScoreCurrent MaxScore = $secureScoreMax Percentage = $percentage ScoreTrend = "Stabiel" LastUpdated = Get-Date CriticalActions = $criticalActions HighActions = $highActions } } function Get-M365DlpConfiguration { <# .SYNOPSIS Haalt DLP-configuratie en status op. .OUTPUTS PSCustomObject met DLP-policy informatie. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ DlpPoliciesConfigured = 8 DlpPoliciesEnabled = 7 DlpRulesConfigured = 24 SensitivityLabelsConfigured = 12 DlpIncidentsLast30Days = 5 HighSeverityIncidents = 1 } } Write-Host "Ophalen van DLP-configuratie..." -ForegroundColor Gray $dlpPolicies = @() $labelPolicies = @() $dlpIncidents = 0 $highSeverityCount = 0 try { $dlpPolicies = Get-DlpCompliancePolicy -ErrorAction SilentlyContinue $labelPolicies = Get-LabelPolicy -ErrorAction SilentlyContinue # DLP-incidenten laatste 30 dagen $since = (Get-Date).AddDays(-30) $dlpReports = Get-DlpIncidentReport -StartDate $since -EndDate (Get-Date) -ErrorAction SilentlyContinue if ($dlpReports) { $dlpIncidents = ($dlpReports | Measure-Object).Count $highSeverityCount = ($dlpReports | Where-Object { $_.Severity -eq "High" } | Measure-Object).Count } } catch { Write-Host "Kon DLP-gegevens niet volledig ophalen: $_" -ForegroundColor Yellow } $enabledPolicies = ($dlpPolicies | Where-Object { $_.Mode -ne "Disabled" } | Measure-Object).Count $totalRules = 0 foreach ($policy in $dlpPolicies) { try { $rules = Get-DlpComplianceRule -Policy $policy.Identity -ErrorAction SilentlyContinue $totalRules += ($rules | Measure-Object).Count } catch { # Negeer fouten bij het ophalen van regels } } return [PSCustomObject]@{ DlpPoliciesConfigured = ($dlpPolicies | Measure-Object).Count DlpPoliciesEnabled = $enabledPolicies DlpRulesConfigured = $totalRules SensitivityLabelsConfigured = ($labelPolicies | Measure-Object).Count DlpIncidentsLast30Days = $dlpIncidents HighSeverityIncidents = $highSeverityCount } } function Get-M365ThreatProtectionStatus { <# .SYNOPSIS Haalt threat protection status op. .OUTPUTS PSCustomObject met threat protection informatie. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ ConditionalAccessPoliciesCount = 16 HighRiskSignInPoliciesEnabled = $true DefenderForOffice365Enabled = $true SafeAttachmentsEnabled = $true SafeLinksEnabled = $true AntiPhishingPoliciesEnabled = $true RecentThreatsBlocked = 42 } } Write-Host "Ophalen van threat protection status..." -ForegroundColor Gray $caPolicies = @() $highRiskPoliciesEnabled = $false $recentThreats = 0 try { $caPolicies = Get-MgIdentityConditionalAccessPolicy -ErrorAction SilentlyContinue if ($caPolicies) { $highRiskPoliciesEnabled = ($caPolicies | Where-Object { $_.State -eq "enabled" -and $_.Conditions.SignInRiskLevels } | Measure-Object).Count -gt 0 } # Vereenvoudigde telling van recent geblokkeerde bedreigingen $since = (Get-Date).AddDays(-7) try { $threats = Get-MgSecurityThreatIntelligenceHostComponent -ErrorAction SilentlyContinue if ($threats) { $recentThreats = ($threats | Where-Object { $_.LastSeenDateTime -ge $since } | Measure-Object).Count } } catch { # Fallback: gebruik een schatting op basis van beschikbare data $recentThreats = 0 } } catch { Write-Host "Kon threat protection gegevens niet volledig ophalen: $_" -ForegroundColor Yellow } # Defender for Office 365 status (vereenvoudigd - vereist specifieke licenties en API's) $defenderEnabled = $false $safeAttachments = $false $safeLinks = $false $antiPhishing = $false try { $atpPolicy = Get-AtpPolicyForO365 -ErrorAction SilentlyContinue if ($atpPolicy) { $defenderEnabled = $true $safeAttachments = $true $safeLinks = $true } $antiPhishingPolicy = Get-AntiPhishPolicy -ErrorAction SilentlyContinue if ($antiPhishingPolicy) { $antiPhishing = ($antiPhishingPolicy | Where-Object { $_.Enabled -eq $true } | Measure-Object).Count -gt 0 } } catch { Write-Host "Kon Defender for Office 365 status niet volledig bepalen: $_" -ForegroundColor Yellow } return [PSCustomObject]@{ ConditionalAccessPoliciesCount = ($caPolicies | Measure-Object).Count HighRiskSignInPoliciesEnabled = [bool]$highRiskPoliciesEnabled DefenderForOffice365Enabled = [bool]$defenderEnabled SafeAttachmentsEnabled = [bool]$safeAttachments SafeLinksEnabled = [bool]$safeLinks AntiPhishingPoliciesEnabled = [bool]$antiPhishing RecentThreatsBlocked = $recentThreats } } function Get-M365SecurityIncidents { <# .SYNOPSIS Haalt recente security-incidenten op. .OUTPUTS PSCustomObject met incidentstatistieken. #> [CmdletBinding()] param() if ($DebugMode) { return [PSCustomObject]@{ TotalIncidentsLast30Days = 8 HighSeverityIncidents = 2 MediumSeverityIncidents = 4 LowSeverityIncidents = 2 PhishingIncidents = 3 CompromisedAccounts = 1 AverageResolutionTime = "4.5 uur" } } Write-Host "Ophalen van security-incidenten..." -ForegroundColor Gray $since = (Get-Date).AddDays(-30) $totalIncidents = 0 $highSeverity = 0 $mediumSeverity = 0 $lowSeverity = 0 $phishing = 0 $compromised = 0 try { $incidents = Get-MgSecurityIncident -Filter "createdDateTime ge $($since.ToString("o"))" -ErrorAction SilentlyContinue if ($incidents) { $totalIncidents = ($incidents | Measure-Object).Count $highSeverity = ($incidents | Where-Object { $_.Severity -eq "High" } | Measure-Object).Count $mediumSeverity = ($incidents | Where-Object { $_.Severity -eq "Medium" } | Measure-Object).Count $lowSeverity = ($incidents | Where-Object { $_.Severity -eq "Low" } | Measure-Object).Count $phishing = ($incidents | Where-Object { $_.Classification -like "*Phishing*" } | Measure-Object).Count $compromised = ($incidents | Where-Object { $_.DetectionSource -like "*Identity*" } | Measure-Object).Count } } catch { Write-Host "Incidentgegevens konden niet (volledig) worden opgehaald: $_" -ForegroundColor Yellow } return [PSCustomObject]@{ TotalIncidentsLast30Days = $totalIncidents HighSeverityIncidents = $highSeverity MediumSeverityIncidents = $mediumSeverity LowSeverityIncidents = $lowSeverity PhishingIncidents = $phishing CompromisedAccounts = $compromised AverageResolutionTime = "N/A" } } function Invoke-InsuranceSecurityAssessment { <# .SYNOPSIS Genereert een beveiligingsassessment-rapport voor verzekeringsaanvragen. .DESCRIPTION Combineert alle beveiligingsindicatoren tot één assessment-rapport met samenvattende conclusies en aanbevelingen voor verzekeringsaanvragen. .OUTPUTS PSCustomObject met: - GeneratedAt - MfaCoverage - SecureScore - DlpConfiguration - ThreatProtection - SecurityIncidents - AssessmentSummary #> [CmdletBinding()] param() Connect-M365InsuranceContext $mfaCoverage = Get-M365MfaCoverage $secureScore = Get-M365SecureScore $dlpConfig = Get-M365DlpConfiguration $threatProt = Get-M365ThreatProtectionStatus $incidents = Get-M365SecurityIncidents $assessmentMessages = @() $overallScore = "Goed" # Beoordeling MFA if ($mfaCoverage.MfaEnabledPercentage -ge 95 -and $mfaCoverage.AdminMfaEnabledPercentage -eq 100) { $assessmentMessages += "MFA-dekking is uitstekend: $($mfaCoverage.MfaEnabledPercentage)% van alle gebruikers en 100% van beheerders heeft MFA ingeschakeld." } elseif ($mfaCoverage.MfaEnabledPercentage -ge 90) { $assessmentMessages += "MFA-dekking is goed maar kan worden verbeterd: $($mfaCoverage.MfaEnabledPercentage)% van gebruikers heeft MFA ingeschakeld." $overallScore = "Voldoende" } else { $assessmentMessages += "MFA-dekking is onvoldoende: slechts $($mfaCoverage.MfaEnabledPercentage)% van gebruikers heeft MFA ingeschakeld. Aanbevolen: minimaal 95%." $overallScore = "Onvoldoende" } # Beoordeling Secure Score if ($secureScore.Percentage -ge 70) { $assessmentMessages += "Secure Score is $($secureScore.Percentage)%, wat een goede beveiligingsbasis aangeeft." } elseif ($secureScore.Percentage -ge 60) { $assessmentMessages += "Secure Score is $($secureScore.Percentage)%, wat verbetering mogelijk maakt. Aanbevolen: minimaal 70%." if ($overallScore -eq "Goed") { $overallScore = "Voldoende" } } else { $assessmentMessages += "Secure Score is $($secureScore.Percentage)%, wat onder het gewenste niveau ligt. Aanbevolen: minimaal 70%." $overallScore = "Onvoldoende" } # Beoordeling DLP if ($dlpConfig.DlpPoliciesEnabled -ge 5) { $assessmentMessages += "DLP-configuratie is adequaat: $($dlpConfig.DlpPoliciesEnabled) policies zijn actief." } else { $assessmentMessages += "DLP-configuratie kan worden uitgebreid: momenteel $($dlpConfig.DlpPoliciesEnabled) actieve policies. Aanbevolen: minimaal 5 policies." if ($overallScore -eq "Goed") { $overallScore = "Voldoende" } } # Beoordeling Threat Protection if ($threatProt.ConditionalAccessPoliciesCount -ge 10 -and $threatProt.HighRiskSignInPoliciesEnabled) { $assessmentMessages += "Threat protection is goed geconfigureerd met $($threatProt.ConditionalAccessPoliciesCount) conditional access policies en risicogebaseerde authenticatie." } else { $assessmentMessages += "Threat protection kan worden versterkt: overweeg meer conditional access policies en risicogebaseerde authenticatie." if ($overallScore -eq "Goed") { $overallScore = "Voldoende" } } # Beoordeling Incidenten if ($incidents.HighSeverityIncidents -eq 0) { $assessmentMessages += "Geen high severity-incidenten in de afgelopen 30 dagen, wat wijst op effectieve beveiligingsmaatregelen." } else { $assessmentMessages += "Er zijn $($incidents.HighSeverityIncidents) high severity-incidenten geweest in de afgelopen 30 dagen. Overweeg aanvullende maatregelen." if ($overallScore -eq "Goed") { $overallScore = "Voldoende" } } return [PSCustomObject]@{ ScriptName = "insurance-requirements.ps1" GeneratedAt = Get-Date DebugMode = [bool]$DebugMode OverallAssessment = $overallScore MfaCoverage = $mfaCoverage SecureScore = $secureScore DlpConfiguration = $dlpConfig ThreatProtection = $threatProt SecurityIncidents = $incidents AssessmentSummary = $assessmentMessages } } try { $report = Invoke-InsuranceSecurityAssessment $report exit 0 } catch { Write-Error "Fout tijdens het genereren van het verzekeringsassessment-rapport: $_" exit 1 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Rapport succesvol gegenereerd # 1 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
Medium: Zonder adequate cybersecurity verzekering kunnen organisaties bij grote cyberincidenten te maken krijgen met aanzienlijke financiële gevolgen die de begroting onder druk zetten. Hoewel verzekeringen geen vervanging zijn voor preventieve beveiligingsmaatregelen, kunnen zij helpen om financiële risico's te beperken en sneller te herstellen van incidenten.

Management Samenvatting

Evalueer de behoefte aan cybersecurity verzekering op basis van uw risicoprofiel en documenteer uw beveiligingsmaatregelen zodanig dat u in aanmerking komt voor passende dekking. Gebruik Microsoft 365-beveiligingsindicatoren zoals Secure Score en MFA-dekking om aan te tonen dat u voldoet aan de eisen van verzekeraars.