Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΠŸΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ
Найти Π² Π”Π·Π΅Π½Π΅
Настройки Windows

πŸ›‘οΈ Defender ASR + AppLocker: Premium ГАЙД для Security Engineers ΠΈ SOC-Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ² 2026

ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€: Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ XML-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, PowerShell-скрипты с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ошибок, KQL-запросы для Sentinel ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π°Ρ‚Π°ΠΊ. Всё, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для внСдрСния enterprise-Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π±Π΅Π· лишнСго ΡˆΡƒΠΌΠ°. 🎯 πŸ“‹ ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°: Windows 11 24H2 | Defender Platform 4.18.26040.7+ | Sentinel/Intune
⚠️ Аудит обязатСлСн ΠΏΠ΅Ρ€Π΅Π΄ Block mode. Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€Π°Π² SYSTEM ΠΈΠ»ΠΈ локального администратора + SeSecurityPrivilege. β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Атака β†’ Π’Π΅ΠΊΡ‚ΠΎΡ€ β†’ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ASR/AppLocker β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ πŸ“„ ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΈΠ· Office β†’ Block office macros β”‚
β”‚ ⚑ PowerShell ΠΈΠ· WScript β†’ Block script exec β”‚
β”‚ πŸ” LSASS dump β†’ Block credential stealing β”‚
β”‚ πŸ”„ Safe Mode reboot β†’ Block safe mode (2026) β”‚
β”‚ 🎭 Copied sysinternals β†’ Block impersonation β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: ⚠️ ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ограничСния 2026:
ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Block credential stealing from LSASS Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ Warn β€” Ρ‚ΠΎ
ОглавлСниС

ΠŸΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€: Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ XML-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, PowerShell-скрипты с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ошибок, KQL-запросы для Sentinel ΠΈ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π°Ρ‚Π°ΠΊ. Всё, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для внСдрСния enterprise-Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π±Π΅Π· лишнСго ΡˆΡƒΠΌΠ°. 🎯

πŸ“‹ ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°: Windows 11 24H2 | Defender Platform 4.18.26040.7+ | Sentinel/Intune
⚠️ Аудит обязатСлСн ΠΏΠ΅Ρ€Π΅Π΄ Block mode. Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€Π°Π² SYSTEM ΠΈΠ»ΠΈ локального администратора + SeSecurityPrivilege.

πŸ—οΈ АрхитСктура ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Атака β†’ Π’Π΅ΠΊΡ‚ΠΎΡ€ β†’ Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ASR/AppLocker β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ πŸ“„ ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΈΠ· Office β†’ Block office macros β”‚
β”‚ ⚑ PowerShell ΠΈΠ· WScript β†’ Block script exec β”‚
β”‚ πŸ” LSASS dump β†’ Block credential stealing β”‚
β”‚ πŸ”„ Safe Mode reboot β†’ Block safe mode (2026) β”‚
β”‚ 🎭 Copied sysinternals β†’ Block impersonation β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • ASR-Π΄Π²ΠΈΠΆΠΎΠΊ β€” повСдСнчСский Π°Π½Π°Π»ΠΈΠ· Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ с Defender Antivirus
  • AppLocker β€” ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° основС ΠΏΡƒΡ‚ΠΈ/Ρ…ΡΡˆΠ°/сСртификата
  • Event Channel β€” Microsoft-Windows-Windows Defender/Operational (ID 1121/1122)
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ β€” локально (PowerShell/рССстр), Ρ‡Π΅Ρ€Π΅Π· GPO, Ρ‡Π΅Ρ€Π΅Π· Intune (OMA-URI)
⚠️ ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ограничСния 2026:
ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Block credential stealing from LSASS Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ Warn β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Audit β†’ Block
ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Block executable files... Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΉ Cloud-delivered protection
AppLocker + Constrained Language Mode Π² Win11 24H2 ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ β€” тСстируйтС Π½Π° ΠΏΠΈΠ»ΠΎΡ‚Π΅
ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ Block rebooting machine in Safe Mode Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Π²Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· Windows Recovery Environment

πŸ“œ ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹Π΅ XML-ΠΏΡ€Π°Π²ΠΈΠ»Π° AppLocker (Production-ready)

πŸ”Ή Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ шаблон с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ для Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹Ρ… процСссов

<?xml version="1.0" encoding="utf-8"?>
<AppLockerPolicy Version="1" xmlns="http://schemas.microsoft.com/applocker/2010/09/rules">
<RuleCollection Type="Exe" EnforcementMode="Enabled">

<!-- βœ… Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всё ΠΈΠ· Program Files ΠΈ Windows -->
<FilePublisherRule Id="allow-microsoft-signed" Name="Allow Microsoft Signed Binaries"
Description="Trusted Microsoft publishers" UserOrGroupSid="S-1-1-0" Action="Allow">
<Conditions>
<FilePublisherCondition PublisherName="CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US"
ProductName="*" BinaryName="*">
<BinaryVersionRange LowSection="*" HighSection="*" />
</FilePublisherCondition>
</Conditions>
</FilePublisherRule>

<!-- βœ… Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ встроСнныС прилоТСния Win11 24H2 -->
<FilePathRule Id="allow-win11-builtins" Name="Allow Win11 24H2 Built-in Apps"
Description="Prevent false positives on Notepad, Terminal, Teams" UserOrGroupSid="S-1-1-0" Action="Allow">
<Conditions>
<FilePathCondition Path="%ProgramFiles%\WindowsApps\Microsoft.WindowsNotepad_*" />
<FilePathCondition Path="%ProgramFiles%\WindowsApps\Microsoft.WindowsTerminal_*" />
<FilePathCondition Path="%LocalAppData%\Microsoft\Teams\*" />
<FilePathCondition Path="%ProgramFiles%\dotnet\*" />
</Conditions>
</FilePathRule>

<!-- ❌ Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ запуск ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΠ°ΠΏΠΎΠΊ -->
<FilePathRule Id="block-user-exec" Name="Block Execution from User Folders"
Description="Prevent malware execution from profile/temp" UserOrGroupSid="S-1-1-0" Action="Deny">
<Conditions>
<FilePathCondition Path="%USERPROFILE%\Downloads\*" />
<FilePathCondition Path="%USERPROFILE%\Desktop\*" />
<FilePathCondition Path="%TEMP%\*" />
<FilePathCondition Path="C:\Users\Public\*" />
</Conditions>
<Exceptions>
<FilePathCondition Path="%USERPROFILE%\Downloads\CompanyApprovedInstallers\*" />
</Exceptions>
</FilePathRule>

</RuleCollection>

<!-- πŸ”Ή DLL Rules (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) -->
<RuleCollection Type="Dll" EnforcementMode="AuditOnly">
<FilePublisherRule Id="allow-dll-microsoft" Name="Allow Microsoft DLLs" Action="Allow">
<Conditions>
<FilePublisherCondition PublisherName="CN=Microsoft Windows, O=Microsoft Corporation" ProductName="*" BinaryName="*">
<BinaryVersionRange LowSection="*" HighSection="*" />
</FilePublisherCondition>
</Conditions>
</FilePublisherRule>
</RuleCollection>

</AppLockerPolicy>

πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ с Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ

<#
.SYNOPSIS: Deploy AppLocker policy with validation and rollback
.REQUIRES: SYSTEM or local admin + SeSecurityPrivilege
#>
param(
[Parameter(Mandatory=$true)][string]$PolicyPath,
[Parameter(Mandatory=$false)][string]$LogPath = "C:\Logs\AppLocker_Deploy.log",
[Parameter(Mandatory=$false)][switch]$WhatIf
)

function Write-Log {
param([string]$Message, [string]$Level = "INFO")
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$Entry = "[$Timestamp] [$Level] $Message"
Add-Content -Path $LogPath -Value $Entry -Force
if ($Level -eq "ERROR") { Write-Error $Message } else { Write-Host $Entry }
}

$CurrentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $CurrentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Log "ВрСбуСтся запуск ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора ΠΈΠ»ΠΈ SYSTEM" "ERROR"
exit 1
}

if (-not (Test-Path $PolicyPath)) {
Write-Log "Policy file not found: $PolicyPath" "ERROR"
exit 1
}

try {
$PolicyXml = Get-Content $PolicyPath -Raw -ErrorAction Stop
[xml]$XmlDoc = $PolicyXml

if ($WhatIf) {
Write-Log "[WHATIF] Policy validation passed. No changes applied." "INFO"
exit 0
}

$BackupPath = "C:\Backups\AppLocker_$(Get-Date -Format 'yyyyMMdd_HHmmss').xml"
Export-AppLockerPolicy -Xml -FilterType Publish | Out-File $BackupPath -Encoding UTF8
Write-Log "Backup created: $BackupPath" "INFO"

Set-AppLockerPolicy -XmlPolicy $PolicyXml -Merge -ErrorAction Stop
Write-Log "Policy deployed successfully from: $PolicyPath" "INFO"

gpupdate /force /target:computer | Out-Null

} catch {
Write-Log "Deployment failed: $($_.Exception.Message)" "ERROR"
if (Test-Path $BackupPath) {
Set-AppLockerPolicy -XmlPolicy (Get-Content $BackupPath -Raw) -Merge -ErrorAction SilentlyContinue
Write-Log "Auto-rollback completed from: $BackupPath" "WARN"
}
exit 1
}

🎯 ASR-ΠΏΡ€Π°Π²ΠΈΠ»Π°: ΠΏΠΎΠ»Π½Ρ‹ΠΉ список с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ внСдрСния

Высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚

  • πŸ“„ Block Office apps from creating executable content β€” GUID: 3b576869-a4ec-4529-8536-b80a7769e899 β€” Π Π΅ΠΆΠΈΠΌ: Block β€” Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅, Π½ΠΈΠ·ΠΊΠΈΠΉ ΡˆΡƒΠΌ
  • ⚑ Block execution of potentially obfuscated scripts β€” GUID: 5beb7efe-fd9a-4556-801d-275e5ffc04cc β€” Π Π΅ΠΆΠΈΠΌ: Block β€” Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅
  • 🌐 Block JavaScript or VBScript from launching downloaded executable content β€” GUID: d3e037e1-3eb8-44c8-a917-57927947596d β€” Π Π΅ΠΆΠΈΠΌ: Block β€” Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅

Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚

  • πŸ“Š Block executable files from running unless they meet prevalence, age, or trusted list criterion β€” GUID: 01443614-cd74-433a-b99e-2ecdc07bfc25 β€” Π Π΅ΠΆΠΈΠΌ: Audit β†’ Block β€” ⚠️ Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Cloud-delivered protection
  • πŸ”„ Block process creations originating from PSExec and WMI commands β€” GUID: d1e49aac-8f56-4280-b9ba-993a6d77406c β€” Π Π΅ΠΆΠΈΠΌ: Audit β†’ Block β€” Π’Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 7 Π΄Π½Π΅ΠΉ
  • 🎭 Block use of copied or impersonated system tools (2026) β€” GUID: c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb β€” Π Π΅ΠΆΠΈΠΌ: Block β€” ⚠️ НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Warn

Низкий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚

  • πŸ”„ Block rebooting machine in Safe Mode (2026) β€” GUID: 33ddedf1-c6e0-47cb-833e-de6133960387 β€” Π Π΅ΠΆΠΈΠΌ: Block β€” ⚠️ НС Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Π²Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· WinRE

⚠️ ΠžΡΠΎΠ±Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ

  • πŸ” Block credential stealing from the Windows local security authority subsystem (lsass.exe) β€” GUID: 9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2 β€” Π Π΅ΠΆΠΈΠΌ: Block β€” ⚠️ НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Warn; высокий ΡˆΡƒΠΌ Π°ΡƒΠ΄ΠΈΡ‚Π°
πŸ’‘ Π’Π°ΠΆΠ½ΠΎ: ΠŸΡ€Π°Π²ΠΈΠ»Π° с ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΎΠΉ «НС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ WarnΒ» нСльзя ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ прСдупрСТдСния β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Audit β†’ Block.

βš™οΈ PowerShell-скрипты: сбор, Π°Π½Π°Π»ΠΈΠ·, ΠΎΡ‚ΠΊΠ°Ρ‚

πŸ”Ή Π‘Π±ΠΎΡ€ событий ASR (1121/1122) с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ экспортом

<#
.SYNOPSIS: Π‘Π±ΠΎΡ€ ΠΈ экспорт событий ASR для SIEM-ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ
.REQUIRES: SYSTEM or local admin + SeSecurityPrivilege
.OUTPUT: JSON с Π²Π°Π»ΠΈΠ΄Π½ΠΎΠΉ схСмой для Sentinel ingestion
#>
param(
[int]$HoursBack = 24,
[string]$OutputPath = "C:\Logs\ASR_Export_$(Get-Date -Format 'yyyyMMdd_HHmmss').json",
[string]$SIEMEndpoint = $null,
[string]$SIEMToken = $null
)

$CurrentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if (-not $CurrentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Error "ВрСбуСтся запуск ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора ΠΈΠ»ΠΈ SYSTEM"
exit 1
}

$StartTime = (Get-Date).AddHours(-$HoursBack).ToUniversalTime()
$LogName = 'Microsoft-Windows-Windows Defender/Operational'

try {
$Events = Get-WinEvent -FilterHashtable @{
LogName = $LogName
ID = 1121, 1122
StartTime = $StartTime
} -ErrorAction Stop | ForEach-Object {
$Xml = [xml]$_.ToXml()
$EventData = $Xml.Event.EventData.Data

[PSCustomObject]@{
time = $_.TimeCreated.ToUniversalTime().ToString('o')
computer = $env:COMPUTERNAME
event_id = $_.Id
action = if ($_.Id -eq 1121) { 'block' } else { 'audit' }
rule_name = $EventData[0].'#text'
rule_guid = $EventData[1].'#text'
process_path = $EventData[2].'#text'
user_sid = $EventData[3].'#text'
user_name = try { (New-Object System.Security.Principal.SecurityIdentifier($EventData[3].'#text')).Translate([System.Security.Principal.NTAccount]).Value } catch { 'UNKNOWN' }
sha256 = if ($EventData.Count -gt 4) { $EventData[4].'#text' } else { $null }
custom_fields = @{
source_script = $MyInvocation.MyCommand.Name
collection_time = (Get-Date).ToUniversalTime().ToString('o')
}
}
}
} catch {
Write-Error "Failed to query events: $($_.Exception.Message)"
exit 1
}

$ExportData = @{
schema_version = "1.0"
source = "Defender-ASR-Collector"
records = $Events
} | ConvertTo-Json -Depth 10 -Compress

$ExportData | Out-File $OutputPath -Encoding UTF8 -Force
Write-Host "[$(Get-Date)] Exported $($Events.Count) events to $OutputPath"

if ($SIEMEndpoint -and $SIEMToken) {
try {
Invoke-RestMethod -Uri $SIEMEndpoint -Method Post -Body $ExportData `
-ContentType 'application/json' -Headers @{ "Authorization" = "Bearer $SIEMToken" } `
-TimeoutSec 30 -ErrorAction Stop
Write-Host "[$(Get-Date)] Sent to SIEM successfully"
} catch {
Write-Warning "Failed to send to SIEM: $($_.Exception.Message)"
$QueuePath = $OutputPath -replace '\.json$', '.pending'
$ExportData | Out-File $QueuePath -Encoding UTF8 -Force
}
}

πŸ”Ή Массовая настройка ASR-ΠΏΡ€Π°Π²ΠΈΠ» Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

<#
.SYNOPSIS: МассовоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ASR-ΠΏΡ€Π°Π²ΠΈΠ» ΠΈΠ· JSON-ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°
.MODES: 0=Off, 1=Block, 2=Audit, 5=Not Configured, 6=Warn
.NOTE: ΠŸΡ€Π°Π²ΠΈΠ»Π° Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Warn Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΏΡ€ΠΈ mode=6
#>
param(
[Parameter(Mandatory=$true)][string]$ConfigPath,
[switch]$DryRun
)

$Config = Get-Content $ConfigPath -Raw | ConvertFrom-Json
$ValidModes = @(0,1,2,5,6)
$NoWarnRules = @(
'9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2',
'33ddedf1-c6e0-47cb-833e-de6133960387'
)

foreach ($Rule in $Config.rules) {
if ($Rule.guid -notmatch '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$') {
Write-Warning "Invalid GUID format: $($Rule.guid)"
continue
}
if ($Rule.mode -notin $ValidModes) {
Write-Warning "Invalid mode for $($Rule.guid): $($Rule.mode)"
continue
}

if ($Rule.mode -eq 6 -and $Rule.guid -in $NoWarnRules) {
Write-Warning "Rule $($Rule.guid) does not support Warn mode. Skipping."
continue
}

if ($Rule.guid -eq '01443614-cd74-433a-b99e-2ecdc07bfc25') {
$CloudEnabled = (Get-MpPreference).CloudBlockLevel -ne 'Off'
if (-not $CloudEnabled -and $Rule.mode -eq 1) {
Write-Warning "Rule $($Rule.guid) requires Cloud-delivered protection"
}
}

if ($DryRun) {
Write-Host "[DRYRUN] Would set rule $($Rule.guid) to mode $($Rule.mode)" -ForegroundColor Yellow
continue
}

try {
Set-MpPreference -AttackSurfaceReductionRules_Ids $Rule.guid `
-AttackSurfaceReductionRules_Actions $Rule.mode `
-ErrorAction Stop
Write-Host "[OK] Applied rule $($Rule.guid) = $($Rule.mode)" -ForegroundColor Green
} catch {
Write-Error "Failed to apply rule $($Rule.guid): $($_.Exception.Message)"
}
}

πŸ“„ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° asr_config.json:

{
"description": "ASR baseline for production - Phase 1",
"rules": [
{ "guid": "3b576869-a4ec-4529-8536-b80a7769e899", "mode": 1, "comment": "Block Office macros" },
{ "guid": "5beb7efe-fd9a-4556-801d-275e5ffc04cc", "mode": 1, "comment": "Block obfuscated scripts" },
{ "guid": "d3e037e1-3eb8-44c8-a917-57927947596d", "mode": 2, "comment": "Audit JS/VBS download exec" },
{ "guid": "9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2", "mode": 1, "comment": "Block LSASS steal (no Warn)" }
]
}

☁️ Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Sentinel: Schema + KQL + Alert Rules

πŸ”Ή Schema Mapping для Custom Table DefenderASR_CL

.create table DefenderASR_CL (
time: datetime,
computer: string,
event_id: int,
action: string,
rule_name: string,
rule_guid: string,
process_path: string,
user_sid: string,
user_name: string,
sha256: string,
custom_fields: dynamic
)

πŸ”Ή KQL-запросы для Π΄Π΅Ρ‚Π΅ΠΊΡ†ΠΈΠΈ ΠΈ расслСдования

// πŸ” Запрос 1: ΠœΠ°ΡΡΠΎΠ²Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса (аномалия)
DefenderASR_CL
| where action == 'block'
| summarize
BlockCount = count(),
Users = dcount(user_name),
Computers = dcount(computer),
FirstSeen = min(time),
LastSeen = max(time)
by process_path, rule_guid, rule_name
| where BlockCount > 10 or Users > 5 or Computers > 3
| extend RiskScore = case(
BlockCount > 50, 95,
BlockCount > 20 and Users > 10, 85,
Computers > 5, 75,
50
)
| project TimeGenerated = LastSeen, computer, process_path, rule_name, BlockCount, Users, Computers, RiskScore
| order by RiskScore desc, BlockCount desc

-------------------------------------------------

// πŸ” Запрос 2: Поиск ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΠΎΠ±Ρ…ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ систСмных ΡƒΡ‚ΠΈΠ»ΠΈΡ‚
DefenderASR_CL
| where rule_guid == 'c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb'
| extend FileName = extract(@'\\([^\\]+)$', 1, process_path)
| where FileName matches regex @"(?i)(psexec|procdump|mimikatz|bloodhound|adconnectdump)"
| summarize Attempts = count(), UniqueUsers = dcount(user_name) by computer, FileName
| where Attempts > 3
| project TimeGenerated = now(), computer, FileName, Attempts, UniqueUsers

-------------------------------------------------

// πŸ” Запрос 3: ΠšΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ событиями бСзопасности
DefenderASR_CL
| where action == 'block'
| join kind=inner (
SecurityEvent
| where EventID in (4688, 4624, 4625)
| extend ProcessName = extract(@'\\([^\\]+)$', 1, ProcessName)
) on $left.computer == $right.Computer, $left.user_sid == $right.SubjectUserSid
| where datetime_diff('minute', DefenderASR_CL.time, SecurityEvent.TimeGenerated) between (-5 .. 5)
| summarize
ASR_Blocks = countif(DefenderASR_CL.action == 'block'),
LogonFailures = countif(SecurityEvent.EventID == 4625),
Processes = make_set(SecurityEvent.ProcessName)
by DefenderASR_CL.computer, DefenderASR_CL.user_name
| where ASR_Blocks > 5 or LogonFailures > 10

πŸ”Ή Alert Rule для Sentinel (JSON-экспорт)

{
"name": "ASR_Mass_Block_Anomaly",
"description": "Detects mass blocking of a single process across multiple users/computers",
"query": "// Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ KQL ΠΈΠ· Запроса 1 Π²Ρ‹ΡˆΠ΅",
"queryFrequency": "PT1H",
"queryPeriod": "PT1H",
"triggerOperator": "GreaterThan",
"triggerThreshold": 0,
"severity": "Medium",
"tactics": ["DefenseEvasion", "Execution"],
"techniques": ["T1059", "T1105"],
"alertRuleTemplateName": "ASR-Anomaly-Detection",
"customDetails": {
"RuleGUID": "{{rule_guid}}",
"ProcessPath": "{{process_path}}",
"RiskScore": "{{RiskScore}}"
},
"entityMappings": [
{ "entityType": "Account", "fieldMappings": [{ "identifier": "FullName", "columnName": "user_name" }] },
{ "entityType": "Host", "fieldMappings": [{ "identifier": "HostName", "columnName": "computer" }] },
{ "entityType": "File", "fieldMappings": [{ "identifier": "Path", "columnName": "process_path" }] }
]
}

↩️ Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Π° (Rollback)

πŸ”Ή ΠžΡ‚ΠΊΠ°Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Set-MpPreference (ASR)

<#
.SYNOPSIS: ΠžΡ‚ΠΊΠ°Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ всСх ASR-ΠΏΡ€Π°Π²ΠΈΠ» Π² Ρ€Π΅ΠΆΠΈΠΌ 'Not Configured'
.REQUIRES: SYSTEM or local admin + SeSecurityPrivilege
#>
param(
[string]$RuleGuid = $null,
[switch]$Confirm
)

$AllASRRules = @(
'3b576869-a4ec-4529-8536-b80a7769e899', '5beb7efe-fd9a-4556-801d-275e5ffc04cc',
'd3e037e1-3eb8-44c8-a917-57927947596d', '01443614-cd74-433a-b99e-2ecdc07bfc25',
'd1e49aac-8f56-4280-b9ba-993a6d77406c', 'c0033c00-d16d-4114-a5a0-dc9b3a7d2ceb',
'33ddedf1-c6e0-47cb-833e-de6133960387', '9e6c4e1f-7d60-472f-ba1a-a39ef669e4b2'
)

$RulesToReset = if ($RuleGuid) { @($RuleGuid) } else { $AllASRRules }

foreach ($Guid in $RulesToReset) {
if ($Confirm) {
$Response = Read-Host "Reset rule $Guid to 'Not Configured'? (y/N)"
if ($Response -ne 'y') { continue }
}

try {
Set-MpPreference -AttackSurfaceReductionRules_Ids $Guid `
-AttackSurfaceReductionRules_Actions 5 `
-ErrorAction Stop
Write-Host "[OK] Reset rule $Guid" -ForegroundColor Green
} catch {
Write-Error "Failed to reset rule $Guid`: $($_.Exception.Message)"
}
}

πŸ”Ή ΠžΡ‚ΠΊΠ°Ρ‚ Ρ‡Π΅Ρ€Π΅Π· рССстр (Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄)

<#
.SYNOPSIS: ΠŸΡ€ΡΠΌΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ рССстра ASR (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ SYSTEM)
.PATH: HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\Rules
#>
param(
[string]$RuleGuid,
[switch]$RemoveAll
)

$RegPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows Defender\Windows Defender Exploit Guard\ASR\Rules"

if ($RemoveAll) {
if (Test-Path $RegPath) {
Get-ItemProperty -Path $RegPath -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty PSProperty |
Where-Object { $_ -match '^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$' } |
ForEach-Object {
Remove-ItemProperty -Path $RegPath -Name $_ -Force -ErrorAction SilentlyContinue
Write-Host "[Removed] $_" -ForegroundColor Yellow
}
}
} elseif ($RuleGuid -and (Test-Path "$RegPath\$RuleGuid")) {
Remove-ItemProperty -Path $RegPath -Name $RuleGuid -Force -ErrorAction Stop
Write-Host "[Removed] $RuleGuid" -ForegroundColor Yellow
}

Restart-Service WinDefend -Force -ErrorAction SilentlyContinue
Write-Host "[Info] WinDefend service restarted" -ForegroundColor Cyan

πŸ§ͺ ВСстированиС ΠΈ валидация

πŸ”Ή Π§Π΅ΠΊ-лист ΠΏΡ€Π΅Π΄-ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ тСстирования

βœ… Экспорт Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ: Export-AppLockerPolicy -Xml
βœ… Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠΈΠ»ΠΎΡ‚Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ (50-100 устройств)
βœ… Запуск стандартных ΠΏΡ€Π°Π²ΠΈΠ» Π² Audit Π½Π° 7-14 Π΄Π½Π΅ΠΉ
βœ… Π‘Π±ΠΎΡ€ событий Ρ‡Π΅Ρ€Π΅Π· скрипт, экспорт Π² Sentinel
βœ… Анализ KQL-запросом: поиск Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ
βœ… ВСрификация Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний (Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹Π΅ процСссы)
βœ… Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· AttackSurfaceReductionOnlyExclusions
βœ… ΠŸΠΎΡΡ‚Π°ΠΏΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² Block (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ Π² нСдСлю)
βœ… Настройка alert-ΠΏΡ€Π°Π²ΠΈΠ» Π² Sentinel
βœ… Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с Ρ…ΡΡˆΠ΅ΠΌ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ
βœ… *⚠️ Валидация совмСстимости AppLocker + Constrained Language Mode Π½Π° Win11 24H2*
βœ…
⚠️ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Cloud-delivered protection для prevalence-based ΠΏΡ€Π°Π²ΠΈΠ»Π°

πŸ”Ή ВСстовыС сцСнарии для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ

πŸ“„ Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 1: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ макроса ΠΈΠ· Office

# ОТиданиС: событиС 1121, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ 3b576869-a4ec-4529-8536-b80a7769e899

# ДСйствиС: ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ тСстовый .docm с макросом, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Word Π½Π° тСстовой машинС

⚑ Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 2: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ PowerShell ΠΈΠ· WScript

# ОТиданиС: событиС 1121, ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ 5beb7efe-fd9a-4556-801d-275e5ffc04cc

# ДСйствиС: ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ .vbs с ΠΊΠΎΠ΄ΠΎΠΌ: CreateObject("WScript.Shell").Run("powershell.exe")

πŸ”„ Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 3: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° 2026 (Safe Mode)

# ОТиданиС: Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: bcdedit /set {default} safeboot minimal

# ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ Π²Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· Windows Recovery Environment

# ДСйствиС: Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈΠ· PowerShell с ΠΏΡ€Π°Π²Π°ΠΌΠΈ администратора

πŸ“Š ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π΄Π°ΡˆΠ±ΠΎΡ€Π΄Ρ‹

πŸ”Ή KQL для Π΄Π°ΡˆΠ±ΠΎΡ€Π΄Π° Π² Sentinel

// πŸ“Š Π‘Π²ΠΎΠ΄ΠΊΠ° ΠΏΠΎ ASR-событиям Π·Π° послСдниС 24 часа
DefenderASR_CL
| where time > ago(24h)
| summarize
TotalEvents = count(),
Blocks = countif(action == 'block'),
Audits = countif(action == 'audit'),
UniqueRules = dcount(rule_guid),
UniqueComputers = dcount(computer),
UniqueUsers = dcount(user_name)
| render columnchart

---------------------------------------------------

// πŸ“ˆ Π’ΠΎΠΏ-10 ΠΏΡ€Π°Π²ΠΈΠ» ΠΏΠΎ количСству Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ
DefenderASR_CL
| where action == 'block' and time > ago(7d)
| summarize BlockCount = count() by rule_name, rule_guid
| top 10 by BlockCount desc
| render barchart

--------------------------------------------------------

// 🌍 Π“Π΅ΠΎ-распрСдСлСниС (Ссли ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅Π³ΠΈ Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ)
DefenderASR_CL
| where time > ago(24h)
| join kind=leftouter (
Heartbeat
| summarize Location = any(OSType) by Computer
) on $left.computer == $right.Computer
| summarize Blocks = countif(action == 'block') by Location
| render piechart

πŸ“‹ БоотвСтствиС трСбованиям (Compliance Mapping)

πŸ” NIST 800-53 AC-3 (Access Enforcement) β†’ ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ: AppLocker FilePathRule β†’ РСализация: block-user-exec

πŸ›‘οΈ NIST 800-53 SI-3 (Malicious Code Protection) β†’ ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ: ASR: Block obfuscated scripts β†’ РСализация: GUID: 5beb7efe-fd9a-4556-801d-275e5ffc04cc

βš™οΈ CIS Benchmark 5.1 (Configure Application Control) β†’ ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ: AppLocker EnforcementMode=Enabled β†’ РСализация: Set-AppLockerPolicy -EnforcementMode Enabled

☁️ PCI DSS 5.2 (Anti-malware on all systems) β†’ ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ: Defender ASR + Cloud Protection β†’ РСализация: Set-MpPreference -CloudBlockLevel High

πŸ“„ ISO 27001 A.12.2.1 (Protection against malware) β†’ ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ: ASR: Block Office macros β†’ РСализация: GUID: 3b576869-a4ec-4529-8536-b80a7769e899

πŸ”§ Troubleshooting ΠΈ частыС ошибки

πŸ”Ή ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Бобытия 1121/1122 Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Π»ΠΎΠ³Π΅

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ логирования

Get-MpPreference | Select-Object EnableControlledFolderAccess, AttackSurfaceReductionOnlyExclusions

# ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ логирования

Set-MpPreference -SubmitSamplesConsent SendAllSamples -ErrorAction SilentlyContinue

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈ пСрСполнСния Π»ΠΎΠ³Π°

wevtutil gl "Microsoft-Windows-Windows Defender/Operational" | findstr "maxSize"

# ΠŸΡ€ΠΈ нСобходимости ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ:

wevtutil sl "Microsoft-Windows-Windows Defender/Operational" /ms:33554432

πŸ”Ή ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: AppLocker Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

# 1. Найти событиС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

$Event = Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-AppLocker/EXE and DLL'; ID=8004} -MaxEvents 1

# 2. Π˜Π·Π²Π»Π΅Ρ‡ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΈ Ρ…ΡΡˆ

$Xml = [xml]$Event.ToXml()
$Path = $Xml.Event.EventData.Data[1].'#text'
$Hash = $Xml.Event.EventData.Data[3].'#text'

# 3. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ…ΡΡˆΡƒ (ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) ΠΈΠ»ΠΈ ΠΏΡƒΡ‚ΠΈ
# Π§Π΅Ρ€Π΅Π· XML-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ FileHashRule с Π½ΡƒΠΆΠ½Ρ‹ΠΌ Hash

# 4. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ

Set-AppLockerPolicy -XmlPolicy $UpdatedPolicy -Merge
gpupdate /force /target:computer

πŸ”Ή ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·-Π·Π° ΠΏΡ€Π°Π²

# Запуск ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ SYSTEM Ρ‡Π΅Ρ€Π΅Π· PsExec

psexec.exe -s -i powershell.exe -File C:\Scripts\deploy_asr.ps1

# Или Ρ‡Π΅Ρ€Π΅Π· Task Scheduler (Π·Π°Π΄Π°Ρ‡Π° с highest privileges)

$action = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument '-File C:\Scripts\deploy_asr.ps1'

$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest

Register-ScheduledTask -TaskName "Deploy-ASR" -Action $action -Principal $principal -Force

πŸ“Œ Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‡Π΅ΠΊ-лист ΠΏΠ΅Ρ€Π΅Π΄ запуском Π² production:
βœ… ВсС скрипты протСстированы Π½Π° ΠΏΠΈΠ»ΠΎΡ‚Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅
βœ… Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ настроСно ΠΈ провСряСтся Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ
βœ… Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ
βœ… ΠžΡ‚ΠΊΠ°Ρ‚-сцСнарии Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ протСстированы
βœ… SIEM-интСграция Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° (события ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚, alert ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚)
βœ… Команда Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° срабатывания (playbook)
βœ…
⚠️ ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π° ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Win11 24H2
βœ…
⚠️ Cloud-delivered protection Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° для prevalence-based ΠΏΡ€Π°Π²ΠΈΠ»

πŸ’‘ ΠŸΡ€ΠΎ-совСт: АвтоматизируйтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ соотвСтствия: создайтС Π΅ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, которая сравниваСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ настройки ASR/AppLocker с эталонным ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠΌ ΠΈ отправляСт ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π² Teams/Slack ΠΏΡ€ΠΈ отклонСниях. ВсС измСнСния Π»ΠΎΠ³ΠΈΡ€ΡƒΠΉΡ‚Π΅ с Ρ…ΡΡˆΠ΅ΠΌ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ для Π°ΡƒΠ΄ΠΈΡ‚Π°.