Phishing-simulatieprogramma's Voor Nederlandse Overheden

💼 Management Samenvatting

Gerichte phishing is de goedkoopste maar meest succesvolle aanvalsmethode tegen Nederlandse overheden. Toch blijken veel bewustwordingsprogramma's gefragmenteerd en niet aantoonbaar gekoppeld aan wettelijke eisen. De Nederlandse Baseline voor Veilige Cloud positioneert phishing-simulatieprogramma's daarom als strategisch instrument dat bestuurders, CISO's, HR, communicatie en SOC-teams verbindt. Dit artikel beschrijft hoe u simulaties ontwerpt die geloofwaardig zijn, hoe u gedragsdata omzet in sturingsinformatie en hoe u elke stap met scriptgestuurde bewijsvoering onderbouwt.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
8/10
Implementatie
140u (tech: 80u)
Van toepassing op:
Microsoft Defender for Office 365
Microsoft 365
Exchange Online
Entra ID
Microsoft Teams
Purview

Publieke organisaties combineren gevoelige persoonsgegevens, kritieke processen en politieke zichtbaarheid. Aanvallers misbruiken dat door medewerkers te verleiden tot credential harvesting, factuurfraude of het vrijgeven van vertrouwelijke dossiers. Traditionele e-learning volstaat niet omdat gedrag alleen verandert door herhaling, feedback en het expliciet oefenen van gewenste reacties. Tegelijk vragen auditors om harde cijfers: hoeveel campagnes draaien er, wie rapporteert verdachte berichten, hoe snel worden accounts geblokkeerd en welke bestuurders zijn op de hoogte? Zonder een integraal simulatieprogramma blijven antwoorden ad hoc en is het nauwelijks aantoonbaar dat de organisatie voldoet aan BIO, AVG en NIS2.

PowerShell Modules Vereist
Primary API: Microsoft Graph Attack Simulation & Training API, Microsoft Defender for Office 365, Microsoft Teams audit logs
Connection: Gebruik Connect-MgGraph -Scopes AttackSimulation.Read.All, Reports.Read.All en AuditLog.Read.All. Voor het verzamelen van trainingsdata worden aanvullende exports uit Microsoft 365 Defender en Purview eDiscovery gebruikt.
Required Modules: Microsoft.Graph.AttackSimulation, Microsoft.Graph.Reports, Microsoft.Graph.Authentication

Implementatie

Het artikel koppelt beleidsvorming aan uitvoering. U leest hoe bestuurlijke mandaten, risicoregisters en KPI's richting geven aan programmadoelen, hoe operationele teams scenario's bouwen die inspelen op actuele dreigingen, hoe Microsoft Defender for Office 365 en Graph API's worden ingezet voor automatisering en hoe het meegeleverde PowerShell-script binnen vijftien seconden een compliancebeeld oplevert. Iedere sectie eindigt met concrete bewijsstukken die auditors verwachten en beschrijft hoe rapportages in Purview worden gearchiveerd, zodat phishing-simulaties niet langer een losse campagne zijn maar een aantoonbare beveiligingsmaatregel.

Bestuurlijke verankering, risicoperceptie en programmamandaat

Een volwassen phishing-simulatieprogramma begint niet met een sjabloon voor e-mails, maar met een bestuurlijk besluit dat de organisatie verplicht om gedrag rond e-mail, Teams en telefonie meetbaar te maken. Colleges van B en W, gedeputeerde staten of uitvoeringsdirecties leggen in een formeel besluit vast dat simulaties minimaal elk kwartaal plaatsvinden, dat resultaten worden besproken in het managementteam en dat lessons learned direct leiden tot beleidsaanpassingen. Door deze opdracht expliciet te koppelen aan de Nederlandse Baseline voor Veilige Cloud ontstaat een juridisch kader waarbinnen risicovolle functies verplicht kunnen worden meegenomen, zelfs als werkzaamheden politiek gevoelig liggen.

Het risicoregister vertaalt dreigingen naar concrete scenario's. Voorbeelden zijn spear-phishing richting burgemeesters, valse subsidieaanvragen voor provincies of deepfake-Teamsgesprekken met rijksinspecteurs. Elk scenario krijgt een kans-impactscore, gekoppeld aan procesbeschrijvingen in de BIO. De CISO bepaalt kritieke KPI's, zoals maximaal drie procent klikratio voor medewerkers met toegang tot basisregistraties, minimaal zeventig procent rapportagegraad binnen vijftien minuten en verplichte deelname van ketenpartners. Door deze KPI's op te nemen in de managementrapportage wordt phishingbewustzijn een vaste stuurvariabele in plaats van een vrijblijvende campagne.

HR en communicatie zorgen ervoor dat het programma niet wordt gezien als een valstrik maar als onderdeel van professioneel handelen. Nieuwe medewerkers tekenen een gedragscode waarin staat dat zij periodiek getest worden en dat resultaten worden gebruikt voor gerichte coaching. Ondernemingsraden worden vooraf meegenomen en krijgen inzicht in hoe privacy wordt geborgd: individuele scores zijn alleen zichtbaar voor leidinggevenden en security officers met een opleidingsmandaat, terwijl rapportages richting bestuur geaggregeerde data bevatten. Deze transparantie voorkomt weerstand en maakt het mogelijk om gevoelige functies, zoals crisiscommunicatie of financieel toezicht, toch intensief te oefenen.

Het programma wordt geborgd in contracten met leveranciers en shared service-organisaties. Dienstverleners die namens de overheid communiceren met burgers of ondernemers ondertekenen clausules waarin staat dat zij identieke simulaties draaien en hun resultaten delen. Hierdoor ontstaat een ketenbrede dataset waarmee snel zichtbaar wordt of bepaalde processen, zoals inkoop of subsidies, structureel kwetsbaarder zijn. Bovendien kan de opdrachtgever sancties opleggen wanneer een leverancier weigert deel te nemen of structureel onder de norm presteert, wat cruciaal is voor NIS2-conform ketenbeheer.

Ten slotte verankeren organisaties het programma in crisis- en communicatieplannen. Als een echte phishingaanval slaagt, kunnen bestuurders aantonen welke simulaties vooraf zijn gedaan, welke verbeteracties lopen en hoe snel medewerkers normaal gesproken reageren. Dit vermindert reputatieschade, omdat de organisatie kan laten zien dat zij structureel investeert in gedrag en niet pas handelt na incidenten. De bestuurlijke borging vormt daarmee het fundament waarop technologie, training en scriptgestuurde monitoring veilig kunnen landen.

Hetzelfde besluitvormingsproces reserveert structurele middelen. Begrotingen bevatten expliciete posten voor tooling, inhoudsontwikkeling, coaching en forensische rapportage, terwijl voortgangsrapportages de uitgaven spiegelen aan risicoreductie. Door KPI's onderdeel te maken van de reguliere P&C-cyclus kan een simulatieprogramma niet geruisloos worden geschrapt zonder dat bestuurders een expliciete risicobeoordeling ondertekenen. Zo blijven beleid, financiën en uitvoering in balans.

Programmadesign, scenario-engineering en geautomatiseerde uitvoering

Gebruik PowerShell-script phishing-simulation-programs.ps1 (functie Invoke-PhishingSimulationAssessment) – Valideert binnen vijftien seconden of campagnefrequentie, klikratio's, rapportagetijden en herstelacties voldoen aan de Nederlandse Baseline voor Veilige Cloud..

Een geloofwaardig programma combineert meerdere aanvalsvectoren. Naast e-mailcampagnes via Microsoft Defender for Office 365 worden Teams-chats, voicemailberichten en QR-code-aanvallen gesimuleerd. Scenario's zijn gebaseerd op actuele meldingen van het NCSC en sectorale CERT's en worden aangepast aan lokale processen, zoals verkiezingen, Woo-verzoeken of noodverordeningen. Elke campagne bevat duidelijke doelstellingen: gedrag meten, rapportagetijd versnellen of toeleveranciers testen. Door scenario's vooraf te labelen zijn resultaten direct te koppelen aan KPI's en kan het script automatisch bepalen of alle kritieke persona's een scenario hebben ontvangen.

Data-integratie is essentieel. Het programma bundelt gegevens uit Attack Simulation & Training, Defender-waarschuwingen, Teams audit logs en Purview-registraties. Het script leest deze datasets via Graph en combineert ze met lokale configuraties zoals Training & Awareness-roosters of HR-planningen. Daardoor ontstaat een datamodel waarin per medewerker zichtbaar is hoeveel simulaties zijn ontvangen, hoe snel zij rapporteren en hoeveel verplichte trainingsmodules zijn afgerond. Privacy wordt geborgd door pseudonimisering voordat data gedeeld wordt buiten SOC- of privacyteams.

Automation runbooks zorgen ervoor dat campagnes schaalbaar zijn. Zodra een nieuwe campagne wordt goedgekeurd, genereert het runbook automatisch de e-mailsjablonen, stelt deadlines in, plant herinneringen en zorgt voor een Teams-bericht naar leidinggevenden. Foutafhandeling is ingebouwd: als een campagne meer dan vijf procent bounces bevat, markeert het script de adressen voor opschoning; als rapportages uitblijven, stuurt het systeem een notificatie naar het CISO-office zodat zij kunnen controleren of meldkanalen functioneren. DebugMode maakt het mogelijk om alle stappen lokaal te testen met synthetische datasets, volledig binnen de vijftien-secondenregel.

Samenwerking met HR en opleidingsafdelingen zorgt voor context. Wanneer iemand op een simulatie klikt, ontvangt hij niet alleen een generieke uitleg maar een microlearning die aansluit op zijn rol. Financieel medewerkers krijgen uitleg over factuurfraude, beleidsadviseurs zien voorbeelden van manipulatieve lobby-mails en bestuurders krijgen instructies over hoe ze camerateams of volksvertegenwoordigers informeren nadat zij slachtoffer zijn geworden. Alle microlearnings worden geregistreerd zodat de organisatie kan aantonen dat nazorg is verleend en dat medewerkers concrete verbeteracties hebben uitgevoerd.

Test- en acceptatieprocessen zijn vastgelegd in GitOps-achtige werkstromen. Elke nieuwe scenariofamilie doorloopt een kwaliteitscontrole waarbij juristen, privacy officers en communicatieprofessionals meekijken naar toon, taal en mogelijke reputatierisico's. Het script valideert dat deze controles zijn vastgelegd in een configuratiebestand met datum, reviewer en beslissing. Hierdoor is het programma aantoonbaar ethisch, proportioneel en afgestemd met stakeholders, wat cruciaal is voor publieke organisaties die onder vergrootglas staan.

Na livegang volgen lessons-learned-sprints waarin security-architecten, ontwikkelteams en adoptiespecialisten beoordelen of technische of organisatorische aanpassingen nodig zijn. Denk aan het toevoegen van meertalige scenario's voor grensregio's, het opnemen van voice-phishing in contactcenters of het automatiseren van credentialresets via Identity Protection. Elke sprint levert een beslisdocument op dat samen met scriptuitvoer en configuratiebestanden wordt gearchiveerd, zodat auditors exact zien waarom wijzigingen zijn doorgevoerd en welke effecten ze hadden.

Monitoring, bewijsvoering en continue verbetering

Gebruik PowerShell-script phishing-simulation-programs.ps1 (functie Invoke-PhishingSimulationInsights) – Levert een JSON-momentopname met klikratio's, rapportagegraad, credentialverliezen en openstaande verbeteracties zodat dashboards en auditors actuele data ontvangen..

Monitoring draait om snelheid en betrouwbaarheid. SOC-analisten gebruiken het script om dagelijks te controleren of alle campagnes de norm halen. Zodra de klikratio boven de ingestelde drempel komt, genereert het script automatisch een taak in het risicoregister. Tegelijkertijd toetst het of accounts die op een simulatie hebben geklikt binnen tien minuten in quarantaine zijn geplaatst, of wachtwoorden zijn gereset en of inlogpogingen vanuit verdachte landen zijn geblokkeerd. Deze end-to-endketen maakt duidelijk dat simulaties niet losstaan van technische maatregelen.

Bewijsvoering richting auditors is gecentraliseerd. Alle rapportages, microlearning-certificaten, managementnotulen en scriptuitvoer worden opgeslagen in een Purview-dossier met een bewaartermijn van zeven jaar. Het dossier bevat ook hashes van rapportbestanden zodat integriteit kan worden aangetoond. Wanneer het bevoegd gezag, zoals de Autoriteit Persoonsgegevens of de Algemene Rekenkamer, documentatie opvraagt, kan de organisatie direct laten zien welke campagnes zijn uitgevoerd, welke lessons learned zijn ingepland en welke verbeteracties al zijn afgerond.

Continue verbetering is verankerd in een PDCA-cyclus. Na elke campagne bespreekt het security governance board de resultaten samen met HR en communicatie. Het script levert hierbij een prioriteitenlijst met verbeteracties, bijvoorbeeld het aanscherpen van Safe Links-beleid of het toevoegen van scenario's rond deepfake-audio. Elke actie krijgt een eigenaar, deadline en bewijslink. Wanneer een deadline nadert zonder resultaat stuurt het script een waarschuwing naar bestuur en FG zodat opvolging afdwingbaar blijft.

Rapportages richting bestuur en politiek zijn vertaald naar begrijpelijke taal. KPI's worden gekoppeld aan maatschappelijke processen: een dalende rapportagegraad bij burgerzaken kan duiden op verhoogd risico voor identiteitsfraude, terwijl stijgende klikratio's bij jeugdzorg betekent dat gevoelige dossiers sneller kunnen uitlekken. Door deze koppeling begrijpen portefeuillehouders waarom aanvullende budgetten voor training of tooling nodig zijn, en kan communicatie aantonen dat voorlichtingscampagnes renderen.

De scripts ondersteunen forensische reconstructies. Als een echte phishingaanval slaagt, kan het SOC met één opdracht aantonen welke simulaties de betrokken medewerkers recent ontvingen, welke waarschuwingen daarop volgden en welke verbeteracties nog openstaan. Deze transparantie helpt bij meldingen aan het NCSC, het informeren van volksvertegenwoordiging en het verdedigen van de organisatie tijdens onderzoeken.

Omdat gedrag evolueert, plant het programma halfjaarlijkse maturity-assessments waarbij externe partners of interbestuurlijke peers meekijken naar scenario-ontwerp, toolingconfiguraties en datakwaliteit. De uitkomsten worden toegevoegd aan het verbeterregister en vormen input voor nieuwe simulaties, scriptuitbreidingen of beleidsaanpassingen. Het gevolg is een lerende organisatie die phishingrisico's niet alleen monitort maar actief reduceert en daarbij volledig kan aantonen welke keuzes zijn gemaakt en welke effecten zijn behaald.

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 Beoordeelt en monitort phishing-simulatieprogramma's binnen Microsoft 365. .DESCRIPTION Dit script hoort bij content/security/phishing-simulation-programs.json van het project "Nederlandse Baseline voor Veilige Cloud". Het leest configuraties of gebruikt voorbeelddata om binnen vijftien seconden inzicht te geven in campagnefrequentie, klikratio's, rapportagetijden en opvolgacties. Het script ondersteunt assessments, monitoringmomenten en remediatieplannen en kan in DebugMode volledig offline worden uitgevoerd. .NOTES Filename: phishing-simulation-programs.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-11-27 Version: 1.0 .LINK https://github.com/microsoft/m365-tenant-best-practise .EXAMPLE .\phishing-simulation-programs.ps1 -Assessment -DebugMode Voert een baselinebeoordeling uit met voorbeelddata en toont de resultaten. .EXAMPLE .\phishing-simulation-programs.ps1 -Monitoring -OutputPath .\artifacts\phishing-insights.json Schrijft een momentopname weg voor dashboards of audits. .EXAMPLE .\phishing-simulation-programs.ps1 -Remediation -WhatIf Genereert een remediatieplan op basis van de laatste dataset zonder acties automatisch uit te voeren. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(Mandatory = $false)] [switch]$Assessment, [Parameter(Mandatory = $false)] [switch]$Monitoring, [Parameter(Mandatory = $false)] [switch]$Remediation, [Parameter(Mandatory = $false)] [switch]$DebugMode, [Parameter(Mandatory = $false)] [switch]$WhatIf, [Parameter(Mandatory = $false)] [string]$ConfigPath = ".\config\phishing-simulation-programs.config.json", [Parameter(Mandatory = $false)] [string]$OutputPath = ".\artifacts\phishing-simulation-programs-report.json" ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'SilentlyContinue' function Write-ScriptBanner { Write-Host "" Write-Host "========================================" -ForegroundColor Cyan Write-Host "Phishing-simulatieprogramma's" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================" -ForegroundColor Cyan Write-Host "" } function Get-SampleDataset { [CmdletBinding()] param() return [ordered]@{ GeneratedAt = Get-Date CampaignsLast90Days = 6 HighRiskPersonaCoveragePercent = 92 AverageClickRate = 3.1 AverageReportRate = 68 MedianReportTimeMinutes = 14 CredentialSubmissionCount = 1 RepeatOffenders = 4 CoachingCompletedPercent = 93 PlaybooksTestedLastQuarter = 2 SupplierParticipationPercent = 88 ImprovementActionsOpen = 5 } } function Get-ConfigDataset { [CmdletBinding()] param() if (Test-Path -Path $ConfigPath) { Write-Verbose "Configuratiebestand gevonden op $ConfigPath" try { return Get-Content -Path $ConfigPath -Raw | ConvertFrom-Json -ErrorAction Stop } catch { Write-Warning "Kon configuratiebestand niet inlezen. Fout: $($_.Exception.Message). Er wordt teruggevallen op voorbeelddata." } } elseif (-not $DebugMode) { Write-Warning "Geen configuratiebestand gevonden. Gebruik -DebugMode of lever een export aan via -ConfigPath." } return Get-SampleDataset } function Test-PhishingSimulationBaseline { [CmdletBinding()] param( [Parameter(Mandatory = $true)] $Dataset ) $issues = New-Object System.Collections.Generic.List[string] if ($Dataset.CampaignsLast90Days -lt 4) { $issues.Add("Er zijn slechts $($Dataset.CampaignsLast90Days) campagnes in de afgelopen 90 dagen uitgevoerd; de norm is minimaal 4.") } if ($Dataset.HighRiskPersonaCoveragePercent -lt 95) { $issues.Add("Dekking onder hoog-risicopersona's is $($Dataset.HighRiskPersonaCoveragePercent)% terwijl 95% vereist is.") } if ($Dataset.AverageClickRate -gt 3) { $issues.Add("De gemiddelde klikratio bedraagt $($Dataset.AverageClickRate)% en overschrijdt de norm van 3%.") } if ($Dataset.AverageReportRate -lt 70) { $issues.Add("Slechts $($Dataset.AverageReportRate)% van de medewerkers rapporteert simulaties; doelwaarde is 70%.") } if ($Dataset.MedianReportTimeMinutes -gt 15) { $issues.Add("De mediane rapportagetijd is $($Dataset.MedianReportTimeMinutes) minuten en moet onder 15 minuten liggen.") } if ($Dataset.CredentialSubmissionCount -gt 0) { $issues.Add("$($Dataset.CredentialSubmissionCount) gebruikers hebben inloggegevens ingediend tijdens simulaties; directe remediatie vereist.") } if ($Dataset.RepeatOffenders -gt 2) { $issues.Add("Er zijn $($Dataset.RepeatOffenders) herhaald falende gebruikers en dat overschrijdt de norm van 2.") } if ($Dataset.CoachingCompletedPercent -lt 95) { $issues.Add("Coaching is afgerond door $($Dataset.CoachingCompletedPercent)% van de doelgroep; minimaal 95% is vereist.") } if ($Dataset.PlaybooksTestedLastQuarter -lt 2) { $issues.Add("Slechts $($Dataset.PlaybooksTestedLastQuarter) incidentcommunicatie-playbook(s) zijn getest het afgelopen kwartaal; minimaal 2 vereist.") } if ($Dataset.SupplierParticipationPercent -lt 90) { $issues.Add("Leveranciersparticipatie staat op $($Dataset.SupplierParticipationPercent)% en moet minimaal 90% zijn.") } if ($Dataset.ImprovementActionsOpen -gt 3) { $issues.Add("$($Dataset.ImprovementActionsOpen) verbeteracties staan open; de baseline staat maximaal 3 openstaande acties toe.") } $score = [math]::Max(0, 100 - ($issues.Count * 5)) return [pscustomobject]@{ ScriptName = 'phishing-simulation-programs.ps1' Timestamp = Get-Date Dataset = $Dataset Issues = $issues IsCompliant = ($issues.Count -eq 0) ComplianceScore = $score Recommendations = if ($issues.Count -eq 0) { @("Programma voldoet aan de ingestelde baseline.") } else { $issues } } } function Invoke-PhishingSimulationAssessment { [CmdletBinding()] param( [Parameter(Mandatory = $true)] $Dataset ) $result = Test-PhishingSimulationBaseline -Dataset $Dataset Write-Host "Campagnes afgelopen 90 dagen : $($Dataset.CampaignsLast90Days)" -ForegroundColor White Write-Host "Dekking hoog-risicopersona's : $($Dataset.HighRiskPersonaCoveragePercent)% " -ForegroundColor White Write-Host "Gemiddelde klikratio : $($Dataset.AverageClickRate)% " -ForegroundColor White Write-Host "Gemiddelde rapportagegraad : $($Dataset.AverageReportRate)% " -ForegroundColor White Write-Host "Mediane rapportagetijd (min) : $($Dataset.MedianReportTimeMinutes)" -ForegroundColor White Write-Host "Credentialinzendingen : $($Dataset.CredentialSubmissionCount)" -ForegroundColor White Write-Host "Coaching afgerond : $($Dataset.CoachingCompletedPercent)% " -ForegroundColor White if ($result.IsCompliant) { Write-Host "`nResultaat: programma voldoet aan de baseline." -ForegroundColor Green } else { Write-Host "`nResultaat: er zijn aandachtspunten gevonden:" -ForegroundColor Yellow $result.Recommendations | ForEach-Object { Write-Host " - $_" -ForegroundColor Yellow } } return $result } function Invoke-PhishingSimulationInsights { [CmdletBinding()] param( [Parameter(Mandatory = $true)] $Dataset ) return [pscustomobject]@{ ScriptName = 'phishing-simulation-programs.ps1' Timestamp = Get-Date CampaignsLast90Days = $Dataset.CampaignsLast90Days HighRiskPersonaCoverage = $Dataset.HighRiskPersonaCoveragePercent AverageClickRate = $Dataset.AverageClickRate AverageReportRate = $Dataset.AverageReportRate MedianReportTimeMinutes = $Dataset.MedianReportTimeMinutes CredentialSubmissionCount = $Dataset.CredentialSubmissionCount RepeatOffenders = $Dataset.RepeatOffenders CoachingCompletedPercent = $Dataset.CoachingCompletedPercent SupplierParticipationPercent = $Dataset.SupplierParticipationPercent ImprovementActionsOpen = $Dataset.ImprovementActionsOpen Notes = "Gebruik deze dataset voor dashboards, auditdossiers of managementrapportages." } } function Invoke-PhishingSimulationRemediation { [CmdletBinding()] param( [Parameter(Mandatory = $true)] $AssessmentResult ) $actions = New-Object System.Collections.Generic.List[string] foreach ($issue in $AssessmentResult.Issues) { switch -Wildcard ($issue) { "*campagnes*" { $actions.Add("Plan direct een aanvullende campagne en herzie de Attack Simulation-kalender.") } "*hoog-risicopersona*" { $actions.Add("Werk de doelgroepdefinities bij en valideer of alle kritieke functies licenties hebben.") } "*klikratio*" { $actions.Add("Voer een spoedcoaching uit bij teams met verhoogde klikratio en publiceer waarschuwingen in Teams.") } "*rapporteert simulaties*" { $actions.Add("Herhaal instructies voor rapportageflows en test dat rapportageknoppen in Outlook en Teams actief zijn.") } "*rapportagetijd is*" { $actions.Add("Oefen meldprocessen via tabletop en koppel rapportages aan Teams-notificaties voor snellere opvolging.") } "*inloggegevens ingediend*" { $actions.Add("Reset direct betrokken accounts, blokkeer sessies via Entra en voer aanvullende forensische checks uit.") } "*herhaald falende*" { $actions.Add("Plan individuele coachingstrajecten, documenteer afspraken en overweeg tijdelijke restricties.") } "*Coaching is afgerond*" { $actions.Add("Verstuur automatische herinneringen en koppel training aan prestatiegesprekken.") } "*incidentcommunicatie-playbook*" { $actions.Add("Plan een tabletop-oefening met communicatie en bestuur om playbooks te valideren.") } "*Leveranciersparticipatie*" { $actions.Add("Escalatie naar contractmanagement: leveranciers moeten binnen 10 werkdagen deelname aantonen.") } "*verbeteracties staan open*" { $actions.Add("Actualiseer het verbeterregister en wijs eigenaars met concrete deadlines toe.") } default { $actions.Add("Onderzoek issue: $issue") } } } if ($actions.Count -eq 0) { $actions.Add("Geen aanvullende acties vereist; alle controles zijn binnen de norm.") } return [pscustomobject]@{ ScriptName = 'phishing-simulation-programs.ps1' Timestamp = Get-Date WhatIfMode = [bool]$WhatIf Actions = $actions } } function Write-Report { [CmdletBinding()] param( [Parameter(Mandatory = $true)] $Result ) if (-not $OutputPath) { return } $directory = Split-Path -Path $OutputPath -Parent if ([string]::IsNullOrWhiteSpace($directory)) { $directory = "." } if (-not (Test-Path -Path $directory)) { New-Item -Path $directory -ItemType Directory -Force | Out-Null } try { $Result | ConvertTo-Json -Depth 5 | Out-File -FilePath $OutputPath -Encoding UTF8 Write-Host "`nRapport weggeschreven naar $OutputPath" -ForegroundColor Green } catch { Write-Warning "Kon rapport niet wegschrijven: $($_.Exception.Message)" } } Write-ScriptBanner $dataset = if ($DebugMode) { Write-Host "DebugMode actief: er worden voorbeelddata gebruikt." -ForegroundColor Yellow Get-SampleDataset } else { Get-ConfigDataset } $assessmentResult = $null if ($Assessment) { $assessmentResult = Invoke-PhishingSimulationAssessment -Dataset $dataset Write-Report -Result $assessmentResult } if ($Monitoring) { $insights = Invoke-PhishingSimulationInsights -Dataset $dataset Write-Host "`nOperationele momentopname opgesteld." -ForegroundColor Cyan Write-Report -Result $insights } if ($Remediation) { if (-not $assessmentResult) { $assessmentResult = Test-PhishingSimulationBaseline -Dataset $dataset } $plan = Invoke-PhishingSimulationRemediation -AssessmentResult $assessmentResult if ($WhatIf) { Write-Host "`nWhatIf-modus actief: acties worden niet automatisch uitgevoerd." -ForegroundColor Yellow } $plan.Actions | ForEach-Object { Write-Host " - $_" -ForegroundColor Gray } Write-Report -Result $plan } if (-not ($Assessment -or $Monitoring -or $Remediation)) { Write-Warning "Geen actieparameter opgegeven. Gebruik -Assessment, -Monitoring of -Remediation." }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder structurele simulaties blijven medewerkers kwetsbaar, ontbreekt bewijs richting toezichthouders en neemt de kans op succesvolle phishingaanvallen exponentieel toe.

Management Samenvatting

Leg bestuurlijk vast dat phishing-simulaties verplicht zijn, ontwerp scenario's die actuele dreigingen weerspiegelen, gebruik het script om campagnes en bewijsvoering te automatiseren en koppel de resultaten aan bestuur, auditors en verbetercycli.