この記事は、Sysmon脅威分析に関するシリーズの最初の記事です。シリーズの他のすべての部分:
パート1. Sysmonログ分析の紹介
パート2. Sysmonイベントデータを使用した脅威の検出(ここにあります)
パート3.グラフを使用したSysmon脅威の詳細な分析
このセクションでは、詳細に進み、詳細情報を使用しますSysmonによって提供されます。以下は、私たちが取り組む3つの主要なポイントです。
- PowerShellを使用して、プロセスに関する詳細な情報に直接アクセスします。
- プロセスの階層を構築して視覚化することは、脅威を見つける最初の重要なステップです。
- Sysmonメタデータを使用して、特定のプロセスが起動される頻度の計算など、高度な脅威の調査に役立つ重要なメトリックを生成します。
Get-Sysmonlogsの使用
次に、SysmonイベントをPowerShellオブジェクトに変換する素晴らしいコマンドを詳しく見てみましょう。フィールドごとに個別のコード行を手動で記述する必要がなかったことを誇りに思います。そして実際、ここにコードの素晴らしい開示があります:
$events = Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" | where { $_.id -eq 1 }
foreach ($event in $events) {
$ev = $event.Message -split "`r`n"
$jsons="{ "
foreach ($line in $ev) {
$line=$line -replace "\\","\\" `
-replace "\{"," " `
-replace "\}"," " `
-replace '"','\"' `
-replace "`n"," "
$line=$line -replace '(\s*[\w\s]+):\s*(.*)', '"$1":"$2",'
$jsons = $jsons + $line }
$jsons =$jsons + '"blah" : "blah" }'
ConvertFrom-Json -InputObject $jsons
}
}
すべてのコードがGitHubで利用可能になり、独自のプロジェクトのSysmonモジュールとしてダウンロードしてインポートできます。唯一の不安定性は、出力をJSONに近づけるために、いくつかの厄介な文字(ブラケット、バックスラッシュ、行末文字、引用符)の削除に関連しています。
したがって、システムに侵入する侵入者の典型的なシグナルは、「whoami」コマンドの使用であり、「hostname」の後に続くことがよくあります。誰かのアカウントを入手したハッカー(またはおそらくインサイダー)は、なりすましが機能することを確認したいので、被害者のサーバーにいるとすぐに上記のコマンドを入力することがよくあります。残りの部分では、「whoami」と「hostname」は、たとえコマンドラインを使用しても、自分のシステムのコンソールに入力する単語ではありません。
すべてのSysmonログエントリへのアクセスを可能にするきちんとしたコマンドを使用すると、プロセス名をフィルタリングするチェーンを簡単に作成できます(最初の部分で行ったように)。同時に、Sysmonを使用することで、問題をさらに詳細に調べることができます。親プロセスのコマンドライン。
通常、ハッカーがネットワークに侵入してコマンドラインにアクセスすると、それは古いcmdです-ちなみに、これはpsexecまたはsmbexecを使ったハッキングの場合に正確に何が起こるかです。 get-symonlogsの出力を使用すると、これらのレガシーシェルによって生成された whoamiプロセスをキャッチすることが可能であり、これは脅威の良い証拠になります。
注意:Whoamiは古いcmdシェル
から起動されたため、実用的な観点から見ると、Windowsイベントログの「生の」ログと一致するプロセスを検索することは不可能です。今見たように、Sysmonの記録は脅威分析の多くの可能性を切り開きます。それでは、Sysmomデータをより複雑な構造にマッピングすることで、調査を続けましょう。
データ構造の基本:リストとグラフ
Sysmonログは、親プロセスのコマンドラインだけでなく、プロセスIDも提供します。
これが何を意味するかはもうお分かりだと思います。しかし、それでもなお、これで階層内のプロセスを接続できるようになりました。言うまでもなく、ネットワークも接続できます。コンピュータサイエンスの基本的な概念を思い出すことで、そのような情報を取得するための自然なデータ構造を見つけることができます。リンクされたリストとグラフが最初に思い浮かびます。
最初は、詩人とスー・シェフのためのデータ構造のコピーをほこりで払わなければならないと思っていましたが、インターネットが役に立ちました。PowerShellで記述されたGihubで、Doug Finkeの基本的なアルゴリズムの豪華なコレクションに出会いました。ダグありがとう!
学習曲線をたどった後、彼のアルゴリズムを使用してSysmonイベントを構造化することができました。リストとグラフとしてデータ構造を構築し、次にAPIを使用してPowerShellコマンドを記述し、コマンドを検索してプロセス階層を表示しました。涼しい。
私はそれをshow-threat-pathと名付けました。プロセス階層全体で深さ優先で検索し、入力パラメーターとして指定されたルートアプリケーションのアプリケーション名と関連コマンドを表示します。最初のテストでは、「whoami.exe」を検索しました。そしてこれは私が見たものです:
プロセス階層:プロセス2452は疑わしく見えます!
上記の出力で、プロセス2452に関連付けられているwhoamiに気付いた人への追加のボーナスは、古いcmdシェルから呼び出され、Windowsフォルダー内の奇妙な名前のexeファイルによって起動されました。
うーん。ここで説明されている psexecリモート呼び出しの仕組みに精通している場合は、精神的にすでにベルを鳴らしているはずです。しかし、少し秘密をお話ししましょう。ハッカーの役割を果たして、私は以前、Impacket pythonスクリプトを使用してリモートLinuxサーバーからこのwhoamiを起動しました。
目標は、Sysmonが豊富なログとPowerShellのごく一部を使用して、脆弱性を特定するための完全に実用的なユーティリティを準備できることを示すことです。show-threat-path。
有向グラフによる脅威のハンティング
奇妙なことをする時が来ました。このすべてのプロセス情報がSysmonから提供されているので、関係をより一般的に見ることができます。つまり、実行中のアプリケーション(PowerShell.exe、Explorer.exeなど)を表示したいのです。-グラフの頂点として、それらを起動したアプリケーションに関連付ける。結果は、(プロセスインスタンスごとに個別の頂点を作成する代わりに)アプリケーションが相互に対話する方法を示す図です。
技術的な観点からは、パスは、いわば、アプリケーションからその親プロセスへの一方向のパスである有向グラフについて話している。
この時点で、私が話していることの視覚化を見ておくとよいでしょう。さいわい、GraphVizと呼ばれる優れたPowerShellグラフ視覚化ユーティリティがあり、PSQuickGraphを介して使用できる非常にシンプルなラッパーを備えています。次に、小さなコードで...
#Let's graph it!!!
$gv = New-Graph -Type BiDirectionalGraph # PSQuickGraph
foreach ($e in $g.getAllEdges() ) { $g from Doug Fink's functions
$vs= $e.startvertex
$ve= $e.endvertex
PSQuickGraph\Add-Edge -From $vs.value.Key -To $ve.value.Key -Graph $gv |Out-Null
}
Show-GraphLayout -Graph $gv
...アプリケーション間の複雑な相互作用をGraphVizインターフェースで視覚化できます。
GraphVizを:可視化プロセスの階層のためのA PowerShellのライブラリ
は何これですか?本質的に、それは脅威を識別するグラフィカルな方法です。以前にshow-threat-pathコマンドで行ったように、テキストの特定の署名を探す代わりに、グラフ上の異常を見つけようとすることができます。
アイデアは、グラフとサブグラフの近傍の通常の画像が何であるかを理解することです-それらは通常、ビジュアライゼーションで接続された構造のように見えます-そして、より分離したように見える頂点を見つけようとします。そして実際、私たちの目はこの仕事によく適応しています。幸いにも、いくつかの簡単な近隣検出アルゴリズムと脅威検出アルゴリズムが利用できます。そして、むかしむかし、あなたの謙虚な使用人は、米国の革命の有名な英雄に関連するソーシャルネットワークで近隣を検出する手法の使用について投稿しました。
攻撃者を見つける際のこのアプローチの利点は、ハッカーがテクニックを変更して攻撃を難読化できることですが、グラフパターンを隠すことは困難です。
レビューの第3部では、脆弱性を見つけるためのアルゴリズムと方法の分析と適用について詳しく説明します。私たちと居て!