Procedures Voor Leveranciersincidenten In Microsoft 365

💼 Management Samenvatting

Wanneer een beveiligingsincident plaatsvindt bij een leverancier die toegang heeft tot of integreert met de Microsoft 365-omgeving van een Nederlandse overheidsorganisatie, kan dit directe gevolgen hebben voor de beveiliging, privacy en compliance van de organisatie zelf. Leveranciersincidenten kunnen variëren van datalekken bij de leverancier waarbij persoonsgegevens van de organisatie zijn betrokken, tot beveiligingsincidenten waarbij de leverancier zelf is gecompromitteerd en mogelijk toegang heeft tot systemen of gegevens van de organisatie. Het ontbreken van duidelijke procedures voor het omgaan met leveranciersincidenten kan leiden tot vertragingen in incidentresponse, onvoldoende bescherming van gegevens, niet-naleving van meldplichten onder de AVG of NIS2, en verhoogd risico op verdere schade. Dit artikel beschrijft hoe Nederlandse overheidsorganisaties gestructureerde procedures inrichten voor het detecteren, beoordelen, reageren op en leren van beveiligingsincidenten die betrekking hebben op leveranciers binnen hun Microsoft 365-omgeving.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
130u (tech: 50u)
Van toepassing op:
M365
Publieke Sector
Overheidsorganisaties

De noodzaak voor effectieve procedures voor leveranciersincidenten wordt gedreven door meerdere factoren. Ten eerste stellen wet- en regelgeving zoals de Algemene Verordening Gegevensbescherming (AVG) en de NIS2-richtlijn expliciete eisen aan organisaties om beveiligingsincidenten tijdig te melden aan toezichthouders en betrokkenen. Wanneer een incident bij een leverancier impact heeft op de organisatie, moet de organisatie kunnen aantonen dat zij tijdig heeft gereageerd, passende maatregelen heeft genomen, en heeft voldaan aan alle meldplichten. Artikel 33 van de AVG vereist bijvoorbeeld dat organisaties een datalek melden aan de Autoriteit Persoonsgegevens binnen 72 uur na ontdekking, en artikel 34 vereist dat betrokkenen worden geïnformeerd wanneer het datalek waarschijnlijk een hoog risico inhoudt voor hun rechten en vrijheden. Wanneer een leverancier een datalek heeft waarbij persoonsgegevens van de organisatie zijn betrokken, moet de organisatie kunnen aantonen dat zij tijdig op de hoogte is gesteld, passende maatregelen heeft genomen, en heeft voldaan aan meldplichten. Ten tweede kunnen leveranciersincidenten directe gevolgen hebben voor de beveiliging van de organisatie. Wanneer een leverancier is gecompromitteerd en toegang heeft tot systemen of gegevens van de organisatie, kan dit leiden tot verdere compromittering van de organisatie zelf. Het is daarom essentieel dat organisaties snel kunnen reageren op leveranciersincidenten, toegang kunnen beperken of intrekken, en kunnen monitoren op verdere activiteit. Ten derde kan het ontbreken van goede procedures leiden tot vertragingen in incidentresponse, onvoldoende bescherming van gegevens, niet-naleving van meldplichten, en verhoogd risico op reputatieschade wanneer blijkt dat de organisatie niet adequaat heeft gereageerd op een leveranciersincident.

PowerShell Modules Vereist
Primary API: Microsoft Graph API
Connection: Connect-MgGraph
Required Modules: Microsoft.Graph

Implementatie

Dit artikel beschrijft een gestructureerde aanpak voor het omgaan met leveranciersincidenten binnen Microsoft 365. We beginnen met de juridische en compliance-achtergrond: welke eisen stellen de AVG, BIO en NIS2 aan incidentresponse en meldplichten, en hoe verhoudt dit zich tot leveranciersincidenten. Vervolgens gaan we in op incidentdetectie: hoe detecteert u leveranciersincidenten, welke informatiebronnen zijn beschikbaar, en hoe stelt u een detectiesysteem in. We behandelen incidentbeoordeling: hoe beoordeelt u de impact van een leveranciersincident op de organisatie, welke gegevens zijn mogelijk betrokken, en wat is de ernst van het incident. Daarnaast bespreken we incidentresponse: welke maatregelen moeten worden genomen wanneer een leveranciersincident wordt gedetecteerd, hoe beperkt of trekt u toegang in, en hoe monitort u op verdere activiteit. Tot slot behandelen we post-incidentactiviteiten: hoe leert u van leveranciersincidenten, hoe verbetert u procedures, en hoe documenteert u incidenten voor auditdoeleinden. Het resultaat is een volwassen proces waarin de organisatie proactief en aantoonbaar omgaat met leveranciersincidenten en daarmee voldoet aan haar verantwoordelijkheden onder wet- en regelgeving.

De juridische basis voor procedures voor leveranciersincidenten binnen Microsoft 365 is gelegen in meerdere wet- en regelgevingskaders die van toepassing zijn op Nederlandse overheidsorganisaties. De Algemene Verordening Gegevensbescherming (AVG) stelt in artikel 33 expliciete eisen aan de melding van datalekken aan de Autoriteit Persoonsgegevens binnen 72 uur na ontdekking, en artikel 34 vereist dat betrokkenen worden geïnformeerd wanneer het datalek waarschijnlijk een hoog risico inhoudt voor hun rechten en vrijheden. Wanneer een leverancier een datalek heeft waarbij persoonsgegevens van de organisatie zijn betrokken, moet de organisatie kunnen aantonen dat zij tijdig op de hoogte is gesteld van het incident, passende maatregelen heeft genomen om de impact te beperken, en heeft voldaan aan alle meldplichten. Artikel 32 van de AVG voegt hieraan toe dat organisaties passende technische en organisatorische maatregelen moeten treffen om persoonsgegevens te beveiligen, waarbij rekening moet worden gehouden met de risico's die voortvloeien uit verwerking door leveranciers. Voor Nederlandse overheidsorganisaties betekent dit dat zij niet alleen contractuele waarborgen moeten hebben met leveranciers over incidentmelding, maar ook moeten kunnen aantonen dat zij procedures hebben voor het omgaan met leveranciersincidenten, dat zij tijdig kunnen reageren, en dat zij kunnen voldoen aan meldplichten.

De Baseline Informatiebeveiliging Overheid (BIO) stelt aanvullende eisen aan incidentmanagement en meldplichten. BIO-norm 16.01 vereist dat organisaties een incidentmanagementframework moeten hebben dat beschrijft hoe beveiligingsincidenten worden gedetecteerd, beoordeeld, gereageerd en gedocumenteerd. De BIO benadrukt dat incidentmanagement niet alleen betrekking heeft op interne incidenten, maar ook op incidenten bij leveranciers die impact kunnen hebben op de organisatie. Dit betekent dat organisaties procedures moeten hebben voor het omgaan met leveranciersincidenten, dat zij moeten kunnen aantonen dat zij tijdig hebben gereageerd, en dat zij incidenten moeten documenteren voor auditdoeleinden. De NIS2-richtlijn, die in Nederland is geïmplementeerd via de Wet beveiliging netwerk- en informatiesystemen (Wbni), stelt specifieke eisen aan incidentmelding voor essentiële en belangrijke entiteiten. Artikel 23 van NIS2 vereist dat organisaties ernstige incidenten melden aan de bevoegde autoriteit binnen 24 uur na ontdekking, en dat zij follow-up informatie verstrekken wanneer dit beschikbaar komt. Wanneer een leveranciersincident wordt geclassificeerd als een ernstig incident onder NIS2, moet de organisatie kunnen aantonen dat zij tijdig heeft gereageerd en heeft voldaan aan meldplichten.

Naast deze primaire wet- en regelgevingskaders spelen ook sectorale richtlijnen en best practices een rol. De ISO 27001-norm voor informatiebeveiligingsmanagementsystemen bevat specifieke controls voor incidentmanagement (A.16.1), waarbij vereist wordt dat organisaties procedures hebben voor het detecteren, beoordelen en reageren op beveiligingsincidenten, en dat incidenten worden gedocumenteerd en geanalyseerd voor verbetering. De Nederlandse overheidspraktijk, zoals vastgelegd in richtlijnen van het Nationaal Cyber Security Centrum (NCSC) en de Informatiebeveiligingsdienst voor Rijk en IOP (IBD), benadrukt het belang van snelle incidentresponse, duidelijke communicatie met leveranciers, en proactieve monitoring op verdere activiteit. Voor Nederlandse overheidsorganisaties betekent dit dat procedures voor leveranciersincidenten niet alleen een compliancekwestie zijn, maar ook een integraal onderdeel van het incidentmanagement- en risicomanagementproces. Het proces moet daarom worden afgestemd met de CISO, het Computer Security Incident Response Team (CSIRT), de Functionaris Gegevensbescherming, de risicomanager, en eventueel de contractmanager die verantwoordelijk is voor communicatie met leveranciers. Door deze verschillende perspectieven te combineren ontstaat een holistische benadering waarin juridische verplichtingen, beveiligingsrisico's en praktische haalbaarheid met elkaar in balans worden gebracht.

Detectie van leveranciersincidenten

Effectieve procedures voor leveranciersincidenten beginnen met het tijdig detecteren van incidenten die betrekking hebben op leveranciers. Dit proces vereist meerdere informatiebronnen en detectiemechanismen, omdat leveranciersincidenten op verschillende manieren kunnen worden ontdekt. Ten eerste contractuele meldplichten: veel contracten met leveranciers bevatten bepalingen die vereisen dat leveranciers beveiligingsincidenten die impact kunnen hebben op de organisatie binnen een bepaalde termijn melden, bijvoorbeeld binnen 24 of 48 uur na ontdekking. Deze contractuele meldplichten moeten worden gedocumenteerd en gecommuniceerd met leveranciers, zodat leveranciers weten wanneer en hoe zij moeten melden. Het is belangrijk om periodiek te verifiëren of leveranciers daadwerkelijk voldoen aan deze meldplichten, en om te monitoren op incidenten die mogelijk niet zijn gemeld. Ten tweede publieke bronnen: beveiligingsincidenten bij leveranciers worden vaak gemeld in nieuwsmedia, security advisories, of via meldingen van toezichthouders zoals de Autoriteit Persoonsgegevens. Organisaties moeten daarom proactief monitoren op nieuws over beveiligingsincidenten bij leveranciers, bijvoorbeeld door te abonneren op security advisories, door periodiek te zoeken naar nieuws over leveranciers, of door gebruik te maken van threat intelligence feeds die informatie bevatten over beveiligingsincidenten bij leveranciers.

Ten derde technische detectie: organisaties kunnen technische signalen detecteren die kunnen wijzen op een leveranciersincident, bijvoorbeeld ongebruikelijke activiteiten van leveranciersaccounts, ongebruikelijke API-aanroepen, of ongebruikelijke toegangspatronen. Het bijbehorende PowerShell-script ondersteunt dit proces door automatisch te monitoren op verdachte activiteiten van leveranciers, door toegangspatronen te analyseren, en door alerts te genereren wanneer ongebruikelijke activiteiten worden gedetecteerd. Het script doorzoekt Azure Active Directory op leveranciersaccounts en externe toegang, analyseert API-aanroepen en service principal activiteiten, controleert externe toegang tot SharePoint-sites en Teams-kanalen, en vergelijkt de actuele situatie met historische patronen om afwijkingen te detecteren. Wanneer verdachte activiteiten worden gedetecteerd, genereert het script alerts die aangeven welke leveranciers mogelijk betrokken zijn bij een incident, welke activiteiten verdacht zijn, en welke maatregelen nodig zijn. Ten vierde meldingen van eindgebruikers: eindgebruikers kunnen soms als eerste signalen opmerken die kunnen wijzen op een leveranciersincident, bijvoorbeeld wanneer zij ongebruikelijke activiteiten opmerken, wanneer zij meldingen ontvangen over beveiligingsincidenten, of wanneer zij problemen ervaren met diensten van leveranciers. Het is daarom belangrijk om een duidelijk meldpunt te hebben waar eindgebruikers verdachte activiteiten kunnen melden, en om deze meldingen serieus te nemen en te onderzoeken.

Het detectieproces moet worden gedocumenteerd in een procedure die beschrijft welke informatiebronnen worden gemonitord, hoe vaak monitoring plaatsvindt, wie verantwoordelijk is voor monitoring, en hoe detecties worden geëscaleerd naar het incidentresponse-team. Het proces moet worden geïntegreerd met andere processen zoals threat intelligence, security monitoring, en contractbeheer, zodat leveranciersincidenten tijdig worden gedetecteerd en geëscaleerd. Het bijbehorende PowerShell-script kan worden geconfigureerd om periodiek te draaien, bijvoorbeeld dagelijks of wekelijks, en om automatisch alerts te genereren wanneer verdachte activiteiten worden gedetecteerd. Deze alerts kunnen worden geïntegreerd met Microsoft Sentinel of andere security information and event management (SIEM) systemen, zodat incidentresponse-teams tijdig worden geïnformeerd over mogelijke leveranciersincidenten.

Beoordeling van leveranciersincidenten

Wanneer een leveranciersincident wordt gedetecteerd, moet snel worden beoordeeld wat de impact is op de organisatie en welke maatregelen nodig zijn. Dit beoordelingsproces begint met het verzamelen van informatie over het incident: wat is de aard van het incident, wanneer heeft het plaatsgevonden, welke systemen of gegevens zijn mogelijk betrokken, en wat is de actuele status van het incident? Deze informatie kan worden verkregen via direct contact met de leverancier, via publieke bronnen, of via technische analyse van activiteiten en toegang. Het is belangrijk om snel en accuraat informatie te verzamelen, omdat dit de basis vormt voor alle verdere beslissingen. Vervolgens moet worden beoordeeld welke gegevens mogelijk zijn betrokken: heeft het incident betrekking op persoonsgegevens van de organisatie, welke categorieën persoonsgegevens zijn mogelijk betrokken, en hoeveel betrokkenen zijn mogelijk getroffen? Deze beoordeling is essentieel voor het bepalen of meldplichten onder de AVG van toepassing zijn, en voor het bepalen van de ernst van het incident. Wanneer persoonsgegevens zijn betrokken, moet worden beoordeeld of het datalek waarschijnlijk een hoog risico inhoudt voor de rechten en vrijheden van betrokkenen, wat bepaalt of betrokkenen moeten worden geïnformeerd onder artikel 34 van de AVG.

Daarnaast moet worden beoordeeld wat de beveiligingsimpact is: heeft de leverancier toegang tot systemen of gegevens van de organisatie, is deze toegang mogelijk gecompromitteerd, en wat is het risico op verdere compromittering van de organisatie? Deze beoordeling is essentieel voor het bepalen welke containmentmaatregelen nodig zijn, bijvoorbeeld het intrekken van toegang, het isoleren van systemen, of het monitoren op verdere activiteit. Wanneer de leverancier toegang heeft tot systemen of gegevens van de organisatie en mogelijk is gecompromitteerd, moet snel worden besloten of toegang moet worden beperkt of ingetrokken, en welke monitoringmaatregelen nodig zijn. Tot slot moet worden beoordeeld of het incident moet worden gemeld onder NIS2: is het incident geclassificeerd als een ernstig incident onder NIS2, en wat is de meldtermijn? Wanneer het incident wordt geclassificeerd als een ernstig incident onder NIS2, moet het binnen 24 uur worden gemeld aan de bevoegde autoriteit, en moet follow-up informatie worden verstrekt wanneer dit beschikbaar komt.

Het beoordelingsproces moet worden uitgevoerd door een multidisciplinair team dat bestaat uit de CISO, het CSIRT, de Functionaris Gegevensbescherming, de risicomanager, en eventueel de contractmanager. Het team moet snel kunnen beslissen over de ernst van het incident, welke maatregelen nodig zijn, en of meldplichten van toepassing zijn. Het proces moet worden gedocumenteerd, zodat bij een audit of toezicht kan worden aangetoond dat de organisatie tijdig en adequaat heeft gereageerd op het leveranciersincident. Het bijbehorende PowerShell-script ondersteunt dit proces door automatisch informatie te verzamelen over leveranciersactiviteiten, door toegangspatronen te analyseren, en door rapportages te genereren die aangeven welke gegevens mogelijk zijn betrokken en welke maatregelen nodig zijn. Deze rapportages kunnen worden gebruikt voor de beoordeling van het incident en voor het bepalen van de volgende stappen.

Response op leveranciersincidenten

Gebruik PowerShell-script vendor-incident-procedures.ps1 (functie Invoke-VendorIncidentResponse) – Ondersteunt het responseproces op leveranciersincidenten door toegang te analyseren, containmentmaatregelen voor te stellen, en monitoring in te stellen. Ondersteunt zowel veilige lokale debug-tests als live monitoring via Microsoft Graph API..

Wanneer een leveranciersincident wordt beoordeeld als een incident dat impact heeft op de organisatie, moeten passende responsemaatregelen worden genomen om de impact te beperken en verdere schade te voorkomen. Dit responseproces begint met containmentmaatregelen: welke toegang moet worden beperkt of ingetrokken, welke systemen moeten worden geïsoleerd, en welke monitoringmaatregelen moeten worden ingesteld? Wanneer de leverancier toegang heeft tot systemen of gegevens van de organisatie en mogelijk is gecompromitteerd, moet snel worden besloten of toegang moet worden beperkt of ingetrokken. Dit kan bijvoorbeeld bestaan uit het intrekken van OAuth-tokens, het deactiveren van service principals, het verwijderen van gastaccounts, of het beperken van externe toegang tot SharePoint-sites of Teams-kanalen. Het bijbehorende PowerShell-script ondersteunt dit proces door automatisch toegang te analyseren, door containmentmaatregelen voor te stellen, en door monitoring in te stellen op verdere activiteit. Het script kan worden gebruikt om toegang te beperken of in te trekken, om alerts te configureren, en om rapportages te genereren over genomen maatregelen.

Vervolgens moeten meldplichten worden nagekomen: moet het incident worden gemeld aan de Autoriteit Persoonsgegevens onder artikel 33 van de AVG, moeten betrokkenen worden geïnformeerd onder artikel 34 van de AVG, en moet het incident worden gemeld aan de bevoegde autoriteit onder NIS2? Deze meldplichten moeten worden nagekomen binnen de gestelde termijnen, en alle communicatie moet worden gedocumenteerd voor auditdoeleinden. Wanneer persoonsgegevens zijn betrokken en het datalek waarschijnlijk een hoog risico inhoudt voor de rechten en vrijheden van betrokkenen, moeten betrokkenen worden geïnformeerd zonder onredelijke vertraging, en moet worden uitgelegd wat de aard van het incident is, welke gegevens zijn betrokken, en welke maatregelen zijn genomen. Daarnaast moet worden gecommuniceerd met de leverancier: wat verwacht de organisatie van de leverancier, welke informatie heeft de organisatie nodig, en hoe wordt de communicatie gecoördineerd? Het is belangrijk om duidelijke communicatielijnen te hebben met leveranciers, zodat informatie snel kan worden uitgewisseld en maatregelen kunnen worden gecoördineerd.

Tot slot moet worden gemonitord op verdere activiteit: zijn er tekenen van verdere compromittering, zijn er nieuwe verdachte activiteiten, en zijn de genomen maatregelen effectief? Het bijbehorende PowerShell-script kan worden gebruikt om continue monitoring in te stellen op leveranciersactiviteiten, om alerts te configureren wanneer verdachte activiteiten worden gedetecteerd, en om rapportages te genereren over de status van het incident. Het responseproces moet worden gedocumenteerd, zodat bij een audit of toezicht kan worden aangetoond dat de organisatie tijdig en adequaat heeft gereageerd op het leveranciersincident. Alle genomen maatregelen, communicatie met leveranciers, en meldingen aan toezichthouders moeten worden gedocumenteerd en gearchiveerd voor auditdoeleinden.

Post-incidentactiviteiten en lessen leren

Na het afhandelen van een leveranciersincident moeten post-incidentactiviteiten worden uitgevoerd om te leren van het incident en om procedures te verbeteren. Dit proces begint met een post-incidentanalyse: wat waren de oorzaken van het incident, hoe is het incident gedetecteerd, hoe is erop gereageerd, en wat waren de effectiviteit van genomen maatregelen? Deze analyse moet worden uitgevoerd door een multidisciplinair team dat bestaat uit de CISO, het CSIRT, de Functionaris Gegevensbescherming, en eventueel de contractmanager. Het doel is om te identificeren wat goed is gegaan, wat beter had gekund, en welke verbetermaatregelen nodig zijn. De analyse moet worden gedocumenteerd in een post-incidentrapport dat beschrijft wat het incident was, hoe het is gedetecteerd en gereageerd, welke maatregelen zijn genomen, en welke lessen zijn geleerd.

Vervolgens moeten verbetermaatregelen worden geïmplementeerd: welke procedures moeten worden verbeterd, welke detectiemechanismen moeten worden versterkt, en welke contractuele bepalingen moeten worden aangescherpt? Deze verbetermaatregelen moeten worden geïmplementeerd op basis van de lessen die zijn geleerd uit het incident, en moeten worden gemonitord om te verifiëren dat zij effectief zijn. Wanneer bijvoorbeeld blijkt dat een leverancier niet tijdig heeft gemeld, kunnen contractuele bepalingen worden aangescherpt om snellere melding te vereisen. Wanneer blijkt dat detectiemechanismen onvoldoende zijn, kunnen aanvullende monitoringtools worden geïmplementeerd. Wanneer blijkt dat responseprocedures onduidelijk waren, kunnen procedures worden verbeterd en training worden gegeven. Tot slot moeten incidenten worden gedocumenteerd voor auditdoeleinden: alle informatie over het incident, de response, en de post-incidentactiviteiten moet worden gearchiveerd conform het archiefschema van de organisatie. Deze documentatie is essentieel voor het aantonen bij audits of toezicht dat de organisatie adequaat heeft gereageerd op leveranciersincidenten en dat procedures continu worden verbeterd.

Het proces van post-incidentactiviteiten moet worden geïntegreerd met andere processen zoals risicomanagement, contractbeheer, en compliance-monitoring, zodat lessen die zijn geleerd uit leveranciersincidenten worden meegenomen in het continue verbeteringsproces. Het bijbehorende PowerShell-script kan worden gebruikt om trends te analyseren in leveranciersincidenten, om patronen te identificeren, en om rapportages te genereren over de effectiviteit van procedures. Door continu te leren van leveranciersincidenten en procedures te verbeteren, kunnen organisaties hun weerbaarheid tegen leveranciersincidenten verhogen en hun compliance-positie versterken.

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 Procedures voor leveranciersincidenten in Microsoft 365 .DESCRIPTION Ondersteunt het responseproces op leveranciersincidenten door toegang te analyseren, containmentmaatregelen voor te stellen, en monitoring in te stellen. Het script identificeert alle leveranciers die toegang hebben tot of integreren met de Microsoft 365-omgeving, analyseert toegang en activiteiten bij een incident, en ondersteunt het responseproces door containmentmaatregelen voor te stellen en monitoring in te stellen. Het script ondersteunt zowel lokale debug-tests als live monitoring via Microsoft Graph API. .NOTES Filename: vendor-incident-procedures.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-27 Version: 1.0 Related JSON: content/m365/compliance/vendor-incident-procedures.json Category: compliance Workload: m365 .LINK https://github.com/m365-tenant-best-practise .EXAMPLE .\vendor-incident-procedures.ps1 -IncidentResponse -VendorName "Cloud Service Provider BV" -DebugMode Voert een lokale debug-run uit zonder verbinding met Microsoft en toont voorbeeldresultaten. .EXAMPLE .\vendor-incident-procedures.ps1 -IncidentResponse -VendorName "Cloud Service Provider BV" Analyseert toegang en activiteiten van een specifieke leverancier en stelt containmentmaatregelen voor. .EXAMPLE .\vendor-incident-procedures.ps1 -RemediationGuidance Toont richtlijnen voor het omgaan met leveranciersincidenten. #> #Requires -Version 5.1 [CmdletBinding()] param( [Parameter(HelpMessage = "Voer incidentresponse uit voor een specifieke leverancier")] [switch]$IncidentResponse, [Parameter(HelpMessage = "Naam van de leverancier waarop het incident betrekking heeft")] [string]$VendorName, [Parameter(HelpMessage = "Toon richtlijnen voor het omgaan met leveranciersincidenten")] [switch]$RemediationGuidance, [Parameter(HelpMessage = "Toon welke acties u zou nemen zonder wijzigingen in de tenant")] [switch]$WhatIf, [Parameter(HelpMessage = "Voer een veilige lokale test uit zonder verbinding met Microsoft")] [switch]$DebugMode, [Parameter(HelpMessage = "Pad naar configuratiebestand met incidentresponse-instellingen")] [string]$ConfigPath = "$PSScriptRoot\vendor-incident-config.json", [Parameter(HelpMessage = "Pad naar registerbestand met geregistreerde leveranciers")] [string]$RegisterPath = "$PSScriptRoot\vendor-compliance-register.json" ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Leveranciersincident Procedures – M365" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Get-VendorIncidentConfig { <# .SYNOPSIS Laadt configuratie met incidentresponse-instellingen. .DESCRIPTION Leest een JSON-bestand met configuratie voor incidentresponse, containmentmaatregelen en monitoring-instellingen. Als het bestand niet bestaat, wordt een standaardconfiguratie gebruikt. .OUTPUTS PSCustomObject met configuratie-instellingen. #> [CmdletBinding()] param() $defaultConfig = @{ AutoContainmentEnabled = $false RequireApprovalForAccessRevocation = $true MonitoringDurationDays = 30 AlertOnSuspiciousActivity = $true RequireManualReviewForHighRiskData = $true IncidentResponseTeam = @("CISO", "CSIRT", "Functionaris Gegevensbescherming") } if (Test-Path $ConfigPath) { try { $config = Get-Content $ConfigPath -Raw | ConvertFrom-Json Write-Host "Configuratie geladen van: $ConfigPath" -ForegroundColor Gray return $config } catch { Write-Host "Waarschuwing: kon configuratiebestand niet lezen, gebruik standaardinstellingen." -ForegroundColor Yellow return $defaultConfig } } else { Write-Host "Geen configuratiebestand gevonden, gebruik standaardinstellingen." -ForegroundColor Gray Write-Host "Maak een configuratiebestand aan op: $ConfigPath" -ForegroundColor Gray return $defaultConfig } } function Get-VendorComplianceRegister { <# .SYNOPSIS Laadt het centrale register van geregistreerde leveranciers. .DESCRIPTION Leest een JSON-bestand met het register van alle leveranciers die toegang hebben tot Microsoft 365, inclusief compliance-baseline en contactinformatie. .OUTPUTS Array van PSCustomObject met leveranciersinformatie. #> [CmdletBinding()] param() if (Test-Path $RegisterPath) { try { $register = Get-Content $RegisterPath -Raw | ConvertFrom-Json Write-Host "Register geladen van: $RegisterPath" -ForegroundColor Gray return $register } catch { Write-Host "Waarschuwing: kon register niet lezen." -ForegroundColor Yellow return @() } } else { Write-Host "Geen register gevonden. Maak een register aan op: $RegisterPath" -ForegroundColor Gray return @() } } function Get-VendorAccess { <# .SYNOPSIS Haalt alle actieve toegang van een specifieke leverancier op uit Microsoft 365. .DESCRIPTION In productie zou dit toegang ophalen via Microsoft Graph API. In DebugMode worden voorbeeldgegevens gebruikt. .OUTPUTS Array van PSCustomObject met toegangsinformatie. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$VendorName ) if ($DebugMode) { Write-Host "DebugMode: gebruik voorbeeldgegevens voor leverancier: $VendorName" -ForegroundColor Yellow Write-Host "In productie wordt toegang opgehaald via Microsoft Graph API.`n" -ForegroundColor Yellow # Voorbeeldgegevens die typische leverancierstoegang representeren return @( [PSCustomObject]@{ Name = $VendorName Type = "OAuth Applicatie" AccessType = "API-toegang met beperkte scopes" DataAccess = "Persoonsgegevens" Region = "EU" Country = "Nederland" LastAccess = (Get-Date).AddHours(-1) Services = @("Microsoft Graph API", "SharePoint Online") Scopes = @("User.Read", "Files.Read.All", "Sites.Read.All") ServicePrincipalId = "12345678-1234-1234-1234-123456789012" ApplicationId = "87654321-4321-4321-4321-210987654321" IsActive = $true }, [PSCustomObject]@{ Name = $VendorName Type = "Gastaccount" AccessType = "Directe gebruikersaccount toegang" DataAccess = "Persoonsgegevens" Region = "EU" Country = "Nederland" LastAccess = (Get-Date).AddDays(-3) Services = @("Exchange Online", "SharePoint Online") UserPrincipalName = "vendor@externaldomain.com" IsActive = $true }, [PSCustomObject]@{ Name = $VendorName Type = "Externe Toegang" AccessType = "SharePoint Externe Delen" DataAccess = "Vertrouwelijke informatie" Region = "EU" Country = "Nederland" LastAccess = (Get-Date).AddMinutes(-15) Services = @("SharePoint Online") SiteUrl = "https://tenant.sharepoint.com/sites/ProjectSite" IsActive = $true } ) } else { Write-Host "Ophalen van toegang van leverancier '$VendorName' via Microsoft Graph API..." -ForegroundColor Gray Write-Host "Let op: dit vereist verbinding met Microsoft Graph. Implementatie kan variëren per omgeving." -ForegroundColor Yellow # In productie zou hier Microsoft Graph API-calls plaatsvinden # Voor nu: retourneer lege lijst of lees cache Write-Host "Gebruik -DebugMode voor voorbeeldgegevens." -ForegroundColor Yellow return @() } } function Get-ContainmentMeasures { <# .SYNOPSIS Stelt containmentmaatregelen voor op basis van toegang en activiteiten. .DESCRIPTION Analyseert toegang en activiteiten van een leverancier en stelt passende containmentmaatregelen voor, zoals het intrekken van toegang, het deactiveren van service principals, of het beperken van externe toegang. .OUTPUTS Array van PSCustomObject met voorgestelde containmentmaatregelen. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [array]$VendorAccess, [Parameter(Mandatory = $true)] [PSCustomObject]$Config ) $measures = @() foreach ($access in $VendorAccess) { if ($access.Type -eq "OAuth Applicatie") { $measures += [PSCustomObject]@{ Type = "Toegang Intrekken" Action = "Intrekken van OAuth-tokens en deactiveren van service principal" Target = $access.ServicePrincipalId Description = "Intrekken van alle OAuth-tokens voor applicatie $($access.ApplicationId) en deactiveren van service principal $($access.ServicePrincipalId)" Priority = "High" RequiresApproval = $Config.RequireApprovalForAccessRevocation } } elseif ($access.Type -eq "Gastaccount") { $measures += [PSCustomObject]@{ Type = "Account Deactiveren" Action = "Deactiveren van gastaccount" Target = $access.UserPrincipalName Description = "Deactiveren van gastaccount $($access.UserPrincipalName) en intrekken van alle actieve sessies" Priority = "High" RequiresApproval = $Config.RequireApprovalForAccessRevocation } } elseif ($access.Type -eq "Externe Toegang") { $measures += [PSCustomObject]@{ Type = "Toegang Beperken" Action = "Beperken van externe toegang tot SharePoint-site" Target = $access.SiteUrl Description = "Beperken of verwijderen van externe toegang tot SharePoint-site $($access.SiteUrl)" Priority = "Medium" RequiresApproval = $Config.RequireApprovalForAccessRevocation } } } return $measures } function Invoke-VendorIncidentResponse { <# .SYNOPSIS Voert incidentresponse uit voor een specifieke leverancier. .DESCRIPTION Analyseert toegang en activiteiten van een leverancier, stelt containmentmaatregelen voor, en stelt monitoring in op verdere activiteit. .OUTPUTS PSCustomObject met incidentresponse-resultaten. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$VendorName ) if ([string]::IsNullOrWhiteSpace($VendorName)) { Write-Host "[FOUT] Leveranciersnaam is vereist voor incidentresponse." -ForegroundColor Red return $null } $config = Get-VendorIncidentConfig $registeredVendors = Get-VendorComplianceRegister $vendorAccess = Get-VendorAccess -VendorName $VendorName if ($vendorAccess.Count -eq 0) { Write-Host "[WAARSCHUWING] Geen toegang gevonden voor leverancier '$VendorName'." -ForegroundColor Yellow Write-Host "Dit kan betekenen dat de leverancier geen actieve toegang heeft, of dat de naam niet overeenkomt." -ForegroundColor Yellow return [PSCustomObject]@{ ScriptName = "vendor-incident-procedures.ps1" VendorName = $VendorName Timestamp = Get-Date TotalAccessPoints = 0 ContainmentMeasures = @() Findings = @("Geen toegang gevonden voor leverancier '$VendorName'.") } } $containmentMeasures = Get-ContainmentMeasures -VendorAccess $vendorAccess -Config $config $result = [PSCustomObject]@{ ScriptName = "vendor-incident-procedures.ps1" VendorName = $VendorName Timestamp = Get-Date TotalAccessPoints = $vendorAccess.Count AccessPoints = $vendorAccess ContainmentMeasures = $containmentMeasures Findings = @() } # Analyseer toegang en genereer bevindingen foreach ($access in $vendorAccess) { if ($access.DataAccess -in @("Persoonsgegevens", "Vertrouwelijke informatie")) { $result.Findings += "Toegang tot hoogrisico gegevenstype: $($access.DataAccess) via $($access.Type)" } if ($access.LastAccess -gt (Get-Date).AddHours(-24)) { $result.Findings += "Recente toegang gedetecteerd: $($access.LastAccess) via $($access.Type)" } } # Rapportage Write-Host "`nResultaat incidentresponse voor leverancier: $VendorName" -ForegroundColor Cyan Write-Host (" Totaal toegangspunten : {0}" -f $result.TotalAccessPoints) -ForegroundColor White Write-Host (" Voorgestelde containmentmaatregelen : {0}" -f $containmentMeasures.Count) -ForegroundColor White if ($containmentMeasures.Count -gt 0) { Write-Host "`nVoorgestelde containmentmaatregelen:" -ForegroundColor Yellow foreach ($measure in $containmentMeasures) { Write-Host (" [{0}] {1}" -f $measure.Priority, $measure.Description) -ForegroundColor Yellow if ($measure.RequiresApproval) { Write-Host " Vereist goedkeuring voordat actie wordt uitgevoerd." -ForegroundColor Gray } } if ($WhatIf) { Write-Host "`nWhatIf: bovenstaande maatregelen zouden worden uitgevoerd, er worden geen acties uitgevoerd." -ForegroundColor Yellow } elseif (-not $DebugMode) { Write-Host "`n[ATTENTIE] Containmentmaatregelen vereisen handmatige uitvoering of goedkeuring." -ForegroundColor Yellow Write-Host "Gebruik de voorgestelde maatregelen als basis voor incidentresponse-acties." -ForegroundColor Yellow } } if ($result.Findings.Count -gt 0) { Write-Host "`nBevindingen:" -ForegroundColor Cyan foreach ($finding in $result.Findings) { Write-Host " - $finding" -ForegroundColor White } } return $result } function Invoke-RemediationGuidance { <# .SYNOPSIS Toont richtlijnen voor het omgaan met leveranciersincidenten. .DESCRIPTION Geeft praktische aanwijzingen voor het detecteren, beoordelen, reageren op en leren van leveranciersincidenten. #> [CmdletBinding()] param() Write-Host "`nRichtlijnen voor het omgaan met leveranciersincidenten:" -ForegroundColor Cyan Write-Host "`n1. Incidentdetectie" -ForegroundColor White Write-Host " - Monitor contractuele meldplichten en verifieer of leveranciers tijdig melden" -ForegroundColor Gray Write-Host " - Monitor publieke bronnen op nieuws over beveiligingsincidenten bij leveranciers" -ForegroundColor Gray Write-Host " - Gebruik technische detectie om verdachte activiteiten van leveranciers te identificeren" -ForegroundColor Gray Write-Host " - Zorg voor een duidelijk meldpunt waar eindgebruikers verdachte activiteiten kunnen melden" -ForegroundColor Gray Write-Host "`n2. Incidentbeoordeling" -ForegroundColor White Write-Host " - Verzamel snel en accuraat informatie over het incident" -ForegroundColor Gray Write-Host " - Beoordeel welke gegevens mogelijk zijn betrokken en hoeveel betrokkenen" -ForegroundColor Gray Write-Host " - Beoordeel de beveiligingsimpact en het risico op verdere compromittering" -ForegroundColor Gray Write-Host " - Bepaal of meldplichten onder AVG of NIS2 van toepassing zijn" -ForegroundColor Gray Write-Host "`n3. Incidentresponse" -ForegroundColor White Write-Host " - Neem passende containmentmaatregelen zoals het intrekken van toegang" -ForegroundColor Gray Write-Host " - Kom meldplichten na onder AVG en NIS2 binnen de gestelde termijnen" -ForegroundColor Gray Write-Host " - Communiceer duidelijk met de leverancier over verwachtingen en informatiebehoeften" -ForegroundColor Gray Write-Host " - Monitor op verdere activiteit en tekenen van verdere compromittering" -ForegroundColor Gray Write-Host "`n4. Post-incidentactiviteiten" -ForegroundColor White Write-Host " - Voer een post-incidentanalyse uit om te leren van het incident" -ForegroundColor Gray Write-Host " - Implementeer verbetermaatregelen op basis van geleerde lessen" -ForegroundColor Gray Write-Host " - Documenteer alle incidenten en response-activiteiten voor auditdoeleinden" -ForegroundColor Gray if ($WhatIf) { Write-Host "`nWhatIf: bovenstaande richtlijnen beschrijven het proces, er worden geen acties uitgevoerd." -ForegroundColor Yellow } } try { if ($RemediationGuidance) { Invoke-RemediationGuidance } elseif ($IncidentResponse) { if ([string]::IsNullOrWhiteSpace($VendorName)) { Write-Host "[FOUT] Leveranciersnaam is vereist voor incidentresponse." -ForegroundColor Red Write-Host "Gebruik: .\vendor-incident-procedures.ps1 -IncidentResponse -VendorName 'Leveranciersnaam'" -ForegroundColor Yellow exit 1 } $responseResult = Invoke-VendorIncidentResponse -VendorName $VendorName if ($responseResult -and $responseResult.TotalAccessPoints -gt 0) { exit 0 } else { exit 1 } } else { Write-Host "Beschikbare parameters:" -ForegroundColor Yellow Write-Host " -IncidentResponse : Voer incidentresponse uit voor een specifieke leverancier" -ForegroundColor Gray Write-Host " -VendorName <naam> : Naam van de leverancier waarop het incident betrekking heeft" -ForegroundColor Gray Write-Host " -RemediationGuidance : Toon richtlijnen voor het omgaan met leveranciersincidenten" -ForegroundColor Gray Write-Host " -DebugMode : Voer een veilige lokale test uit" -ForegroundColor Gray Write-Host " -WhatIf : Toon richtlijnen zonder actie" -ForegroundColor Gray Write-Host "`nVoorbeeld: .\vendor-incident-procedures.ps1 -IncidentResponse -VendorName 'Leveranciersnaam' -DebugMode" -ForegroundColor Cyan } } catch { Write-Error "Scriptuitvoering is mislukt: $_" exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan } # Exitcodes: # 0 = Succesvol, toegang geanalyseerd # 1 = Geen toegang gevonden of fout # 2 = Fout tijdens uitvoering

Risico zonder implementatie

Risico zonder implementatie
High: Zonder gestructureerde procedures voor leveranciersincidenten kan de organisatie niet aantonen dat zij tijdig en adequaat reageert op leveranciersincidenten, voldoet aan AVG- en NIS2-meldplichten, en adequaat beschermt tegen verdere schade. Dit leidt tot verhoogd risico op niet-naleving, mogelijke sancties van toezichthouders, en reputatieschade.

Management Samenvatting

Richt gestructureerde procedures in voor het detecteren, beoordelen, reageren op en leren van leveranciersincidenten binnen Microsoft 365. Gebruik het bijbehorende PowerShell-script voor geautomatiseerde monitoring en response-ondersteuning, en zorg voor duidelijke governance met toegewezen rollen en verantwoordelijkheden. Dit artikel en script geven Nederlandse overheidsorganisaties een praktisch kader om compliance-compliant om te gaan met leveranciersincidenten in moderne cloudomgevingen.