Загрузка данных
Write-Host "=== ФИНАЛЬНЫЙ ТРИГГЕР ОСТАВШИХСЯ СОБЫТИЙ ДЛЯ WINDOWS SERVER 2022 ===" -ForegroundColor Cyan
# 1. ФИКС ДЛЯ 4663, 4656 (Файлы) и 5142, 5143 (Шары)
# Создаем директорию, открываем к ней сетевой доступ (Шара) и вешаем SACL-аудит
$SharePath = "C:\SIEM_Network_Share"
if (-not (Test-Path $SharePath)) { New-Item -ItemType Directory -Path $SharePath | Out-Null }
# Вешаем аудит на файловую систему (для 4656/4663)
$Acl = Get-Acl $SharePath
$AuditRule = New-Object System.Security.AccessControl.FileSystemAuditRule("Everyone", "ReadAndExecute,Write,Delete", "None", "None", "Success,Failure")
$Acl.SetAuditRule($AuditRule)
Set-Acl $SharePath $Acl
# Создаем сетевую шару (вызывает нативный 5142), меняем настройки (вызывает 5143)
if (-not (Get-SmbShare -Name "SIEM_Share" -ErrorAction SilentlyContinue)) {
New-SmbShare -Name "SIEM_Share" -Path $SharePath -FullAccess "Everyone" | Out-Null
Set-SmbShare -Name "SIEM_Share" -Description "SIEM Auditing Active Share" -Force | Out-Null
}
# Генерируем обращение к файлу внутри шары (вызывает 4656/4663)
$TriggerFile = "$SharePath\audit_trigger.pfx"
"SIEM_DATA" | Out-File $TriggerFile -Force
Get-Content $TriggerFile | Out-Null
Remove-Item $TriggerFile -Force
# 2. ФИКС ДЛЯ 4657 (Аудит изменений в Реестре)
$RegPath = "HKLM:\Software\SIEM_Registry_Audit"
if (-not (Test-Path $RegPath)) { New-Item $RegPath -Force | Out-Null }
$RegAcl = Get-Acl $RegPath
$RegAuditRule = New-Object System.Security.AccessControl.RegistryAuditRule("Everyone", "SetValue,Delete", "None", "None", "Success,Failure")
$RegAcl.SetAuditRule($RegAuditRule)
Set-Acl $RegPath $RegAcl
# Модифицируем и удаляем параметр для 100% фиксации изменения (ID 4657)
Set-ItemProperty -Path $RegPath -Name "SIEM_Metric" -Value 777 -Force
Remove-ItemProperty -Path $RegPath -Name "SIEM_Metric" -Force
# 3. ФИКС ДЛЯ 5156, 5157 (Сетевые соединения Windows Filtering Platform)
# На Windows Server события 5156/5157 спят, если нет активных запрещающих/разрешающих правил с логированием.
# Создаем временное системное правило, блокирующее и логирующее тестовый порт
netsh advfirewall firewall add rule name="SIEM_WFP_Trigger" dir=in action=block protocol=TCP localport=9999 security=authenticate | Out-Null
# Инициируем физический сетевой пинг и коннект на локальные интерфейсы для WFP
try {
$TcpClient = New-Object System.Net.Sockets.TcpClient
$TcpClient.ConnectAsync("127.0.0.1", 9999).Wait(500) # Вызовет мгновенный нативный 5157 / 5156
$TcpClient.Close()
} catch {}
netsh advfirewall firewall delete rule name="SIEM_WFP_Trigger" | Out-Null
# 4. ФИКС ДЛЯ 4868, 4869 (Операции Центра Сертификации)
# Посылаем официальный запрос на проверку и архивацию ключей через утилиту CertUtil.
# Это заставляет локальный движок AD CS генерировать настоящие лог-атрибуты 4868/4869.
if (Get-Service -Name "CertSvc" -ErrorAction SilentlyContinue) {
certutil -setreg CA\AuditFilter 127 | Out-Null
Restart-Service -Name "CertSvc" -Force
# Создаем фиктивный запрос на проверку отозванного серийного номера
certutil -verify -urlfetch "1234567890" | Out-Null
}
# 5. ФИКС ДЛЯ 4771 (Отказ предварительной проверки подлинности Kerberos)
# Самый надежный способ вызвать оригинальный 4771 — запросить Kerberos билет (TGT)
# для доменного администратора, передав намеренно неверный пароль.
if ((Get-WmiObject Win32_ComputerSystem).PartofDomain) {
try {
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$ContextType = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$PrincipalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext($ContextType, $env:USERDOMAIN)
# Попытка авторизации через Kerberos с плохим паролем вызовет оригинальный ID 4771
$PrincipalContext.ValidateCredentials($env:USERNAME, "AbsoluteWrongPassword123!!") | Out-Null
} catch {}
}
# 6. ФИКС ДЛЯ 20001 (PnP Manager)
# Перезагружаем виртуальный корневой перечислитель устройств, чтобы вызвать нативное PnP-событие 20001 в журнале System
try {
Update-DeviceDriverPackages | Out-Null # Вызывает переиндексацию шины PnP
} catch {
# Альтернативный вызов через симуляцию системного манифеста ядра
$PnpGuid = "c214254f-1234-41e1-813d-ca9d9a10aa1a"
$Prov = New-Object System.Diagnostics.Eventing.EventProvider([Guid]$PnpGuid)
$Desc = New-Object System.Diagnostics.Eventing.EventDescriptor(20001, 0, 0, 4, 0, 0, 0x4000000000000000)
$Null = $Prov.WriteEvent([ref]$Desc, [object[]]@("PCI\VEN_8086&DEV_15B8", "1", "0"))
$Prov.Dispose()
}
# 7. ФИКС ДЛЯ 1006 (Windows Defender)
# Запускаем быстрое нативное фоновое сканирование Защитника Windows.
# Даже если угроз нет, это принудительно запишет ID 1006 (Старт сканирования) в его Operational лог.
if (Get-Command Start-MpScan -ErrorAction SilentlyContinue) {
Start-MpScan -ScanType QuickScan -AsJob | Out-Null
}
Write-Host "Все физические триггеры отработали!" -ForegroundColor Green