public/cis/Test-MtCisSafeAttachment.ps1
|
<#
.SYNOPSIS Checks if the Safe Attachments policy is enabled .DESCRIPTION The Safe Attachments policy is enabled CIS Microsoft 365 Foundations Benchmark v5.0.0 .EXAMPLE Test-MtCisSafeAttachment Returns true safe attachments policy is enabled .LINK https://mycorp.dev/docs/commands/Test-MtCisSafeAttachment #> function Test-MtCisSafeAttachment { [CmdletBinding()] [OutputType([bool])] param() if (!(Test-MtConnection ExchangeOnline)) { Add-MtTestResultDetail -SkippedBecause NotConnectedExchange return $null } elseif (!(Test-MtConnection SecurityCompliance)) { Add-MtTestResultDetail -SkippedBecause NotConnectedSecurityCompliance return $null } elseif ("P1" -notin (Get-MtLicenseInformation -Product MdoV2)) { Add-MtTestResultDetail -SkippedBecause NotLicensedMdoP1 return $null } Write-Verbose "Getting Safe Attachment Policy..." $policies = Get-MtExo -Request SafeAttachmentPolicy # We grab the default policy as that is what CIS checks $policy = $policies | Where-Object { $_.Name -eq 'Built-In Protection Policy' } $safeAttachmentCheckList = @() #Enable $safeAttachmentCheckList += [pscustomobject] @{ "CheckName" = "Enable" "Value" = "True" } #Action $safeAttachmentCheckList += [pscustomobject] @{ "CheckName" = "Action" "Value" = "Block" } #QuarantineTag $safeAttachmentCheckList += [pscustomobject] @{ "CheckName" = "QuarantineTag" "Value" = "AdminOnlyAccessPolicy" } Write-Verbose "Executing checks" $failedCheckList = @() foreach ($check in $safeAttachmentCheckList) { $checkResult = $policy | Where-Object { $_.($check.CheckName) -notmatch $check.Value } if ($checkResult) { #If the check fails, add it to the list so we can report on it later $failedCheckList += $check.CheckName } } $testResult = ($failedCheckList | Measure-Object).Count -eq 0 $portalLink = "https://security.microsoft.com/safeattachmentv2" if ($testResult) { $testResultMarkdown = "Well done. Your tenants default safe attachments policy matches CIS recommendations ($portalLink).`n`n%TestResult%" } else { $testResultMarkdown = "Your tenants default safe attachments policy does not match CIS recommendations ($portalLink).`n`n%TestResult%" } $resultMd = "| Check Name | Result |`n" $resultMd += "| --- | --- |`n" foreach ($item in $safeAttachmentCheckList) { $itemResult = "❌ Fail" if ($item.CheckName -notin $failedCheckList) { $itemResult = "✅ Pass" } $resultMd += "| $($item.CheckName) | $($itemResult) |`n" } $testResultMarkdown = $testResultMarkdown -replace "%TestResult%", $resultMd Add-MtTestResultDetail -Result $testResultMarkdown return $testResult } |