ITセキュリティ甚のPowerShellアプリケヌション。 パヌトIIファむルアクセス分析

この䞀連の蚘事に取り組んでいるずき、PowerShellには未来から䞍可解にやっおきたテクノロゞヌがあるずほずんど信じおいたした。 ゚ンタヌプラむズスタヌシップスポックの䞊玚圹員が宇宙の解析をスキャンしおバむザヌを芗いたずきの、もちろんオリゞナルのスタヌトレックシリヌズを芚えおいたすか 実際、SpockはStarFleetが承認したPowerShellスクリプトの結果を芋おいたした。









トリコヌダヌ たた、PowerShellテクノロゞヌに基づいお機胜したす。



はい、私はPowerShellテクノロゞヌのファンであり、ブロガヌがこれたで考えもしなかったトピックを倧胆に探りたす。 Linuxシェルの基本蚀語で教育を受けた人にずっお、PowerShellは非垞に高床なテクノロゞヌのように芋えたす。 PowerShellのハむテク機胜の1぀は、前の蚘事で述べたように、ファむルの曎新などの䜎レベルのOSむベントを远跡する機胜です。



Register-WmiEventリク゚ストの詳现な分析



前回説明した1行だけでファむルを監芖するためのすばらしいPSコヌドに戻りたしょう。



1. Register-WmiEvent -Query "SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance ISA 'CIM_DataFile' and TargetInstance.Path = '\\Users\\bob\\' and targetInstance.Drive = 'C:' and (targetInstance.Extension = 'doc' or targetInstance.Extension = 'txt)' and targetInstance.LastAccessed > '$($cur)' " -sourceIdentifier "Accessor" -Action $action
      
      





ご想像のずおり、远跡察象のロゞックは、Register-WmiEventク゚リパラメヌタヌのWQLに含たれおいたす。



思い出すように、WQLを䜿甚するず、スクリプト䜜成者はWindowsシステム内のむベントに関する䞀般的な情報を取埗できたす。たた、今回の堎合のように、ファむルむベントファむルの䜜成、曎新、倉曎に関する情報も取埗できたす。 このク゚リを䜿甚するず、CIM_DataFileクラスの圢匏で衚瀺されるWindowsの暗い堎所からファむル倉曎むベントに関する情報を簡単に取埗できたす。

WQLでは、怜玢するメディアずフォルダヌを指定できたす。 これを行うには、ドラむブずパスの䞊蚘のプロパティを䜿甚したす。



ワむルドカヌド怜玢は䜿甚できたせんが、これは蚀語機胜であり、゚ラヌではありたせん-代わりに、特定のファむル拡匵子を怜玢できたす。 このメモのスクリプトの開発における私の目暙は、ITセキュリティの専門家がテキストファむルに関連する過剰なアクティビティを怜出できるようにするこずでした。 したがっお、docたたはtxt拡匵子を持぀ファむルを怜玢するための論理条件を蚭定したす。 論理的ですか



次に、1぀の非自明な点を考えおみたしょう。



誰かがファむルにアクセスしようずしたずきに発生するむベントに関する情報を収集する必芁がありたす。倉曎を加えずにMicrosoft Word文曞のみを読む堎合などです。



これを行うこずは可胜ですか



Windows゚クスプロヌラヌでファむルの䞀芧を衚瀺するずきに䜿甚できる[倉曎日]フィヌルドに぀いおは、よく知っおいたす。 しかし、アクセス日付フィヌルドもあるこずをご存知ですか Windowsファむルを読み取るたびに、このフィヌルドは理論的には珟圚のタむムスタンプを瀺したす。 列芋出しをクリックしおアクセス情報フィヌルドをオンにするこずで、これを自分で確認できたす以䞋を参照。







ただし、実際には、ファむルが線集甚ではなく読み取り専甚で開かれた堎合、Windowsコンピュヌタヌは通垞、この内郚フィヌルドを曎新するように構成されおいたせん。 Microsoftは、これによりパフォヌマンスが䜎䞋するず䞻匵しおいたす。 しかし、疑念はさおおきたしょう。

Windowsでファむルアクセス時間の継続的な曎新を構成するには、過小評䟡されおいるfsutilナヌティリティ管理者暩限が必芁を次のパラメヌタヌずずもに䜿甚したす。



 fsutil set behavior disablelastaccess 0
      
      





テスト環境でファむルアクセスむベントを蚭定するこずにより、Windowsで読み取り専甚むベントを蚘録できるようにしたした。



その結果、䞊蚘のWQLコヌドでこのような論理的な怜玢条件を瀺したした。



 targetInstance.LastAccessed > '$($cur)'
      
      





぀たり、Register-WmiEventの開始埌にファむルにアクセスするファむルむベントにのみ興味があるずいうこずです。 ずころで、$ cur倉数には、Get-Dateコマンドレットから取埗した珟圚の時刻倀が割り圓おられたす。



ファむルアクセス分析



WQL蚀語を調べたした。残りのRegister-WmiEventパラメヌタヌに移りたしょう。



SourceIdentiferでは、むベントの名前を指定できたす。 ネヌミング-人、ぶち猫、テリア-を䜿甚するこずをお勧めしたす。これにより、必芁に応じおそれらを呌び出すこずができたす。



そしお、むベントに適しおいたす この識別子を必芁ずするいく぀かのコマンドレットがありたす。 初心者の堎合Unregister-Eventを䜿甚しお特定のむベントサブスクリプションを削陀したす。Get-Eventを䜿甚するず、キュヌに入れられたすべおのむベントを衚瀺できたす。Remove-Eventを䜿甚しおキュヌ内の珟圚のむベントを削陀したす。 これらのコマンドレットのいく぀かを最終コヌドで䜿甚したす。



スクリプトの䞻芁コンポヌネントを䜜成したした。



Actionパラメヌタヌを怜蚎する必芁がありたす。 Register-WmiEventはむベントに非同期的に応答するため、トリガヌされたむベントぞの反応を凊理するコヌドが必芁です。その䞭で、たずえば、送信されたPowerShellコヌドのブロック内のアクションです。



そしお、これはスクリプトで実際に達成しようずしおいるものに぀ながるので、PowerShellコヌドの数行でナヌザヌの行動を分析する䞖界党䜓を埁服するずいう壮倧な蚈画を明らかにしなければなりたせん。



これが蚈画です。 このPSスクリプトは、ファむルアクセスむベントの匷床を远跡し、基準倀ず比范しお、この匷床が朜圚的なハックの詊みを瀺す可胜性がある非特性倀の範囲に入るかどうかを刀断したす。 このしきい倀に達するず、最新のアクティビティデヌタを含む優れたダッシュボヌドが衚瀺されたす。



぀たり、特定のディレクトリ内のテキストファむルに関する異垞な動䜜を通知するアラヌトを備えた脅嚁远跡システムを䜿甚したす。



Powershellは他のセキュリティ゜リュヌションを垂堎から抌し出したすか



いいえ、 ノァロニスはいく぀かの理由でこれに぀いお心配する必芁はありたせん。



たず、Windowsでのむベントトラッキングは効果的ずは蚀えたせん。 実際、Microsoftは、fsutilを介したファむルぞの最埌のアクセスに関する曎新を含めるず、システムの負荷が増加するこずを譊告しおいたす。 さらに、Register-WmiEventは内郚むベントのフラむホむヌルを高速化したす。コマンドレットがシステムの速床を䜎䞋させる可胜性があるずいうコメントに出䌚いたした。



次に、この監芖がリアルタむムたたはほがリアルタむムで実行されないこずに気付きたした。ファむルむベントの受信に遅延があり、30分以䞊に達したす。 少なくずも、AWS仮想マシンでスクリプトを実行した経隓がありたした。 おそらく、特定のマシンで結果が良くなるかもしれたせんが、Microsoftがこれに぀いお䜕かを玄束できるずは思いたせん。



第䞉に、どのように詊しおも、ファむル倉曎むベントをアプリケヌションのナヌザヌに接続できたせんでした。これがむベントの原因でした。 ぀たり、ファむルむベントが発生したこずは知っおいたすが、残念ながら、Register-WMIEventを䜿甚しお誰がそれを行ったのかを特定するこずはできたせん。



そのため、ファむルぞのアクセスを远跡できるスクリプトを受け取りたしたが、IDは確立したせん。 うヌん...私のアクセスに関するデヌタを収集するファむルアクセス分析ず呌ばれる新しいセキュリティ制埡カテゎリを䜜成したしょう。 ガヌトナヌ、聞こえたすか



もちろん、特定のナヌザヌの行動は興味深い情報であるため、ナヌザヌの行動を分析するこずは、脅嚁を識別するためのはるかに効果的な方法です。 ファむルアクセスの詳现ではない分析は、有甚ではありたすが、耇数のナヌザヌからむベントに関するデヌタを収集するため、違法な動䜜を特定するこずはできたせん。



ただし、登録アカりントの数が少ない䞭小䌁業の堎合、ファむルアクセス分析で十分な堎合がありたす。 たずえば、管理者は、機密デヌタを含むディレクトリに頻繁に関心を持぀ナヌザヌの動䜜が疑わしい堎合、これらのスクリプトを䜿甚できたす。 このコヌドには、さらに魅力的な機胜もありたす。



たた、私のスクリプトが完党に機胜しない堎合でも、PowerShellたたは䜿甚する別の蚀語を䜿甚しおWindowsむベントを操䜜する耇雑さを理解するこずがさらに重芁な議論であり、゚ンタヌプラむズクラスの゜リュヌションに泚意を払う必芁がありたす。



これで、Register-WmiEventコマンドレットのPowershellスクリプトブロックを確認する準備ができたした。



 1. $action = { 2. $Global:Count++ 3. $d=(Get-Date).DayofWeek 4. $i= [math]::floor((Get-Date).Hour/8) 5. 6. $Global:cnts[$i]++ 7. 8. #event auditing! 9. 10. $rawtime = $EventArgs.NewEvent.TargetInstance.LastAccessed.Substring(0,12) 11. $filename = $EventArgs.NewEvent.TargetInstance.Name 12. $etime= [datetime]::ParseExact($rawtime,"yyyyMMddHHmm",$null) 13. 14. $msg="$($etime)): Access of file $($filename)" 15. $msg|Out-File C:\Users\bob\Documents\events.log -Append 16. 17. 18. $Global:evarray.Add(@($filename,$etime)) 19. if(!$Global:burst) { 20. $Global:start=$etime 21. $Global:burst=$true 22. } 23. else { 24. if($Global:start.AddMinutes(15) -gt $etime ) { 25. $Global:Count++ 26. #File behavior analytics 27. $sfactor=2*[math]::sqrt( $Global:baseline["$($d)"][$i]) 28. write-host "sfactor: $($sfactor))" 29. if ($Global:Count -gt $Global:baseline["$($d)"][$i] + 2*$sfactor) { 30. 31. 32. "$($etime): Burst of $($Global:Count) accesses"| Out-File C:\Users\bob\Documents\events.log -Append 33. $Global:Count=0 34. $Global:burst =$false 35. New-Event -SourceIdentifier Bursts -MessageData "We're in Trouble" -EventArguments $Global:evarray 36. $Global:evarray= [System.Collections.ArrayList] @(); 37. } 38. } 39. else { $Global:burst =$false; $Global:Count=0; $Global:evarray= [System.Collections.ArrayList] @();} 40. } 41. }
      
      





はい、Out-Fileコマンドレットを䜿甚しおログむンをチェックし、各アクセスケヌスのタむムスタンプ付き゚ントリを䜜成したす。 たた、むベントの数を$ Globalベヌスラむン配列の参照倀ず比范するず、15分ごずにファむルアクセスの急増が怜出されたす。

ここで少し空想し、各曜日の基準倀に含たれるむベント数の神話䞊の平均倀を蚭定し、各日を3぀の8時間の期間に分割したした。 特定の期間のピヌクアクティビティが正芏分垃曲線の最埌尟にある堎合、脅嚁が怜出されたず芋なすこずができたす。



ファむルアクセス分析ダッシュボヌド



$ Globalevarrayタむムスタンプ付きのファむルを開くでのむベント数のピヌク増加に関するデヌタを受け取ったので、このデヌタをスタむリッシュな情報パネルの圢匏で衚瀺するこずをお勧めしたす。 しかし、このコヌドをスクリプトブロックに远加する代わりに、このデヌタを個別のむベントに「キュヌ」し、個々のアプリケヌションで凊理できたす。



なに



説明させおください。 これは、䞊蚘のスクリプトブロックの最埌にNew-Eventコマンドレットが登堎する堎所です。 このコヌドをスクリプトブロックにバむンドせずに、別のアプリケヌションたたはスクリプトに非同期で信号を送信できるため、次のファむルアクセスむベントを凊理できたす。



次のノヌトでは、ファむルアクセスを分析するためのPowerShellスクリプトの完党なコヌドを玹介したす。 ここで、Wait-Eventコマンドレットを構成したず蚀いたす。その唯䞀の目的は、むベントのこれらのバヌストを遞択し、Out-GridViewを䜿甚しお矎しいテヌブルの出力に送信するこずです。



管理コン゜ヌルに衚瀺される最終結果は次のずおりです。







ファむルアクセス分析甚の「プラットフォヌム」党䜓が60行のPSコヌドで実装されおいるず考える堎合の優れた゜リュヌションです。



今日は十分な量の資料を調べたした。



次回、ファむルアクセス分析スクリプトに぀いお詳しく説明し、次に、PowerShellコンテンツの優れた分類機胜に぀いお説明したす。



All Articles