Turn Op Powershell Script Block Logging Is Set To Ingeschakeld

💼 Management Samenvatting

Script block logging biedt diepgaande zichtbaarheid in elke PowerShell instructie die op Nederlandse overheidsendpoints wordt uitgevoerd en vormt daarmee een kernelement van het programma "Nederlandse Baseline voor Veilige Cloud".

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
7/10
Implementatie
2u (tech: 1u)
Van toepassing op:
Windows

Door volledige transcripties van alle PowerShell blokken naar de Windows gebeurtenislogboeken te schrijven, worden misbruikpatronen, living-off-the-land technieken en onrechtmatige beheeracties direct zichtbaar, waardoor incidentrespons en forensisch onderzoek aanzienlijk verbeteren.

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

Implementatie

Deze maatregel configureert via Microsoft Intune en het bijbehorende automatiseringsscript de instelling "Turn on PowerShell Script Block Logging" naar ingeschakeld, zodat elke beheerde Windows 10, Windows 11 en Windows Server workload conformeert aan BIO, CIS en ISO 27001 eisen voor logging en auditing.

Vereisten

Het afdwingen van script block logging begint met een volwassen Intune tenant die beschikt over Microsoft 365 E5, Microsoft Defender for Endpoint of een gelijkwaardige licentie waarmee uitgebreide beveiligings- en auditfunctionaliteit wordt ontsloten. Beheerders dienen bevestigen dat alle betrokken Windows 10, Windows 11 en servervarianten minimaal build 1607 of hoger draaien, dat PowerShell 5.0 of nieuwer aanwezig is en dat endpoints verbonden zijn met een betrouwbaar tijdsynchronisatiebron. Zonder deze basisvoorwaarden kunnen logboeken geen juridische bewijswaarde krijgen en raken correlaties met Sentinel, Splunk of lokale SIEM-platformen verloren.

Een tweede vereiste is de aanwezigheid van een goed ingericht beheerproces voor certificaten, netwerkconnectiviteit en proxy-uitzonderingen die nodig zijn voor communicatie tussen Intune, Microsoft Graph en de clients. De organisatie moet de PowerShell modules Microsoft.Graph.DeviceManagement en Microsoft.Graph.Authentication op beheersystemen installeren en bijhouden volgens de changelog van Microsoft om compatibiliteit en supportability te behouden. Daarnaast moet het SOC beschikken over opslagcapaciteit in Azure Monitor of een ander gecentraliseerd logplatform, inclusief minimaal twaalf maanden retentie zodat BIO 16.01 en AVG artikel 30 naleving aantoonbaar blijft.

Tot slot is een governancekader essentieel: er moeten rollen en verantwoordelijkheden zijn voor de Intune beheerder, de security officer, het SOC en de privacy officer. Zij stellen samen acceptatiecriteria op voor test, pilot en productie, definiëren change windows, borgen dat uitzonderingen schriftelijk worden goedgekeurd en documenteren hoe logdata met persoonsgegevens wordt geclassificeerd als intern of beperkt. Zonder deze organisatorische randvoorwaarden blijft script block logging een technische instelling zonder blijvende waarde voor compliance en incidentrespons, en worden inzichten uit de logs niet vertaald naar structurele verbeteracties.

Een volwassen opleidingstraject vormt de laatste vereiste. Technische beheerders worden getraind in het lezen van Event ID 4104, het herkennen van afwijkende cmdlets en het veilig omgaan met gevoelige logdata. Security analisten leren hoe zij script block logs correleren met andere telemetrie zoals Defender alerts en Azure AD sign-ins, terwijl privacy officers leren hoe zij DPIA’s bijwerken wanneer loggingniveaus veranderen. Deze trainingen worden ondersteund door geautomatiseerde labomgevingen waarin beheerders scenario’s doorlopen, misconfiguraties oefenen en failoverprocedures testen. Door kennisdeling te borgen en lessons learned vast te leggen, blijft de organisatie wendbaar bij technologische evoluties en wetswijzigingen.

Implementatie

Het implementatiepad begint met het opstellen van een Intune configuratieprofiel op basis van het device configuration platform "Endpoint security > Aanvalsoppervlak reductie" of een aangepast configuratieprofiel voor Windows 10 en hoger (OMA-URI). In deze fase beschrijft de security architect het functionele doel van script block logging, koppelt het aan risicoscenario’s zoals misbruik van ingebouwde PowerShell cmdlets door aanvallers en bepaalt hij welke devicegroepen de instelling per direct moeten ontvangen. Tegelijkertijd voert het beheerteam een inventarisatie uit van bestaande GPO’s of lokale scripts die dezelfde instelling reeds zetten, zodat conflicten worden voorkomen en rollback scenario’s klaar staan.

Daarna configureert de Intune beheerder de instelling via een aangepaste OMA-URI die verwijst naar het policy pad HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging en de waarde EnableScriptBlockLogging. Het beleid wordt gekoppeld aan dynamische Azure AD groepen met filters die alleen endpoints bevatten die rapporteren als compliant met de vooraf bepaalde Windows builds. Het change management team plant een gefaseerde uitrol: eerst een gecontroleerde pilot met representatieve apparaten uit verschillende organisaties binnen de overheidsinstelling, daarna een brede productie-uitrol over meerdere onderhoudsvensters zodat impact op kritieke diensten wordt beperkt. Gedurende elke fase worden Telemetry data en Intune rapportage gebruikt om te controleren of de policy succesvol is toegepast en of er ongewenste neveneffecten ontstaan, bijvoorbeeld extra CPU-belasting op oudere apparatuur.

Parallel aan deze configuratiestappen wordt de technische automatisering opgezet. De beheerder downloadt het script uit `code/intune/audit-logging/turn-on-powershell-script-block-logging-is-set-to-enabled.ps1`, valideert de inhoud in een gecontroleerde PowerShell 7 sessie met `-WhatIf` parameters en past de verplichte lokale debugsettings toe zodat fouten vroegtijdig zichtbaar worden. De scriptuitvoering wordt opgenomen in bestaande CI/CD pipelines of een handmatig goedkeuringsproces binnen Azure DevOps, inclusief versiebeheer, peer review en handtekening met een goedgekeurd code signing certificaat. Alle implementatieactiviteiten worden gedocumenteerd in het change register, inclusief referenties naar CAB-besluiten en de rationale waarom eventuele uitzonderingen tijdelijk zijn toegestaan.

Tot slot wordt het beleid gekoppeld aan metrics. Voor elke release definieert het team doelwaarden, zoals 98 procent compliant devices binnen zeven dagen en nul kritieke incidenten. Intune rapportage wordt gekoppeld aan Power BI dashboards die het bestuursniveau inzicht geven in de voortgang, terwijl het SOC per sprint feedback levert over detectiewaarde. Door deze continue terugkoppeling kan de organisatie bijsturen, bijvoorbeeld door aanvullende devicegroepen toe te voegen, het beleid te combineren met Device Guard configuraties of door fallback scripts klaar te zetten voor geïsoleerde netwerken waar Intune niet direct kan pushen.

Gebruik PowerShell-script turn-on-powershell-script-block-logging-is-set-to-enabled.ps1 (functie Invoke-Monitoring) – Monitoren.

monitoring

Monitoring van script block logging vereist een integraal beeld over endpoint, Intune en SIEM lagen. Na de uitrol wordt in Intune een compliance rapport ingericht dat controleert of de OMA-URI instelling een status "Succeeded" rapporteert en dat afwijkingen direct aan het SOC worden doorgemeld via een automatische Graph webhook. Vervolgens wordt binnen Microsoft Defender for Endpoint of een ander EDR platform een aangepaste detectieregel aangemaakt die een waarschuwing verstuurt wanneer Event ID 4104 plotseling uitblijft op een endpoint dat eerder wel logging genereerde, omdat dit kan wijzen op sabotage van de auditing functie. Deze signalen worden verrijkt met device tags, eigenaarinformatie en classificatie van de data die via het endpoint wordt verwerkt.

Daarnaast richt de organisatie een dashboard in binnen Azure Monitor of Sentinel waarin de frequentie, herkomst en inhoud van PowerShell script blocks worden getoond. Analisten letten op drift, bijvoorbeeld een piek in scripts die gebruikmaken van `Invoke-WebRequest`, credential dumping modules of encoded commands. Het dashboard bevat ook performance-indicatoren zoals loggeneratie per apparaat, opslagverbruik en latency van forwarding naar het SIEM. Door deze indicatoren wekelijks te evalueren kan het team aantonen dat logging betrouwbaar blijft en dat privacy- en retentionafspraken worden nagekomen.

Tot slot wordt het script `turn-on-powershell-script-block-logging-is-set-to-enabled.ps1` periodiek gedraaid in een controlemode waarin alleen de monitoringfunctie (`Invoke-Monitoring`) actief is. Het script valideert of kritieke registersleutels aanwezig zijn, of de Windows Event Collector service draait en of lokale logbestanden niet zijn gemanipuleerd. Bevindingen worden automatisch vastgelegd in het security operations logboek, gekoppeld aan tickets in het ITSM-systeem en besproken tijdens het tweewekelijkse overleg tussen SOC, Intune beheer en privacy officer zodat opvolging binnen maximaal vijf werkdagen plaatsvindt.

Voor strategische borging organiseert de organisatie per kwartaal een tabletop oefening waarin security officers, auditors en applicatie-eigenaren een fictief incident doorlopen waarbij script block logging cruciale bewijzen levert. Tijdens deze oefening wordt getoetst of dashboards actueel zijn, of escalatieroutes werken en of de workload owners begrijpen welke informatie zij moeten aanleveren. Uitkomsten worden vertaald naar verbeteracties, zoals het verfijnen van KQL queries, het toevoegen van Sentinel playbooks of het automatiseren van notificaties naar het Nationaal Cyber Security Centrum indien sprake is van een rijksbreed incident.

Gebruik PowerShell-script turn-on-powershell-script-block-logging-is-set-to-enabled.ps1 (functie Invoke-Monitoring) – Controleren.

Remediatie

Wanneer monitoring uitwijst dat script block logging ontbreekt of uitgeschakeld is, start het SOC een gestandaardiseerd remediatiepad. Eerst wordt vastgesteld of het gaat om een tijdelijk onderhoudsvenster, een technisch conflict met andere policies of een mogelijk kwaadwillende actie. Hiervoor raadplegen analisten de change calendar, recente Intune deployments en eventuele meldingen van de servicedesk. Indien er geen legitieme reden is, wordt het endpoint direct in quarantaine geplaatst via Defender for Endpoint, worden verhoogde auditinstellingen geactiveerd en ontvangt de eigenaar instructies om niet verder te werken totdat logging is hersteld.

In de tweede stap wordt het remediatiescript in gecontroleerde modus uitgevoerd. Via `Invoke-Remediation` schrijft het script de vereiste registersleutels opnieuw weg, herstart het desnoods de Windows Event Log service en voert het een controle uit op anti-tamper instellingen zodat onbevoegde gebruikers de configuratie niet opnieuw kunnen wijzigen. De uitvoer van het script wordt lokaal gelogd, naar het centrale SIEM gestuurd en gekoppeld aan het incidentnummer in het ITSM-systeem. Als onderdeel van dezelfde run verzamelt het script aanvullende context, zoals geïnstalleerde PowerShell modules, lokale geplande taken en recent uit te voeren scripts, zodat forensische onderzoekers kunnen bepalen of er sprake was van een aanval.

Na technische herstelacties volgt een root cause analyse. Het securityteam beoordeelt of er een lacune was in het change management proces, of er aanvullende hardening nodig is (bijvoorbeeld door het afdwingen van Device Guard of door het blokkeren van legacy PowerShell versies) en of gebruikers extra bewustwordingstraining moeten krijgen. De lessons learned worden opgenomen in het kennisregister en leiden, indien nodig, tot een update van het Intune baselineprofiel of de monitoringregels. Zo blijft script block logging een duurzaam onderdeel van de beveiligingsarchitectuur in plaats van een eenmalige fix.

Daarna wordt elke remediatiecyclus afgesloten met rapportage aan het management. Het SOC levert statistieken over mean time to detect en mean time to restore, het Intune team rapporteert hoeveel apparaten opnieuw compliant zijn gemaakt en de privacy officer bevestigt dat logdata correct is behandeld. Deze rapportage voedt de kwartaalreview van de Chief Information Security Officer en vormt input voor audits. Door remediatie niet alleen technisch maar ook bestuurlijk af te ronden, ontstaat vertrouwen dat afwijkingen snel worden opgepakt en dat kritieke processen van de overheid niet onnodig stilvallen.

Gebruik PowerShell-script turn-on-powershell-script-block-logging-is-set-to-enabled.ps1 (functie Invoke-Remediation) – Herstellen.

Compliance en Auditing

Script block logging ondersteunt meerdere verplichtingen tegelijk: BIO 16.01 verlangt aantoonbare logging van beveiligingsrelevante gebeurtenissen, de AVG vereist dat alle geautomatiseerde verwerkingen traceerbaar zijn en de Wet digitale overheid verwacht dat beheerders kunnen aantonen welke systeemhandelingen zijn uitgevoerd op gevoelige registraties. Om aan deze kaders te voldoen documenteert de organisatie de volledige keten: beleidsdoel, architectuurkeuzes, configuratieprofielen, scripts, testresultaten en beheerprocedures. Elk document verwijst naar het project "Nederlandse Baseline voor Veilige Cloud" zodat auditors onmiddellijk zien dat de maatregel binnen de landelijke standaard past.

Daarnaast worden duidelijke bewaartermijnen vastgelegd. Voor operationele doeleinden worden script block logs minimaal 365 dagen bewaard in een versleutelde Azure Storage account met customer-managed keys. Voor onderzoeken rond integriteitsschendingen kan het noodzakelijk zijn om bepaalde logboeken langer te bewaren; dit gebeurt alleen na toestemming van de privacy officer en wordt geregistreerd in het verwerkingsregister. Toegang tot de logs is strikt geregeld via rolgebaseerde toegang in Sentinel of Splunk en wordt periodiek herzien door middel van access reviews die aantonen dat alleen SOC-analisten en forensische specialisten de data kunnen inzien.

Auditors vragen vaak om technisch bewijs, zoals exporten van Intune beleid, een lijst van apparaten die compliant zijn en voorbeelden van Event ID 4104. Deze bewijsvoering wordt verzameld door de `Invoke-Monitoring` functie van het script en opgeslagen in een auditmap in SharePoint met versiebeheer. Tijdens controles toont de organisatie hoe incidenten waarbij script block logging heeft gefunctioneerd, zijn gedocumenteerd en welke vervolgstappen zijn genomen. Door deze transparante aanpak is het eenvoudig om aan te tonen dat logging niet alleen is ingeschakeld, maar daadwerkelijk wordt gebruikt om beveiligingsbreuken te detecteren en te mitigeren.

Tegelijkertijd vindt periodieke afstemming plaats met interne en externe auditpartners. Zij beoordelen of de maatregel nog aansluit op nieuwe versies van de BIO, of recente uitspraken van de Autoriteit Persoonsgegevens aanvullende waarborgen vereisen en of er kansen zijn om logdata anoniem te maken voor trendanalyses. Resultaten van deze overleggen worden opgenomen in de jaarplannen van het CISO-office en gedeeld met ketenpartners binnen de Nederlandse publieke sector, zodat ervaringen en best practices rijksbreed worden benut.

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 Intune Audit Logging: Turn On PowerShell Script Block Logging .DESCRIPTION CIS - PowerShell script block logging enabled. .NOTES Filename: turn-on-ps-block-log.ps1|Author: Nederlandse Baseline voor Veilige Cloud|Registry: EnableScriptBlockLogging|Expected: 1 #> #Requires -Version 5.1 #Requires -RunAsAdministrator [CmdletBinding()]param([switch]$WhatIf, [switch]$Monitoring, [switch]$Remediation, [switch]$Revert) $ErrorActionPreference = 'Stop'; $RegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging"; $RegName = "EnableScriptBlockLogging"; $ExpectedValue = 1 function Connect-RequiredServices { $p = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()); return $p.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) } function Test-Compliance { $r = [PSCustomObject]@{ScriptName = "turn-on-ps-block.ps1"; PolicyName = "PS Block Logging"; IsCompliant = $false; CurrentValue = $null; ExpectedValue = "Enabled"; Details = @() }; function Invoke-Revert { Remove-ItemProperty -Path $RegPath -Name $RegName -ErrorAction SilentlyContinue } try { if (Test-Path $RegPath) { $v = Get-ItemProperty -Path $RegPath -Name $RegName -ErrorAction SilentlyContinue; if ($v -and $v.$RegName -eq $ExpectedValue) { $r.IsCompliant = $true; $r.Details += "Enabled" }else { $r.Details += "Disabled" } }else { $r.Details += "Niet geconfigureerd" } }catch { $r.Details += "Error: $($_.Exception.Message)" }; return $r } function Invoke-Remediation { if (-not(Test-Path $RegPath)) { New-Item -Path $RegPath -Force | Out-Null }; Set-ItemProperty -Path $RegPath -Name $RegName -Value $ExpectedValue -Type DWord -Force; Write-Host "PS script block logging enabled" -ForegroundColor Green } function Invoke-Monitoring { $r = Test-Compliance; Write-Host "`n$($r.PolicyName): $(if($r.IsCompliant){'COMPLIANT'}else{'NON-COMPLIANT'})" -ForegroundColor $(if ($r.IsCompliant) { 'Green' }else { 'Red' }); return $r } function Invoke-Revert { Remove-ItemProperty -Path $RegPath -Name $RegName -ErrorAction SilentlyContinue } try { if (-not(Connect-RequiredServices)) { exit 1 }; if ($Monitoring) { $r = Invoke-Monitoring; exit $(if ($r.IsCompliant) { 0 }else { 1 }) }elseif ($Remediation) { if (-not $WhatIf) { Invoke-Remediation } }elseif ($Revert) { Invoke-Revert }else { $r = Test-Compliance; exit $(if ($r.IsCompliant) { 0 }else { 1 }) } }catch { Write-Error $_; exit 1 }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder script block logging blijven misbruik van PowerShell, privilege-escalaties en manipulatie van kritieke bedrijfsprocessen onzichtbaar, waardoor incidentrespons en juridische verantwoording falen.

Management Samenvatting

Schakel script block logging in via Intune, monitor de naleving continu en koppel de resultaten aan BIO en AVG rapportages.