public/cisa/exchange/Test-MtCisaBlockExecutable.ps1

<#
.SYNOPSIS
    Checks state of preset security policies

.DESCRIPTION
    Emails SHALL be filtered by attachment file types

.EXAMPLE
    Test-MtCisaBlockExecutable

    Returns true if standard and strict protection is on

.LINK
    https://maester.dev/docs/commands/Test-MtCisaBlockExecutable
#>

function Test-MtCisaBlockExecutable {
    [CmdletBinding()]
    [OutputType([bool])]
    param()

    if (!(Test-MtConnection ExchangeOnline)) {
        Add-MtTestResultDetail -SkippedBecause NotConnectedExchange
        return $null
    } elseif (!(Test-MtConnection SecurityCompliance)) {
        Add-MtTestResultDetail -SkippedBecause NotConnectedSecurityCompliance
        return $null
    }

    $policies = Get-MtExo -Request MalwareFilterPolicy

    $clickToRunExtensions = @(
        "cmd",
        "exe",
        "vbe"
    )

    $resultPolicies = @()
    foreach($policy in $policies){
        $p = [PSCustomObject]@{
            Identity              = $policy.Identity
            EnableFileFilter      = $policy.EnableFileFilter
            RecommendedPolicyType = $policy.RecommendedPolicyType
            clickToRunExtensions  = @()
        }
        foreach($extension in $clickToRunExtensions){
            if($extension -in $policy.FileTypes){
                $p.clickToRunExtensions += $extension
            }
        }
        $resultPolicies += $p
    }

    $fileFilter = $resultPolicies | Where-Object { `
        $_.EnableFileFilter -and `
        ($_.clickToRunExtensions|Measure-Object).Count -eq ($clickToRunExtensions|Measure-Object).Count
    }

    $standard = $resultPolicies | Where-Object { `
        $_.RecommendedPolicyType -eq "Standard"
    }

    $strict = $resultPolicies | Where-Object { `
        $_.RecommendedPolicyType -eq "Strict"
    }

    $testResult = $standard -and $strict -and (($fileFilter|Measure-Object).Count -ge 1)

    $portalLink = "https://security.microsoft.com/presetSecurityPolicies"
    $passResult = "✅ Pass"
    $failResult = "❌ Fail"

    if ($testResult) {
        $testResultMarkdown = "Well done. Your tenant has [standard and strict preset security policies for the common file filter]($portalLink).`n`n%TestResult%"
    } else {
        $testResultMarkdown = "Your tenant does not have [standard and strict preset security policies enabled]($portalLink).`n`n%TestResult%"
    }

    $result = "| Policy | Status |`n"
    $result += "| --- | --- |`n"
    if ($standard) {
        $result += "| Standard | $passResult |`n"
    } else {
        $result += "| Standard | $failResult |`n"
    }
    if ($strict) {
        $result += "| Strict | $passResult |`n`n"
    } else {
        $result += "| Strict | $failResult |`n`n"
    }

    $result += "| Policy Name | File Filter Enabled | Extensions |`n"
    $result += "| --- | --- | --- |`n"
    foreach($item in $resultPolicies | Sort-Object -Property Identity){
        if($item.EnableFileFilter){
            $resultFilesList = ($item.clickToRunExtensions) -join ", "
            $result += "| $($item.Identity) | $($passResult) | $resultFilesList |`n"
        }else{
            $result += "| $($item.Identity) | $($failResult) | |`n"
        }
    }

    $testResultMarkdown = $testResultMarkdown -replace "%TestResult%", $result

    Add-MtTestResultDetail -Result $testResultMarkdown

    return $testResult
}