Страница 1 из 1

Ловим и баним переборщиков паролей на терминальный сеанс

Добавлено: 16 фев 2020, 15:55
RomA
Введение:
Есть Windows10 или WindowsServer2019, который светится в интернете удаленным рабочим столом. И есть люди, которые не могут жить без того, что бы не попытаться получить доступ к нему. Делают они это перебором паролей, захламляя ваш лог по полной (((

Задача:
Найти и забанить ИП тех, кто перебирает пароли к терминальному серверу

Реализация:
Открываем PewerShell от имени администратора и создаем правило в файрвол для бана. Конечно, брандмауэр должен быть включен.

Код: Выделить всё

New-NetFirewallRule -DisplayName "BlockRDPBruteForce" –RemoteAddress 94.198.196.132 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block
Где 94.198.196.132 - IP-адрес, который меня ломал :-)

Теперь можно создать пару файлов block_ip_rdp.ps1 и blocked_ip_rdp.txt - во второй будет писаться когда и кого забанили, а вот первый следующего содержания:

Код: Выделить всё

$Last_n_Hours = [DateTime]::Now.AddHours(-2)
$log = "C:\Users\roman\Documents\blocked_ip_rdp.txt"
$badRDPlogons = Get-EventLog -LogName 'Security' -after $Last_n_Hours -InstanceId 4625 | ?{$_.Message -match 'Тип входа:\s+(3)\s'} | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} }
$getip = $badRDPlogons | group-object -property IpAddress | where {$_.Count -gt 5} | Select -property Name
#$getip>$log
$current_ips = (Get-NetFirewallRule -DisplayName "BlockRDPBruteForce" | Get-NetFirewallAddressFilter ).RemoteAddress -split(",")
foreach ($ip in $getip)
{
if ($ip.name -and $ip.name -ne "-" -and !($current_ips -contains $ip.Name)) {
$current_ips += $ip.name
# Write-Output $ip.name
(Get-Date).ToString() + ' ' + $ip.name + ' IP заблокирован за ' + ($badRDPlogons | where {$_.IpAddress -eq $ip.name}).count + ' попыток за 2 часа'>> $log # запись события блокировки IP адреса в лог файл
}
}
#Write-Output "---------------------------------"
#Write-Output $current_ips
Set-NetFirewallRule -DisplayName "BlockRDPBruteForce" -RemoteAddress $current_ips
Если запустить этот скрипт от имени администратора - он выберет все неудачные попытки входа на последнии 2 часа и забанит всех, кто больше 5ти раз неверно набрал пароль

Если выполнение сценариев в системе запрещен, но это легко исправить

Код: Выделить всё

Set-ExecutionPolicy Unrestricted
Литература:
https://winnote.ru/security/160-windows ... steme.html

Выбор пользователей

Добавлено: 16 фев 2020, 16:03
RomA
Вводные:
PowerShell от имени администратора.

Как посмотреть все IP-адреса, с которых были попытки неудачного входа
Команда:

Код: Выделить всё

Get-EventLog -LogName 'Security' -InstanceId 4625 | Select-Object @{n='IpAddress';e={$_.ReplacementStrings[-2]} } | group-object -property IpAddress | Select -property Name, Count
Вывод:
Name Count
---- -----
193.19.231.81 5
109.252.54.11 24
94.198.196.132 35573
Выводим пользователей, которые успешно подключались к терминалу
Команда:

Код: Выделить всё

Get-WinEvent -FilterHashtable @{Logname="Security";id=4624} | Foreach {$_.TimeCreated,$_.Properties[5].Value,$_.Properties[18].Value}
Вывод:
16 февраля 2020 г. 14:55:46
user1
193.19.31.81
16 февраля 2020 г. 14:31:36
user2
109.252.54.11