Windows 방화벽에서 RDP 무차별 대입 시도 또는 지속적인 RDP 공격이 감지되는 IP 주소를 자동으로 차단(블랙리스트)하는 간단한 PowerShell 스크립트를 작성하는 아이디어가 있었습니다. 아이디어는 다음과 같습니다. PowerShell 스크립트는 시스템 이벤트 로그를 분석하고 지난 3시간 동안 동일한 IP 주소에서 RDP를 통한 인증 시도가 5회 이상 실패한 경우 해당 IP 주소가 Windows 방화벽 차단 규칙에 자동으로 추가됩니다. .
따라서 소규모 사무실 네트워크가 있습니다. 액세스하기 위해 RDP 포트는 NAT를 통해 Linux를 실행하는 인터넷 게이트웨이를 통해 사무실 컴퓨터 중 하나로 전달됩니다(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
RDP 무차별 대입 시도가 감지되는 IP 주소를 이 규칙 방화벽에 추가합니다.
PowerShell 스크립트가 필요한 IP 주소 또는 서브넷을 차단하지 않도록 추가 허용 규칙을 작성할 수 있습니다.그런 다음 Windows 이벤트 로그에서 지난 3시간 동안 5회 이상의 인증 시도 실패가 감지된 IP 주소 목록을 수집해야 합니다. 이를 수행하려면 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
$getip
이제 발견된 공격자의 모든 IP 주소를 앞에서 만든 방화벽 규칙 BlockRDBPruteForce에 추가합니다. Windows 방화벽을 관리하기 위해 내장된 PowerShell 모듈 NetSecurity를 사용합니다. 우선 현재 차단된 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
Windows Defender 방화벽의 차단 규칙에 새 IP 주소가 추가되었는지 확인합니다.
이제 이 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 공격을 차단하는 데 사용할 수 있습니다.