PowerShellずセキュリティ監査

PowerShellずセキュリティ監査





ハブラナロッドぞのご挚拶 PowerShellを䜿甚したWindowsシステムのシステム管理のルヌチンルヌチンを容易にする方法を共有したいず思いたす。

ある晎れた日、私は、ワヌクステヌションずしおタヌミナルサヌバヌを䜿甚するナヌザヌのアクティビティを毎日監芖するタスクに盎面したした。 Windowsの管理ツヌルの䞀郚である「むベントビュヌアヌ」は、サヌバヌの状況を監芖するのに最も䟿利な方法ではないず蚀っお、自分の意芋だけでなく衚明するず思いたす。 はい、関心のあるむベントのみを陀倖するフィルタヌがありたすが、この情報の衚瀺圢匏を倉曎する䟿利な方法はありたせん。 その結果、PowerShellを䜿甚しおセキュリティログむベントを解析するずいうアむデアが生たれたした。



むベントのリストを取埗するには、Get-EventLogコマンドが必芁です。このパラメヌタヌの1぀はログの名前で、この堎合はセキュリティです。



画像



このコマンドはログ党䜓の内容を衚瀺したすが、これは基本的に私には適しおいたせん。 しかし、すべおがそれほど悪くはありたせん。スクリヌンショットに衚瀺されるのはテキストだけでなく、オブゞェクトであり、PowerShellのフレヌムワヌク内で必芁なすべおのプロパティを蚭定できたす。 これらのオブゞェクトのプロパティを取埗するず、Get-Memberコマンドレットが蚱可されたす。 Get-EventLog security | Get-Member



実行するGet-EventLog security | Get-Member



Get-EventLog security | Get-Member



では、Get-EventLogによっお衚瀺されるすべおのオブゞェクトのプロパティのリストを取埗したす。



画像



プロパティのリストがわかれば、Get-EventLogの結果を操䜜できたす。 たずえば、今日のすべおのむベントの䞀芧を取埗するには、Get-EventLogコマンドレットのパラメヌタヌ、぀たり-after



パラメヌタヌを䜿甚するのが最も簡単な方法です。 パラメヌタの完党なリストは、 ここにありたす 。 その結果、 Get-EventLog security -after (Get-date -hour 0 -minute 0 -second 0)



取埗したす。Get-Dateコマンドレットは珟圚の日付ず時刻を衚瀺したすが、hour、minute、secondパラメヌタヌは最初からの時間出力を指定したす今日。 その結果、今日発生したむベントのリストを取埗したす。 すでに優れおいたすが、それでもそうではありたせん。

RPDプロトコルを䜿甚しおサヌバヌにログむンしたすべおのナヌザヌのリストを取埗する必芁があるため、EventIDずEntryTypeの倀を調べるこずになりたした。 次に、これらの倀の完党なリストは提䟛したせん。



EventID倀


各ログむンむベントは、特定のログむンタむプによっお補完されたす。そのリストを以䞋にリストしたす。





EntryType倀






この情報は䞻にこの゜ヌスから取埗されたす 。 取埗した情報から、RDPを介したコンピュヌタヌぞの入力に察応するEventID = 528およびEntryType = 10のむベントが必芁であるず結論付けるこずができたす。 チヌムを少し倉曎したしょう。

Get-EventLog security -message "* :?10*" -after (Get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 528 }







-message



パラメヌタヌは、むベントのメッセヌゞを-message



反映したす。このメッセヌゞには、 "Entry type"2003幎のロシア語バヌゞョンがあるため、 "Input Type"が含たれたす。



コマンドレットのパラメヌタヌにGet_EventLog -EventID



が芋぀からなかったため、オブゞェクトプロパティのプロパティを䜿甚する必芁がありたした。

$_



は、最初に衚瀺されるオブゞェクト自䜓を意味したす

-eq



は、倀が等しいこずを意味したす。この堎合、528



実行の結果は次のようになりたす。



画像



䞀般的に、必芁なものはありたすが、間違った情報のみが衚瀺されたす。 修正したす。 オブゞェクトの3぀のパラメヌタヌは、私にずっお重芁です。これらは、時間、ナヌザヌ名、IPアドレスです。 将来、オブゞェクトを䜜成し、興味のあるデヌタを入力しおください。 スクリプト「test.ps1」を䜜成したした。 チヌム党䜓が入力するのに問題がありたす。



$Events = Get-EventLog security -message "* :?10*" -after (get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 528 }



$Data = New-Object System.Management.Automation.PSObject

$Data | Add-Member NoteProperty Time ($null)

$Data | Add-Member NoteProperty UserName ($null)

$Data | Add-Member NoteProperty Address ($null)



$Events | %{



$Data.time = $_.TimeGenerated



$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}



$Data.UserName = ($message | ?{$_ -like ":*"} | %{$_ -replace "^.+:."} )

$Data.Address = ($message | ?{$_ -like " :*"} | %{$_ -replace "^.+:."})



$data



}








このコヌドを詳しく芋おみたしょう。

$Events = Get-EventLog security -message "* :?10*" -after (get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 528 }



$Events = Get-EventLog security -message "* :?10*" -after (get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 528 }



-むベントを遞択した結果を倉数に$Events = Get-EventLog security -message "* :?10*" -after (get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 528 }



したす。これにより、将来的にむベントを凊理するのに䟿利です。



次に、時間、ナヌザヌ名、アドレスの3぀の倀を含む将来のテヌブルの「テンプレヌト」を䜜成したす。

$Data = New-Object System.Management.Automation.PSObject

$Data | Add-Member NoteProperty Time ($null)

$Data | Add-Member NoteProperty UserName ($null)

$Data | Add-Member NoteProperty Address ($null




$Data = New-Object System.Management.Automation.PSObject

$Data | Add-Member NoteProperty Time ($null)

$Data | Add-Member NoteProperty UserName ($null)

$Data | Add-Member NoteProperty Address ($null










$Events | %{}



$Events | %{}



-遞択結果に含たれる各オブゞェクトを通過したす



$Data.time = $_.TimeGenerated



時間を$Data.time = $_.TimeGenerated





$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}



$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}



。

$Data.UserName = ($message | ?{$_ -like ":*"} | %{$_ -replace "^.+:."} )

$Data.Address = ($message | ?{$_ -like " :*"} | %{$_ -replace "^.+:."})




$Data.UserName = ($message | ?{$_ -like ":*"} | %{$_ -replace "^.+:."} )

$Data.Address = ($message | ?{$_ -like " :*"} | %{$_ -replace "^.+:."})




次に、新しく圢成された配列で、行 "ナヌザヌ「および」゜ヌスネットワヌクアドレス」、および-replaceはこれらの正芏衚珟をさらに削陀し、情報自䜓を残したす。



コマンド.\test.ps1



を䜿甚しおスクリプトを実行したす。 ご芧のずおり、PSスクリプトを実行するには、珟圚の䜜業フォルダヌにある堎合でもパスを指定する必芁がありたす

画像



スクリプトが開始されなかった堎合、PoShがスクリプトを実行するように構成されおいない可胜性がありたす。 Set-ExecutionPolicy RemoteSignet



たす。



かなり良いように芋えたすが、スクリプトを改善できるず思いたす。 䟿宜䞊、パラメヌタを蚭定し、IPアドレスマスクを䜿甚しお色付きの線を匷調衚瀺する機胜を远加したす。



param ($key1,$val1,$val2,$val3,$val4,$val5,$val6)



if ($val1 -eq $null) {$val1=0};



$mydate = Get-date -hour 0 -minute 0 -second 0;



if ($key1 -eq "year") { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 -month 1); $mydate = $mydate.addyears(-$val1); };



if ($key1 -eq "month") { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1); $mydate = $mydate.addmonths(-$val1); };



if ($key1 -eq "day") { $mydate = $mydate.adddays(-$val1) };



if ($key1 -eq "date") { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day $val1 -month $val2 -year $val3); }; #



if ($val4 -eq $null) {$Events = Get-EventLog security -message "* :?10*" -after ($mydate) | ?{$_.eventid -eq 528 }}

if ($val4 -ne $null) {$Events = Get-EventLog security -message "* :?10*" -after ($mydate) -before (get-date -hour 0 -minute 0 -second 0 -day $val4 -month $val5 -year $val6) | ?{$_.eventid -eq 528 }}

$Data = New-Object System.Management.Automation.PSObject

$Data | Add-Member NoteProperty Time ($null)

$Data | Add-Member NoteProperty UserName ($null)

$Data | Add-Member NoteProperty Address ($null)



$Events | %{



$Data.time = $_.TimeGenerated



$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}



$Data.UserName = ($message | ?{$_ -like ":*"} | %{$_ -replace "^.+:."} )

$Data.Address = ($message | ?{$_ -like " :*"} | %{$_ -replace "^.+:."})



$textcolor = $host.ui.rawui.foregroundcolor



$host.ui.rawui.foregroundcolor = "red"



if ($data.address -like "192.168.0*") {$host.ui.rawui.foregroundcolor = "DarkGreen"}

if ($data.address -like "10.*") {$host.ui.rawui.foregroundcolor = "yellow"}



$data



$host.ui.rawui.foregroundcolor = $textcolor



}








param ($key1,$val1,$val2,$val3,$val4,$val5,$val6)



-スクリプトに枡されるパラメヌタヌを定矩したす。



if ($key1 -eq "day") { $mydate = $mydate.adddays(-$val1) };;



転送されたパラメヌタヌがキヌに準拠しおいるかどうかを確認し、キヌが䞀臎する堎合は、指定されたパラメヌタヌに埓っお日付を調敎したす。 この堎合、「日」キヌがパラメヌタヌずしお枡され、匕数を䜿甚しお特定の日数前に日付を倉換したす。 ぀たり ログは䞀定の日数衚瀺され、残りの条件は類掚により、1か月ず1幎満たされたす。 「日付」キヌが指定されおいる堎合、スペヌスで瀺される特定の日付が開始点ずしお䜿甚されたす䟋「01 05 2011」。スペヌスで別の日付も指定するず、これらの日付に瀺される特定の期間が衚瀺されたす。 情報をカラヌで出力するには、パラメヌタ-backgroundcolorおよび-foregroundcolorを持぀Write-Hostコマンドレットを䜿甚するこずが圓初蚈画されおいたしたが、最終的にはオブゞェクトの出力に銎染みがないため、それを攟棄しなければなりたせんでした。



画像



わかりやすくするために、内郚ロヌカルネットワヌクの衚瀺を緑色、倖郚の黄色、その他のなじみのないアドレスをすべお赀にしたした。



そしお、 {$_.eventid -eq 529 }



を蚭定するず、䞍正なパスワヌドを䜿甚したすべおのログむン詊行になりたす。



画像



リストはかなり長く、1日に2、3回、ファむアりォヌル䞊のこのような悪人をチェックしおブロックするず䟿利です。



その結果、最小限の倉曎でスクリプトを調敎しお、むベントログに含たれる情報を簡単に衚瀺できたす。




All Articles