当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 和 Windows 防火墙规则进行 RDP 暴力保护

作者:精品下载站 日期:2024-12-14 20:11:54 浏览:16 分类:玩电脑

使用 PowerShell 和 Windows 防火墙规则进行 RDP 暴力保护


我有一个想法,编写一个简单的 PowerShell 脚本来自动阻止(列入黑名单)IP 地址,在 Windows 防火墙中检测到 RDP 暴力尝试或连续 RDP 攻击。想法如下:PowerShell 脚本分析系统事件日志,如果在过去三个小时内从同一 IP 地址通过 RDP 进行身份验证的尝试失败超过 5 次,则该 IP 地址将自动添加到 Windows 防火墙阻止规则中。

因此,有一个小型的办公网络。要访问它,需要通过运行 Linux 的互联网网关将 RDP 端口通过 NAT 转发到其中一台办公室计算机(TCP 15221 从外部应答,默认 RDP 端口 3389 转发到内部)。有时,由于尝试通过 RDP 在计算机上进行身份验证失败,已知用户帐户会被域密码策略锁定。我们的任务是自动阻止用于暴力破解 RDP 服务器的 IP 地址。

首先,在计算机上创建防火墙规则以阻止来自指定 IP 地址的入站 RDP 连接:

New-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Block

[玩转系统] 使用 PowerShell 和 Windows 防火墙规则进行 RDP 暴力保护

我们将进一步将检测到 RDP 暴力尝试的 IP 地址添加到此规则防火墙中。

您可以编写额外的允许规则,以便 PowerShell 脚本不会阻止您需要的 IP 地址或子网。

然后,您必须从 Windows 事件日志中收集 IP 地址列表,在过去 3 小时内检测到超过 5 次失败的身份验证尝试。为此,请在安全日志中查找 EventID 4625 的事件(访问尝试失败 - 帐户无法登录LogonType=3,请查看文章 RDP 事件日志取证)。在您发现的事件中,找到尝试连接的用户的 IP 地址,并确保它在事件日志中出现超过 5 次。

我使用以下 PowerShell 代码从过去 3 小时的事件列表中选择攻击者的 IP 地址(您可以更改时间段):

$Last_n_Hours = [DateTime]::Now.AddHours(-3)
$badRDPlogons = Get-EventLog -LogName 'Security' -after $Last_n_Hours -InstanceId 4625 | ?{$_.Message -match 'logon type:\s+(3)\s'} | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property IpAddress | where {$_.Count -gt 5} | Select -property Name

要显示找到的 IP 地址列表,请使用:

$getip

现在,将所有发现的攻击者 IP 地址添加到之前创建的防火墙规则 BlockRDPBruteForce 中。为了管理 Windows 防火墙,我们将使用内置的 PowerShell 模块 NetSecurity 首先,获取当前阻止的 IP 地址列表并向其中添加新的 IP 地址。

$log = "C:\ps\rdp_blocked_ip.txt"
$current_ips = (Get-NetFirewallRule -DisplayName "BlockRDPBruteForce" | Get-NetFirewallAddressFilter ).RemoteAddress
foreach ($ip in $getip)
{
$current_ips += $ip.name
(Get-Date).ToString() + ' ' + $ip.name + ' The IP address has been blocked due to ' + ($badRDPlogons | where {$_.IpAddress -eq $ip.name}).count + ' attempts for 2 hours'>> $log # writing the IP blocking event to the log file
}
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips

[玩转系统] 使用 PowerShell 和 Windows 防火墙规则进行 RDP 暴力保护

确保新的 IP 地址已添加到 Windows Defender 防火墙的阻止规则中。

[玩转系统] 使用 PowerShell 和 Windows 防火墙规则进行 RDP 暴力保护

现在您只需将此 PowerShell 代码复制到文件中

c:\ps\block_rdp_attack.ps1

并将其添加到您的任务计划程序中,例如每 2 小时运行一次。

您可以使用 PowerShell 脚本或手动创建计划程序任务:

$repeat = (New-TimeSpan -Hours 2)
$duration = ([timeSpan]::maxvalue)
$Trigger= New-ScheduledTaskTrigger -Once -At (Get-Date).Date -RepetitionInterval $repeat -RepetitionDuration $duration
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\block_rdp_attack.ps1"
Register-ScheduledTask -TaskName "BlockRDPBruteForce_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -Force

或者,如果日志中出现 EventID 4625,您可以运行 PowerShell 脚本(查看博客文章 Windows 事件触发器),这样您就可以更快地响应 RDP 暴力攻击。

您可以根据需要修改此脚本并用于阻止 RDP 攻击。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯