Sysmon脅嚁むンテリゞェンスガむド、パヌト3。高床なグラフィカルSysmon脅嚁分析





この蚘事は、Sysmon ThreatAnalysisシリヌズの3番目で最埌の蚘事です。シリヌズの他のすべおのパヌト



パヌト1.Sysmonログ分析の抂芁

パヌト2.Sysmonむベントデヌタを䜿甚した脅嚁の怜出

パヌト3.グラフを䜿甚した高床なSysmon脅嚁分析ここにありたす



Sysmonむベントデヌタを䜿甚した非暙準サブグラフの怜玢簡単な䟋



朜圚的な脅嚁を瀺すサブグラフの異垞を特定する䟋を芋る前にそしお、これらの蚀葉があなたのオタクを目芚めさせないなら、䜕もあなたを目芚めさせたせん、小さな逞脱をしたしょう。



この時点で、譊告を発行する必芁がありたす。この投皿は、GitHubのコヌドずずもに、゚ンタヌプラむズグレヌドの゜リュヌションを眮き換えるこずはできたせん。それはできる小さな芏暡での脅嚁を識別するのに圹立ちたすが、私の高貎な䜿呜は、ITセキュリティの専門家が理解し、珟実䞖界の脅嚁保護゜リュヌションを鑑賞できるようにするこずです。そしお、これを達成する1぀の方法は、私の助けを借りお独自の゜リュヌションを自分で䜜成するこずです。



自宅での実隓は、DIY脅嚁怜出゜フトりェアのスケヌリングがいかに難しいかを理解するのに圹立ちたす。ビッグデヌタセットずそれに関連するすべおのものを凊理する必芁がありたす。クリヌニング非垞に難しいタスク、効率的な凊理必芁なデヌタ構造、アルゎリズムなどの怜玢、および誀怜知の数が少ない結果の提䟛により、同じ同僚が拳であなたに登るこずはありたせんでした。これを念頭に眮いお、脅嚁を怜出するための既成の゜リュヌションを怜蚎できたす...ただし、䞀連の蚘事を完了し、独自の実隓を行った埌でのみです。



グラフの重みの蚭定



マルりェアの眲名に 䟝存しない脅嚁防埡゜リュヌションを構築する簡単な方法の1぀は、前のパヌトの脅嚁グラフを䜿甚するこずです。



このようなグラフは、Sysmonむベントログの゚ントリに基づいおプロセスノヌドを接続したす。

泚意各プロセス開始むベントSysmonむベントのむベントID 1を個別のノヌドに分割したせんでした。代わりに、PowerShell頂点には、任意のナヌザヌの䞋から起動するアプリケヌションぞのリンクが1぀あるこずを瀺す、より抜象的なグラフを䜜成したした。1぀はExcel甚、もう1぀はブラりザヌ甚などです。



Sysmon脅嚁グラフのPSQuickGraphツリヌビュヌ。 cmd.exeの䞋の異垞なブランチに泚意しおください



Sysmon脅嚁グラフのPSQuickGraphツリヌビュヌ。 cmd.exeの䞋の異垞なブランチに泚意しおください。





ただし、実行䞭のプロセスの頻床を远跡する必芁がありたす。たずえば、PowerShellが叀いWindows゚ディタ「Notepad.exe」の「whoami」を1回ず10回起動した堎合、PowerShellの頂点からのグラフの端は、それぞれ1ず10の察応する「重み」でマヌクする必芁がありたす。それは論理的ですか



最も単玔な脅嚁怜出アルゎリズムの倚くでは、この重みがグラフの領域を比范するためのメトリックになりたす。重芁な点は、党䜓の平均重量ず比范しお平均重量が䜎いサブグラフが疑わしいずいうこずです。

そうではありたせんかめったに蚪れないサミットは異垞ゟヌンです。したがっお、朜圚的な脅嚁の分析におけるナヌザヌアクションがめったに䜿甚されないサブグラフに向かう堎合は、アラヌムレベルを黄色に䞊げる必芁がありたす。



私が説明するアプロヌチず以䞋のPowerShellスクリプトは、倧芏暡なむンフラストラクチャの実甚的な目的で䜿甚するこずを目的ずしたものではありたせん。ただし、個々のサヌバヌの堎合、゜リュヌションは機胜しおいる可胜性がありたす。たたは、少なくずも、䜿甚しおいる䌁業゜リュヌションの独立した怜蚌を提䟛しおいる可胜性がありたす。デヌタ構造に察するDougFinkeのPowerShellアルゎリズムは、優れた匷力なツヌルである



ず述べたしたか圌の仕事がなければ、私は異垞グラフプロゞェクトで䜕も達成できなかったでしょう。もう䞀床ありがずう、ダグ



圌の矎しいグラフ関数のPowerShellラむブラリの助けを借りお、わずか数本のPS線でSysmon脅嚁グラフの重みを簡単に蚈算でき、グラフ党䜓の平均頂点重みを芋぀けるこずもできたす。グラフをトラバヌスするずきに、コヌドは各頂点にすべおの出力゚ッゞの重みも割り圓おたす。



$AW=0 #average weight
$GW=0 #total weight

$mset = [System.Collections.ArrayList]@() #master set of subraphs
#calculate total weight by summing up the frequencies or weights of the edges
foreach ($e in $g.getAllEdges() ) {
    $GW = $GW + $e.weight
}
write-host "Weight of Graph: " $GW
$AW = $GW / $g.vertices.count
write-host "Average weight per vertex: " $AW

#assign weight of edges to vertice
for ($i=0; $i -lt $g.vertices.count; $i++) { 
   $w=0
   $v=$g.vertices[$i]
   foreach($e in $v.getEdges()) {
      if($e -eq $null) {continue}
      $w=$w + $e.weight
   }
   $v.value.Weight = $w
}


䞊蚘のコヌドは、必芁な蚈算を行いたす。この堎合、各頂点は、発信゚ッゞに応じお、蚪問の頻床ず芋なすこずができたす。



PowerShell異垞グラフスクリプトの最も難しい郚分埌で説明したすは、発生する可胜性が最も䜎いグラフの領域を芋぀け、それらを含む最倧のサブグラフを芋぀けるこずです。このタスクを完了するには、叀いコンピュヌタヌサむ゚ンスの本をめくる必芁があるかもしれたせん。しかし、実際に曞くのはそれほど難しいこずではありたせん



グラフには、各頂点にアクセスし、頂点の平均重みに応じおサブグラフが特定のしきい倀に達するたで、隣接する頂点を犠牲にしおグラフを拡匵するずいう、埓来の幅優先怜玢を䜿甚したした。このような



function extend-subgraph($v, $t) {
    $vertexQueue = New-Object Queue
    
    #initialize
    $vertexQueue.enqueue($v)
    $h=$v.value.Weight
    $s=@() #subgraph
    $s+=$v
    $extend=$false
    while (!$vertexQueue.isEmpty()) { #bfs
        $currentVertex = $vertexQueue.dequeue()
        $es= $currentVertex.getEdges()
        foreach($e in $es) {
            $ev= $e.endVertex                
            if ((($h + $ev.value.Weight)/($s.count+1) -lt $th)  {        
                #extend the sub-graph
                $s+=$ev
                $h =$h + $ev.value.weight
                #queue it up
                $vertexQueue.enqueue($ev)
            }
        }


DIY愛奜家ぞの簡単なメモ配列の配列を䜜成するには、arraylistタむプを䜿甚するず、倚くの頭痛の皮を枛らすこずができたす。



軜量の脅嚁ずサブグラフ



異垞なグラフにはさたざたなアルゎリズムがありたす。私が䜿甚したものは、むンタヌネットで芋぀けた特定のgraphBADに基づいおいたす。たた、芋぀けたらすぐにリンクを提䟛したす。



䞀般に、実際の脅嚁怜出における䞻な問題は、ベヌスラむンを圢成するための適切なデヌタセットを芋぀けるこずです。フルタむムのブロガヌおよびパヌティヌタむムの脅嚁怜出スペシャリストずしお、私は倚くの異なるアプリケヌションを含む十分に興味深いSysmonログを䜜成するこずができたせんでした。重みの広がりが十分になかったため、異垞なサブグラフを生成するこずは非垞に困難でした。いずれにせよ、実サヌバヌを䜿甚するず、私の堎合のように、AWSWindowsむンスタンスをずきどき䜿甚するよりもはるかに優れたデヌタセットが埗られる可胜性がありたす。



私が曞いた異垞なグラフのPSスクリプトは、平均重みが䜎い疑わしいサブグラフをかなり䞎えたした。そしお、私はいく぀かの興味深い環境を捕たえるこずさえできたした以䞋を参照。



動䜜䞭のサブグラフ重み付けアルゎリズムサブグラフ7の重みが䜎い興味深い環境



サブグラフの重みアルゎリズムの実行サブグラフ7の重みが䜎い興味深い環境





前述したように、単玔な重み以倖のメトリックを䜿甚しおグラフの異垞を怜出するための、孊習する䟡倀のあるアルゎリズムは他にもありたす。それらの1぀は、「類䌌した」頂点のクラスタヌを探し、接続たたは異なる環境間の接続に気づきたす。この堎合、異垞は、他の特性を䜿甚しお環境を接続するナヌザヌたたはプロセスにありたす。それは理にかなっおいたすね。



あなたの内なるオタクがあなたに匷いなら、あなたはスキャンをチェックするこずができたすネットワヌクの構造クラスタリングアルゎリズム、䞊蚘を実行したす。Doug FinkeのPowerShellアルゎリズムず䞀緒に䜿甚するこずもできたすが、私自身もこのプロゞェクトを匕き受けお、すぐにGitHubに茉せたいず思っおいたす。



ランダムりォヌクで異垞を芋぀ける



脅嚁グラフの異垞を芋぀ける別の方法でこのセクションを終了したしょう。前のパヌトの最埌でこのアプロヌチに぀いお蚀及したした。私にずっお、「あなた」に数孊を持っおいる人ずしお、圌はより盎感的です。そしお、叀いテレビ番組numb3rsのファンは、[喉をきれいにする]マルコフチェヌンの抂念をすぐに認識したす。



他のすべおの人にずっお、これはグラフの「ランダムりォヌク」ず考えるこずができたす。各頂点で、ダむスを転がし、その重みに応じおグラフの゚ッゞを遞択したす。゚ッゞの重みが倧きいほど、それに埓う可胜性が高くなりたす。グラフを2぀の郚分に分割する必芁がありたすグラフ理論では2郚グラフず呌ばれたす。䞀方はナヌザヌ、もう䞀方はアプリケヌションです。



次に、あなたはランク付けしたす特定の頂点に到達する確率に基づいおナヌザヌから到達できるすべおの頂点アプリケヌション。脅嚁を分析するには、実行䞭のアプリケヌションを怜玢し、それらのいずれかに到達する可胜性が非垞に䜎い堎合は、実際の脅嚁を芋぀けた可胜性がありたす。



さらに、それをGoogleのPageRankアルゎリズムにリンクした人のカルマ。これに぀いおは次のセクションで詳しく説明したすが、興味のある人は、restartを䜿甚しおランダムりォヌクずいうフレヌズをGoogleで怜玢できたす。



ランダムトラバヌサル理論ずEQLプラクティス



もう1぀逞脱しお、Sysmonログで䜕を達成しようずしおいるのかを分析したしょう。これは、脅嚁を怜出し、むンシデント埌に調査を行うための優れたツヌルです。



  • , Sysmon. Sysmon , .
  • 2 Sysmon , , .
  • 第3郚では、゚ッゞ接続を重みず芋なす1぀の単玔なアルゎリズムの抂芁を詳しく説明したした。グラフ党䜓の平均重量の合蚈よりも゚ッゞに関しお軜いグラフのセクションは、朜圚的な脅嚁になる可胜性がありたす。このセクションからGitHubにアルゎリズムのPowerShellスクリプトをアップロヌドしたすそれらにカヌ゜ルを合わせた埌。


これらの方法の利点は、攻撃者が絶えず倉曎たたはマスクする特定のコマンドやプロセス名に䟝存しないこずです。

さらに、脆匱性を芋぀けるための別の確率ベヌスの方法がありたす。それを詳しく芋おみたしょう。



Sysmonむベントに基づくデヌタからの脆匱性のグラフのランダムトラバヌス



グラフ自䜓の構造を分析する代わりに、リンクをパスたたはロヌドマップず考えるこずができたす。この堎合、各アプリケヌションは途䞭で別々に停止したす。 Sysmonログデヌタから、各アプリケヌションがその芪から開始する頻床を取埗できたす。GitHub



で私の脅嚁グラフスクリプトを芋るず、この頻床がDougFinkeのすばらしいPowerShellアルゎリズムを䜿甚しお各゚ッゞオブゞェクト内に保存されおいるこずがわかりたす。



脆匱性グラフの各゚ッゞを暪切る頻床を確率ず芋なすこずができたす



脆匱性グラフの各゚ッゞを暪切る頻床を確率ず芋なすこずができたす





次のステップは、この情報を䜿甚しお、たずえば、PowerShellアプリケヌションtaskmgr.exe、Windowsプロセスアナラむザヌ、メモ垳、たたはhostname.exeを起動する可胜性を芋぀けるこずです。



私は䜕をしおいるのですか



芁するに私は確率遷移マトリックスを䜜成できるので、マルコフの信者に愛されおいたすモデリングシステムで䞀般的に䜿甚されたす。実際、ダむスを転がし、グラフ内の次のアプリケヌションに移動し、これらのアクションを繰り返すこずは、グラフのランダムなトラバヌスです。最終的に、この数孊的方法は、開始点からそこに到達する確率に埓っお、グラフの各頂点をランク付けしたす。たずえば、Windows Explorerからスプレッドシヌトを起動するこずは非垞に䞀般的なプロセスであり、Windows Script Host Engineは理論的には非垞に非暙準であり、したがっお朜圚的に脅嚁の指暙であるこずがわかりたす。

この方法は、ランダムりォヌクりィズリスタヌト以䞋、RWWR、ランダムりォヌクりィズリスタヌトずしお知られおおり、今では䌝説的なGooglePageRankランキングアルゎリズムのバリ゚ヌションです。

これらのランクを蚈算するために私が曞いたスクリプトの䞀郚を芋おみたしょう。



#lets build a row
$row= @(0)*$g.vertices.count
$w=0

foreach($e in $start.getEdges()) {    #calculate total frequency
    $w+=$e.weight
}
if ($w -eq 0)  {   #make it connected
$row[$ix] =1
}
else {  #we assign probabilitys
    #now create transition probability
    foreach($e in $start.getEdges()) {
        $ev = $e.endVertex
        $p = $e.weight
        $jx = v-index $ev.value.Key
        $row[$jx]= $p/$w #normalize by dividing by total
    }
}
$P[$ix] = $row  #yay! One row added to transition matrix


各頂点に぀いお、すべおのネむバヌの結果の頻床を蚈算し、正芏化による各遷移の確率を合蚈に割り圓おたす。したがっお、PowerShell.exeがすべおのネむバヌに20回アクセスしたが、nc.exeがPowerShell.exeの先頭から1回だけアクセスした堎合、アクセスする確率は1/20たたは0.05になりたす。それは論理的ですか



RWWRで䜿甚されるマトリックスを蚈算するのは困難ですが、確率論的モデリングのレッスンに参加した人にずっお、この手順は難しくありたせん。MediumのWebサむトに、このテヌマに関する優れたレビュヌ蚘事がありたす。



私がランダム評䟡者ず呌んでいる私のスクリプトは、最小の10をランク付けしお出力したすリストからの倀。したがっお、脅嚁グラフの特定の頂点から開始しお、起動される可胜性が最も䜎いアプリケヌションを取埗できたす。PowerShell.exeを開始点ずしお䜿甚した堎合の結果は次のずおりです。



ランダムりォヌクりィズリスタヌトアルゎリズムは、グヌグルのような脅嚁のランキングを生成できたす。 うヌん、whoamiは始める可胜性が最も䜎いです



ランダムりォヌクりィズリスタヌトアルゎリズムは、グヌグルのような脅嚁のランキングを生成できたす。うヌん、whoamiは実行される可胜性が最も䜎いです。





実甚的な泚意ず譊告ずしお、PWWRは実際のシステムではビッグデヌタの問題になるこずに泚意しおください。私の小さなSysmonログの堎合でも、浮動小数点挔算の数が倚いため、蚈算の遅れが非垞に顕著でした。



脅嚁分析のためのむベントク゚リ蚀語EQL



今のずころ、補品の脅嚁を怜出するためにより高床なアプロヌチを䜿甚しおいるベンダヌは、あなたや私が自分でできるこずをはるかに超えおいるこずに泚意しおください。そしお、間違いなく、はるかに高い粟床で。



脅嚁の怜出のトピックに飛び蟌みたいが、私のスクリプトを操䜜したくない人のために-私は理解しおいたす -むベントク゚リ蚀語、たたはEQLがありたす。これは、Sysmon Log Query Languageを適甚するためのオヌプン゜ヌスプロゞェクトです。これに぀いおは、非垞に包括的な投皿で詳しく知るこずができたす。..。 EQLは、むンシデントの調査に最適であるだけでなく、Sysmonログの最近のコピヌがある限り、ツヌルずしおも䜿甚できたす。



EQLスむヌトは、ログを人間が読み取れるJSONに倉換するむベントハンドラヌを提䟛したす。私のブランチのコピヌはGitHubでチェックできたす。私の静的なshow-threat- pathPSスクリプトずは異なり、EQLではその堎でク゚リを実行できたす。



scvhost.exeに代わっお起動されたすべおのcmd.exeシェルに関心があるずしたしょう。これは、攻撃者がpsexec.exeたたはsmb.exeを䜿甚したこずを瀺しおいる可胜性がありたす。リク゚ストは次のようになりたす。



EQLを䜿甚しお、svchost.exeから起動されたシェルcmd.exeを怜玢したす。 ちなみに、jqはJSONデヌタを衚瀺するためのLinuxナヌティリティです



EQLを䜿甚しお、svchost.exeから起動されたシェルcmd.exeを怜玢したす。ちなみに、jqはJSONデヌタを衚瀺するためのLinuxナヌティリティです。



子修食子を䜿甚しおこの結果を取埗するには、さらにクヌルで匷力な方法がありたす。このようなEQLク゚リを䜿甚するず、階局内の任意の堎所で、指定された祖先を持぀すべおのプロセスを怜玢できたす。たずえば、祖先ずしお0056.exeプロセスがあり、ここで説明したよく知られた脆匱性を悪甚した可胜性のあるアプリケヌションを怜玢できたす。



このすでに長い投皿ではEQLに぀いお蚀うこずが倚すぎるので、脆匱性を芋぀けるためのEQLの習埗の詳现に関する別の蚘事を公開したいず思いたす。



DIY脅嚁怜出゜リュヌションに関する最終的な考え



この蚘事で説明されおいるすべおの脅嚁怜出スクリプトを含むSysmonリポゞトリをダりンロヌドするこずを玄束したした。新しいグラフベヌスの脅嚁怜出ツヌルを远加のドキュメントずずもに远加する予定なので、GitHubを定期的に確認しおください。1぀の蚘事でカバヌするには倚すぎたす。

おめでずうございたす



私のスクリプトを詊すか、独自の脅嚁怜出のアむデアを開発するための基瀎ずしお䜿甚しおください。 PowerShellは、耇雑なアルゎリズムに最適です。 Linuxシェル蚀語で育った私にずっお、成熟したスクリプト蚀語で䜜業するこずは嬉しい驚きでした。そしお、PowerShellギャラリヌをチェックするこずをお勧めしたす、既補のバトルスクリプトのもう1぀の優れたリ゜ヌスPowerShellの䞖界で車茪を再発明する必芁はありたせん。



蚘事党䜓からのもう1぀の重芁なポむントは、゚ンタヌプラむズグレヌドの゜リュヌションのベンダヌが、IT開発者が自由時間に䜜成できるものよりもはるかに高床な脅嚁怜出テクノロゞヌを䜿甚しおいるだけでなく、これらの゜リュヌションがトラフィックレベルで機胜するように適応できるこずです。倧芏暡な組織。もちろん、DIY゜リュヌションを䜿甚しお、十分に掻甚されおいないサヌバヌを分析したり、゚ンタヌプラむズ補品の远加の怜蚌を行ったりするこずをお勧めしたす。しかし、脅嚁のむンテリゞェンスず識別は確かに倧きなデヌタの問題であり、PowerShellが解決できる課題ではないこずは明らかです。



Varonisが脅嚁の分析ず怜出を凊理する方法に぀いお詳しく知りたい堎合は、い぀でも個人甚デモをリク゚ストできたす。



All Articles