ITセキュリティ用のPowerShellアプリケーション。 パートI:イベントトラッキング





人類がハッカーと戦うのに役立つ侵入テストに関する一連の記事を書いているときに、興味深いPowerShellコマンドレットとテクニックに出会いました。 PowerShellがスタンドアロンのセキュリティツールであるというすばらしい発見をしました。 PowerShellの新しい出版物シリーズを開始する時が来たようです。



これらの出版物では、PowerShellは特別なセキュリティプラットフォームに代わるものではありませんが( Varonisの従業員は安reliefのため息を吐くことができます)、このツールはITプロフェッショナルが脅威を監視し、他のセキュリティ対策を講じるのに役立つと考えています。 さらに、IT部門は、 メタデータフレームワークソリューションなどの特殊なセキュリティプラットフォームの素晴らしさを評価し始めます。 PowerShellは小規模で興味深いセキュリティタスクを実行できますが、このツールにはインフラストラクチャ全体を操作する機能がありません。



重要なイベント



まず、PowerShellをファイル、プロセス、ユーザーアクションを追跡するシステム監視ツールとして使用することを検討してください。



呪いを始める前に、オペレーティングシステムの任意のコマンド言語を使用してシステムレベルでイベントを追跡できることをよく知っています。 後任のシステム管理者は、たとえば、Linuxシェルスクリプトを設定してディレクトリを照会し、ファイルが更新されたかどうかを確認したり、実行中のプロセスのリストを取得して非標準を見つけたりできます。



今、これはそれについてではありません。



代わりに、PowerShellは、低レベルの変更にアクセスするオペレーティングシステムに基づいて、イベント駆動型の直接追跡を提供します。 これは、ページを手動で更新する代わりに、ニュースサイトの最新イベントのポップアップ通知を受信するのと同じです。



ただし、PowerShellはノンストップで動作せず、プロセッササイクルをロードします。 スクリプトは、イベントが発生するとアクティブになります(ファイルの変更または新しいユーザーのログイン)。 このようなセキュリティトラッキングは、ポーリングよりもはるかに効果的です。



以下に、これがどのように行われるかを説明します。



私と同じようにオペレーティングシステムを研究したことがある人なら誰でも、ユーザーレベルのプロセスとシステムレベルのプロセスの間に境界があることを知っています。



オペレーティングシステム(LinuxまたはWindows)は、ディスクの読み取りからパケットの受信まで、デバイスのアクションを下位レベルで処理し、PCで実行されている通常のアプリケーションから隠します。



したがって、お気に入りのワードプロセッシングアプリケーションを実行してドキュメントの最初のページを表示すると、操作全体がスムーズで同期したアクションのように見えます。 ただし、実際には、あらゆる種類のイベント(ディスク上での検索、ディスクブロックの読み取り、画面への文字の送信など)が発生し、それらは意図的に非表示になっています。 あなたはこれについてビル・ゲイツに感謝することができます。



以前は、過酷なシステムエンジニアだけが下位レベルでのイベント処理を知っていました。 PowerShellプログラマーは、この情報を喜んで共有しています。



OSツール言語



Windows Management Instrumentation(WMI)を検討してください。これは、オペレーティングシステム内のオブジェクトの一貫した表示を提供するためのMicrosoftの試みです。



わずか数年前のWMIは、ルーター、スイッチ、ストレージアレイ、およびオペレーティングシステムから受信した情報を標準化するために設計された大規模なエンタープライズ規模のエンタープライズ管理システム(WBEM)の一部です。



WMIはどのように見え、動作しますか?



私たちの目的では、ツールキットはSQLのようなクエリ言語ですが、データベース列にアクセスする代わりに WMI



階層 WMI



形でオペレーティングシステムに関する複雑な情報を提供し WMI



。 もちろん、クエリ言語はWQLと呼ばれます。



Windowsには、WQLとやり取りできるWBEMTestユーティリティがあります。 以下の画像は、現在実行中のプロセスに関する情報を含むWin32_Process



オブジェクトリクエストを示しています。



画像

WBEMTestでのWQLを使用したトレーニング



実際、これはWindowsタスクモニターに相当するソフトウェアです。 印象的でしょ? WQLの詳細については、このトピック専用の優れたRavi Chaganti電子書籍をダウンロードしてください。



PowerShellおよびRegister-WmiEventコマンドレット



しかし、それだけではありません。 WBEMTestのトレーニング演習から、PowerShellで直接クエリにアクセスできます。



これを行うには、PowerShellコマンドレットGet-WMIObject



ます。 WQLクエリをパラメーターとして直接送信できます。



以下の画像は、AWSテスト環境でselect Name, ProcessId, CommandLine from Win32_Process



を実行した最初のいくつかの結果を示していselect Name, ProcessId, CommandLine from Win32_Process









gwmiはPowerShellのGet-WmiObjectです



メインデータロギングクラスに関連するいくつかの隠されたプロパティがあるため、結果は少し信頼できません。 さらに、このコマンドレットはコンソールに印象的なリストを表示します。



Win32_Processでの作業を改善するために、クエリ結果をOut-GridView



に移動しました。PowerShellコマンドレットは、グラフィカルインターフェイスに基づいてデータを適切なテーブルにフォーマットします。







PowerShellのコード行にとって悪くない。 ただし、WMIサービスは、OSオブジェクトを要求するだけではありません。



前述したように、これらのオブジェクトの対応するイベントにアクセスできます。 WMIでは、これらのイベントは大きく分けて、作成、変更、削除の3つのタイプに分類されます。



PowerShell 2.0がリリースされる前は、これらのイベントへのアクセスは複雑な方法で取得する必要がありました。多くの異なるオブジェクトを作成し、その後同期的にフリーズしたため、実際の非同期イベント処理ではありませんでした。 詳細については、MS Technetの出版物をお読みください。



PowerShell 2.0のRegister-WmiEvent



では、より受け入れやすい方法でイベントに応答できるようになりました。 つまり、イベントが発生すると、登録可能なコールがトリガーされます。



架空の(そしてすでに有名な)会社Acmeに戻ります。Acmeは、ITインフラストラクチャをAWSで実行しています。



システム管理者(彼をボブと呼びましょう)は、Salsaサーバーのスペースが不足していることに気付くことがあります。 彼は、Acme CEOのTed Bloutleyがオーディオ録音などの大きなファイルをBobのディレクトリの1つにアップロードし、Tacoサーバーに転送したと疑っています。



ボブはトラップを作りたがっています。コンソールのメインディレクトリに大きなファイルを作成するときに、通知が表示される必要があります。



これを行うには、彼はCIM_DataFile.



クラスを操作する必要がありますCIM_DataFile.



先ほど行ったように、プロセスにアクセスする代わりに、Bobはこのクラスを使用してメインファイルのメタデータに接続します。





PowerShellでは、CIM_DataFileオブジェクトに直接アクセスできます



Bobとして、次のRegister-WmiEvent



作成しました。これは、メインディレクトリに大きなファイルを作成するときにコンソールに通知を送信します。



Register-WmiEvent -Query "SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance isa 'CIM_DataFile' and TargetInstance.FileSize > 2000000 and TargetInstance.Path = '\\Users\\bob\\' and targetInstance.Drive = 'C:' "-sourceIdentifier "Accessor3" -Action { Write-Host "Large file" $EventArgs.NewEvent.TargetInstance.Name "was created”}







このスクリプトをSalsaコンソールで直接実行すると、バックグラウンドでRegister-WmiEventコマンドがアクティブになり、ジョブ番号が割り当てられます。 さらなる相互作用は、イベントが発生したときにのみ発生します。



次の出版物では、これについてさらに詳しく説明します。 実際、WQLを使用して、200万バイトを超えるCIM_DataFile



オブジェクトの\ Users \ bobディレクトリからクエリを実行します。 条件を満たすファイルを作成すると、 InstanceModificationEvent.



がアクティブ化される通知が表示されInstanceModificationEvent.







いずれにせよ、ボブの役割を果たして、PowerShellコマンドラインからスクリプトを実行し、その後、歴史からのテッドのように、大きなMP4ファイルをボブのディレクトリにコピーしました。 以下の結果を見ることができます。







現在、テッドはメロディガルドのファンであることを知っています。 誰が考えたでしょう!



この出版物は、脅威を検出するツールとしてPowerShellを使用するいくつかの驚くべき可能性と、動作の少しの分析を実証しました。



これらの側面については、今後の記事で引き続き検討していきます。



All Articles