Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellおよびWindowsファイアウォールルールを使用したRDPブルートフォース保護

WindowsファイアウォールでRDPブルートフォース攻撃または継続的なRDP攻撃が検出されたIPアドレスを自動的にブロック(ブラックリスト)する簡単なPowerShellスクリプトを作成することを考えました。考え方は次のとおりです。PowerShellスクリプトはシステムイベントログを分析し、過去3時間に同じIPアドレスからRDPを介した認証に5回以上失敗した場合、そのIPアドレスはWindowsファイアウォールのブロックルールに自動的に追加されます。 。

そのため、小規模オフィスネットワークがあります。これにアクセスするために、RDPポートはNATを介してLinuxを実行しているインターネットゲートウェイを介してオフィスコンピューターの1つに転送されます(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イベントログから、過去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
を選択します

見つかったIPアドレスのリストを表示するには、次を使用します:$getip

ここで、攻撃者の見つかったすべてのIPアドレスを、前に作成したファイアウォールルールBlockRDPBruteForceに追加します。 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

PowerShellおよびWindowsファイアウォールルールを使用したRDPブルートフォース保護

WindowsDefenderファイアウォールのブロックルールに新しいIPアドレスが追加されていることを確認してください。

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攻撃をブロックするために使用できます。


  1. Windows 10 ファイアウォールのルールと設定を調整する

    Windows 10 では、Windows ファイアウォールは Vista からあまり変わっていません。全体として、それはほとんど同じです。 インバウンド プログラムへの接続は、許可リストにない限りブロックされます。 アウトバウンド ルールに一致しない接続はブロックされません。 一般公開もあります と非公開 ファイアウォールのネットワーク プロファイルを作成し、インターネットではなくプライベート ネットワークで通信できるプログラムを正確に制御できます。 この記事では、Windows 10 ファイアウォールのさまざまなオプションと設定について説明し、ニーズに合わせてそれらを調整する方法について

  2. Windows 10 および Windows 11 で Visual Studio Code を使用して PowerShell スクリプトを作成する方法

    Windows 10 と Windows 11 で PowerShell スクリプトを作成できることをご存知ですか? Windows に PowerShell をインストールしたので、PC で PowerShell を使用して何ができるか知りたいと思うかもしれません。このガイドでは、Visual Studio Code を使用して簡単なスクリプト ファイルを作成し、そのスクリプト ファイルを Windows 10 の PowerShell で実行する方法について説明しますおよび Windows 11. まず、基本的な PowerShell スクリプトを作成する方法を学ぶ必要があります。それを