防爆破远程桌面密码

问题

面向公网开了个远程桌面端口,无论用多少号端口,都会被爆破!

虽然稣的密码很安全,几乎爆破不了,但会在系统日志里留下大量记录,实在很不雅观!

分析

改端口是没用的,因为只有 65535 个,只要机器 IP 被发现,扫描端口很快就能完成。

封 IP 是有用的,虽然爆破者(攻击者)有很多 IP,但一定是有限的,有多少封多少!

解决

  1. 从系统日志里分析爆破者 IP

打算使用 PowerShell 7 来编写脚本,首先学习 Get-WinEvent 命令:

1
Get-Help Get-WinEvent -Online

日志的过滤条件可以用“事件查看器”来协助生成:

WinEvent UI
WinEvent XML

当然,以上全部 XML 是 -FilterXml 的参数,比较长,可以用 -FilterXPath 来简化,只需要中间一部分。

条件还可以再加上 LogonType,以缩小范围,其中 3 表示“网络登录”:

1
Get-WinEvent -LogName 'Security' -FilterXPath '*[System[EventID=4625] and EventData[Data[@Name="LogonType"]=3]]' -MaxEvents 1 | Format-List Message

以下是完整代码,它会打印出 IP,和这个 IP 的登录失败次数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ips = @{}
Get-WinEvent -LogName Security -FilterXPath '*[System[band(Keywords,4503599627370496)] and EventData[Data[@Name="LogonType"]=3]]' | %{
$xml = [xml]$_.toXml()
foreach ($data in $xml.Event.EventData.Data) {
if ($data.Name -eq 'IpAddress') {
$ip = $data.'#text'
if ($ips.ContainsKey($ip)) {
++$ips[$ip]
} else {
$ips.Add($ip, 1)
'Fisrt find ' + $ip + ' on ' + $_.TimeCreated
}
}
}
}
Write-Output 'All IPs:', $ips
  1. 把爆破者 IP 加入防火墙,阻止它们

目前收集到这些:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
112.184.96.197
118.45.92.239
122.38.193.166
138.199.21.245
14.116.196.99
14.49.207.162
141.98.11.119
141.98.11.58
147.78.47.57
148.113.4.245
176.111.174.173
176.111.174.174
179.60.147.13
182.180.92.224
185.161.248.145
188.250.64.50
222.191.242.228
45.143.201.62
58.221.4.54
58.33.52.84
62.122.184.88
67.159.237.58
77.90.185.132
78.128.114.18
89.248.163.94
89.248.163.95
91.191.209.202
91.240.118.187
91.240.118.29

打开 wf.msc,新建一个阻止型的防火墙策略,然后加入到“作用域”的“远程 IP 地址”里。

Firewall

加防火墙也可以用 PowerShell 搞定,这次先偷个懒,下次再说吧!