Safe Attachments Policies: Beleidsarchitectuur En Best Practices
📅 2025-01-27
•
⏱️ 25 minuten lezen
•
🔴 Must-Have
💼 Management Samenvatting
Safe Attachments policies vormen de kern van email security binnen Microsoft 365 en beschermen organisaties tegen zero-day malware via sandbox detonation. Een goed ontworpen policy-architectuur zorgt ervoor dat verschillende gebruikersgroepen de juiste security levels krijgen, terwijl gebruikerservaring en productiviteit worden geoptimaliseerd. Dit artikel beschrijft hoe u een volwassen beleidsarchitectuur opzet met meerdere policies voor verschillende risicoprofielen en gebruikersgroepen.
Aanbeveling
IMPLEMENT
Risico zonder
High
Risk Score
9/10
Implementatie
50u (tech: 20u)
Van toepassing op:
✓ M365 ✓ Exchange Online ✓ Defender voor Office 365 ✓ SharePoint ✓ OneDrive ✓ Teams
Veel organisaties gebruiken één standaard Safe Attachments policy voor alle gebruikers, wat leidt tot suboptimale security voor high-risk gebruikers zoals executives en finance teams, of tot onnodige productiviteitsimpact voor algemene gebruikers wanneer te restrictieve instellingen worden toegepast. Een one-size-fits-all aanpak houdt geen rekening met de verschillende risicoprofielen, bedrijfsbehoeften en compliance vereisten van verschillende gebruikersgroepen. Executives zijn primaire targets voor targeted malware aanvallen en hebben behoefte aan maximale security met Block mode, terwijl algemene gebruikers baat hebben bij Dynamic Delivery mode dat security en productiviteit balanceert. Organisaties zonder gestructureerde policy-architectuur hebben moeite met het schalen van security controls, het toepassen van exception handling voor specifieke gebruikers of processen, en het monitoren van policy effectiviteit per gebruikersgroep. Zonder goede policy structuur worden changes ad-hoc doorgevoerd zonder duidelijke governance, wat kan leiden tot security gaps, compliance issues, en moeilijk te onderhouden configuraties.
Dit artikel beschrijft een complete methodologie voor het ontwerpen, implementeren en beheren van Safe Attachments policies binnen de Nederlandse Baseline voor Veilige Cloud. Het behandelt zes primaire onderdelen: (1) Policy Architectuur Design - methodologie voor het identificeren van gebruikersgroepen met verschillende risicoprofielen, het definiëren van policy templates per risicoprofiel, het opzetten van een policy hierarchy met default policies en specifieke uitzonderingen, en het documenteren van policy rationale voor audit doeleinden, (2) Policy Implementatie Strategie - stapsgewijze aanpak voor het aanmaken van policies via Microsoft 365 Defender portal of PowerShell, het configureren van Safe Attachments rules voor policy-toewijzing aan gebruikersgroepen, het instellen van policy priority om conflicts op te lossen, en het valideren van policy coverage voor alle gebruikers, (3) Risicogebaseerde Policy Toewijzing - strategie voor het identificeren van high-risk gebruikersgroepen zoals executives, finance teams, IT admins en externe partners, het toewijzen van Block mode policies aan high-risk gebruikers voor maximale security, het toewijzen van Dynamic Delivery mode policies aan algemene gebruikers voor balans tussen security en productiviteit, en het gebruik van Monitor mode voor testomgevingen en validatie, (4) Exception Management - processen voor het hanteren van legitieme uitzonderingen zoals business-critical bestandstypen, vertrouwde senders of domains, specifieke gebruikers met unieke requirements, en tijdelijke uitzonderingen voor projecten, waarbij uitzonderingen worden gedocumenteerd, gereviewed en regelmatig herbeoordeeld, (5) Policy Monitoring en Optimalisatie - technieken voor het monitoren van policy effectiviteit per gebruikersgroep, het analyseren van detection rates, false positive rates en user impact metrics, het identificeren van policy improvement opportunities, en het implementeren van continuous improvement processen, en (6) Governance en Lifecycle Management - processen voor policy change management, regelmatige policy reviews, version control en rollback procedures, compliance mapping en audit readiness. Alle configuratie wordt uitgevoerd via Microsoft 365 Defender portal onder Email & collaboration → Threat policies → Safe Attachments, of via PowerShell met ExchangeOnlineManagement module voor automation en bulk management.
Policy Architectuur Design en Structuur
Een volwassen Safe Attachments policy-architectuur begint met het identificeren van verschillende gebruikersgroepen en hun unieke risicoprofielen, security requirements en bedrijfsbehoeften. Start met een grondige analyse van de organisatie waarbij executives, finance teams, HR, IT administrators, externe partners, en algemene gebruikers worden geïdentificeerd als distincte groepen met verschillende security behoeften. Executives en finance teams zijn primaire targets voor targeted malware aanvallen zoals CEO fraud, wire transfer scams en business email compromise, en vereisen maximale security met Block mode policies die detected malware volledig blokkeren. IT administrators hebben toegang tot kritieke systemen en vereisen ook heightened security, maar kunnen baat hebben bij Dynamic Delivery mode omdat zij technisch onderlegd zijn en beter begrijpen wanneer scanning delays optreden.
Voor algemene gebruikers wordt Dynamic Delivery mode aanbevolen, waarbij emails onmiddellijk worden afgeleverd met placeholders voor attachments, attachments worden gescand in de achtergrond, en automatisch worden vervangen wanneer ze veilig zijn. Deze aanpak balanceert security en productiviteit door gebruikers niet te laten wachten op scan resultaten terwijl security wordt gewaarborgd. Voor externe partners of contractanten kan een aparte policy worden geconfigureerd met Monitor mode voor initial onboarding perioden, waarbij malware wordt gedetecteerd en gelogd maar emails worden afgeleverd, zodat security teams kunnen analyseren welke threats van externe partners komen voordat volledige blocking wordt toegepast.
De policy-architectuur moet een duidelijke hierarchy hebben met een default policy die alle gebruikers beschermt die niet expliciet aan een specifieke policy zijn toegewezen, en specifieke policies voor high-risk gebruikersgroepen die prioriteit hebben. Policy priority wordt bepaald door de volgorde waarin Safe Attachments rules worden geëvalueerd, waarbij rules met lagere priority nummers (bijvoorbeeld 0) eerst worden geëvalueerd en rules met hogere priority nummers later. Dit betekent dat specifieke rules voor executives (priority 0) worden geëvalueerd vóór de default rule voor algemene gebruikers (priority 1), zodat executives altijd de meest restrictieve policy krijgen ongeacht eventuele andere toewijzingen.
Documenteer de policy-architectuur in een centraal document dat beschrijft welke policies zijn geconfigureerd, welke gebruikersgroepen aan welke policies zijn toegewezen, wat de rationale is voor elke policy keuze, welke action modes worden gebruikt en waarom, en hoe exception handling werkt. Deze documentatie is essentieel voor audit doeleinden, change management, en onboarding van nieuwe security team members. Houd de documentatie actueel door regelmatige reviews waarbij policy effectiviteit wordt geëvalueerd en aanpassingen worden doorgevoerd op basis van threat landscape changes, user feedback en performance data.
Stapsgewijze Policy Implementatie Strategie
De implementatie van Safe Attachments policies moet stapsgewijs gebeuren om risico's te minimaliseren en gebruikers te laten wennen aan nieuwe security controls. Start met het aanmaken van een test policy met Monitor mode die wordt toegepast op een kleine groep testgebruikers of een testomgeving, waarbij gedurende twee tot vier weken wordt gemonitord welke malware wordt gedetecteerd, welke false positives optreden, en wat de impact is op gebruikersproductiviteit. Deze test fase is essentieel om te valideren dat de policy configuratie werkt zoals verwacht, dat false positives acceptabel zijn, en dat gebruikers worden geïnformeerd over wat te verwachten.
Na de test fase, implementeer de default policy voor algemene gebruikers met Dynamic Delivery mode, waarbij alle gebruikers worden beschermd die niet expliciet aan een specifieke policy zijn toegewezen. Configureer deze policy met Action: DynamicDelivery, Enable: true, Redirect naar security team email voor malware analysis, en ActionOnError: true om te blokkeren wanneer scanning errors optreden. Maak een Safe Attachments rule aan die deze policy toewijst aan alle gebruikers via RecipientDomainIs met alle geaccepteerde domeinen, en geef deze rule een hoge priority nummer (bijvoorbeeld 10) zodat specifieke rules prioriteit hebben.
Gebruik PowerShell-script safe-attachments-policies.ps1 (functie New-SafeAttachmentPolicySet) – Maakt een volledige set Safe Attachments policies aan volgens de Nederlandse Baseline best practices, inclusief policies voor executives, algemene gebruikers, en default policy.
Implementeer vervolgens specifieke policies voor high-risk gebruikersgroepen, te beginnen met executives en finance teams. Maak een aparte policy aan met Action: Block, Enable: true, Redirect naar security team email, en ActionOnError: true. Maak een Safe Attachments rule aan die deze policy toewijst aan executives via RecipientIsMemberOf met een security group voor executives, en geef deze rule priority 0 zodat deze eerst wordt geëvalueerd. Herhaal dit proces voor andere high-risk groepen zoals finance teams, IT administrators, en externe partners, waarbij elke groep een eigen policy krijgt met prioriteit boven de default policy.
Na implementatie, valideer dat alle gebruikers zijn beschermd door te controleren of elke gebruiker aan ten minste één policy is toegewezen, of direct via een specifieke rule of indirect via de default policy. Gebruik PowerShell om alle Safe Attachments rules op te halen en te valideren dat de coverage compleet is, dat priority nummers correct zijn ingesteld, en dat er geen conflicts zijn tussen rules. Test de policies door test emails met verschillende attachment types te versturen naar verschillende gebruikersgroepen en te verifiëren dat de juiste action modes worden toegepast.
Risicogebaseerde Policy Toewijzing aan Gebruikersgroepen
Risicogebaseerde policy toewijzing zorgt ervoor dat elke gebruikersgroep de juiste security level krijgt op basis van hun risicoprofiel, bedrijfsrol en toegang tot kritieke data. High-risk gebruikersgroepen zoals executives, finance teams en IT administrators hebben toegang tot gevoelige informatie, kunnen financiële transacties autoriseren, of hebben uitgebreide systeemtoegang, en vereisen daarom maximale security met Block mode policies. Executives zijn primaire targets voor CEO fraud aanvallen waarbij aanvallers malware gebruiken om toegang te krijgen tot executive email accounts om vervolgens autorisaties voor grote financiële transacties te versturen, en moeten daarom zero tolerance hebben voor malware met Block mode.
Finance teams verwerken financiële transacties, hebben toegang tot bankrekeningen en betalingssystemen, en zijn targets voor wire transfer scams en business email compromise aanvallen. Zij vereisen ook Block mode policies, maar kunnen baat hebben bij aparte exception handling voor legitieme financiële documenten zoals facturen en contracten die regelmatig worden gedeeld met externe partners. IT administrators hebben uitgebreide systeemtoegang en kunnen via malware compromittering leiden tot volledige tenant takeover, en vereisen daarom ook heightened security, maar kunnen baat hebben bij Dynamic Delivery mode omdat zij technisch onderlegd zijn en beter begrijpen wanneer scanning delays optreden en hoe ze hier mee om moeten gaan.
Voor algemene gebruikers wordt Dynamic Delivery mode aanbevolen omdat deze groep de grootste is en productiviteit kritiek is, terwijl security ook moet worden gewaarborgd. Dynamic Delivery mode elimineert user-facing delays door emails onmiddellijk af te leveren met placeholders, wat gebruikersproductiviteit optimaliseert, terwijl security wordt gewaarborgd door alle attachments te scannen voordat ze beschikbaar worden. Voor externe partners of contractanten kan Monitor mode worden gebruikt tijdens initial onboarding perioden om te analyseren welke threats van externe partners komen, waarna volledige blocking policies kunnen worden toegepast. Testomgevingen moeten altijd Monitor mode gebruiken om security controls te testen zonder impact op gebruikers.
Policy toewijzing gebeurt via Safe Attachments rules die gebruikers identificeren via verschillende criteria zoals RecipientIsMemberOf voor security groups, RecipientDomainIs voor specifieke domeinen, RecipientAddressContains voor specifieke email patterns, of ExceptIfRecipientIsMemberOf voor uitzonderingen. Gebruik security groups voor policy toewijzing omdat dit schaalbaar en onderhoudbaar is, waarbij wijzigingen aan groepslidmaatschap automatisch policy toewijzingen updaten. Documenteer welke security groups worden gebruikt voor welke policies en zorg dat group membership wordt beheerd volgens least privilege principes, waarbij gebruikers alleen lid zijn van groepen die passen bij hun rol en risicoprofiel.
Exception Management en Whitelisting Strategieën
Exception management is een kritiek onderdeel van Safe Attachments policy beheer omdat organisaties legitieme uitzonderingen hebben voor business-critical bestandstypen, vertrouwde senders of domains, specifieke gebruikers met unieke requirements, en tijdelijke uitzonderingen voor projecten. Uitzonderingen moeten echter uiterst voorzichtig worden toegepast omdat elke uitzondering een potentiële security gap creëert die aanvallers kunnen exploiteren. Start daarom met een zero-trust benadering waarbij uitzonderingen alleen worden toegepast wanneer absoluut noodzakelijk voor business operations, en altijd worden gedocumenteerd, gereviewed en regelmatig herbeoordeeld.
Voor business-critical bestandstypen die regelmatig worden geblokkeerd maar legitiem zijn, zoals specifieke CAD bestanden, legale documenten met embedded macros, of medische imaging bestanden, overweeg het gebruik van aparte policies met Monitor mode in plaats van volledige whitelisting, waarbij malware wordt gedetecteerd en gelogd maar bestanden worden afgeleverd, zodat security teams kunnen analyseren of false positives optreden voordat uitzonderingen worden toegepast. Als whitelisting absoluut noodzakelijk is, beperk deze tot specifieke bestandstypen in specifieke contexten, bijvoorbeeld alleen voor bestanden van vertrouwde senders binnen de organisatie, en niet voor externe senders.
Voor vertrouwde senders of domains, gebruik ExceptIfSenderDomainIs of ExceptIfSenderAddressMatchesPatterns in Safe Attachments rules om specifieke senders uit te sluiten van scanning. Beperk deze uitzonderingen tot geverifieerde, vertrouwde senders zoals interne domeinen, geverifieerde partners met gecontracteerde security controls, of gecertificeerde leveranciers met sterke security postures. Documenteer elke uitzondering met rationale, eigenaar, review datum, en expiration date, en voer regelmatige reviews uit waarbij uitzonderingen worden gevalideerd of ze nog steeds nodig zijn en of de vertrouwde status nog steeds gerechtvaardigd is.
Voor specifieke gebruikers met unieke requirements, zoals onderzoekers die grote datasets delen, developers die code samples uitwisselen, of juridische teams die vertrouwelijke documenten verwerken, overweeg aparte policies met aangepaste instellingen in plaats van volledige uitzonderingen. Configureer deze policies met Dynamic Delivery mode of Replace mode waarbij de email body wordt afgeleverd maar attachments worden gescand, zodat security wordt gewaarborgd terwijl business requirements worden ondersteund. Voor tijdelijke uitzonderingen voor projecten, stel altijd expiration dates in en voer automatische reviews uit waarbij tijdelijke uitzonderingen worden verwijderd wanneer ze niet meer nodig zijn. Gebruik change management processen waarbij alle uitzonderingen worden gereviewed door security team en management voordat ze worden toegepast, en log alle uitzonderingen voor audit doeleinden.
Policy Monitoring en Continue Optimalisatie
Gebruik PowerShell-script safe-attachments-policies.ps1 (functie Get-SafeAttachmentPolicyEffectiveness) – Monitort policy effectiviteit per gebruikersgroep, analyseert detection rates, false positive rates en user impact metrics, en identificeert optimalisatie mogelijkheden.
Continue monitoring van Safe Attachments policies is essentieel om policy effectiviteit te meten, false positives te identificeren, emerging threat patterns te detecteren, en optimalisatie mogelijkheden te herkennen. Start met het Microsoft 365 Defender portal dashboard onder Email & collaboration → Threat policies → Safe Attachments → Overview, waar een overzicht wordt getoond van alle geconfigureerde policies, detection statistics per policy, en performance metrics. Review deze metrics regelmatig om trends te identificeren, bijvoorbeeld of bepaalde policies meer malware detecteren dan andere, of er verschillen zijn in false positive rates tussen policies, of er performance issues zijn met specifieke policies.
Gebruik Threat Explorer voor gedetailleerde analyse van malware attempts per policy: Navigate naar Security.microsoft.com → Threat Explorer, filter op 'Malware' of 'Safe Attachments' om alle detected malware attempts te zien, groepeer per policy om te zien welke policies het meest effectief zijn, analyseer bestandstype patterns per policy om trends te identificeren, review false positive escalaties per policy om te zien welke policies de meeste false positives genereren, en exporteer data voor trendanalyse over meerdere maanden. Monitor user impact metrics door support tickets te analyseren die gerelateerd zijn aan Safe Attachments, user satisfaction surveys uit te voeren om te meten hoe gebruikers de policies ervaren, en scanning performance metrics te tracken om te zien of bepaalde policies delays veroorzaken.
Voer quarterly policy reviews uit waarbij policy effectiviteit wordt geëvalueerd, detection rates worden geanalyseerd om te zien of policies hun doel bereiken, false positive rates worden geëvalueerd om te zien of policies te restrictief zijn, user impact metrics worden beoordeeld om te zien of policies productiviteit beïnvloeden, en policy settings worden getuned op basis van performance data en threat landscape changes. Identificeer policy improvement opportunities door te analyseren welke policies kunnen worden geoptimaliseerd voor betere security, welke policies kunnen worden aangepast voor betere gebruikerservaring, welke nieuwe gebruikersgroepen specifieke policies nodig hebben, en welke uitzonderingen kunnen worden verwijderd omdat ze niet meer nodig zijn. Implementeer continuous improvement processen waarbij policy optimalisaties regelmatig worden doorgevoerd, best practices worden gedeeld met security team en management, en policy architectuur wordt geüpdatet op basis van lessons learned en emerging threats.
Governance en Policy Lifecycle Management
Governance en lifecycle management zorgen ervoor dat Safe Attachments policies worden beheerd volgens gestructureerde processen, dat changes worden gereviewed en goedgekeurd voordat ze worden toegepast, en dat policies actueel blijven en compliant zijn met security frameworks. Stel een policy change management proces op waarbij alle policy wijzigingen worden gedocumenteerd in change requests, worden gereviewed door security team en management, worden getest in testomgevingen voordat ze worden toegepast, en worden geïmplementeerd volgens een goedgekeurd rollback plan. Dit proces voorkomt dat changes ad-hoc worden doorgevoerd zonder duidelijke governance, wat kan leiden tot security gaps, compliance issues, en moeilijk te onderhouden configuraties.
Voer regelmatige policy reviews uit waarbij alle policies worden geëvalueerd op basis van hun effectiviteit, compliance met security frameworks, en alignment met business requirements. Start met een baseline review waarbij alle bestaande policies worden geïnventariseerd, gedocumenteerd en geëvalueerd, gevolgd door regelmatige reviews waarbij policies worden beoordeeld op basis van detection rates, false positive rates, user impact metrics, en compliance requirements. Documenteer alle reviews en besluiten in een policy register dat beschikbaar is voor security team, management en auditors.
Implementeer version control voor policies door alle policy wijzigingen te loggen met wie de wijziging heeft doorgevoerd, wanneer deze is doorgevoerd, wat de rationale was, en wat de impact is geweest. Gebruik PowerShell scripts om policy configuraties te exporteren en te versioneren, zodat eerdere versies kunnen worden hersteld indien nodig. Zorg dat rollback procedures zijn gedocumenteerd en getest, zodat policies snel kunnen worden teruggedraaid wanneer onverwachte issues optreden. Map policies naar compliance frameworks zoals CIS Microsoft 365 Foundations Benchmark, BIO Baseline Informatiebeveiliging Overheid, ISO 27001, NIS2 en AVG, en documenteer hoe policies voldoen aan specifieke controls of artikelen. Zorg dat alle policies audit-ready zijn door documentatie, rationale, en effectiviteit metrics bij te houden, zodat auditors kunnen verifiëren dat policies effectief zijn en compliant zijn met security frameworks.
Compliance & Frameworks
CIS M365: Control (L1) - CIS Microsoft 365 Foundations Benchmark - Safe Attachments policies geconfigureerd met risicogebaseerde toewijzing aan gebruikersgroepen
BIO: 12.02.01, 13.02.01 - BIO Baseline Informatiebeveiliging Overheid - Thema 12: Malware bescherming via Safe Attachments policies met risicogebaseerde toewijzing
ISO 27001:2022: A.8.7, A.13.2.1 - ISO 27001:2022 - Malware protection en information transfer policies via Safe Attachments policy architectuur
NIS2: Artikel - NIS2 - Cybersecurity risicobeheer met Safe Attachments policies voor threat detection en prevention
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
Safe Attachments Policies: Beleidsarchitectuur en Best Practices
.DESCRIPTION
Beheert Safe Attachments policies met risicogebaseerde toewijzing aan gebruikersgroepen,
exception management, monitoring en governance processen.
Focus op policy architectuur design en lifecycle management.
.NOTES
Filename: safe-attachments-policies.ps1
Author: Nederlandse Baseline voor Veilige Cloud
Created: 2025-01-27
Last Modified: 2025-01-27
Version: 1.0
Related JSON: content/m365/defender-email/safe-attachments-policies.json
Requires: Microsoft Defender for Office 365 Plan 1 or 2
.LINK
https://github.com/[org]/m365-tenant-best-practise
.EXAMPLE
.\safe-attachments-policies.ps1 -Monitoring
Controleert Safe Attachments policies en rapporteert over policy architectuur en effectiviteit
.EXAMPLE
.\safe-attachments-policies.ps1 -Remediation
Maakt een volledige set Safe Attachments policies aan volgens Nederlandse Baseline best practices
.EXAMPLE
.\safe-attachments-policies.ps1 -DebugMode
Voert een lokale debug-run uit met voorbeeldresultaten zonder verbinding met Microsoft 365#>
#Requires -Version 5.1#Requires -Modules ExchangeOnlineManagement
[CmdletBinding()]
param(
[Parameter(HelpMessage = "Voer monitoring uit op Safe Attachments policies")]
[switch]$Monitoring,
[Parameter(HelpMessage = "Maak Safe Attachments policies aan volgens best practices")]
[switch]$Remediation,
[Parameter(HelpMessage = "Genereer een samenvattend rapport op basis van policy status")]
[switch]$Report,
[Parameter(HelpMessage = "Pad naar het rapportbestand dat moet worden aangemaakt (alleen bij -Report)")]
[string]$OutputPath,
[Parameter(HelpMessage = "Voer een veilige lokale test uit met voorbeelddata, zonder verbinding met Microsoft 365")]
[switch]$DebugMode
)
$ErrorActionPreference = 'Stop'
$VerbosePreference = 'Continue'
function Connect-RequiredServices {
<#
.SYNOPSIS
Verbindt met benodigde Microsoft services
#>
[CmdletBinding()]
param()
if ($DebugMode) {
Write-Verbose "DebugMode: overslaan van verbindingen"return
}
Write-Verbose "Controleren van ExchangeOnlineManagement module..."$exoModule = Get-Module -ListAvailable -Name "ExchangeOnlineManagement"
if (-not $exoModule) {
Write-Host " ⚠️ ExchangeOnlineManagement module niet gevonden" -ForegroundColor Yellow
Write-Host " Installeer met: Install-Module ExchangeOnlineManagement -Scope CurrentUser" -ForegroundColor Yellow
throw "ExchangeOnlineManagement module vereist voor Safe Attachments policies"
}
Write-Verbose "Verbinding maken met Exchange Online..."try {
Connect-ExchangeOnline -ShowBanner:$false -ErrorAction Stop | Out-Null
Write-Verbose "Verbonden met Exchange Online"
}
catch {
Write-Error "Kon niet verbinden met Exchange Online: $_"
Write-Host " Vereiste rechten: Exchange Administrator of Security Administrator" -ForegroundColor Yellow
throw
}
}
functionGet-SafeAttachmentPolicySet {
<#
.SYNOPSIS
Haalt alle Safe Attachments policies en rules op
.OUTPUTS
PSCustomObject met policy architectuur details
#>
[CmdletBinding()]
param()
if ($DebugMode) {
Write-Verbose "DebugMode: retourneren van voorbeelddata"return [PSCustomObject]@{
Policies = @(
[PSCustomObject]@{
Name = "Safe Attachments - Executives"
Action = "Block"
Enable = $true
Redirect = "security-team@company.nl"
ActionOnError = $true
Priority = 0
AppliedTo = "Executive Group"
},
[PSCustomObject]@{
Name = "Safe Attachments - Finance"
Action = "Block"
Enable = $true
Redirect = "security-team@company.nl"
ActionOnError = $true
Priority = 1
AppliedTo = "Finance Group"
},
[PSCustomObject]@{
Name = "Safe Attachments - General Users"
Action = "DynamicDelivery"
Enable = $true
Redirect = "security-team@company.nl"
ActionOnError = $true
Priority = 10
AppliedTo = "All Users"
}
)
Rules = @(
[PSCustomObject]@{
Name = "Safe Attachments Rule - Executives"
Policy = "Safe Attachments - Executives"
Priority = 0
RecipientFilter = "Executive Group"
},
[PSCustomObject]@{
Name = "Safe Attachments Rule - Finance"
Policy = "Safe Attachments - Finance"
Priority = 1
RecipientFilter = "Finance Group"
},
[PSCustomObject]@{
Name = "Safe Attachments Rule - Default"
Policy = "Safe Attachments - General Users"
Priority = 10
RecipientFilter = "All Users"
}
)
TotalPolicies = 3
TotalRules = 3
BlockModePolicies = 2
DynamicDeliveryPolicies = 1
PolicyCoverage = "100%"
}
}
Write-Verbose "Ophalen van Safe Attachments policies en rules..."try {
$policies = Get-SafeAttachmentPolicy -ErrorAction Stop
$rules = Get-SafeAttachmentRule -ErrorAction Stop
$policySet = [PSCustomObject]@{
Policies = @()
Rules = @()
TotalPolicies = $policies.Count
TotalRules = $rules.Count
BlockModePolicies = 0
DynamicDeliveryPolicies = 0
ReplaceModePolicies = 0
MonitorModePolicies = 0
}
foreach ($policy in $policies) {
$policySet.Policies += [PSCustomObject]@{
Name = $policy.Name
Action = $policy.Action
Enable = $policy.Enable
Redirect = $policy.Redirect
ActionOnError = $policy.ActionOnError
}
switch ($policy.Action) {
"Block" { $policySet.BlockModePolicies++ }
"DynamicDelivery" { $policySet.DynamicDeliveryPolicies++ }
"Replace" { $policySet.ReplaceModePolicies++ }
"Monitor" { $policySet.MonitorModePolicies++ }
}
}
foreach ($rule in $rules) {
$policySet.Rules += [PSCustomObject]@{
Name = $rule.Name
Policy = $rule.SafeAttachmentPolicy
Priority = $rule.Priority
Enabled = $rule.Enabled
RecipientFilter = $rule.RecipientFilter
}
}
return$policySet
}
catch {
Write-Error "Fout bij ophalen van Safe Attachments policies: $_"
throw
}
}
functionTest-SafeAttachmentPolicyArchitecture {
<#
.SYNOPSIS
Test of Safe Attachments policy architectuur voldoet aan best practices
.OUTPUTS
PSCustomObject met compliance resultaten
#>
[CmdletBinding()]
param()
Write-Verbose "Controleren van Safe Attachments policy architectuur..."$results = @{
IsCompliant = $false
HasPolicyArchitecture = $false
HasRiskBasedAssignment = $false
HasDefaultPolicy = $false
PolicyCoverage = "0%"
ArchitectureDetails = $null
MissingFeatures = @()
Recommendations = @()
}
if ($DebugMode) {
Write-Host "`n DebugMode: Voorbeeld Safe Attachments policy architectuur status" -ForegroundColor Yellow
$policySet = Get-SafeAttachmentPolicySet$results.HasPolicyArchitecture = $true$results.ArchitectureDetails = $policySet$results.HasRiskBasedAssignment = ($policySet.BlockModePolicies -gt 0 -and $policySet.DynamicDeliveryPolicies -gt 0)
$results.HasDefaultPolicy = ($policySet.Rules | Where-Object { $_.Priority -ge 10 }).Count -gt 0$results.PolicyCoverage = $policySet.PolicyCoverage
if ($policySet.TotalPolicies -gt 0) {
$results.IsCompliant = $results.HasRiskBasedAssignment -and $results.HasDefaultPolicy
Write-Host " ✅ Safe Attachments policies zijn geconfigureerd" -ForegroundColor Green
Write-Host " ✅ Totaal policies: $($policySet.TotalPolicies)" -ForegroundColor Green
Write-Host " ✅ Block mode policies: $($policySet.BlockModePolicies)" -ForegroundColor Green
Write-Host " ✅ Dynamic Delivery policies: $($policySet.DynamicDeliveryPolicies)" -ForegroundColor Green
Write-Host " ✅ Policy coverage: $($results.PolicyCoverage)" -ForegroundColor Green
} else {
$results.MissingFeatures += "Geen Safe Attachments policies gevonden"
Write-Host " ❌ Geen policies gevonden" -ForegroundColor Red
}
return$results
}
try {
$policySet = Get-SafeAttachmentPolicySetif ($policySet -and $policySet.TotalPolicies -gt 0) {
$results.HasPolicyArchitecture = $true$results.ArchitectureDetails = $policySet$results.HasRiskBasedAssignment = ($policySet.BlockModePolicies -gt 0 -and $policySet.DynamicDeliveryPolicies -gt 0)
$results.HasDefaultPolicy = ($policySet.Rules | Where-Object { $_.Priority -ge 10 }).Count -gt 0Write-Host "`n Safe Attachments Policy Architectuur:" -ForegroundColor Cyan
Write-Host " Totaal policies: $($policySet.TotalPolicies)" -ForegroundColor Cyan
Write-Host " Block mode: $($policySet.BlockModePolicies)" -ForegroundColor Green
Write-Host " Dynamic Delivery: $($policySet.DynamicDeliveryPolicies)" -ForegroundColor Cyan
if ($results.HasRiskBasedAssignment) {
Write-Host " ✅ Risicogebaseerde toewijzing geconfigureerd" -ForegroundColor Green
$results.IsCompliant = $true
} else {
Write-Host " ⚠️ Geen risicogebaseerde toewijzing - configureer Block mode voor high-risk gebruikers" -ForegroundColor Yellow
$results.MissingFeatures += "Risicogebaseerde policy toewijzing ontbreekt"
$results.Recommendations += "Configureer Block mode policies voor executives en finance teams"
$results.Recommendations += "Configureer Dynamic Delivery mode policies voor algemene gebruikers"
}
if ($results.HasDefaultPolicy) {
Write-Host " ✅ Default policy geconfigureerd" -ForegroundColor Green
} else {
Write-Host " ⚠️ Geen default policy - configureer een default policy voor alle gebruikers" -ForegroundColor Yellow
$results.MissingFeatures += "Default policy ontbreekt"
$results.Recommendations += "Configureer een default Safe Attachments policy voor alle gebruikers"
}
# Check policy coverage
if ($policySet.TotalRules -gt 0) {
Write-Host " ✅ Policy rules geconfigureerd: $($policySet.TotalRules)" -ForegroundColor Green
} else {
Write-Host " ⚠️ Geen policy rules - policies zijn niet toegewezen aan gebruikers" -ForegroundColor Yellow
$results.MissingFeatures += "Policy rules ontbreken"
$results.Recommendations += "Maak Safe Attachments rules aan om policies toe te wijzen aan gebruikersgroepen"
}
if ($results.IsCompliant) {
$results.Recommendations += "Monitor policy effectiviteit regelmatig via Microsoft 365 Defender portal"
$results.Recommendations += "Review policy architectuur quarterly en pas aan op basis van threat landscape"
}
} else {
$results.MissingFeatures += "Geen Safe Attachments policies gevonden"
Write-Host " ❌ Geen Safe Attachments policies gevonden" -ForegroundColor Red
$results.Recommendations += "Configureer Safe Attachments policies via Microsoft 365 Defender portal"
$results.Recommendations += "Start met een default policy voor alle gebruikers met Dynamic Delivery mode"
$results.Recommendations += "Voeg Block mode policies toe voor executives en finance teams"
}
return$results
}
catch {
Write-Error "Fout bij controleren van Safe Attachments policy architectuur: $_"
throw
}
}
functionNew-SafeAttachmentPolicySet {
<#
.SYNOPSIS
Maakt een volledige set Safe Attachments policies aan volgens Nederlandse Baseline best practices
#>
[CmdletBinding()]
param()
Write-Host "`nRemediatie: Safe Attachments Policy Architectuur Aanmaken" -ForegroundColor Yellow
Write-Host "===========================================================" -ForegroundColor Yellow
try {
$existing = Get-SafeAttachmentPolicy -ErrorAction Stop
if ($existing.Count -gt 0) {
Write-Host "`n Bestaande policies gevonden:" -ForegroundColor Cyan
foreach ($policy in $existing) {
Write-Host " - $($policy.Name) (Action: $($policy.Action))" -ForegroundColor Gray
}
Write-Host "`n ⚠️ Policies bestaan al - review en update handmatig indien nodig" -ForegroundColor Yellow
Write-Host " Voor policy architectuur volgens best practices:" -ForegroundColor Cyan
Write-Host " 1. Configureer Block mode policy voor executives en finance teams" -ForegroundColor Gray
Write-Host " 2. Configureer Dynamic Delivery mode policy voor algemene gebruikers" -ForegroundColor Gray
Write-Host " 3. Maak Safe Attachments rules aan voor policy toewijzing aan security groups" -ForegroundColor Gray
Write-Host " 4. Stel policy priority in (lagere nummers = hogere prioriteit)" -ForegroundColor Gray
Write-Host " 5. Configureer redirect naar security team email voor malware analysis" -ForegroundColor Gray
Write-Host " 6. Valideer policy coverage voor alle gebruikers" -ForegroundColor Gray
Write-Host "`n PowerShell voorbeelden:" -ForegroundColor Cyan
Write-Host " # Maak Block mode policy aan voor executives" -ForegroundColor Gray
Write-Host " New-SafeAttachmentPolicy -Name 'Safe Attachments - Executives' -Action Block -Enable `$true -Redirect 'security-team@company.nl' -ActionOnError `$true" -ForegroundColor White
Write-Host ""
Write-Host " # Maak rule aan voor executives" -ForegroundColor Gray
Write-Host " New-SafeAttachmentRule -Name 'Executives Rule' -SafeAttachmentPolicy 'Safe Attachments - Executives' -RecipientIsMemberOf 'Executive Group' -Priority 0" -ForegroundColor White
Write-Host ""
Write-Host " # Maak Dynamic Delivery policy aan voor algemene gebruikers" -ForegroundColor Gray
Write-Host " New-SafeAttachmentPolicy -Name 'Safe Attachments - General Users' -Action DynamicDelivery -Enable `$true -Redirect 'security-team@company.nl' -ActionOnError `$true" -ForegroundColor White
Write-Host ""
Write-Host " # Maak default rule aan voor alle gebruikers" -ForegroundColor Gray
Write-Host " `$domains = Get-AcceptedDomain | Select-Object -ExpandProperty Name" -ForegroundColor White
Write-Host " New-SafeAttachmentRule -Name 'Default Rule' -SafeAttachmentPolicy 'Safe Attachments - General Users' -RecipientDomainIs `$domains -Priority 10" -ForegroundColor White
exit 0
}
Write-Host "`n Geen bestaande policies gevonden" -ForegroundColor Yellow
Write-Host " ⚠️ Maak policies handmatig aan via Microsoft 365 Defender portal of PowerShell" -ForegroundColor Yellow
Write-Host " Gebruik de bovenstaande PowerShell voorbeelden voor policy architectuur" -ForegroundColor Cyan
exit 0
}
catch {
Write-Error "Fout bij remediatie: $_"
Write-Host " Zorg ervoor dat Microsoft Defender voor Office 365 Plan 1 of 2 is geactiveerd" -ForegroundColor Yellow
exit 2
}
}
functionGet-SafeAttachmentPolicyEffectiveness {
<#
.SYNOPSIS
Monitort policy effectiviteit per gebruikersgroep en analyseert detection rates
#>
[CmdletBinding()]
param()
Write-Host "`nPolicy Effectiviteit Monitoring" -ForegroundColor Yellow
Write-Host "================================" -ForegroundColor Yellow
Write-Host "`n Policy effectiviteit monitoring is beschikbaar via:" -ForegroundColor Cyan
Write-Host " 1. Microsoft 365 Defender portal → Threat policies → Safe Attachments → Overview" -ForegroundColor White
Write-Host " 2. Threat Explorer voor gedetailleerde malware detection analysis" -ForegroundColor White
Write-Host " 3. Quarantine voor false positive analysis" -ForegroundColor White
Write-Host "`n Aanbevolen metrics om te monitoren:" -ForegroundColor Cyan
Write-Host " - Detection rates per policy" -ForegroundColor White
Write-Host " - False positive rates per policy" -ForegroundColor White
Write-Host " - User impact metrics (support tickets, user satisfaction)" -ForegroundColor White
Write-Host " - Scanning performance per policy" -ForegroundColor White
Write-Host "`n Voer quarterly policy reviews uit om effectiviteit te evalueren" -ForegroundColor Yellow
if ($DebugMode) {
Write-Host "`n DebugMode: Voorbeeld policy effectiviteit data" -ForegroundColor Yellow
Write-Host " Policy: Safe Attachments - Executives" -ForegroundColor Gray
Write-Host " Detection rate: 15 malware per maand" -ForegroundColor Gray
Write-Host " False positive rate: 2% (1 false positive per 50 detections)" -ForegroundColor Gray
Write-Host " User impact: Laag (executives begrijpen security requirements)" -ForegroundColor Gray
}
}
function Invoke-Monitoring {
<#
.SYNOPSIS
Monitort Safe Attachments policy architectuur en rapporteert over compliance
#>
[CmdletBinding()]
param()
Write-Host "`nMonitoring: Safe Attachments Policy Architectuur" -ForegroundColor Yellow
Write-Host "===================================================" -ForegroundColor Yellow
$result = Test-SafeAttachmentPolicyArchitectureWrite-Host "`nResultaten:" -ForegroundColor Cyan
Write-Host " Policy architectuur aanwezig: $($result.HasPolicyArchitecture)" -ForegroundColor $(if ($result.HasPolicyArchitecture) { "Green" } else { "Red" })
Write-Host " Risicogebaseerde toewijzing: $($result.HasRiskBasedAssignment)" -ForegroundColor $(if ($result.HasRiskBasedAssignment) { "Green" } else { "Yellow" })
Write-Host " Default policy: $($result.HasDefaultPolicy)" -ForegroundColor $(if ($result.HasDefaultPolicy) { "Green" } else { "Yellow" })
Write-Host " Policy coverage: $($result.PolicyCoverage)" -ForegroundColor Cyan
if ($result.ArchitectureDetails) {
Write-Host "`n Policy Details:" -ForegroundColor Cyan
Write-Host " Totaal policies: $($result.ArchitectureDetails.TotalPolicies)" -ForegroundColor Cyan
Write-Host " Totaal rules: $($result.ArchitectureDetails.TotalRules)" -ForegroundColor Cyan
Write-Host " Block mode: $($result.ArchitectureDetails.BlockModePolicies)" -ForegroundColor Green
Write-Host " Dynamic Delivery: $($result.ArchitectureDetails.DynamicDeliveryPolicies)" -ForegroundColor Cyan
}
if ($result.MissingFeatures.Count -gt 0) {
Write-Host "`n Ontbrekende features:" -ForegroundColor Red
foreach ($feature in $result.MissingFeatures) {
Write-Host " - $feature" -ForegroundColor Red
}
}
if ($result.Recommendations.Count -gt 0) {
Write-Host "`n Aanbevelingen:" -ForegroundColor Cyan
foreach ($recommendation in $result.Recommendations) {
Write-Host " - $recommendation" -ForegroundColor Yellow
}
}
Write-Host "`n Belangrijke opmerking:" -ForegroundColor Cyan
Write-Host " Safe Attachments vereist Microsoft Defender voor Office 365 Plan 1 of 2" -ForegroundColor Yellow
Write-Host " Policy architectuur beschikbaar via: https://security.microsoft.com/safeattachmentv2" -ForegroundColor Cyan
if ($result.IsCompliant) {
Write-Host "`n✅ COMPLIANT - Safe Attachments policy architectuur voldoet aan best practices" -ForegroundColor Green
exit 0
} else {
Write-Host "`n⚠️ ATTENTIE - Safe Attachments policy architectuur vereist verbetering" -ForegroundColor Yellow
Write-Host " Gebruik -Remediation om policy architectuur aan te maken volgens best practices" -ForegroundColor Yellow
exit 1
}
}
function Invoke-Report {
<#
.SYNOPSIS
Genereert een beknopt managementrapport op basis van Safe Attachments policy architectuur status
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[pscustomobject]$Result,
[Parameter(Mandatory = $true)]
[string]$OutputPath
)
$folder = Split-Path -Path $OutputPath -Parent
if (-not [string]::IsNullOrWhiteSpace($folder) -and -not (Test-Path -Path $folder)) {
New-Item -Path $folder -ItemType Directory -Force | Out-Null
}
$lines = @()
$lines += "Safe Attachments Policy Architectuur – Managementrapport"
$lines += "Nederlandse Baseline voor Veilige Cloud"
$lines += ("Datum: {0}" -f (Get-Date -Format "yyyy-MM-dd HH:mm"))
$lines += ""
$lines += "1. Samenvatting van de status"
$lines += (" Policy architectuur aanwezig: {0}" -f $Result.HasPolicyArchitecture)
$lines += (" Risicogebaseerde toewijzing: {0}" -f $Result.HasRiskBasedAssignment)
$lines += (" Default policy: {0}" -f $Result.HasDefaultPolicy)
$lines += (" Policy coverage: {0}" -f $Result.PolicyCoverage)
$lines += (" Compliant: {0}" -f $Result.IsCompliant)
$lines += ""
if ($Result.ArchitectureDetails) {
$lines += "2. Policy Architectuur Details"
$lines += (" Totaal policies: {0}" -f $Result.ArchitectureDetails.TotalPolicies)
$lines += (" Totaal rules: {0}" -f $Result.ArchitectureDetails.TotalRules)
$lines += (" Block mode policies: {0}" -f $Result.ArchitectureDetails.BlockModePolicies)
$lines += (" Dynamic Delivery policies: {0}" -f $Result.ArchitectureDetails.DynamicDeliveryPolicies)
$lines += ""
if ($Result.ArchitectureDetails.Policies.Count -gt 0) {
$lines += "3. Policy Details"
foreach ($policy in $Result.ArchitectureDetails.Policies) {
$lines += (" - {0}" -f $policy.Name)
$lines += (" Action: {0}" -f $policy.Action)
$lines += (" Enabled: {0}" -f $policy.Enable)
$lines += (" Redirect: {0}" -f $policy.Redirect)
}
$lines += ""
}
if ($Result.ArchitectureDetails.Rules.Count -gt 0) {
$lines += "4. Policy Rules"
foreach ($rule in $Result.ArchitectureDetails.Rules) {
$lines += (" - {0}" -f $rule.Name)
$lines += (" Policy: {0}" -f $rule.Policy)
$lines += (" Priority: {0}" -f $rule.Priority)
$lines += (" Enabled: {0}" -f $rule.Enabled)
}
$lines += ""
}
}
$lines += "5. Aanbevelingen"
if ($Result.Recommendations.Count -gt 0) {
foreach ($recommendation in $Result.Recommendations) {
$lines += (" - {0}" -f $recommendation)
}
} else {
$lines += " Geen specifieke aanbevelingen"
}
$lines += ""
$lines += "6. Interpretatie"
$lines += " Dit rapport geeft een overzicht van Safe Attachments policy architectuur"
$lines += " zoals beschreven in de Nederlandse Baseline voor Veilige Cloud."
$lines += " Het vervangt geen volledige analyse, maar kan worden gebruikt om"
$lines += " voortgang richting bestuur en directie te rapporteren."
$lines += ""
$lines += " Voor gedetailleerde analyses, gebruik de Microsoft 365 Defender portal:"
$lines += " https://security.microsoft.com/safeattachmentv2"
$lines | Out-File -FilePath $OutputPath -Encoding UTF8 -Force
Write-Host "Managementrapport aangemaakt: $OutputPath" -ForegroundColor Green
}
# ============================================================================
# MAIN EXECUTION
# ============================================================================
try {
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "Safe Attachments Policies" -ForegroundColor Cyan
Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
if ($DebugMode) {
Write-Host "DebugMode ingeschakeld: er worden geen verbindingen gemaakt met Microsoft 365." -ForegroundColor Yellow
Write-Host ""
}
if ($Monitoring) {
Connect-RequiredServices
Invoke-Monitoring
}
elseif ($Remediation) {
Connect-RequiredServices
New-SafeAttachmentPolicySet
}
elseif ($Report) {
Connect-RequiredServices
$result = Test-SafeAttachmentPolicyArchitectureif ([string]::IsNullOrWhiteSpace($OutputPath)) {
throw "Parameter -OutputPath is verplicht bij gebruik van -Report."
}
Invoke-Report -Result $result -OutputPath $OutputPath
}
else {
# Default: Status check
Connect-RequiredServices
$result = Test-SafeAttachmentPolicyArchitectureif ($result.IsCompliant) {
Write-Host "`n✅ COMPLIANT - Safe Attachments policy architectuur voldoet aan best practices" -ForegroundColor Green
}
else {
Write-Host "`n⚠️ ATTENTIE - Safe Attachments policy architectuur vereist verbetering" -ForegroundColor Yellow
}
Write-Host "`nGebruik een van de volgende opties:" -ForegroundColor Yellow
Write-Host " -Monitoring Controleer Safe Attachments policy architectuur en rapporteer status" -ForegroundColor Yellow
Write-Host " -Remediation Maak Safe Attachments policies aan volgens best practices" -ForegroundColor Yellow
Write-Host " -Report Genereer een managementrapport op basis van de status (vereist -OutputPath)" -ForegroundColor Yellow
Write-Host " -DebugMode Gebruik voorbeelddata voor een veilige lokale test" -ForegroundColor Yellow
return$result
}
}
catch {
Write-Error "Fout in safe-attachments-policies.ps1: $_"
throw
}
finally {
Write-Host "`n========================================`n" -ForegroundColor Cyan
}
Risico zonder implementatie
Risico zonder implementatie
High: Zonder gestructureerde Safe Attachments policy-architectuur blijven organisaties kwetsbaar voor zero-day malware, hebben ze suboptimale security voor high-risk gebruikers zoals executives en finance teams, en ondervinden ze onnodige productiviteitsimpact voor algemene gebruikers. Een one-size-fits-all aanpak houdt geen rekening met verschillende risicoprofielen en kan leiden tot security gaps, compliance issues, en moeilijk te onderhouden configuraties.
Management Samenvatting
Ontwerp en implementeer een volwassen Safe Attachments policy-architectuur met meerdere policies voor verschillende risicoprofielen en gebruikersgroepen. Configureer Block mode policies voor executives en finance teams, Dynamic Delivery mode policies voor algemene gebruikers, en implementeer exception management, monitoring en governance processen. Voldoet aan CIS 2.1.5-2.1.6 (L1), BIO 12.02.01, ISO 27001 A.8.7/A.13.2.1, NIS2, AVG Artikel 32. Implementatie: 20 uur technisch + 30 uur voor governance, documentatie en testing. CRITICAL voor risicogebaseerde email security.