Windows Hello For Business Als Standaard Voor Phishingbestendige Aanmelding

💼 Management Samenvatting

Windows Hello for Business (WHfB) vervangt kwetsbare wachtwoorden door sterke, devicegebonden sleutels die worden beschermd door hardware en biometrie. Voor Nederlandse overheidsorganisaties vormt WHfB de snelste route naar phishingbestendige aanmelding binnen het zero-trustkader waarin identiteiten, apparaten en sessies continu worden gevalideerd.

Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
140u (tech: 80u)
Van toepassing op:
Windows 10
Windows 11
Microsoft Intune
Entra ID
Microsoft 365

Aanvallers richten zich steeds vaker op wachtwoordhergebruik, MFA-bypass en tokenkaping. Zonder WHfB blijven ambtenaren afhankelijk van gedeelde wachtwoorden, sms-codes en andere methoden die niet voldoen aan de eisen van BIO, AVG en de NIS2-richtlijn. Daarnaast vragen toezichthouders om aantoonbaar beleid waarmee bestuurders kunnen laten zien dat zij niet alleen policies hebben vastgesteld, maar ook dat moderne authenticatiemiddelen daadwerkelijk worden gebruikt.

PowerShell Modules Vereist
Primary API: Microsoft Graph
Connection: Connect-MgGraph (beta profile)
Required Modules: Microsoft.Graph.Authentication

Implementatie

Dit artikel beschrijft hoe je Windows Hello for Business verankert binnen de Nederlandse Baseline voor Veilige Cloud. Je leest hoe bestuurlijke kaders worden ingericht, welke architectuurbeslissingen nodig zijn voor hybride en cloud-only tenants, hoe Intune-configuraties worden gevalideerd met het meegeleverde script en hoe audittrajecten worden ondersteund met meetbare bewijsvoering.

Strategische noodzaak en bestuurlijke regie

De druk op Nederlandse overheden om phishingbestendige authenticatie te leveren neemt dagelijks toe. Incidenten bij gemeentes, uitvoeringsorganisaties en waterschappen laten zien dat klassieke wachtwoorden met sms-MFA onvoldoende bescherming bieden tegen moderne aanvallen zoals AiTM-proxies en token replay. Windows Hello for Business past in de roadmap van zowel het Rijksbrede I-strategieprogramma als de eisen die de Baseline Informatiebeveiliging Overheid stelt aan toegangsbeveiliging. Wanneer bestuurders WHfB aanwijzen als standaard, ontstaat een direct aantoonbare relatie tussen cyberweerbaarheid en beleidsdoelen: beheersing van identiteiten met minimale afhankelijkheid van gebruikersgedrag en maximale automatisering van detectie en logging.

Bestuurlijke regie betekent dat CIO, CISO, privacy officer en HR gezamenlijk besluiten hoe passwordless werken wordt uitgerold. Zij stellen randvoorwaarden vast voor enrollment, sleutelbeheer, ondersteuning van biometrie en uitzonderingen voor specifieke doelgroepen zoals toezichthouders of politiemedewerkers in hoogbeveiligde omgevingen. Het governanceboard definieert KPI's voor adoptie, zoals het percentage actieve Hello-sessies per tenant, het aantal uitzonderingen langer dan 30 dagen en het aantal incidenten waarin toch naar wachtwoorden moest worden teruggevallen. Deze KPI's worden gekoppeld aan managementrapportages zodat bestuurders niet alleen technische details zien, maar begrijpen hoe WHfB de continuiteit van primaire processen ondersteunt. Door WHfB op te nemen in de enterprise-architectuur en in wijzigingsprocessen (CAB) te verankeren, wordt elke afwijking aan de voorkant getoetst en gedocumenteerd.

Naast governance vraagt WHfB om een scherpe communicatiestrategie richting medewerkers en ketenpartners. Medewerkers moeten weten waarom PIN en biometrie verplicht worden, hoe gegevens worden beschermd en welke fallback beschikbaar is tijdens calamiteiten. Ketens zoals shared service centers en leveranciers van werkplekken krijgen duidelijke kaders: nieuwe devices worden alleen geaccepteerd als zij TPM 2.0, biometrische sensoren en firmware-ondersteuning bieden voor WHfB. Het gevolg is dat passwordless authenticatie niet langer een IT-experiment is, maar een organisatiebreed programma dat HR, inkoop, juridische teams en communicatieafdelingen raakt. Wanneer die keten bewust wordt meegenomen, daalt de weerstand en neemt het vertrouwen toe dat privacy en gebruiksgemak gelijk opgaan met strengere beveiliging.

Training en bewustwording krijgen een vaste plek in het opleidingsplan. Nieuwe medewerkers volgen een verplichte e-learning waarin zij zien hoe een WHfB-PIN wordt ingesteld, hoe biometrie wordt geactiveerd en waarom het delen van een apparaat direct gevolgen heeft voor auditlogs. Voor bestuurders en OR-leden worden aparte sessies georganiseerd waarin nadruk ligt op privacy waarborgen, arbeidsvoorwaardelijke aspecten en het recht op inzage. Door deze segmentatie blijft de boodschap relevant voor elke doelgroep en neemt de kans af dat medewerkers alternatieve, onveilige routes zoeken. Het governanceboard koppelt trainingsdata aan adoptiecijfers, zodat bewezen wordt dat communicatie en gedragshervorming daadwerkelijk effect hebben.

Architectuur, sleutelbeheer en implementatieontwerp

Een volwassen WHfB-architectuur begint met de keuze tussen key trust, certificate trust of cloud trust. Nederlandse overheidsorganisaties met hybride identities kiezen vaak voor key trust omdat deze minder afhankelijk is van domeincontrollers, terwijl organisaties met PKIoverheid-certificaten soms certificate trust nodig hebben voor nichetoepassingen. Cloud trust biedt de snelste implementatie voor volledig cloudgebaseerde tenants die gebruikmaken van Entra ID en Intune. Welke variant je ook kiest, de architectuurdocumentatie beschrijft hoe sleutels worden aangemaakt, waar private keys zich bevinden, hoe device-bound TPM-bescherming werkt en welke fallback wordt toegestaan voor scenario's zonder TPM (bijvoorbeeld tijdelijke loaners die wel binnen zeven dagen moeten worden vervangen).

Intune vormt de spil van beleid en distributie. Configuratieprofielen dwingen een minimum PIN-lengte van zes cijfers af, blokkeren cijferseries, verplichten biometrie zodra sensoren aanwezig zijn en schakelen remote unlock uit zodat alleen gebruikers met fysieke toegang zich kunnen aanmelden. Daarnaast worden Enrollment Status Page en Autopilot-profielen aangepast zodat WHfB tijdens provisioning wordt geactiveerd voordat de gebruiker toegang krijgt tot gevoelige workloads. Conditional Access-regels controleren of devices een geregistreerde Hello-sleutel gebruiken; bij afwijkingen wordt toegang automatisch geweigerd of wordt een step-up vereist via tijdelijke toegangskaart die in het CAB-register is goedgekeurd. Alle beleidsobjecten worden versiebeheerd in Git zodat wijzigingen herleidbaar zijn.

Tot slot moet de architectuur rekening houden met bijzondere werklocaties zoals meldkamers, mobiele inspectieteams en laptops in diplomatieke posten. In deze scenario's wordt vaak gewerkt met dedicated security hardware, waardoor een fallback naar FIDO2-sleutels noodzakelijk blijft. De architectuurbeschrijving legt vast hoe FIDO2 wordt ingezet als aanvullende methode en hoe sleutels worden uitgegeven, opgeslagen en ingetrokken. Door WHfB en FIDO2 gezamenlijk te ontwerpen ontstaat een consistent passwordless-landschap waarin elke verbinding wordt beoordeeld op device-integriteit, netwerkcontext en gebruikersrisico. Deze samenhang maakt het ook eenvoudiger om koppelingen te leggen met logging in Microsoft Sentinel en rapportages naar het SOC.

Het ontwerp besteedt bovendien aandacht aan noodscenario's. Een aparte sectie beschrijft hoe tijdelijke toegangskaarten binnen enkele minuten worden aangemaakt voor crisisteams, welke approvalflow geldt en hoe na afloop wordt gecontroleerd of de kaart daadwerkelijk is ingetrokken. Er wordt vastgelegd hoe diplomatieke missies of scheepvaartinspecties werken wanneer connectiviteit ontbreekt en hoe sleutelregistraties worden gesynchroniseerd zodra devices weer verbinding maken met betrouwbare netwerken. Door deze scenario's vooraf uit te werken, wordt voorkomen dat medewerkers tijdens incidenten terugvallen op oude wachtwoorden of gedeelde accounts.

Operaties, monitoring en continue verbetering

Gebruik PowerShell-script windows-hello-business.ps1 (functie Invoke-WhfbBaseline) – Voert een baseline-check uit op WHfB policies, PIN-instellingen, biometrische eisen en device-adoptie; werkt zowel met Microsoft Graph als met LocalDebug sampledata..

Na de initiële uitrol verschuift de aandacht naar dagelijkse operatie. Intune- en Entra-telemetrie worden gecombineerd in een Power BI-dashboard dat laat zien welk percentage actieve sessies passwordless is, welke apparaten nog wachtwoorden gebruiken en welke gebruikers herhaaldelijk fallback-methoden inschakelen. Het SOC gebruikt Microsoft Sentinel voor detecties zoals onmogelijk gedrag gecombineerd met een downgrade van authenticatiemethode. Het bijgeleverde script vormt de motor van deze monitoring: het haalt configuratiegegevens op via Microsoft Graph, controleert of policies zijn toegewezen, analyseert managed devices op sleutelsterkte en rapporteert per organisatieonderdeel hoeveel devices langer dan zeven dagen zonder WHfB-sleutel zijn ingelogd. Door het script volgens een vaste cadans (bijvoorbeeld wekelijks) te runnen, ontstaat een trendline waarmee bestuurders kunnen aantonen dat passwordless adoptie daadwerkelijk groeit.

Operaties omvatten ook lifecyclebeheer. Wanneer nieuwe hardware binnenkomt, valideert het werkplekteam of firmware en drivers compatibel zijn met WHfB en of anti-hamermaatregelen zoals TPM anti-hammering actief zijn. Servicedeskmedewerkers krijgen duidelijke draaiboeken voor incidenten: hoe heractiveer je een PIN wanneer een medewerker de limiet overschrijdt, hoe stel je een tijdelijke toegangskaart (TAP) in en hoe registreer je deze uitzonderingen in ITSM met einddatum en verantwoordelijke manager. De manager operations bespreekt deze gegevens elk kwartaal met de CISO zodat maatregelen kunnen worden aangescherpt of versoepeld. Continue verbetering betekent dat lessons learned van adoptiewaves worden vertaald naar aangepaste communicatie, training en technische instellingen. Door telemetrie, scriptresultaten en gebruikersfeedback te combineren, ontstaat een lerend systeem waarin passwordless snel reageert op nieuwe dreigingstactieken.

Change- en releasekalenders worden afgestemd op WHfB-updates. Wanneer Microsoft nieuwe functionaliteit introduceert, zoals verbeterde cloud trust of combinaties met FIDO2, wordt eerst een proef uitgevoerd in een sandboxtenant. Het script heeft een LocalDebug-modus waarmee configuraties kunnen worden gevalideerd zonder productie aan te raken, zodat ontwerpkeuzes rustig kunnen worden besproken in CAB-vergaderingen. Na goedkeuring wordt de wijziging gefaseerd ingevoerd, ondersteund door gerichte communicatie naar pilotgroepen. Deze aanpak voorkomt verstoring en zorgt ervoor dat securityteams altijd een stap voorlopen op aanvallers die inspelen op nieuwe technologie.

Audittrail, ketenverplichtingen en leveranciersregie

Auditors focussen bij WHfB op drie vragen: is passwordless beleid formeel vastgesteld, is de configuratie aantoonbaar uitgerold en kunnen uitzonderingen worden uitgelegd. Daarom legt de organisatie elke policywijziging vast met CAB-nummer, risicoanalyse en ondertekening door het verantwoordelijke lid van het bestuur. Scriptuitvoer wordt automatisch voorzien van een hash en opgeslagen in een SharePoint-bibliotheek met retentiebeleid volgens Archiefwet en BIO. Tijdens audits kan direct worden aangetoond welke instellingen golden op een specifieke datum en hoeveel apparaten toen compliant waren.

Leveranciersmanagement is minstens zo belangrijk. Alle uitbestede werkplek- en servicedeskpartners krijgen contractuele eisen mee: devices moeten standaard klaar zijn voor WHfB, tijdelijke accounts mogen slechts 72 uur zonder passwordless gebruikt worden en incidentrapportages moeten binnen 24 uur worden gedeeld met het CISO-office. Inkoop koppelt deze eisen aan raamcontracten zodat naleving juridisch afdwingbaar wordt. Wanneer een leverancier toch password resets uitvoert buiten het afgesproken proces, kan de opdrachtgever aantonen dat dit indruist tegen de contractuele afspraken en kan direct worden ingegrepen.

Tot slot wordt WHfB gekoppeld aan bredere compliance-programma's. Voor de AVG wordt vastgelegd dat biometrische data lokaal blijft en nooit de cloud verlaat. Voor de BIO en NIS2 wordt beschreven hoe passwordless onderdeel is van de bredere identity- en accessmanagementketen, inclusief monitoring, incidentrespons en rapportage aan toezichthouders. Door deze documentatie actueel te houden kunnen controllers, FG's en auditors binnen enkele minuten nagaan hoe passwordless werkt, welke risico's nog openstaan en welke verbeteracties lopen. Het resultaat is een aantoonbaar governancesysteem dat phishingbestendige aanmelding niet alleen technisch mogelijk maakt, maar bestuurlijk en juridisch borgt.

Automatisering helpt om audittrail en ketenbeheer schaalbaar te houden. Het script kan rapportages naar een beveiligde opslag exporteren, waarna een Azure Automation-runbook automatisch de hash opslaat in een onveranderbaar logboek. SharePoint-libraries zijn voorzien van metadata zoals CAB-nummer, verantwoordelijke functionaris en verwijzing naar het relevante BIO- of NIS2-artikel. Leveranciers moeten maandelijks bewijzen uploaden dat hun beheerde apparaten met WHfB zijn geregistreerd; het systeem controleert automatisch of deze bestanden aanwezig zijn en stuurt herinneringen wanneer deadlines naderen. Zo ontstaat een keten die zichzelf controleert en waarin afwijkingen razendsnel zichtbaar worden.

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 Baseline-, operations- en remediatiecontrole voor Windows Hello for Business. .DESCRIPTION Controleert of Windows Hello for Business-policies, PIN-vereisten, biometrische instellingen, TAP-configuraties en device-adoptie voldoen aan de Nederlandse Baseline voor Veilige Cloud. Werkt met Microsoft Graph of met LocalDebug-sampledata voor veilige tests. .NOTES Filename : windows-hello-business.ps1 Author : Nederlandse Baseline voor Veilige Cloud Related : content/m365/device-management/windows-hello-business.json .EXAMPLE .\windows-hello-business.ps1 -Baseline -LocalDebug .EXAMPLE .\windows-hello-business.ps1 -Operations -ExportPath .\whfb-status.csv .EXAMPLE .\windows-hello-business.ps1 -Remediation #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph.Authentication [CmdletBinding(DefaultParameterSetName = 'Baseline')] param( [Parameter(ParameterSetName = 'Baseline')] [switch]$Baseline, [Parameter(ParameterSetName = 'Operations')] [switch]$Operations, [Parameter(ParameterSetName = 'Remediation')] [switch]$Remediation, [switch]$LocalDebug, [string]$ExportPath, [switch]$WhatIf ) $ErrorActionPreference = 'Stop' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Windows Hello for Business Analyzer" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Initialize-WhfbGraphContext { if ($LocalDebug) { Write-Verbose "LocalDebug actief: Graph-verbinding wordt overgeslagen." return } $context = Get-MgContext if (-not $context) { Write-Host "Verbinden met Microsoft Graph..." -ForegroundColor Yellow $scopes = @( 'Policy.Read.All', 'AuthenticationMethodPolicy.Read.All', 'DeviceManagementConfiguration.Read.All', 'DeviceManagementManagedDevices.Read.All' ) Connect-MgGraph -Scopes $scopes -ErrorAction Stop | Out-Null $context = Get-MgContext } if ($context.ApiVersion -ne 'beta') { Select-MgProfile -Name 'beta' } } function Get-WhfbSampleData { $now = Get-Date return [pscustomobject]@{ Policy = [pscustomobject]@{ id = 'windowsHelloForBusiness' state = 'enabled' securityDeviceRequired = $true unlockWithBiometricsEnabled = $true remotePassportEnabled = $false pinMinimumLength = 6 pinMaximumLength = 127 pinExpirationInDays = 180 pinLowercaseCharactersUsage = 'required' pinUppercaseCharactersUsage = 'allowed' pinSpecialCharactersUsage = 'required' } TapConfiguration = [pscustomobject]@{ state = 'enabled' isUsableOnce = $true minimumLifetimeInMinutes = 10 maximumLifetimeInMinutes = 480 defaultLifetimeInMinutes = 60 } DeviceProfiles = @( [pscustomobject]@{ displayName = 'WHfB - Strikt' assignments = @('All Devices') biometricsRequired = $true remoteUnlock = $false minPin = 6 }, [pscustomobject]@{ displayName = 'WHfB - Speciale Locaties' assignments = @('EntraID:WHfB-Field') biometricsRequired = $false remoteUnlock = $false minPin = 8 } ) ManagedDevices = @( [pscustomobject]@{ DeviceName = 'RWS-LAP-0001' HelloForBusinessKeyStrength = 'strong' ComplianceState = 'compliant' LastSyncDateTime = $now.AddHours(-6) JoinType = 'HybridAzureADJoined' }, [pscustomobject]@{ DeviceName = 'RWS-LAP-0150' HelloForBusinessKeyStrength = 'weak' ComplianceState = 'noncompliant' LastSyncDateTime = $now.AddDays(-3) JoinType = 'AzureADJoined' }, [pscustomobject]@{ DeviceName = 'RWS-LAP-0200' HelloForBusinessKeyStrength = $null ComplianceState = 'compliant' LastSyncDateTime = $now.AddDays(-9) JoinType = 'HybridAzureADJoined' } ) } } function Get-WhfbDataset { Initialize-WhfbGraphContext if ($LocalDebug) { return Get-WhfbSampleData } $policyUri = "https://graph.microsoft.com/beta/policies/authenticationMethodsPolicy/authenticationMethodConfigurations" $devicePolicyUri = "https://graph.microsoft.com/beta/deviceManagement/configurationPolicies?`$filter=contains(displayName,'Hello')" $managedDevicesUri = "https://graph.microsoft.com/beta/deviceManagement/managedDevices?`$select=deviceName,helloForBusinessKeyStrength,complianceState,lastSyncDateTime,joinType&`$top=999" $policyResponse = Invoke-MgGraphRequest -Method GET -Uri $policyUri -ErrorAction Stop $whfbPolicy = $policyResponse.value | Where-Object { $_.'@odata.type' -match 'windowsHelloForBusiness' } | Select-Object -First 1 $tapPolicy = $policyResponse.value | Where-Object { $_.'@odata.type' -match 'temporaryAccessPass' } | Select-Object -First 1 $devicePolicies = Invoke-MgGraphRequest -Method GET -Uri $devicePolicyUri -ErrorAction Stop $managedDevices = Invoke-MgGraphRequest -Method GET -Uri $managedDevicesUri -ErrorAction Stop return [pscustomobject]@{ Policy = $whfbPolicy TapConfiguration= $tapPolicy DeviceProfiles = @($devicePolicies.value) ManagedDevices = @($managedDevices.value) } } function Invoke-WhfbBaseline { try { $data = Get-WhfbDataset $issues = @() if (-not $data.Policy) { $issues += "Er is geen Windows Hello for Business policy gevonden." } else { if ($data.Policy.state -ne 'enabled') { $issues += "WHfB policy staat niet op 'enabled'." } if (-not $data.Policy.securityDeviceRequired) { $issues += "TPM of security device is niet verplicht gesteld." } if (-not $data.Policy.unlockWithBiometricsEnabled) { $issues += "Biometrie is niet verplicht terwijl hardware dit ondersteunt." } if ($data.Policy.remotePassportEnabled) { $issues += "Remote unlock is ingeschakeld en vergroot het aanvalsvlak." } if ([int]$data.Policy.pinMinimumLength -lt 6) { $issues += "PIN minimumlengte is kleiner dan 6." } if ($data.Policy.pinLowercaseCharactersUsage -eq 'notAllowed' -or $data.Policy.pinSpecialCharactersUsage -eq 'notAllowed') { $issues += "PIN-complexiteit staat gebruik van tekens niet toe." } if ($data.Policy.pinExpirationInDays -gt 365 -or -not $data.Policy.pinExpirationInDays) { $issues += "PIN-vervaltermijn ontbreekt of is langer dan 365 dagen." } } if (-not $data.TapConfiguration -or $data.TapConfiguration.state -ne 'enabled') { $issues += "Temporary Access Pass (TAP) is niet beschikbaar voor noodscenario's." } else { if (-not $data.TapConfiguration.isUsableOnce) { $issues += "TAP is meermaals te gebruiken en voldoet niet aan de baseline." } if ($data.TapConfiguration.maximumLifetimeInMinutes -gt 720) { $issues += "TAP maximale geldigheid is langer dan 12 uur." } } $profiles = @($data.DeviceProfiles) if (-not $profiles -or $profiles.Count -eq 0) { $issues += "Er zijn geen Intune-configuraties gevonden die WHfB afdwingen." } else { foreach ($profile in $profiles) { $assignments = if ($profile.PSObject.Properties['assignments']) { @($profile.assignments) } else { @() } if ($assignments.Count -eq 0) { $issues += "Profiel '$($profile.displayName)' heeft geen assignments." } } } $devices = @($data.ManagedDevices) $totalDevices = $devices.Count $helloDevices = $devices | Where-Object { $_.helloForBusinessKeyStrength } $strongKeys = $helloDevices | Where-Object { $_.helloForBusinessKeyStrength -match 'strong' } $staleDevices = $devices | Where-Object { $_.lastSyncDateTime -and ((Get-Date) - [datetime]$_.lastSyncDateTime).TotalDays -gt 7 } if ($totalDevices -gt 0) { $adoption = [math]::Round(($helloDevices.Count / $totalDevices) * 100, 2) if ($adoption -lt 85) { $issues += "Passwordless adoptie is $adoption%, lager dan de vereiste 85%." } if (($strongKeys.Count / [math]::Max($helloDevices.Count,1)) -lt 0.9) { $issues += "Minder dan 90% van de WHfB-sessies gebruikt sterke sleutels." } } else { $issues += "Er zijn geen beheerde devices gevonden om adoptie te bepalen." } if ($staleDevices.Count -gt 0) { $issues += "$($staleDevices.Count) devices hebben langer dan zeven dagen niet gesynchroniseerd." } if ($issues.Count -eq 0) { Write-Host "COMPLIANT: Windows Hello for Business voldoet aan de baseline." -ForegroundColor Green return 0 } else { Write-Host "NON-COMPLIANT: $($issues.Count) aandachtspunten gevonden." -ForegroundColor Red $issues | ForEach-Object { Write-Host " - $_" -ForegroundColor Yellow } return 1 } } catch { Write-Host "Fout tijdens baseline-analyse: $_" -ForegroundColor Red return 2 } } function Invoke-WhfbOperations { try { $data = Get-WhfbDataset $devices = @($data.ManagedDevices) $now = Get-Date $report = foreach ($device in $devices) { $lastSync = if ($device.PSObject.Properties['lastSyncDateTime']) { [datetime]$device.lastSyncDateTime } else { $null } $daysSinceSync = if ($lastSync) { [math]::Round(($now - $lastSync).TotalDays, 2) } else { [double]::PositiveInfinity } [pscustomobject]@{ DeviceName = $device.PSObject.Properties['deviceName'] ? $device.deviceName : 'Onbekend' JoinType = $device.PSObject.Properties['joinType'] ? $device.joinType : 'Onbekend' KeyStrength = $device.PSObject.Properties['helloForBusinessKeyStrength'] ? $device.helloForBusinessKeyStrength : 'Geen' ComplianceState = $device.PSObject.Properties['complianceState'] ? $device.complianceState : 'Onbekend' DaysSinceSync = $daysSinceSync } } $total = $report.Count $withKeys = $report | Where-Object { $_.KeyStrength -ne 'Geen' } $stale = $report | Where-Object { $_.DaysSinceSync -gt 7 -or $_.DaysSinceSync -eq [double]::PositiveInfinity } Write-Host ("Totale devices geanalyseerd : {0}" -f $total) -ForegroundColor Cyan Write-Host ("Devices met WHfB-sleutel : {0}" -f $withKeys.Count) -ForegroundColor Cyan Write-Host ("Devices buiten sync-venster : {0}" -f $stale.Count) -ForegroundColor Yellow if ($ExportPath) { $directory = Split-Path -Parent $ExportPath if ($directory -and -not (Test-Path $directory)) { New-Item -ItemType Directory -Path $directory -Force | Out-Null } $report | Export-Csv -Path $ExportPath -NoTypeInformation -Encoding UTF8 Write-Host "Rapport geëxporteerd naar $ExportPath" -ForegroundColor Green } if ($stale.Count -gt 0) { Write-Host "`nTop 5 devices met aandacht:" -ForegroundColor Cyan $stale | Select-Object -First 5 | Format-Table -AutoSize } return ($stale.Count -gt 0) ? 1 : 0 } catch { Write-Host "Fout tijdens operations-rapportage: $_" -ForegroundColor Red return 2 } } function Invoke-WhfbRemediation { try { Write-Host "Remediatiestappen voor Windows Hello for Business:" -ForegroundColor Yellow Write-Host "1. Controleer of alle WHfB- en TAP-policies 'enabled' zijn en pin-vereisten minimaal zes tekens afdwingen." -ForegroundColor Gray Write-Host "2. Publiceer Intune-configuratieprofielen naar alle devicegroepen, inclusief speciale ringen voor mobiele teams." -ForegroundColor Gray Write-Host "3. Gebruik het operations-rapport om apparaten zonder sleutel of met verouderde sync op te sporen en afdelingen daarop aan te spreken." -ForegroundColor Gray Write-Host "4. Registreer uitzonderingen (bijvoorbeeld FIDO2-werkstromen) als change met einddatum en compenserende maatregelen in ITSM." -ForegroundColor Gray Write-Host "5. Automatiseer export van scriptresultaten naar een onveranderbare opslaglocatie voor auditbewijzen." -ForegroundColor Gray if ($WhatIf) { Write-Host "`nWhatIf ingeschakeld: er zijn geen wijzigingen doorgevoerd." -ForegroundColor Yellow } return 0 } catch { Write-Host "Fout tijdens remediatie-instructies: $_" -ForegroundColor Red return 2 } } try { switch ($PSCmdlet.ParameterSetName) { 'Baseline' { if (-not $Baseline -and -not $Operations -and -not $Remediation) { $Baseline = $true } $exitCode = Invoke-WhfbBaseline exit $exitCode } 'Operations' { $exitCode = Invoke-WhfbOperations exit $exitCode } 'Remediation' { $exitCode = Invoke-WhfbRemediation exit $exitCode } default { Write-Host "Gebruik -Baseline, -Operations of -Remediation (optioneel -LocalDebug, -ExportPath, -WhatIf)." -ForegroundColor Yellow } } } catch { Write-Host "Onverwachte fout: $_" -ForegroundColor Red exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
High: Zonder Windows Hello for Business blijven wachtwoorden de zwakste schakel en blijven organisaties blootgesteld aan phishing, credential stuffing en compliance-tekorten die direct tot NIS2-sancties kunnen leiden.

Management Samenvatting

Maak Windows Hello for Business de standaard aanmeldmethode, borg governance en monitoring en gebruik het script om adoption en configuraties aantoonbaar te houden. Zo voldoe je aan de Nederlandse Baseline voor Veilige Cloud en minimaliseer je wachtwoordgerelateerde incidenten.