過去のバッチファイルに対するウイルス対策PowerShell PowerShellでスニッフィングするときが来ました







私たちは通常、市販のプログラムをスニファーとして使用します。 ただし、PowerShellを使用して組み込みのWindowsツールで対応できます。 「できるから」自転車を発明することに加えて、スクリプトは自動化された交通分析のシナリオで役に立ちます。







準備オプション



自転車の発明の前に、ネットワークトラフィックをインターセプトし、その後の分析を行うように設計された完成品について少しお話します(または思い出します)。 主なトラフィック分析プログラムは次のとおりです。







Tcpdump UNIXシステム用のコンソールおよびかなり有名なスニファー。





8.8.8.8に対してpingを実行し、tcpdumpの出力を賞賛します。







Wireshark おそらく今日では、GUIを備えた最も有名なクロスプラットフォームスニファーの1つです。 機能を拡張するには、スクリプト言語LUAを使用できます。 また、プログラムが他のデバイスでさまざまな形式でキャプチャしたトラフィックを分析することも便利です。









8.8.8.8のpingを続けていますが、すでにWiresharkの助けを借りています。







Microsoft Message Analyzer (以前のMicrosoft Network Monitor)。 スニファー機能に加えて、プログラムやデバイスからのメッセージ、システムイベントを分析できます。









多くの可能性があるので、インターフェースは扱いにくいです。







最後に、 WinDump 。 tcpdumpに類似していますが、Windows用です。







別に、ネットワーク機器のスニファーに注意してください。 結局のところ、問題のあるコンピューターに踏みつけるよりも、境界ルーターまたはスイッチでトラフィックをすぐに見る方がはるかに便利です。







  1. Mikrotikルーターでは、スニファーは「ツール-パケットスニファー」で一見の価値があります。





    Mikrotikスニファー。



    好奇心feature盛な機能は、ルーターからWiresharkを実行しているコンピューターにトラフィックを直接送信できるストリーミングです。







  2. DリンクDFLルーターにもスニファーがあります。 検索ツール-パケットキャプチャ。





    D-Link DFLのスニファー


残念ながら、GUIからパッケージを表示することはできませんが、 .cap形式のトラフィックダンプをダウンロードして、通常のWiresharkアナライザーまたはMicrosoftメッセージアナライザーで開くことができます。







では、何らかの理由でスニファーを今すぐダウンロードしないが、ツールが必要だと想像してみましょう。PowerShellで演習を始めましょう。







急いで助けるための「強力なシェル」



この自動化ツールの最初のバージョンは10年以上前にリリースされたため、通常の構文の真実を繰り返しません。 ただし、メモが必要な場合は、 公式のMicrosoft Webサイトから始めることをお勧めします。同時に、既製のスクリプトのギャラリーがあります。







Windows 8.1 / 2012R2のNetEventPacketCaptureコマンドレットのセットを使用して、コマンドラインからパッケージをキャッチします。 たとえば、REIKOという名前のコンピューターで、ユーザーがターミナルセッションで作業していることを想像してください。PowerShellを使用して作業をスパイします。







まず、ユーザーのコンピューターへの接続を作成します。







$Cim = New-CimSession -ComputerName 'REIKO'
      
      





その後、イベントハンドラセッションを作成します。







 New-NetEventSession -Name "Session01" -CimSession $Cim -LocalFilePath "C:\Windows\Temp\Trace.etl" -CaptureMode SaveToFile
      
      





そして、イベントプロバイダーを追加します。







 Add-NetEventProvider -CimSession $Cim -Name 'Microsoft-Windows-TCPIP' -SessionName "Session01"
      
      





logmanクエリプロバイダーチームですべての可能なプロバイダーを参照してください。

その後、トレースを実行するために残ります:







 Start-NetEventSession -Name "Session01" -CimSession $Cim
      
      





停止するには、同じコマンドでStartをStopに置き換えるだけで十分です。







結果は、次のコマンドで表示できます。







 Get-WinEvent -Path "\\REIKO\C$\Windows\Temp\Trace.etl" -Oldest
      
      











トレースの結果によると、ローカルターミナルセッションでは、コンピューターからターミナルサーバーで作業しているだけでなく、コンピューターに誰かが座っていることが明らかです。







このようなトレースのプロセスを自動化するために(ISから同僚へ)、システム管理者のDan FranciscusはInvoke-PSTraceスクリプトを作成しました。







スクリプトのリストは、ネタバレの下にあります。
 #requires -Modules NetEventPacketCapture function Invoke-PSTrace { [OutputType([System.Diagnostics.Eventing.Reader.EventLogRecord])] [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string]$ComputerName, [switch]$OpenWithMessageAnalyzer, [pscredential]$Credential ) DynamicParam { $ParameterName = 'ETWProvider' $RuntimeParameterDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary $AttributeCollection = New-Object System.Collections.ObjectModel.Collection[System.Attribute] $ParameterAttribute = New-Object System.Management.Automation.ParameterAttribute $ParameterAttribute.Mandatory = $true $AttributeCollection.Add($ParameterAttribute) $arrSet = logman query providers | Foreach-Object {$_.split('{')[0].trimend()} | Select-Object -Skip 3 | Select-Object -SkipLast 2 $ValidateSetAttribute = New-Object System.Management.Automation.ValidateSetAttribute($arrSet) $AttributeCollection.Add($ValidateSetAttribute) $RuntimeParameter = New-Object System.Management.Automation.RuntimeDefinedParameter($ParameterName, [string], $AttributeCollection) $RuntimeParameterDictionary.Add($ParameterName, $RuntimeParameter) return $RuntimeParameterDictionary } begin { $ETWProvider = $PsBoundParameters[$ParameterName] } process { #Remove any existing sessions Get-CimSession -ComputerName $ComputerName -ErrorAction SilentlyContinue | Remove-CimSession -Confirm:$False Get-NetEventSession -Name "Session1" -ErrorAction SilentlyContinue | Remove-NetEventSession -Confirm:$False Remove-Item -Path "C:\Windows\Temp\$ComputerName-Trace.etl" -Force -Confirm:$False -ErrorAction SilentlyContinue #Create new session try { $Cim = New-CimSession -ComputerName $ComputerName -Credential $Credential -ErrorAction Stop New-NetEventSession -Name "Session1" -CimSession $Cim -LocalFilePath "C:\Windows\Temp\$ComputerName-Trace.etl" -ErrorAction Stop -CaptureMode SaveToFile | Out-Null } catch { Write-Error $_ Break } Add-NetEventProvider -CimSession $Cim -Name $ETWProvider -SessionName "Session1" | Out-Null Start-NetEventSession -Name "Session1" -CimSession $Cim | Out-Null if (Get-NetEventSession -CimSession $Cim) { Read-Host 'Press enter to stop trace' | Out-Null } Stop-NetEventSession -Name 'Session1' -CimSession $Cim Remove-NetEventProvider -Name $ETWProvider -CimSession $Cim Remove-NetEventSession -Name 'Session1' -CimSession $Cim Remove-CimSession -CimSession $Cim -Confirm:$False if ($ComputerName -ne 'LocalHost') { Copy-Item -Path "\\$ComputerName\C$\Windows\Temp\$ComputerName-trace.etl" -Destination 'C:\Windows\Temp' -Force } Get-CimSession -ComputerName $ComputerName -ErrorAction SilentlyContinue | Remove-CimSession -Confirm:$False if ($OpenWithMessageAnalyzer) { Start-Process -FilePath 'C:\Program Files\Microsoft Message Analyzer\MessageAnalyzer.exe' -ArgumentList "C:\Windows\Temp\$ComputerName-trace.etl" } else { Get-WinEvent -Path "C:\Windows\Temp\$ComputerName-trace.etl" -Oldest } } }
      
      





スクリプトを実行するときに、リモートマシンの名前、イベントプロバイダーを指定し、必要に応じてMicrosoft Message Analyzerでトレースを開くことができます。









スクリプトの例。







PowerShellで.NETツールを使用できるため、NetEventPacketCaptureコマンドレットが表示される前でも、コミュニティにGet-Packetスニファースクリプトが表示されていました。 著者のブログで修正されたスクリプトのオプションの1つに慣れることができますが、彼の作品の例を紹介します。









PowerShellスクリプトを使用して、pingを実行し、トラフィックを監視します。







.NETメソッドを使用しているため、コマンドレットよりもはるかに高速ですが、「ひざまずいて」インターネットにアクセスせずに作成するのは簡単ではありません。 それにもかかわらず、これはプロプライエタリプログラムの優れた代替手段です。







古いCMDも見逃せません



私が気に入っているバッチファイルも好きなら、通常のnetsh.exeツールを使用して、PowerShellなしでトレースすることに興味があるかもしれません 作成に加えて、トレースファイルを.etl形式から.txtや.htmlなどの便利な形式に変換することもできます。







もちろん、バッチファイルは過去のものですが、CMD用の同様のスクリプトをネタバレの下に隠します。
 @echo off rem   netsh trace start InternetClient provider=Microsoft-Windows-TCPIP level=5 tracefile=trace.etl > nul rem  5  timeout 5 > nul rem   netsh trace stop > nul rem   .etl   .txt,    Microsoft Message Analyzer netsh trace convert input=trace.etl output=trace.txt dump=txt > nul rem ,     RDP type trace.txt | findstr "3389" rem    del trace*
      
      







スクリプトの結果。







トレースを収集するためのnetsh構文の詳細については、 Microsoftのドキュメントを参照してください。







CMDの場合、最大の不便な点は、追加のユーティリティがないとスクリプトを実行するのがそれほど簡単ではないことです。そのため、 PsExec.exeまたはWMICコマンドを手元に置いておく必要があります。







 wmic /user:"username" /password:"password" /node:"computer" process call create "sniffer.bat > log.txt"
      
      





「宿題」として、Microsoft-Windows-SMBServerイベントプロバイダーを使用して、ファイルサーバーまたはプリントサーバーでトレースの収集を開始することをお勧めします。 SMB v1とSMB v2の両方と古いクライアントがサーバーで動作する場合、特に興味深い結果が得られます。








All Articles