Masa's blog

アクセスカウンタ

zoom RSS RDP リモートデスクトップポート開放時のブルートフォース攻撃ソースIPを自動的にBanする方法

<<   作成日時 : 2014/11/01 21:05   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

基本はVPN接続して自宅のPCにリモートデスクトップ接続しますが、どうしても3389ポートをそのまま開放して簡易に接続したいとき、ありますよね。

ただ、ブルートフォース攻撃(ユーザ名とパスワードリストの総当り攻撃)されると、当然危険ですし、netlogonプロセスが異常なほどCPUを消費します。

そこでLinuxのFail2banと同様に、ログイン失敗のイベントからスクリプトを起動させ、Windows FWに自動的に攻撃元のIPからの通信を拒否するように設定できないか調べてみました。
イベントログ、タスクスケジューラ、Windows power shell, VB scriptを駆使してできるようです。

以下は、その方法です。 Windows 7 Ultimateで確認しています。 Windows 7 Professionalでも動作すると思います。 Homeの場合は、ローカルセキュリティポリシーの設定ができるか、不安です。また、Windows 8では確認してません。


1.ログオン失敗時にイベントログにイベントを書き込む設定をします。
 1) ローカルセキュリティーポリシーを起動。 起動方法はこちらを参照。
 2) 「セキュリティの設定」→「ローカルポリシー」→「監査ポリシー」と進み、「ログオン イベントの監査」をダブルクリック
 3) 「次の場合に監査する」のところを、「失敗」にチェックを入れます。

2.Windows Firewallに規定のルールを作成します。
 1) コントロールパネルのWindows ファイアーウォールを開き、左ペインにある、詳細設定をクリックします。そうすると、別なウィンドウが立ち上がります。
 2) 左ペインの「受信の規則」を選択し、メニューの「操作(A)」→「新しい規則(N)...」を選択。新規の受信の規則ウィザードが開きます。
 3) 以下のように設定していきます。
  a) 規則の種類
    カスタム
  b) プログラム
    すべてのプログラム
  c) プロトコルおよびポート
    変更なし(全てデフォルト設定)
  d) スコープ
    「この規則を適用するリモートIPアドレスを選択してください。」で、「これらのIPアドレス(H)」を選択。
    「追加」をクリックし、「このIPアドレスまたはサブネット(A)」に1.1.1.1などの適当なアドレスを入れておきます。
  e) 操作
    接続をブロックする(K)
  f) プロファイル
    変更なし(全てデフォルト設定)
  g) 名前
    MyRuleRDPBruteForce と設定。
    (なんでも良いのですが、後でWindows Power shellから、このルールに対して自動的にIPを追加していきますので、変更する場合は、Power shellの中身を変更する必要があります。)

3.スクリプトなどをおく、ディレクトリを作成します。 自分の場合は、D:\Tools\fail2ban_win としています。

4.次にタスクスケジューラに、イベント発生時のタスクを追加します。
 1) 以下のXMLファイルをメモ帳などのテキストエディタで作成します。
   ファイル名は"Security_Microsoft-Windows-Security-Auditing_4625.xml"です。

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2014-10-19T20:42:06.8979111</Date>
<Author>Masa-PC\Administrator</Author>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<StartBoundary>2014-10-28T00:14:58.2941498</StartBoundary>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and EventID=4625]]</Select></Query></QueryList></Subscription>
<ValueQueries>
<Value name="AccountDomain">Event/EventData/Data[@Name='TargetDomainName']</Value>
<Value name="AccountName">Event/EventData/Data[@Name='TargetUserName']</Value>
<Value name="ClientAddress">Event/EventData/Data[@Name='IpAddress']</Value>
<Value name="Computer">Event/System/Computer</Value>
<Value name="EventID">Event/System/EventID</Value>
</ValueQueries>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>Masa-PC\Administrator</UserId>
<LogonType>Password</LogonType>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>D:\Tools\fail2ban_win\Fail2Ban.vbs</Command>
<Arguments>"$(AccountName)" "$(ClientAddress)"</Arguments>
</Exec>
</Actions>
</Task>

※上記の中で、<Author>タグと<UserId>タグの中に、Masa-PC\Administratorというのがあります。
  コンピュータ名\ユーザ名の形式で、あなたが現在ログインしているコンピュータ名と、ログインユーザ名に変更してください。
  また、<Command>タグに起動するスクリプトのディレクトリ、ファイル名が記述されているので、適宜変更してください。
 2) 上記XMLを作成したら(管理ツールメニューから)タスクスケジューラを起動し、「タスクスケジューラライブラリ」→「イベントビューア」を選択します。
 3) 右のペインに「タスクのインポート」があるので、クリックし、先ほど作成したXMLファイルを指定します。
   詳細設定のダイアログが表示されるので、何も変更せず「OK」を押します。
   本タスクを実効するユーザのパスワードを要求されるので、パスワードを指定します。

5.実効スクリプトを作成します。
 D:\Tools\fail2ban_win に以下の2ファイルをメモ帳などで作ります。

 1) Fail2Ban.vbs

Dim objShell, scriptpath, args, ip, acc

scriptpath = "D:\Tools\fail2ban_win\Fail2ban.ps1"
acc = wscript.arguments.item(0)
ip = wscript.arguments.item(1)

args = chr(34) & acc & chr(34) & " " & chr(34) & ip & chr(34)

Set objShell = CreateObject("WScript.Shell")
'Run powershell hidden
objShell.Run ("powershell " & scriptpath & " " & args), 0, true
Set objShell = Nothing

 2) Fail2ban.ps1

$targetaccount = $args[0]
$sourceip = $args[1]

#Filter/Threshold options
$datefilter = [DateTime]::Now.AddHours(-3) # check only last x hours
$countfilter = 3
$rulename ="MyRuleRDPBruteForce" #Firewall rule name

$TargetUserName = @{n='TargetUserName';e={$_.ReplacementStrings[5]}}
$IpAddress = @{n='IpAddress';e={$_.ReplacementStrings[19]}}

#return IP if number of failed logins for specifed IP has exceeded x tries within specified timeframe
#$IP2Ban = Get-Eventlog security -InstanceId 4625 -After $datefilter | where {$_.ReplacementStrings[19] -eq $sourceip} | select-object $IpAddress | Group-Object -Property IPAddress | where Count -gt $countfilter | Select-Object -Property Name
$IP2Ban = Get-Eventlog security -InstanceId 4625 -After $datefilter | where {$_.ReplacementStrings[19] -eq $sourceip} | select-object $IpAddress | Group-Object -Property IPAddress

if ( $IP2Ban -ne $null)
{
#Add IP to firewall
#$IP2Ban.Name is same as $sourceip

if ( $IP2Ban.Count -gt $countfilter)
{
$fw = New-object -comObject HNetCfg.FwPolicy2
$myrule = $fw.Rules | where {$_.Name -eq $rulename}

$myrule.RemoteAddresses += (","+$sourceip)
$fw = $null
}
}



これでOKです。 上記のスクリプトでは過去3時間に3回ログインを失敗すると、そのIPアドレスからの通信を全て規制します。 自動解除は含まれてません。 自分でWindows firewallの設定を開き、先ほど2で作成したルールMyRuleRDPBruteForceを開き、「スコープ」タブで解除してあげることができます。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文
RDP リモートデスクトップポート開放時のブルートフォース攻撃ソースIPを自動的にBanする方法 Masa's blog/BIGLOBEウェブリブログ
文字サイズ:       閉じる