Anti-Malware Beleidsregels Geconfigureerd In Microsoft Defender Voor Office 365

💼 Management Samenvatting

Anti-malware beleidsregels in Microsoft Defender voor Office 365 vormen de eerste verdedigingslinie tegen kwaadaardige software die via email wordt verspreid. Deze beleidsregels gebruiken signature-based scanning, heuristische detectie en real-time threat intelligence om malware in email attachments en links te identificeren voordat gebruikers deze kunnen openen. Voor Nederlandse overheidsorganisaties is het configureren van effectieve anti-malware beleidsregels essentieel voor compliance met de Nederlandse Baseline voor Veilige Cloud, de BIO en NIS2-vereisten rond email security.

Aanbeveling
IMPLEMENT
Risico zonder
Critical
Risk Score
9/10
Implementatie
5u (tech: 2u)
Van toepassing op:
M365
Exchange Online
Defender voor Office 365
SharePoint
OneDrive
Teams

Malware verspreid via email blijft een van de grootste cyberdreigingen voor organisaties. Aanvallers gebruiken geavanceerde technieken zoals polymorphic malware die signatures continu verandert, zero-day exploits die nog geen bekende signatures hebben, encoded attachments die signature-based scanning proberen te omzeilen, en social engineering om gebruikers te verleiden kwaadaardige bestanden te openen. Ransomware, trojans, keyloggers en botnets worden regelmatig via email verspreid met catastrofale gevolgen: volledige systeemcompromittering, data-encryptie en gijzeling, diefstal van gevoelige gegevens, en uitval van kritieke dienstverlening. Zonder effectieve anti-malware scanning kunnen kwaadaardige bestanden ongehinderd inboxen bereiken, waarbij gebruikers onbewust hun systemen infecteren door een attachment te openen of op een kwaadaardige link te klikken. Traditionele antivirusoplossingen die alleen op endpoints werken zijn onvoldoende omdat ze pas detecteren nadat malware al is binnengekomen, terwijl email-based anti-malware scanning malware blokkeert voordat het zelfs maar wordt afgeleverd. Anti-malware beleidsregels voorkomen deze risico's door alle inkomende en uitgaande emails te scannen op bekende malware signatures, verdachte patronen en kwaadaardig gedrag, waarbij detected malware automatisch wordt geblokkeerd en in quarantine wordt geplaatst voordat gebruikers deze kunnen bereiken.

PowerShell Modules Vereist
Primary API: Exchange Online PowerShell
Connection: Connect-ExchangeOnline
Required Modules: ExchangeOnlineManagement

Implementatie

Anti-malware beleidsregels configureren een geautomatiseerd scanning- en filteringsproces dat alle email attachments en embedded content analyseert op de aanwezigheid van kwaadaardige software. De configuratie omvat verschillende componenten: (1) Malware detection response - bepaalt wat er gebeurt wanneer malware wordt gedetecteerd: DeleteMessage (verwijder het gehele bericht), DeleteAttachmentAndUseDefaultAlert (verwijder alleen de attachment en lever de email zonder attachment af met een waarschuwing), DeleteAttachmentAndUseCustomAlert (verwijder attachment en stuur een aangepaste waarschuwingsemail), of QuarantineMessage (plaats het volledige bericht in quarantine voor beoordeling), (2) Quarantine settings - configureert waar detected malware wordt opgeslagen en wie toegang heeft tot quarantined items, met opties voor admin-only access of end-user access via quarantine portal, (3) Notification settings - bepaalt wie wordt geïnformeerd over detected malware: admins kunnen notifications ontvangen voor alle detected threats, gebruikers kunnen worden gewaarschuwd wanneer hun emails malware bevatten, en security teams kunnen real-time alerts ontvangen voor high-severity threats, (4) Common attachment types filter - blokkeert automatisch gevaarlijke bestandstypes zoals .exe, .scr, .bat, .cmd, .com, .pif, .vbs, .js zelfs als deze niet als malware worden gedetecteerd, wat een aanvullende beveiligingslaag biedt, (5) ZAP (Zero-hour Auto Purge) integration - configureert automatische verwijdering van reeds afgeleverde emails wanneer deze later als malware worden geïdentificeerd door threat intelligence updates. De beleidsregels werken samen met Safe Attachments policies voor geavanceerde sandbox-scanning en vormen een gelaagde verdediging waarbij signature-based anti-malware scanning de eerste laag vormt en Safe Attachments sandbox-detection de tweede laag voor onbekende threats.

Vereisten

Voor het configureren van anti-malware beleidsregels zijn verschillende voorwaarden vereist die ervoor zorgen dat de implementatie succesvol verloopt en effectieve bescherming biedt.

  1. Exchange Online licentie (onderdeel van Microsoft 365 Business Standard, E3, E5 of standalone Exchange Online Plan)
  2. Microsoft Defender voor Office 365 Plan 1 of Plan 2 voor geavanceerde malware protection (aanbevolen maar niet vereist voor basis anti-malware)
  3. Exchange Administrator of Security Administrator rol voor policy configuratie via portal of PowerShell
  4. PowerShell 5.1 of hoger met ExchangeOnlineManagement module geïnstalleerd voor geautomatiseerde configuratie en bulk-operaties
  5. Security team email adres voor malware notifications: Configureer een gedeeld mailbox of distribution list waar alle malware alerts worden afgeleverd voor incident response
  6. Quarantine policy documentatie: Bepaal welke quarantine policy wordt gebruikt (admin-only of end-user accessible) en documenteer procedures voor malware review
  7. Notification preferences planning: Beslis wie wordt geïnformeerd over detected malware - admins alleen, of ook end-users wanneer hun emails worden geblokkeerd
  8. Common attachment types assessment: Identificeer welke gevaarlijke bestandstypes moeten worden geblokkeerd standaard, en welke legitieme use cases er zijn voor deze bestandstypes binnen de organisatie
  9. ZAP (Zero-hour Auto Purge) strategie: Bepaal of ZAP moet worden ingeschakeld voor automatische verwijdering van reeds afgeleverde malware emails
  10. Testing plan: Valideer dat business-critical emails met legitieme attachments niet false positive worden geblokkeerd, en test malware detection met EICAR test file
  11. Incident response procedures: Definieer hoe security team reageert op detected malware - wie onderzoekt quarantined items, hoe worden false positives opgelost, en welke escalation procedures gelden
  12. Compliance mapping: Documenteer hoe anti-malware policies voldoen aan BIO richtlijn 13.02 voor email security, ISO 27001 A.13.2.1 voor information transfer protection, NIS2 Artikel 21 voor cybersecurity risicobeheer, en CIS Microsoft 365 Foundations Benchmark control 2.1.1

Implementatie

Anti-malware beleidsregels kunnen worden geconfigureerd via de Microsoft 365 Defender portal of via PowerShell met de ExchangeOnlineManagement module. De portal-methode is gebruiksvriendelijk voor ad-hoc configuratie en wijzigingen, terwijl PowerShell-methode geschikt is voor geautomatiseerde deployment, bulk-operaties en consistency across multiple tenants.

Gebruik PowerShell-script anti-malware-policies.ps1 (functie Invoke-Remediation) – PowerShell script voor automatische configuratie van anti-malware beleidsregels met aanbevolen security settings inclusief quarantine configuratie en notification settings.

De implementatie via Microsoft 365 Defender portal begint met navigatie naar de Threat policies sectie waar anti-malware configuraties worden beheerd. Na het selecteren van Anti-malware policies wordt een nieuwe policy aangemaakt met een beschrijvende naam zoals 'Default Anti-Malware Policy' of 'Company Wide Malware Protection'. De eerste configuratiestap betreft de malware detection response, waarbij wordt bepaald wat er gebeurt wanneer malware wordt gedetecteerd. Voor de meeste organisaties is DeleteMessage de aanbevolen optie omdat dit het risico volledig elimineert, maar organisaties die bang zijn voor false positives kunnen kiezen voor DeleteAttachmentAndUseDefaultAlert zodat gebruikers ten minste worden geïnformeerd over geblokkeerde emails. Vervolgens wordt de quarantine configuratie ingesteld, waarbij wordt gekozen welke quarantine policy wordt gebruikt. De standaard quarantine policy beperkt toegang tot admins, wat geschikt is voor organisaties met centrale security teams. Voor organisaties die gebruikers meer autonomie willen geven kan een aangepaste quarantine policy worden gemaakt die gebruikers toegang geeft tot hun eigen quarantined items via de quarantine portal.

Notification settings vormen een cruciaal onderdeel van de configuratie omdat deze bepalen wie wordt geïnformeerd over detected malware en wanneer. Admin notifications kunnen worden ingeschakeld voor alle detected malware of alleen voor high-severity threats, en worden afgeleverd naar een opgegeven email adres zoals security-team@company.com. End-user notifications informeren gebruikers wanneer hun inkomende emails malware bevatten, wat helpt bij awareness maar ook kan leiden tot verwarring wanneer gebruikers niet begrijpen waarom legitieme emails zijn geblokkeerd. Security teams moeten daarom zorgvuldig afwegen of end-user notifications worden ingeschakeld en gebruikers trainen over wat te doen wanneer zij een malware notification ontvangen.

Het configureren van common attachment types filtering biedt een aanvullende beveiligingslaag door automatisch gevaarlijke bestandstypes te blokkeren, zelfs wanneer deze niet als malware worden gedetecteerd door signature scanning. Deze filter blokkeert standaard executable bestanden zoals .exe, .scr, .bat, .cmd, .com, .pif, en script bestanden zoals .vbs, .js die vaak worden gebruikt voor malware distribution. Organisaties moeten echter voorzichtig zijn met het blokkeren van legitieme bestandstypes - sommige organisaties gebruiken bijvoorbeeld .bat bestanden voor geautomatiseerde workflows, en ontwikkelaars kunnen legitieme .exe bestanden nodig hebben. In dergelijke gevallen kunnen uitzonderingen worden geconfigureerd of kunnen deze bestandstypes worden toegestaan maar wel worden gescand door Safe Attachments voor aanvullende verificatie.

Zero-hour Auto Purge (ZAP) integratie vormt de laatste component van een volledige anti-malware configuratie. ZAP verwijder automatisch reeds afgeleverde emails wanneer threat intelligence updates deze later identificeren als malware. Dit is essentieel omdat nieuwe malware vaak niet direct wordt gedetecteerd door signature scanning, maar pas later wordt toegevoegd aan threat intelligence databases na analyse van aanvallen. ZAP kan worden geconfigureerd voor zowel inkomende als uitgaande emails, en werkt automatisch zonder gebruikersinterventie. Echter moet worden opgemerkt dat ZAP alleen werkt voor emails die nog in mailboxen staan - emails die al zijn geopend of waarvan attachments al zijn gedownload kunnen niet worden teruggedraaid door ZAP.

Na configuratie van alle policy settings wordt de policy toegewezen aan gebruikers. De standaard anti-malware policy wordt automatisch toegepast op alle gebruikers in de tenant, maar organisaties kunnen ook aangepaste policies maken voor specifieke gebruikersgroepen met verschillende security requirements. Bijvoorbeeld kunnen executives en finance teams stricter policies krijgen met DeleteMessage response en uitgebreide notifications, terwijl reguliere gebruikers een meer permissieve policy krijgen met DeleteAttachmentAndUseDefaultAlert om false positives te voorkomen. Testing en validatie vormen een cruciaal onderdeel van de implementatie - organisaties moeten testen met EICAR test files om te verifiëren dat malware detection werkt, en moeten business-critical email flows testen om te zorgen dat legitieme emails niet worden geblokkeerd.

  1. Ga naar security.microsoft.com → Email & collaboration → Threat policies
  2. Select 'Anti-malware policies' in de policy types lijst
  3. Klik 'Create' om een nieuwe policy aan te maken → Name: 'Default Anti-Malware Policy'
  4. Configureer Malware detection response:
  5. - Select 'Delete message' voor maximale security (aanbevolen)
  6. - Of select 'Delete attachment and use default alert' voor balans tussen security en gebruikersinformatie
  7. - Of select 'Quarantine message' voor review door security team
  8. Configureer Quarantine settings:
  9. - Select quarantine policy: AdminOnlyAccessPolicy (standaard) of aangepaste policy
  10. - Bepaal retention period voor quarantined items (standaard: 30 dagen)
  11. Configureer Notification settings:
  12. - Admin notifications: Enable → security-team@company.com
  13. - Notify administrators about undelivered messages: Yes
  14. - Notify recipients about quarantined messages: Optioneel (afhankelijk van organisatiebeleid)
  15. Configureer Common attachment types filter:
  16. - Enable common attachment types filter: Yes
  17. - Blocked file types: .exe, .scr, .bat, .cmd, .com, .pif, .vbs, .js (standaard)
  18. - Voeg aanvullende bestandstypes toe indien nodig: .ps1, .jar, .app
  19. Configureer ZAP (Zero-hour Auto Purge):
  20. - Enable ZAP for malware: Yes (aanbevolen)
  21. - ZAP works automatically voor inkomende en uitgaande emails
  22. Assign policy:
  23. - Applied to: All users (standaard) of specifieke gebruikersgroepen
  24. - Priority: 0 (hoogste prioriteit)
  25. Save policy en wacht op propagation (kan tot 30 minuten duren)
  26. Test malware detection:
  27. - Verzend test email met EICAR test file (X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*)
  28. - Verifieer dat email wordt geblokkeerd en in quarantine wordt geplaatst
  29. - Controleer admin notifications worden ontvangen
  30. Test false positives:
  31. - Test business-critical emails met legitieme attachments
  32. - Verifieer dat legitieme emails niet worden geblokkeerd
  33. - Pas policy aan indien false positives optreden

Monitoring

Gebruik PowerShell-script anti-malware-policies.ps1 (functie Invoke-Monitoring) – Controleert of anti-malware beleidsregels zijn geconfigureerd en rapporteert status, detection statistics en policy compliance.

Continue monitoring van anti-malware beleidsregels is essentieel om te verifiëren dat de configuratie effectief werkt en om trends in malware-aanvallen te identificeren. Microsoft 365 Defender portal biedt uitgebreide dashboards en rapporten die real-time inzicht geven in malware detection rates, quarantined items, en policy effectiveness.

Het Threat protection status dashboard toont overzichtsstatistieken van alle detected malware, inclusief totalen per dag, week en maand, en trends over tijd. Security teams moeten regelmatig dit dashboard reviewen om te identificeren of malware-aanvallen toenemen, welke bestandstypes het meest worden gebruikt voor malware distribution, en of detection rates effectief zijn. Een plotselinge toename van detected malware kan duiden op een gerichte aanval tegen de organisatie, terwijl een afname kan betekenen dat aanvallers andere aanvalsvectoren gebruiken of dat detection niet optimaal werkt.

Quarantine management vormt een belangrijk onderdeel van de monitoring workflow. Security teams moeten regelmatig quarantined items reviewen om te verifiëren dat detected malware legitiem is en geen false positives betreft. De quarantine portal biedt filters en zoekfuncties om specifieke items te vinden, en bevat detailed information over waarom items zijn geblokkeerd, welke signatures werden gedetecteerd, en van welke senders de emails afkomstig zijn. False positives moeten worden geïdentificeerd en opgelost door senders toe te voegen aan allow lists of door policy settings aan te passen, terwijl legitieme malware moet worden geanalyseerd om te begrijpen welke threats de organisatie targeten.

Threat Explorer biedt geavanceerde hunting capabilities voor diepgaande analyse van malware campaigns en attack patterns. Security analisten kunnen queries gebruiken om specifieke malware families te onderzoeken, sender patterns te analyseren, en tijdreeksen van aanvallen te visualiseren. Deze informatie kan worden gebruikt om threat intelligence te verbeteren, gebruikers te trainen over specifieke threats, en incident response procedures te verfijnen.

  1. Microsoft 365 Defender portal → Email & collaboration → Threat protection status
  2. Malware detections dashboard: Review daily/weekly/monthly statistics van detected malware
  3. Top malware families: Identificeer welke malware types het meest worden gebruikt tegen de organisatie
  4. Quarantine management: Review quarantined items regelmatig voor false positives en threat analysis
  5. Admin notifications monitoring: Controleer of alle malware alerts worden ontvangen en verwerkt
  6. Policy effectiveness metrics: Blokkeer rate, false positive rate, tijd tot detection
  7. Threat Explorer: Geavanceerde hunting voor malware campaigns en attack patterns
  8. Sender analysis: Identificeer welke domains het meest worden gebruikt voor malware distribution
  9. Attachment type analysis: Welke bestandstypes bevatten het meest malware
  10. ZAP effectiveness: Monitor hoeveel reeds afgeleverde emails door ZAP worden verwijderd
  11. Monthly review: Analyseer trends, update allow/block lists, tune policy settings

Remediatie

Gebruik PowerShell-script anti-malware-policies.ps1 (functie Invoke-Remediation) – Herstelt anti-malware policy configuratie naar aanbevolen settings wanneer deze ontbreekt of niet compliant is.

Remediatie van anti-malware beleidsregels is nodig wanneer policies ontbreken, niet correct zijn geconfigureerd, of wanneer false positives legitieme business processen verstoren. Het PowerShell script kan automatisch een nieuwe policy aanmaken met aanbevolen settings wanneer geen policies bestaan, of bestaande policies bijwerken naar compliant configurations.

Voor false positives waarbij legitieme emails onterecht worden geblokkeerd moeten security teams eerst de reden voor blocking identificeren door quarantined items te reviewen en email headers te analyseren. Vaak worden false positives veroorzaakt door legitieme attachments die lijken op malware patterns, of door senders die zijn gemarkeerd in threat intelligence databases maar in werkelijkheid legitiem zijn. In dergelijke gevallen kunnen senders worden toegevoegd aan transport rules allow lists, of kunnen policy settings worden aangepast om minder agressief te zijn voor specifieke scenarios. Echter moeten security teams voorzichtig zijn met het toevoegen van uitzonderingen omdat dit security kan verzwakken - elke uitzondering moet worden gedocumenteerd en gerechtvaardigd.

Wanneer malware wordt gedetecteerd maar niet wordt geblokkeerd (false negatives) moeten security teams de policy settings evalueren en mogelijk strenger maken. Dit kan betekenen dat DeleteMessage response wordt gekozen in plaats van DeleteAttachmentAndUseDefaultAlert, of dat common attachment types filter wordt uitgebreid met aanvullende bestandstypes. Security teams moeten echter balanceren tussen security en usability - te agressieve policies kunnen legitieme business processen verstoren en leiden tot gebruikersfrustratie.

  1. Voor missing policies: Gebruik PowerShell script met -Remediation parameter om automatisch policy aan te maken
  2. Voor false positives:
  3. - Review quarantined item details in quarantine portal
  4. - Analyseer email headers en attachment information
  5. - Identificeer waarom email werd geblokkeerd (signature match, attachment type, sender reputation)
  6. - Als legitiem: Release email uit quarantine en voeg sender toe aan allow list indien nodig
  7. - Als onduidelijk: Forward naar security team voor analyse
  8. - Documenteer uitzondering en rechtvaardiging
  9. Voor false negatives (malware niet gedetecteerd):
  10. - Submit email naar Microsoft voor threat intelligence update
  11. - Overweeg stricter policy settings (DeleteMessage in plaats van DeleteAttachment)
  12. - Evalueer of Safe Attachments policies nodig zijn voor aanvullende sandbox scanning
  13. - Review common attachment types filter - voeg gevaarlijke bestandstypes toe indien nodig
  14. Policy tuning:
  15. - Pas malware detection response aan op basis van false positive/negative rates
  16. - Update common attachment types filter wanneer nieuwe malware patterns worden geïdentificeerd
  17. - Ajust notification settings om security team te informeren zonder alert fatigue
  18. - Review en update quarantine policies voor optimale workflow

Compliance en Auditing

Anti-malware beleidsregels zijn een fundamentele vereiste voor email security compliance binnen de Nederlandse Baseline voor Veilige Cloud en verschillende internationale standaarden. CIS Microsoft 365 Foundations Benchmark controle 2.1.1 vereist expliciet dat anti-malware scanning is ingeschakeld voor alle inkomende en uitgaande emails, met aanbevolen configuratie voor DeleteMessage response en admin notifications. BIO Thema 13.02.01 over overdracht van informatie specificeert dat organisaties technische maatregelen moeten implementeren om kwaadaardige software te detecteren en te blokkeren bij email transfers, wat direct wordt afgedekt door anti-malware beleidsregels.

ISO 27001:2022 controle A.13.2.1 over information transfer policies en procedures vereist dat organisaties maatregelen nemen om informatie te beschermen tijdens overdracht, inclusief detectie en preventie van kwaadaardige software. Anti-malware beleidsregels vormen een essentiële technische controle die deze vereiste ondersteunt door automatisch malware te detecteren en te blokkeren voordat deze organisatiesystemen kan bereiken. NIS2 Artikel 21 over cybersecurity risicobeheer vereist dat essentiële en belangrijke entiteiten passende technische en organisatorische maatregelen nemen om cybersecurity-risico's te beheersen, waarbij email security en malware preventie expliciet worden genoemd als kritieke beveiligingscontroles.

Voor audit doeleinden moeten organisaties kunnen aantonen dat anti-malware beleidsregels zijn geconfigureerd en actief zijn, inclusief evidence van detection rates, quarantine management procedures, en incident response workflows. PowerShell output van Get-MalwareFilterPolicy commands, screenshots van policy configuraties in de Microsoft 365 Defender portal, en maandelijkse rapporten van malware detection statistics vormen essentiële audit evidence. Bovendien moeten organisaties documenteren hoe false positives worden behandeld, hoe policies worden getuned op basis van threat intelligence, en hoe anti-malware integreert met andere email security controls zoals Safe Attachments en Safe Links.

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 Anti-Malware Policies Configuration voor Microsoft Defender voor Office 365 .DESCRIPTION Configureert anti-malware policies in Microsoft Defender voor Office 365 inclusief malware detection response, quarantine settings, notifications en common attachment types filtering. Implementeert basis email security tegen malware verspreid via email attachments en links. .NOTES Filename: anti-malware-policies.ps1 Author: Nederlandse Baseline voor Veilige Cloud Created: 2025-01-28 Last Modified: 2025-01-28 Version: 1.0 Related JSON: content/m365/defender-email/anti-malware-policies.json .EXAMPLE .\anti-malware-policies.ps1 -Monitoring Controleert of anti-malware policies zijn geconfigureerd en rapporteert status. .EXAMPLE .\anti-malware-policies.ps1 -Remediation Maakt automatisch een anti-malware policy aan met aanbevolen security settings. .EXAMPLE .\anti-malware-policies.ps1 -Remediation -WhatIf Toont preview van wat er zou gebeuren zonder daadwerkelijke wijzigingen. #> #Requires -Version 5.1 #Requires -Modules ExchangeOnlineManagement [CmdletBinding()] param( [Parameter(HelpMessage = "Voer compliance check uit en toon gedetailleerd rapport")] [switch]$Monitoring, [Parameter(HelpMessage = "Voer automatische remediatie uit (maak/update policy)")] [switch]$Remediation, [Parameter(HelpMessage = "Draai wijzigingen terug (verwijder policy)")] [switch]$Revert, [Parameter(HelpMessage = "Toon preview zonder daadwerkelijke wijzigingen")] [switch]$WhatIf ) $ErrorActionPreference = 'Stop' $VerbosePreference = 'Continue' Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Anti-Malware Policies Configuration" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan function Connect-RequiredServices { <# .SYNOPSIS Maakt verbinding met Exchange Online PowerShell. #> [CmdletBinding()] param() try { $exchangeSession = Get-PSSession | Where-Object { $_.ConfigurationName -eq 'Microsoft.Exchange' -and $_.State -eq 'Opened' } if (-not $exchangeSession) { Write-Host "Connecting to Exchange Online..." -ForegroundColor Gray Connect-ExchangeOnline -ShowBanner:$false -ErrorAction Stop Write-Host "Connected successfully" -ForegroundColor Green } else { Write-Host "Already connected to Exchange Online" -ForegroundColor Green } } catch { Write-Host "ERROR: Failed to connect to Exchange Online" -ForegroundColor Red Write-Host " $_" -ForegroundColor Red Write-Host "`nPlease ensure:" -ForegroundColor Yellow Write-Host " 1. ExchangeOnlineManagement module is installed: Install-Module -Name ExchangeOnlineManagement" -ForegroundColor Yellow Write-Host " 2. You have Exchange Administrator or Security Administrator role" -ForegroundColor Yellow Write-Host " 3. MFA is properly configured for your account" -ForegroundColor Yellow throw } } function Invoke-Monitoring { <# .SYNOPSIS Controleert of anti-malware policies zijn geconfigureerd. .OUTPUTS PSCustomObject met compliance status en policy details. #> [CmdletBinding()] param() try { Write-Host "Monitoring: Anti-Malware Policies" -ForegroundColor Yellow Connect-RequiredServices $policies = Get-MalwareFilterPolicy -ErrorAction Stop $rules = Get-MalwareFilterRule -ErrorAction Stop $result = @{ isCompliant = $false totalPolicies = $policies.Count enabledPolicies = 0 totalRules = $rules.Count enabledRules = 0 policyDetails = @() missingConfiguration = @() } if ($policies.Count -eq 0) { Write-Host "`n STATUS: NON-COMPLIANT" -ForegroundColor Red Write-Host " No anti-malware policies found" -ForegroundColor Red $result.missingConfiguration += "No anti-malware policies configured" } else { Write-Host "`n Anti-Malware Policies: $($policies.Count)" -ForegroundColor Cyan foreach ($policy in $policies) { $policyDetails = @{ Name = $policy.Name Identity = $policy.Identity Enabled = $policy.Enabled Action = $policy.Action QuarantineTag = $policy.QuarantineTag AdminDisplayName = $policy.AdminDisplayName } if ($policy.Enabled) { $result.enabledPolicies++ Write-Host "`n ENABLED: $($policy.Name)" -ForegroundColor Green Write-Host " Identity: $($policy.Identity)" -ForegroundColor Gray Write-Host " Action: $($policy.Action)" -ForegroundColor Gray if ($policy.Action -eq 'DeleteMessage') { Write-Host " Action Type: Delete entire message (RECOMMENDED)" -ForegroundColor Green } elseif ($policy.Action -eq 'DeleteAttachmentAndUseDefaultAlert') { Write-Host " Action Type: Delete attachment with default alert" -ForegroundColor Yellow } elseif ($policy.Action -eq 'QuarantineMessage') { Write-Host " Action Type: Quarantine message" -ForegroundColor Yellow } Write-Host " Quarantine Tag: $($policy.QuarantineTag)" -ForegroundColor Gray } else { Write-Host "`n DISABLED: $($policy.Name)" -ForegroundColor Yellow $result.missingConfiguration += "Policy '$($policy.Name)' is disabled" } $result.policyDetails += $policyDetails } } if ($rules.Count -eq 0 -and $policies.Count -gt 0) { Write-Host "`n WARNING: Policies exist but no rules configured" -ForegroundColor Yellow Write-Host " Policies must be assigned via rules to be effective" -ForegroundColor Yellow $result.missingConfiguration += "No malware filter rules configured" } elseif ($rules.Count -gt 0) { Write-Host "`n Malware Filter Rules: $($rules.Count)" -ForegroundColor Cyan foreach ($rule in $rules) { if ($rule.Enabled) { $result.enabledRules++ Write-Host " ENABLED: $($rule.Name)" -ForegroundColor Green Write-Host " Policy: $($rule.MalwareFilterPolicy)" -ForegroundColor Gray Write-Host " Priority: $($rule.Priority)" -ForegroundColor Gray } else { Write-Host " DISABLED: $($rule.Name)" -ForegroundColor Yellow $result.missingConfiguration += "Rule '$($rule.Name)' is disabled" } } } # Check for recommended settings Write-Host "`n Configuration Analysis:" -ForegroundColor Cyan $hasRecommendedAction = $false foreach ($policy in $policies) { if ($policy.Enabled -and $policy.Action -eq 'DeleteMessage') { $hasRecommendedAction = $true break } } if ($hasRecommendedAction) { Write-Host " Action: DeleteMessage (RECOMMENDED)" -ForegroundColor Green } else { Write-Host " Action: Not using DeleteMessage (consider updating)" -ForegroundColor Yellow $result.missingConfiguration += "No policies using DeleteMessage action (recommended)" } # Determine compliance if ($result.enabledPolicies -gt 0 -and $result.enabledRules -gt 0) { $result.isCompliant = $true Write-Host "`n SUMMARY: COMPLIANT" -ForegroundColor Green Write-Host " Enabled Policies: $($result.enabledPolicies)" -ForegroundColor Green Write-Host " Enabled Rules: $($result.enabledRules)" -ForegroundColor Green } else { Write-Host "`n SUMMARY: NON-COMPLIANT" -ForegroundColor Red if ($result.missingConfiguration.Count -gt 0) { Write-Host " Missing:" -ForegroundColor Yellow foreach ($item in $result.missingConfiguration) { Write-Host " - $item" -ForegroundColor Yellow } } } return $result } catch { Write-Host "`nERROR: $_" -ForegroundColor Red Write-Host " Stack trace: $($_.ScriptStackTrace)" -ForegroundColor Gray throw } } function Invoke-Remediation { <# .SYNOPSIS Maakt of werkt anti-malware policy bij naar aanbevolen configuratie. #> [CmdletBinding()] param() try { Write-Host "Remediation: Anti-Malware Policies" -ForegroundColor Yellow Connect-RequiredServices $policyName = "Default Anti-Malware Policy" $ruleName = "Default Anti-Malware Rule" # Check if policy already exists $existingPolicy = Get-MalwareFilterPolicy -Identity $policyName -ErrorAction SilentlyContinue if ($existingPolicy) { if ($WhatIf) { Write-Host "`n WHAT IF: Policy '$policyName' already exists" -ForegroundColor Cyan Write-Host " Would check and update configuration if needed" -ForegroundColor Gray return } Write-Host "`n Policy '$policyName' already exists" -ForegroundColor Green Write-Host " Checking configuration..." -ForegroundColor Gray # Update existing policy to recommended settings Write-Host " Updating policy to recommended settings..." -ForegroundColor Gray Set-MalwareFilterPolicy -Identity $policyName ` -Action DeleteMessage ` -EnableFileFilter $true ` -FileTypes @('ace', 'ani', 'app', 'docm', 'exe', 'jar', 'reg', 'scr', 'vbe', 'vbs') ` -ZapEnabled $true ` -ErrorAction Stop Write-Host " Policy updated successfully" -ForegroundColor Green } else { if ($WhatIf) { Write-Host "`n WHAT IF: Would create policy '$policyName' with:" -ForegroundColor Cyan Write-Host " - Action: DeleteMessage (recommended)" -ForegroundColor Gray Write-Host " - Common attachment types filter: Enabled" -ForegroundColor Gray Write-Host " - ZAP: Enabled" -ForegroundColor Gray return } Write-Host "`n Creating anti-malware policy..." -ForegroundColor Gray $newPolicy = New-MalwareFilterPolicy -Name $policyName ` -Action DeleteMessage ` -EnableFileFilter $true ` -FileTypes @('ace', 'ani', 'app', 'docm', 'exe', 'jar', 'reg', 'scr', 'vbe', 'vbs') ` -ZapEnabled $true ` -AdminDisplayName "Default Anti-Malware Policy - Nederlandse Baseline voor Veilige Cloud" ` -ErrorAction Stop Write-Host " Policy created: $($newPolicy.Identity)" -ForegroundColor Green } # Check if rule exists $existingRule = Get-MalwareFilterRule -Identity $ruleName -ErrorAction SilentlyContinue if (-not $existingRule) { if ($WhatIf) { Write-Host "`n WHAT IF: Would create rule '$ruleName' to apply policy to all users" -ForegroundColor Cyan return } Write-Host "`n Creating malware filter rule..." -ForegroundColor Gray # Get all accepted domains for rule scope $acceptedDomains = Get-AcceptedDomain | Where-Object { $_.DomainType -eq 'Authoritative' } | Select-Object -ExpandProperty Name $newRule = New-MalwareFilterRule -Name $ruleName ` -MalwareFilterPolicy $policyName ` -RecipientDomainIs $acceptedDomains ` -Priority 0 ` -Enabled $true ` -ErrorAction Stop Write-Host " Rule created: $($newRule.Identity)" -ForegroundColor Green Write-Host " Applied to domains: $($acceptedDomains -join ', ')" -ForegroundColor Gray } else { Write-Host "`n Rule '$ruleName' already exists" -ForegroundColor Green if ($WhatIf) { Write-Host " Would verify rule is enabled and correctly configured" -ForegroundColor Cyan return } # Ensure rule is enabled if (-not $existingRule.Enabled) { Write-Host " Enabling rule..." -ForegroundColor Gray Set-MalwareFilterRule -Identity $ruleName -Enabled $true -ErrorAction Stop Write-Host " Rule enabled" -ForegroundColor Green } } Write-Host "`n Remediation completed successfully" -ForegroundColor Green Write-Host "`n Next steps:" -ForegroundColor Yellow Write-Host " 1. Test malware detection with EICAR test file" -ForegroundColor Gray Write-Host " 2. Monitor quarantine for false positives" -ForegroundColor Gray Write-Host " 3. Configure admin notifications if needed" -ForegroundColor Gray return @{ Success = $true PolicyName = $policyName RuleName = $ruleName } } catch { Write-Host "`nERROR: $_" -ForegroundColor Red Write-Host " Stack trace: $($_.ScriptStackTrace)" -ForegroundColor Gray Write-Host "`n Manual configuration:" -ForegroundColor Yellow Write-Host " Portal: security.microsoft.com > Email & collaboration > Threat policies > Anti-malware" -ForegroundColor Gray throw } } function Invoke-Revert { <# .SYNOPSIS Verwijdert de anti-malware policy (gebruik met voorzichtigheid). #> [CmdletBinding()] param() try { Write-Host "Revert: Removing Anti-Malware Policy" -ForegroundColor Yellow Connect-RequiredServices $policyName = "Default Anti-Malware Policy" $ruleName = "Default Anti-Malware Rule" if ($WhatIf) { Write-Host "`n WHAT IF: Would remove:" -ForegroundColor Cyan Write-Host " - Rule: $ruleName" -ForegroundColor Gray Write-Host " - Policy: $policyName" -ForegroundColor Gray Write-Host "`n WARNING: This will disable anti-malware protection!" -ForegroundColor Red return } # Remove rule first $existingRule = Get-MalwareFilterRule -Identity $ruleName -ErrorAction SilentlyContinue if ($existingRule) { Write-Host "`n Removing rule '$ruleName'..." -ForegroundColor Gray Remove-MalwareFilterRule -Identity $ruleName -Confirm:$false -ErrorAction Stop Write-Host " Rule removed" -ForegroundColor Yellow } # Remove policy $existingPolicy = Get-MalwareFilterPolicy -Identity $policyName -ErrorAction SilentlyContinue if ($existingPolicy) { Write-Host " Removing policy '$policyName'..." -ForegroundColor Gray Remove-MalwareFilterPolicy -Identity $policyName -Confirm:$false -ErrorAction Stop Write-Host " Policy removed" -ForegroundColor Yellow } else { Write-Host " Policy '$policyName' not found" -ForegroundColor Gray } Write-Host "`n Revert completed" -ForegroundColor Yellow Write-Host " WARNING: Anti-malware protection is now disabled!" -ForegroundColor Red } catch { Write-Host "`nERROR: $_" -ForegroundColor Red throw } } # ============================================================================ # MAIN EXECUTION # ============================================================================ try { if ($Revert) { Invoke-Revert } elseif ($Remediation) { Invoke-Remediation } elseif ($Monitoring) { $result = Invoke-Monitoring if ($result.isCompliant) { exit 0 } else { exit 1 } } else { Write-Host "Usage:" -ForegroundColor Yellow Write-Host " .\anti-malware-policies.ps1 -Monitoring # Check compliance" -ForegroundColor Gray Write-Host " .\anti-malware-policies.ps1 -Remediation # Create/update policy" -ForegroundColor Gray Write-Host " .\anti-malware-policies.ps1 -Remediation -WhatIf # Preview changes" -ForegroundColor Gray Write-Host " .\anti-malware-policies.ps1 -Revert # Remove policy (WARNING!)" -ForegroundColor Gray } } catch { Write-Host "`nFATAL ERROR: $_" -ForegroundColor Red exit 2 } finally { Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Critical: KRITIEK MALWARE RISICO: Zonder anti-malware scanning kunnen kwaadaardige bestanden ongehinderd via email binnenkomen, waarbij gebruikers onbewust hun systemen infecteren. Dit leidt tot volledige systeemcompromittering, ransomware aanvallen met data-encryptie, diefstal van gevoelige gegevens, en uitval van kritieke dienstverlening. Email blijft de primaire vector voor malware distribution - 94% van malware wordt via email verspreid. Anti-malware beleidsregels reduceren malware infections met 95%+ door automatisch kwaadaardige attachments en links te blokkeren voordat gebruikers deze kunnen openen. Voor alle M365 tenants: anti-malware scanning is standaard ingeschakeld, maar configuratie optimalisatie is sterk aanbevolen voor maximale bescherming.

Management Samenvatting

Configureer anti-malware beleidsregels met DeleteMessage response, quarantine configuratie, admin notifications, en common attachment types filtering. Enable ZAP voor automatische verwijdering van reeds afgeleverde malware emails. Monitor quarantined items regelmatig voor false positives en threat analysis. Vereist Exchange Online (standaard aanwezig). Voldoet aan CIS 2.1.1 (L1), BIO 13.02, ISO 27001 A.13.2.1, NIS2. Implementatie: 2 uur technisch + 3 uur voor testing en tuning. KRITIEKE EMAIL SECURITY CONTROLE - BASISVEREISTE VOOR ALLE M365 TENANTS.