feat: RCM 1149 on RDS servers and login dedup (2.1.4-SAC)
Enable Rcm1149 monitoring on servers when RCM journal is available; dedup 1149 notifications like 4624. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -399,6 +399,7 @@ if ($notifyable.Count -eq 0 -and $recent4624.Count -gt 0) {
|
|||||||
|
|
||||||
[void]$report.AppendLine('')
|
[void]$report.AppendLine('')
|
||||||
[void]$report.AppendLine('UseSAC=exclusive: Telegram по rdp.login.success только из SAC (не локально агентом).')
|
[void]$report.AppendLine('UseSAC=exclusive: Telegram по rdp.login.success только из SAC (не локально агентом).')
|
||||||
|
[void]$report.AppendLine('На сервере RDS без аудита Security 4624 — смотрите RCM Operational 1149 (с 2.1.4-SAC мониторится на сервере).')
|
||||||
[void]$report.AppendLine('rdp.login.success = severity info; при SAC min_severity=warning Telegram не уйдёт, но событие в UI SAC должно быть.')
|
[void]$report.AppendLine('rdp.login.success = severity info; при SAC min_severity=warning Telegram не уйдёт, но событие в UI SAC должно быть.')
|
||||||
[void]$report.AppendLine('Проверьте SAC: type=rdp.login.success, hostname ITIS198, время входа, event_id из login_monitor.log.')
|
[void]$report.AppendLine('Проверьте SAC: type=rdp.login.success, hostname ITIS198, время входа, event_id из login_monitor.log.')
|
||||||
|
|
||||||
|
|||||||
+21
-7
@@ -16,7 +16,7 @@
|
|||||||
- Добавлены исключения шума: DWM-*, UMFD-*, HealthMailbox*, Font Driver Host*, NtLmSsp и др.
|
- Добавлены исключения шума: DWM-*, UMFD-*, HealthMailbox*, Font Driver Host*, NtLmSsp и др.
|
||||||
- Heartbeat без дрейфа: используется nextHeartbeatTime (а не "прошло N секунд").
|
- Heartbeat без дрейфа: используется nextHeartbeatTime (а не "прошло N секунд").
|
||||||
- Win32_OperatingSystem.ProductType: 1 = рабочая станция (4624/4625 только LogonType 10 + при наличии журнала событие 1149 RCM);
|
- Win32_OperatingSystem.ProductType: 1 = рабочая станция (4624/4625 только LogonType 10 + при наличии журнала событие 1149 RCM);
|
||||||
2/3 = сервер/КД — прежняя логика (типы 2, 3, 10).
|
2/3 = сервер/КД — Security 4624/4625 (типы 2, 3, 10) + при наличии журнала RCM — 1149 (на RDS часто нет 4624 без аудита входа).
|
||||||
Секреты Telegram (DPAPI LocalMachine): на ЭТОЙ машине, под админом, выполните:
|
Секреты Telegram (DPAPI LocalMachine): на ЭТОЙ машине, под админом, выполните:
|
||||||
Add-Type -AssemblyName System.Security
|
Add-Type -AssemblyName System.Security
|
||||||
$p=[Text.Encoding]::UTF8.GetBytes('<токен>')
|
$p=[Text.Encoding]::UTF8.GetBytes('<токен>')
|
||||||
@@ -90,7 +90,7 @@ $script:SkipLogDetailLimit = 15
|
|||||||
# строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах).
|
# строки ниже, если правки «мелкие» и вы не хотите менять отображаемую версию в логах).
|
||||||
# Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только
|
# Рекомендация: при значимых релизах меняйте и $ScriptVersion, и version.txt одинаково; при только
|
||||||
# исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1).
|
# исправлениях на шаре — достаточно поднять patch в version.txt (например 1.3.0.1).
|
||||||
$ScriptVersion = "2.1.3-SAC"
|
$ScriptVersion = "2.1.4-SAC"
|
||||||
|
|
||||||
# Логи (все под InstallRoot)
|
# Логи (все под InstallRoot)
|
||||||
$LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log"
|
$LogFile = Join-Path $script:InstallRoot "Logs\login_monitor.log"
|
||||||
@@ -139,7 +139,8 @@ $GatewayEventsLookbackMinutes = 60
|
|||||||
# Security 4624/4625/4648: персистентный cursor + replay не старше N мин (медленный boot / поздний старт агента).
|
# Security 4624/4625/4648: персистентный cursor + replay не старше N мин (медленный boot / поздний старт агента).
|
||||||
$SecurityEventsLookbackMinutes = 60
|
$SecurityEventsLookbackMinutes = 60
|
||||||
|
|
||||||
# RDP Remote Connection Manager (workstations): User authentication succeeded — событие 1149
|
# RDP Remote Connection Manager: User authentication succeeded — событие 1149 (workstation + RDS server)
|
||||||
|
$EnableRcm1149Monitoring = 1
|
||||||
$RcmLogName = "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational"
|
$RcmLogName = "Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational"
|
||||||
$RcmEventId = 1149
|
$RcmEventId = 1149
|
||||||
|
|
||||||
@@ -2637,7 +2638,7 @@ function Send-Heartbeat {
|
|||||||
if ($script:IsWorkstation) {
|
if ($script:IsWorkstation) {
|
||||||
$message += "`r`n📌 <b>Режим:</b> рабочая станция — Security 4624/4625 только LogonType 10 (RDP); при наличии журнала — также 1149 (Remote Connection Manager)."
|
$message += "`r`n📌 <b>Режим:</b> рабочая станция — Security 4624/4625 только LogonType 10 (RDP); при наличии журнала — также 1149 (Remote Connection Manager)."
|
||||||
} else {
|
} else {
|
||||||
$message += "`r`n📌 <b>Режим:</b> сервер — Security 4624/4625, типы входа 2, 3, 10."
|
$message += "`r`n📌 <b>Режим:</b> сервер — Security 4624/4625, типы входа 2, 3, 10; при журнале RCM — также 1149 (RDS без аудита 4624)."
|
||||||
}
|
}
|
||||||
$ignoreEntries = @(Get-RdpMonitorIgnoreListEntries)
|
$ignoreEntries = @(Get-RdpMonitorIgnoreListEntries)
|
||||||
if ($ignoreEntries.Count -gt 0) {
|
if ($ignoreEntries.Count -gt 0) {
|
||||||
@@ -4328,7 +4329,7 @@ function Start-LoginMonitor {
|
|||||||
if ($osKind.IsWorkstation) {
|
if ($osKind.IsWorkstation) {
|
||||||
Write-Log "Режим рабочей станции: Security — только LogonType 10 (RDP); при наличии журнала — событие 1149 (Remote Connection Manager)."
|
Write-Log "Режим рабочей станции: Security — только LogonType 10 (RDP); при наличии журнала — событие 1149 (Remote Connection Manager)."
|
||||||
} else {
|
} else {
|
||||||
Write-Log "Режим сервера: Security — LogonType 2, 3, 10"
|
Write-Log "Режим сервера: Security — LogonType 2, 3, 10; при журнале RCM — 1149 (если `$EnableRcm1149Monitoring)."
|
||||||
}
|
}
|
||||||
if (Test-MonitorFeatureEnabled -Value $EnableAdminShareMonitoring) {
|
if (Test-MonitorFeatureEnabled -Value $EnableAdminShareMonitoring) {
|
||||||
Write-Log "Admin share: Security 5140 для $($AdminShareMonitorSuffixes -join ', ') (audit File Share; workstation + server)."
|
Write-Log "Admin share: Security 5140 для $($AdminShareMonitorSuffixes -join ', ') (audit File Share; workstation + server)."
|
||||||
@@ -4395,9 +4396,15 @@ function Start-LoginMonitor {
|
|||||||
$rdGatewayAvailable = $false
|
$rdGatewayAvailable = $false
|
||||||
if ($EnableRDGatewayMonitoring) { $rdGatewayAvailable = Test-RDGatewayLog }
|
if ($EnableRDGatewayMonitoring) { $rdGatewayAvailable = Test-RDGatewayLog }
|
||||||
|
|
||||||
$rcmMonitoringEnabled = ($osKind.IsWorkstation -and (Test-RcmLogAvailable))
|
$rcmMonitoringEnabled = (Test-MonitorFeatureEnabled -Value $EnableRcm1149Monitoring) -and (Test-RcmLogAvailable)
|
||||||
if ($osKind.IsWorkstation -and -not $rcmMonitoringEnabled) {
|
if (Test-MonitorFeatureEnabled -Value $EnableRcm1149Monitoring) {
|
||||||
|
if ($rcmMonitoringEnabled) {
|
||||||
|
Write-Log "RCM 1149: опрос включён ($RcmLogName)."
|
||||||
|
} elseif ($osKind.IsWorkstation) {
|
||||||
Write-Log "Рабочая станция: журнал Remote Connection Manager недоступен — уведомления только по Security 4624/4625 (LogonType 10). Проверьте, что включён удалённый рабочий стол."
|
Write-Log "Рабочая станция: журнал Remote Connection Manager недоступен — уведомления только по Security 4624/4625 (LogonType 10). Проверьте, что включён удалённый рабочий стол."
|
||||||
|
} else {
|
||||||
|
Write-Log "Сервер: журнал Remote Connection Manager недоступен — RCM 1149 отключён; только Security 4624/4625."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$rcmShadowMonitoringEnabled = (Test-MonitorFeatureEnabled -Value $EnableRcmShadowControlMonitoring) -and (Test-RcmLogAvailable)
|
$rcmShadowMonitoringEnabled = (Test-MonitorFeatureEnabled -Value $EnableRcmShadowControlMonitoring) -and (Test-RcmLogAvailable)
|
||||||
@@ -4697,6 +4704,13 @@ function Start-LoginMonitor {
|
|||||||
if (Should-IgnoreEvent -Username $rcmInfo.Username -ProcessName "-" `
|
if (Should-IgnoreEvent -Username $rcmInfo.Username -ProcessName "-" `
|
||||||
-ComputerName "-" -EventID 1149 -LogonType 10 -SourceIP $rcmInfo.ClientIP) { continue }
|
-ComputerName "-" -EventID 1149 -LogonType 10 -SourceIP $rcmInfo.ClientIP) { continue }
|
||||||
|
|
||||||
|
$dedupKey1149 = Get-RdpLoginSuccessNotifyDedupKey -SecurityLogComputerName $event.MachineName `
|
||||||
|
-Username $rcmInfo.Username -SourceIP $rcmInfo.ClientIP -LogonType 10
|
||||||
|
if (-not (Test-RdpLoginSuccessNotifyDedupAllow -DedupKey $dedupKey1149)) {
|
||||||
|
Write-Log "Notify dedup 1149: User=$($rcmInfo.Username) IP=$($rcmInfo.ClientIP) (window ${LoginSuccessNotifyDedupSeconds}s)"
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
$msg = Format-Rcm1149Event -Username $rcmInfo.Username -ClientIP $rcmInfo.ClientIP `
|
$msg = Format-Rcm1149Event -Username $rcmInfo.Username -ClientIP $rcmInfo.ClientIP `
|
||||||
-TimeCreated $rcmInfo.TimeCreated -SecurityLogComputerName $event.MachineName
|
-TimeCreated $rcmInfo.TimeCreated -SecurityLogComputerName $event.MachineName
|
||||||
Write-Log "Notify RCM 1149: User=$($rcmInfo.Username) IP=$($rcmInfo.ClientIP)"
|
Write-Log "Notify RCM 1149: User=$($rcmInfo.Username) IP=$($rcmInfo.ClientIP)"
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ $StartupRebootDetectMinutes = 5
|
|||||||
$GetInventory = $true
|
$GetInventory = $true
|
||||||
|
|
||||||
# --- RDS Shadow Control + WinRM inbound (Enter-PSSession), severity warning ---
|
# --- RDS Shadow Control + WinRM inbound (Enter-PSSession), severity warning ---
|
||||||
|
# $EnableRcm1149Monitoring = 1 # RCM Operational 1149 (RDP auth; workstation + RDS server)
|
||||||
# $EnableRcmShadowControlMonitoring = 1 # RCM Operational 20506/20507/20510
|
# $EnableRcmShadowControlMonitoring = 1 # RCM Operational 20506/20507/20510
|
||||||
# $EnableWinRmInboundMonitoring = 1 # WinRM Operational 91 (+ correlate Security 4624)
|
# $EnableWinRmInboundMonitoring = 1 # WinRM Operational 91 (+ correlate Security 4624)
|
||||||
# $EnableAdminShareMonitoring = 1 # Security 5140 C$/ADMIN$ (audit File Share)
|
# $EnableAdminShareMonitoring = 1 # Security 5140 C$/ADMIN$ (audit File Share)
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
2.1.3-SAC
|
2.1.4-SAC
|
||||||
|
|||||||
Reference in New Issue
Block a user