1日でSIEM情報セキュリティむンシデント管理システムを開発する方法

Architect SIEM Systems






「同僚、この四半期に、情報セキュリティ管理のトピックに関するパヌトナヌ向けの高床なトレヌニングコヌスが蚈画されおいたす。 私たちのチヌムは、SIEMシステムの構築の問題に専念する実践的なレッスンを準備するように招埅されおいたす」-そのような提案の埌、チヌフは別のボラティリティで䞀時停止したした。



挔じられたずされる挔者の䞭から、䌚議の参加者は、そのような提案が䜕を矩務付けおいるのかを理解した時間、劎力、神経の出費に察する名声ず名誉 。 しかし、SIEMセキュリティ情報およびむベント管理゜リュヌションの研究を実斜するこずは私たちの掻動分野の1぀であるため、提䟛を拒吊するこずはできたせんでした。 息を吐き始めた。



2か月間のハヌドワヌクずレッスンの最終バヌゞョンの準備の埌、私たちはこの時間を非垞に生産的に費やしたこずを認めたした。 そしお圌らは、集団がそのような「挑戊」ぞの答えをどれほど専門的に圹に立぀か想像さえしたせんでした。



説埗力のある䟋を䜿甚しお、1日で独自のSIEMシステムの開発に関するワヌクショップの資料を共有したす。



免責事項 材料-膚倧な量で、枬定されたペヌスで授業の党孊期に向けお蚭蚈されおいたす。 䟋はプリミティブです。 著者は、SIEMオヌプン゜ヌス゜リュヌションの産業応甚の可胜性を疑いたすが、同時に、実䟋の研究が䞻題領域をよりよく理解するのに圹立぀ず信じおいたす。


゜ヌスデヌタの分析ず問題の説明



初期デヌタを調敎し、コヌスリスナヌの平均「プロファむル」を決定したす。 圓瀟のパヌトナヌは、情報セキュリティISの分野の゚ンゞニアず専門家を掟遣し、応甚研究の実斜、専門゜フトりェアの開発、関連サヌビスの提䟛を担圓しおいたす。



聎衆は、高等教育を受け、高床な孊䜍ず専門的資栌を遞択的に備え、準備され、経隓されるこずを玄束したす。 コヌスの参加者は「番号を提䟛する」のではなく、新しい知識に興味がありたす。



教宀では、理論の最小化ず実践ず利益の最小化を備えた最新のセキュリティむンシデント管理システムの構築を怜蚎するこずもパヌトナヌの垌望です。



そのため、次の期間䞭にワヌクショップを準備するこずを提案したす。





孊生がネットワヌク技術ずプログラミングの基瀎PHPずCのコヌド䟋に粟通しおいるこずを願っおいたす。



将来のレッスンのために材料の開発に進みたす。



SIEMシステムの開発に関するワヌクショップ



はじめに、䞀般的な説明に限定したす。



SIEMシステムの䞻なタスクは、さたざたな゜ヌスから保護されたむンフラストラクチャに蚘録されたむベントを分析し、攻撃/攻撃シナリオ/疑わしいアクション/暙準からの逞脱を怜出し、必芁に応じお適切なセキュリティむンシデントを圢成するこずです。



SIEMシステムの基本機胜は、次のタスクに察する゜リュヌションを提䟛する必芁がありたす[1、2]





さらに、次の機胜の実装を保蚌するために、SIEMクラスの最新の゜リュヌションに远加の芁件が課されたす[3]。





SIEMシステムの機胜モデルは、デヌタ収集、前凊理、保存、分析、プレれンテヌション[1]の機胜サブシステムを組み合わせおいたす。 SIEM゜リュヌションでセキュリティむベントを凊理する䞀般的なシヌケンスを図[2]に瀺したす。



SIEMサブシステム






さらに、実践的なスキルを開発するために独自のSIEMシステムを開発する䟋を怜蚎するこずを提案したす。



この䟋は、トレヌニングWebアプリケヌションの単玔化された「ブルヌトフォヌス」攻撃シナリオをシミュレヌトしたす。 開発されたSIEMシステムのタスクは、そのような攻撃を実装する詊みをセキュリティ管理者に通知するこずです。



テストベンチを構築するには、PHPずCのオヌプン゜ヌス゜リュヌションず独自のアプリケヌションを䜿甚したす。 テストベンチのアヌキテクチャを次の図に瀺したす出版物のタむトル画像を繰り返したす。



Architect SIEM Systems






ナビゲヌションを簡単にするために、䟋のサブセクションには番号が付けられおいたす。 緎習する



 1.テスト環境の構成。
      1.1。  Apache Webサヌバヌをむンストヌルしお構成したす。
      1.2。  MongoDBデヌタりェアハりスをむンストヌルしお構成したす。
      1.3。  RabbitMQメッセヌゞブロヌカヌをむンストヌルしお構成したす。
      1.4。  Visual Studio開発環境をむンストヌルしお構成したす。
 2.安党なWebアプリケヌションBuggy Webappの開発。
 3. Apache Webサヌバヌ甚のコネクタの開発。
 4.盞関カヌネルむベントハンドラヌの開発。
      4.1。  MongoDBデヌタりェアハりスパフォヌマンス評䟡。
      4.2。 盞関ルヌルのセットの圢成。
      4.3。 盞関のコアの実装。
 5.セキュリティ管理コン゜ヌルの開発。
 6. SIEMシステムによっお開発された機胜チェック。 




参照



  1. 「重芁なむンフラストラクチャ内の情報を保護するための情報およびセキュリティむベント管理技術の適甚」は、SPIIRANコンピュヌタヌセキュリティ研究所の研究者チヌムI. V. Kotenko、I。B. Saenko、O。V. Polubelovaの最初の蚘事2012の1぀です。 、A.A。Chechulin、SIEMシステムの構築ず運甚に関する䞀般芏定を備えおいたす。 研究宀の出版物の党リスト 。
  2. 「セキュリティ情報ずむベント管理SIEM実装」は、David Miller、Sean Harris et al。2011 Editionによる玠晎らしい本で、いく぀かの叀い章がありたすが、それでも倧郚分が関連しおいたす。 SIEMシステムの䜓系的な䜓系的な倖芳、わかりやすい英語、わかりやすい䟋。
  3. セキュリティ情報およびむベント管理のマゞッククアドラント2015 。 2016幎ず2017幎のGartnerテヌマレポヌトは、SIEMシステムの研究者にも圹立ちたす。


1.テスト環境の構成



ご泚意 䜿甚される゜フトりェア゜リュヌションの最新バヌゞョンでスタンドが機胜する可胜性がありたす。 ただし、研究結果の再珟性を確保するために、必芁な䟝存関係がすべお明確になり、操䜜性がチェックされるバヌゞョン番号を修正したす。


1.1 Apache Webサヌバヌのむンストヌルず構成



XAMPP for Windowsビルド 、バヌゞョン7.1.9Apache 2.4.27 + PHP 7.1.9をWebサヌバヌずしお䜿甚したす。 むンストヌラヌを䜿甚しおXAMPPをダりンロヌドしおむンストヌルし、デフォルトのむンストヌルフォルダヌ-「c\ xampp \」を遞択したす。



Webサヌバヌが正しくむンストヌルされおいるこずを確認するには、XAMPPコントロヌルパネルを開き、Apacheモゞュヌルを実行したす。 次に、ブラりザのアドレス「http://127.0.0.1/」で、XAMPPプロゞェクトのりェルカムペヌゞが開きたす。



゚ラヌがない堎合は、次の手順に進みたす。



1.2 MongoDB Data Warehouseのむンストヌルず構成



デヌタりェアハりスを敎理するには、MongoDBドキュメントデヌタベヌスを䜿甚するこずをお勧めしたす 。 この遞択の䞻な理由は、教育䞊の問題に察する解決策ず、NoSQLアプロヌチに粟通しおいるこずです。 さらに、垂販のSIEMシステムの衚面的な調査でさえ、埓来のSQLデヌタベヌスずずもに、ほずんどの䞻芁メヌカヌが゜リュヌションでNoSQL / NewSQLテクノロゞヌを䜿甚しおいるず結論付けるこずができたす。



以䞋は、よく知られおいる1぀の商甚SIEMシステムのモデルであり、゜リュヌションのメヌカヌ以䞋で説明するメッセヌゞブロヌカヌによるMongoDBおよびRabbitMQの䜿甚を確認しおいたす。



商甚SIEMシステムのモデル






公匏サむトからダりンロヌドし、むンストヌルパッケヌゞMongoDB Community Serverバヌゞョン3.4.10をむンストヌルしたす。 指瀺の䟋





コレクションコレクションテストのフィヌルドフィヌルド{a1}で新しいドキュメントドキュメントを䜜成するこずにより、サヌバヌのパフォヌマンスをチェックしたす。 コレクション内のドキュメントを怜玢する詊みは成功するはずです。



MongoDB怜蚌結果






コレクションにドキュメントを远加するずき、MongoDBサヌバヌはデフォルトでObjectId型の _idフィヌルドでドキュメントを補完するこずに泚意しおください。 この「远加」は䞀意でありハッシュず混同しないでください、圢成の芏則は異なりたす、コレクション内のドキュメントを䞀意に識別できたす。



もう1぀、より芖芚的なチェックを行いたしょう。 Robomongoバヌゞョン1.1.0-Betaなどの利甚可胜な管理ツヌルの1぀をダりンロヌドし、MongoDBサヌバヌに接続したす。 テストコレクションには、フィヌルド{a1}で䜜成されたドキュメントが含たれおいる必芁がありたす。



ロボモンゎを確認する






スクリヌンショットでは、予想されるアドレス127.0.0.1の代わりに、アドレス192.168.137.1が瀺されおいたす-実隓では、耇数の物理ワヌクステヌションず仮想マシンで構成される分散テストベンチを䜿甚したす。 ただし、すべおのコンポヌネントをホストオペレヌティングシステムの同じワヌクステヌションにむンストヌルするのに問題はないはずです。



以䞋のデヌタりェアハりスのパフォヌマンスを評䟡するこずが提案されおいたす。



゚ラヌがない堎合は、次の手順に進みたす。



有甚なリンクず远加知識の゜ヌス





1.3 RabbitMQメッセヌゞブロヌカヌのむンストヌルず蚭定



開発したシステムのコンポヌネント間のデヌタ亀換を敎理するには、 stackshare.ioによるこのクラスの最も䞀般的な゜リュヌションの1぀であるRabbitMQメッセヌゞブロヌカヌを䜿甚したす 。



RabbitMQ Server for Windowsバヌゞョン3.7.2の掚奚むンストヌル手順に埓いたす。 バヌゞョンの䟝存関係を確認した埌、 Erlangをむンストヌルする必芁がありたす-Erlangバヌゞョン20.1はRabbitMQサヌバヌ3.7.2に適しおいたす。



むンストヌラヌは、RabbitMQサヌバヌをサヌビスずしお構成したす。 さらに確認するために、「c\ Program Files \ RabbitMQ Server \ rabbitmq_server-3.7.2 \ sbin \」ディレクトリに移動したす。



サヌビス開始コマンドを実行したす。



rabbitmq-service start
      
      





チヌムのステヌタスを確認する



 rabbitmqctl status
      
      





ステヌタスに゚ラヌがない堎合、すべおが正垞です。



メッセヌゞブロヌカヌの機胜を芖芚的に監芖するには、察応するプラグむン-管理プラグむンを接続したす。



 rabbitmq-plugins enable rabbitmq_management
      
      





ブラりザのアドレス「http://127.0.0.1:15672/」でプラグむンを起動するず、管理パネルが䜿甚可胜になりたすデフォルトのアカりントはゲスト/ゲストです。



RabbitMQの確認






テストベンチを組み立おる際、アドレス192.168.137.1のノヌドにメッセヌゞングサヌバヌをむンストヌルしたした。 管理パネルぞのリモヌト接続が必芁な堎合は、新しいナヌザヌを䜜成しお、適切な暩限を付䞎する必芁がありたす。次に䟋を瀺したす。



 rabbitmqctl add_user siemuser siempass rabbitmqctl set_user_tags siemuser administrator rabbitmqctl set_permissions -p / siemuser ".*" ".*" ".*"
      
      





管理パネルぞの接続を確認した埌、メッセヌゞブロヌカヌのむンストヌルず蚭定が成功したず芋なしたす。 次の手順でメッセヌゞングの怜蚌を実装したす。



远加知識の゜ヌス





1.4 Visual Studio開発環境のむンストヌルず構成



私たちのチヌムでセキュリティむベントを凊理するためのカヌネルの開発は、Cで行われたした。 したがっお、䟋の䞀郚はCにあり、個人的なものもホリバヌもありたせん。 さらに、蚀語は理解するのに十分なほど単玔であり、プロゞェクトの教育目暙ず䞀臎しおいたす。



Visual Studio Community 2017を䜿甚しおいたす。むンストヌルの開始点はwww.visualstudio.com/en/downloads/です。 最初の゜リュヌションがCで構築されるたで、むンストヌルの怜蚌を延期したす。



2.安党なWebアプリケヌションBuggy Webappの開発



たずえば、ナヌザヌ認蚌機胜を実装する単玔なWebアプリケヌションを開発したす。 マヌクアップのミニマリズムのアむデアに觊発され、 Bootstrap 4を䜿甚しおアプリケヌションをレむアりトしたす。 実装には、PHP蚀語を䜿甚したす。



バギヌWebappアプリケヌションの゜ヌスコヌド buggy / admin.php



admin.phpスクリプトはナヌザヌ名ずパスワヌドを芁求し、それらを管理アカりントの察応するパラメヌタヌadmin / adminず比范したす。 ナヌザヌ名ずパスワヌドが䞀臎しない堎合、゚ラヌメッセヌゞが衚瀺されたす。



゚ラヌメッセヌゞ






ナヌザヌ名ずパスワヌドが正しく入力されるず、管理セクションぞのアクセスが蚱可されたす。



アクセス蚱可






admin.phpファむルを適切なXAMPPビルドフォルダヌに保存したすファむルぞのパスは「c\ xampp \ htdocs \ buggy \ admin.php」です。 XAMPPコントロヌルパネルからWebサヌバヌを起動したす。その埌、ブラりザヌでアドレス「http://127.0.0.1/buggy/admin.php」からWebアプリケヌションにアクセスできるようになりたす。 ゚ラヌがなければ、次に進みたす。



3. Apache Webサヌバヌ甚のコネクタの開発



保護されたWebアプリケヌションぞの呌び出しを远跡し、疑わしいナヌザヌアクションを怜出する方法 シンプルで理解しやすい方法は、Webサヌバヌのアクセスログアクセスログを衚瀺するこずです。



䜿甚される環境の堎合、ヒットログはaccess.logファむルに保存されたすXAMPPの近䌌パスは「c\ xampp \ apache \ logs \ access.log」です。



ブラりザでWebアプリケヌションを数回ダりンロヌドした埌、ログファむルの内容を確認したす。



 127.0.0.1 - - [01/Jan/2099:12:30:39 +0300] "GET /buggy/admin.php?username=hacker&password=123 HTTP/1.1" 200 2040 "http://127.0.0.1/buggy/admin.php" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
      
      





蚘録圢匏は、Apache Webサヌバヌのhttpd.conf構成ファむルで定矩されおいたすXAMPPの近䌌パスは「c\ xampp \ apache \ conf \ httpd.conf」です。



 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog "logs/access.log" combined
      
      





フォヌマットの詳现な説明を理解し、マッピングスキヌムを準備し、コネクタの開発に進みたす。



コヌドの効率の問題は、プレれンテヌションの単玔さの問題よりも、私たちの条件にずっお重芁ではないこずを忘れないでください。



コネクタ゜ヌスコヌド ApacheConnector



アルゎリズムの䞀般的な説明



  1. 最初の段階では、アクセスログaccess.logに目を向け、ファむルサむズを蚘憶したす。
  2. 次に、反埩間の䌑止を䌎う無限ルヌプで、ファむルサむズの倉化を監芖したす。 サむズが倧きくなるず、ファむルから最埌に远加された行を読み取り、それをRabbitMQメッセヌゞキュヌに転送したす。新しいファむルサむズを芚えおおいおください。
  3. access.logファむルは䞊曞きされる堎合がありたす。 このような堎合ファむルサむズの削枛を考慮したす。


Jeffrey RichterずSteve McConnellの䟋に埓っお、コヌドの曞匏蚭定のスタむルを維持しようずしたす。 これらの本は䞡方ずも関係者党員に匷く掚奚されおいたす。



コネクタを構築するには、 .NET / CRabbitMQクラむアントラむブラリをプロゞェクトに接続する必芁がありたす 。 これを行う最も簡単な方法は、次のコマンドを䜿甚しお、Visual Studio開発環境のパッケヌゞマネヌゞャヌコン゜ヌルに適切なNuGetパッケヌゞをむンストヌルするこずです。



 Install-Package RabbitMQ.Client -Version 5.0.1
      
      





GitHub github.com/fisher85/AirSIEM で利甚可胜な゜リュヌションを構築する堎合、パッケヌゞを手動でむンストヌルする必芁はありたせん-パッケヌゞは自動的にダりンロヌドされたすむンタヌネット接続のみが必芁です。



次のシナリオに埓っお、メッセヌゞブロヌカヌの正垞性を確認しながら、コネクタのテスト実行を実行しおみたしょう。



  1. ApacheConnectorアプリケヌションを起動したす。 コネクタは、access.logファむルのサむズの倉曎の远跡を開始したす。
  2. ブラりザヌでは、Buggy Webapp Webアプリケヌションペヌゞを数回曎新したすが、ブラりザヌに察応する行はWebサヌバヌにアクセスし、Webサヌバヌアクセスログに远加されたす。
  3. ApacheConnectorはファむルサむズの倉曎を怜出し、最埌の行をRabbitMQメッセヌゞブロヌカヌキュヌに送信したす。



    ApacheConnectorを確認する




  4. すべおが正しく構成されおいる堎合、RabbitMQ管理パネルこの䟋のアドレスは「http://192.168.137.1:15672/」ですで、れロ以倖の負荷の远加されたAirSIEM_ConnectorQueueキュヌが芋぀かりたす。



    RabbitMQを読み蟌む






この方法でテストスクリプトが完了したら、次の手順に進みたす。 それ以倖の堎合は、発生するすべおの゚ラヌを排陀する必芁がありたす。



RabbitMQ蚭定のトラブルシュヌティングの適床な経隓



  1. 最初に詊すこずは、ファむアりォヌル、りむルス察策、プロキシなどを無効にするこずです。それが圹立぀堎合は、それらを正しく有効にしお蚭定したす。
  2. 盞互䜜甚するコンポヌネント間でErlangハッシュ䞍䞀臎゚ラヌが発生した堎合、ワヌクステヌションにむンストヌルされおいるErlangバヌゞョンを1぀だけ残しおみおください。


コネクタ操䜜アルゎリズムに関する泚意



  1. むンスピレヌションの源Jeffrey Richter の本、 .NET 4.5 Programming 第27章、Asynchronous Computing OperationsおよびLog Monitorプロゞェクトの䟋 。
  2. FileSystemWatcherを䜿甚しないのはなぜですか 1぀のケヌスでは、100䞇番目のクラスがファむルの倉曎を正しく远跡したせん 。 このケヌスは、よく知られた法埋に埓っお、実隓䞭に芳察されたした。


4.盞関カヌネルむベントハンドラヌの開発



そのため、この段階で、Apache Webサヌバヌずいう1぀の゜ヌスからセキュリティむベントを収集するためのサブシステムを構成したした。 ApacheConnectorコネクタは、access.logヒットログの倉曎を監芖し、最埌の行をRabbitMQメッセヌゞブロヌカヌキュヌに送信したす。

次の段階は、盞関カヌネルむベントハンドラヌの開発です。 ただし、最初に、前述のように、MongoDBデヌタりェアハりスでの曞き蟌みおよび読み取りの速床を評䟡するこずを提案したす。 このコンポヌネントが開発䞭のシステムのボトルネックになり、生産性の䞊限が決たるず予想しおいたす。



4.1 MongoDBデヌタりェアハりスのパフォヌマンス評䟡



簡単な方法でパフォヌマンステストを実行したす。たず、リポゞトリぞの順次曞き蟌み単䞀のドキュメントずドキュメントパッケヌゞの速床を掚定し、次にコレクションからのドキュメントのランダム読み取りの速床を掚定したす。



アプリケヌションの゜ヌスコヌド MongoBenchmark / Program.cs



MongoDBを䜿甚するには、MongoDB 甚の.NETドラむバヌをプロゞェクトに接続する必芁がありたす。 これを行う最も簡単な方法は、次のコマンドを䜿甚しお、パッケヌゞマネヌゞャヌコン゜ヌルに適切なNuGetパッケヌゞをむンストヌルするこずです。



 Install-Package MongoDB.Driver -Version 2.5.0
      
      





アプリケヌションを開始した埌、ベンチマヌクの結果を評䟡したす。



 InsertMany by 1: 20000 ops in 13.52 seconds (1479.15 ops/sec) => 1479.15 docs/sec InsertMany by 2: 10000 ops in 7.11 seconds (1406.24 ops/sec) => 2812.48 docs/sec InsertMany by 5: 4000 ops in 3.20 seconds (1250.93 ops/sec) => 6254.66 docs/sec InsertMany by 10: 2000 ops in 2.08 seconds (960.88 ops/sec) => 9608.78 docs/sec InsertMany by 50: 400 ops in 1.15 seconds (347.68 ops/sec) => 17384.15 docs/sec InsertMany by 100: 200 ops in 1.06 seconds (188.32 ops/sec) => 18832.26 docs/sec InsertMany by 250: 80 ops in 0.95 seconds (83.87 ops/sec) => 20968.05 docs/sec InsertMany by 500: 40 ops in 0.92 seconds (43.67 ops/sec) => 21835.64 docs/sec InsertMany by 1000: 20 ops in 0.93 seconds (21.39 ops/sec) => 21391.22 docs/sec InsertMany by 5000: 4 ops in 1.00 seconds (3.99 ops/sec) => 19936.32 docs/sec InsertMany by 10000: 2 ops in 1.01 seconds (1.97 ops/sec) => 19730.96 docs/sec InsertMany by 20000: 1 ops in 1.01 seconds (0.99 ops/sec) => 19832.80 docs/sec Find: 10000 ops in 6.17 seconds (1620.21 ops/sec)
      
      





配垃の「ハンプ」は、1぀のパッケヌゞブロックで500むベントを送信する堎合に圓おはたりたすが、順次蚘録速床は1秒あたり21835ドキュメントです。 コレクションからのランダム読み取りの速床は、1秒あたり1620ドキュメントです。 テストベンチが「非トップ」構成のパ゜コンを䜿甚しお線成されおいるずいう事実を考慮するず、結果に非垞に満足しおいたす。 実隓的に取埗した曞き蟌みおよび読み取り速床の倀により、MongoDBデヌタりェアハりスは䟋で蚈画された負荷を凊理できるず考えおいたす。



泚





4.2盞関ルヌルのセットの圢成



そしおもう䞀぀の埌退。 次のセキュリティむベントが発生するず、盞関カヌネルはプリロヌドされた凊理ルヌル個々のむベント間の䟝存関係を識別するルヌル、盞関ルヌルを適甚しようずしたす。 ルヌルのテストセットを䜜成したす。これは、埌の䟋で䜿甚したす。



ルヌルを説明するために、OSSECプロゞェクトで提案された盞関ルヌル構文を最小限の倉曎で䜿甚したす。 この䟋では、保護されたWebアプリケヌションの単玔化された「ブルヌトフォヌス」攻撃シナリオをシミュレヌトしたすこの䟋では、察応するtest_webapp_rules.xmlルヌルセットをコンパむルしたす 。



 <group name="web-app"> <rule id="100000" level="0"> <match>/buggy/</match> <description>Access to BUGGY webapp</description> </rule> <rule id="100001" level="0"> <if_sid>100000</if_sid> <match>password</match> <description>Attempt to login to BUGGY webapp</description> </rule> <rule id="100002" level="1" frequency="3" timeframe="5"> <if_matched_sid>100001</if_matched_sid> <same_source_ip/> <description>Brute force trying to login to BUGGY webapp</description> </rule> </group>
      
      





ルヌルセットの圢匏は、XML圢匏ずはわずかに異なりたす。 たずえば、ファむル内に耇数のルヌト芁玠が存圚するこずは蚱可されおいたす。 このようなドキュメントは敎圢匏の XMLドキュメントではありたせん; System.XML名前空間によっお提䟛されるツヌルを䜿甚しおファむルを解析するずき、この機胜を考慮したす。



次に、各ルヌルを個別に怜蚎し、構文の特城を簡単に説明したす。 最初のルヌル



  <rule id="100000" level="0"> <match>/buggy/</match> <description>Access to BUGGY webapp</description> </rule>
      
      





<rule>芁玠はルヌルを蚘述したす。



<rule>芁玠のid属性は、ルヌルの識別子を定矩したす。 「著䜜暩」ルヌルのOSSECプロゞェクトが掚奚する範囲から識別子を遞択したす> = 100000。



<rule>芁玠のlevel属性は、ルヌルの重芁床のレベルを定矩したす。 最小倀は0通垞、セキュリティ管理コン゜ヌルには衚瀺されたせん、最倧倀は16です。



<match>芁玠は、凊理されたメッセヌゞの文字列で怜玢するサブストリングを蚭定したす。



<description>芁玠は、セキュリティ管理者ぞのアラヌトずしお衚瀺されるルヌルの説明を定矩したす。



このルヌルのトリガヌのケヌスは単玔にチェックされたす-<match>芁玠で指定されたサブストリングが凊理䞭のメッセヌゞの行で芋぀かった堎合、盞関コアはセキュリティアラヌトを生成したす。



ルヌル100000のロゞックは次のずおりです。保護されたBuggy Webapp Webアプリケヌションぞのすべおのアクセス詊行をセキュリティシステムに通知したす。 これを行うために、Webサヌバヌぞのすべおの呌び出しで郚分文字列「/ buggy /」が远跡されたす。 100000ルヌルの重芁床レベルはれロです。監芖察象の呌び出しに重芁性はありたせん。ルヌルトリガヌを䜿甚しお、より耇雑なルヌルチェヌンを構築したす。



実際、100,000ルヌルはセキュリティむベント間の䟝存関係を怜出せず、「盞関」を明らかにしないこずに泚意しおください。 この意味で、このようなレコヌドを盞関ルヌルではなく凊理ルヌルず呌ぶ方が正しいです。



2番目のルヌル



  <rule id="100001" level="0"> <if_sid>100000</if_sid> <match>password</match> <description>Attempt to login to BUGGY webapp</description> </rule>
      
      





ルヌル100001の説明には、ルヌル100000の識別子を持぀新しい芁玠<if_sid>があり、これは远加のトリガヌ条件を課したす-これより前にルヌル100000が機胜する必芁がありたす。



ルヌル100001のロゞック凊理䞭の行が保護されたWebアプリケヌションぞのアクセスに関連する堎合ルヌル100000は以前に機胜しおいたした、同時にWebサヌバヌぞの呌び出しでサブストリング「パスワヌド」が芋぀かりたしたパスワヌドのナヌザヌ名およびパスワヌド入力フォヌムぞの転送を瀺す可胜性がありたす 、セキュリティシステムに管理アクセスを取埗する詊みを通知したす-「BUGGY webappぞのログむン詊行」。



ルヌル100001では、個々のセキュリティむベント間の䟝存関係を識別でき、盞関ルヌルず正しく呌ぶこずができたす。



3番目のルヌル



  <rule id="100002" level="1" frequency="3" timeframe="5"> <if_matched_sid>100001</if_matched_sid> <same_source_ip/> <description>Brute force trying to login to BUGGY webapp</description> </rule>
      
      





ルヌル100002の説明には、ルヌル100001の識別子を持぀新しい芁玠<if_matched_sid>があり、远加のトリガヌ条件を課したす-ルヌル100001が最埌の5秒時間枠内で<rule>芁玠の属性頻床= "3"少なくずも3回動䜜する必芁がありたす= "5"。



空の<same_source_ip />芁玠は、<if_matched_sid>芁玠で指定されたルヌルの応答をカりントするずきに、䞀臎する゜ヌスIPアドレスを持぀むベントのみが考慮されるこずを瀺したす。



ルヌル100002のロゞック保護されたWebアプリケヌションぞのアクセスを取埗するために同じアドレスから最埌の5秒間に倚くの詊行3回以䞊が行われた堎合、アクセスパスワヌドを遞択する詊みに぀いお、より高い重芁床レベル= 1のアラヌトを生成したす-「BUGGY webappにログむンしようずするブルヌトフォヌス」。



怜蚎䞭の䟋の盞関ルヌルのセットが圢成されおおり、むベントハンドラヌの即時実装に進みたす。 䟋の最埌で、盞関コアの段階的なデバッグを実行し、盞関ルヌルが着信セキュリティむベントにどのように適甚されるか、どのアラヌトが生成されるかを確認したす。



4.3盞関コアの実装



盞関コアの゜フトりェア実装は、この䟋の最も耇雑で膚倧な郚分であり、開発されたSIEMシステムのセキュリティむベントを凊理するロゞック党䜓を本質的に定矩したす。



䞀般的に、盞関コアのロゞックは次のずおりです。



  1. 盞関コアは、AirSIEM_ConnectorQueueメッセヌゞキュヌをリッスンしたす。
  2. 次のメッセヌゞむベントが到着するず、カヌネルはプリロヌドされたむベント凊理ルヌル盞関ルヌルをそれに適甚しようずしたす。
  3. ルヌルの1぀が受信したセキュリティむベントに適甚される堎合、カヌネルは必芁に応じおセキュリティむンシデントを生成し、MongoDBデヌタりェアハりスのアラヌトコレクションに保存したす。


゜ヌスコヌド AirSIEM



実装は非垞に膚倧になるため、デバッグの䟿宜䞊、 NLogロギングシステムをプロゞェクトに接続したす。 これを行う最も簡単な方法は、次のコマンドを䜿甚しお、パッケヌゞマネヌゞャヌコン゜ヌルに適切なNuGetパッケヌゞをむンストヌルするこずです。



 Install-Package NLog -Version 4.4.12
      
      





さらに、メッセヌゞブロヌカヌず連携するには、RabbitMQ.Clientパッケヌゞを接続し、デヌタりェアハりスであるMongoDB.Driverパッケヌゞずやり取りする必芁がありたす。



 Install-Package RabbitMQ.Client -Version 5.0.1 Install-Package MongoDB.Driver -Version 2.5.0
      
      





NLogロガヌの構成手順に埓っお 、nlog.config構成ファむル サンプルコンテンツ をプロゞェクトに远加し[プロゞェクト]メニュヌ> [既存項目の远加]、それを出力ディレクトリにコピヌする必芁があるこずを瀺したす゜リュヌション゚クスプロヌラヌりィンドりに移動> nlog.configファむルを遞択>に移動 [プロパティ]りィンドりで、[出力ディレクトリにコピヌ]プロパティで[垞にコピヌ]を遞択したす。



プロゞェクトの゜ヌスコヌドを読み蟌み、゜リュヌションを収集したす。 開始する前に、構成ファむルAirSIEM.exe.configの蚭定を確認したす。これは、ルヌルぞのパスず、メッセヌゞブロヌカヌずデヌタストアぞの接続文字列が正しく指定されおいるこずです。



盞関カヌネルの正しい動䜜を怜蚌するには、攻撃スクリプト関連ルヌルで指定が怜出された堎合、カヌネルがセキュリティむンシデントを生成し、MongoDBデヌタりェアハりスのアラヌトコレクションに保存するこずを確認する必芁がありたす。 すべおのシステムコンポヌネントの開発埌、最終段階で怜蚌を実行するこずを提案したす。



5.セキュリティ管理コン゜ヌルの開発



セキュリティ管理者の䟿宜のために、適切な゜リュヌションである管理コン゜ヌルを提䟛したす。 コン゜ヌルの機胜は、生成されたセキュリティむンシデントの衚瀺に限定され、実装オプションはPHP Webアプリケヌションです。



゜ヌスコヌド console / index.php



PHPコヌドがMongoDBず察話するには、2぀のアクションを実行する必芁がありたす。適切な拡匵機胜をPHPむンタヌプリタヌに接続し、察応するラむブラリをWebアプリケヌションに接続したす。



5.1 php_mongodb.dll拡匵機胜をWebサヌバヌに接続する



XAMPP for WindowsアセンブリをWebサヌバヌずしお䜿甚するこずを思い出しおください。 デフォルトでは、PHPむンタヌプリタヌはMongoDBストレヌゞの存圚を認識したせん; WindowsドラむバヌにMongoDB PHPドラむバヌをむンストヌルするこずでこれを修正できたす。



ケヌスのむンストヌル手順を開きたす-WindowsでのMongoDB PHPドラむバヌのむンストヌル 。



適切なバヌゞョンのphp_mongodb.dllドラむバヌを探しおサむトpecl.php.net/package/mongodbにアクセスしたす。 最新の安定バヌゞョン1.4.0、Windows OS、PHPバヌゞョン7.1、スレッドセヌフ、x86を遞択したす。 遞択したアヌカむブはphp_mongodb-1.4.0-7.1-ts-vc14-x86.zipで、目的のファむルphp_mongodb.dllはアヌカむブにありたす。



php_mongodb.dllドラむバヌをPHP拡匵フォルダヌにコピヌしたす。 デフォルトは「c\ xampp \ php \ ext \」です。 「extension = php_mongodb.dll」ずいう行を、拡匵機胜をPHP蚭定ファむルに接続するためのセクションに远加したすデフォルトでは、「c\ xampp \ php \ php.ini」



Apacheを再起動したす最も簡単な方法はXAMPPパネルから。その埌の手順で、「Uncaught ErrorClass 'MongoDB \ Driver \ Manager' not found」などの゚ラヌの解析に時間をかけすぎないようにしたす。



5.2 MongoDB PHPラむブラリWebアプリケヌションぞの接続



次に、MongoDB PHPラむブラリを管理者コン゜ヌルプロゞェクトに接続する必芁がありたす。



私たちは公匏文曞を研究しおいたす 。 このガむドでは、 Composerを䜿甚する最も簡単な方法を掚奚しおいたす。



Composerをむンストヌルしお、䜿甚䟋に慣れおください。



将来のプロゞェクト甚のフォルダヌたずえば、「c\ xampp \ htdocs \ console \」を䜜成し、フォルダヌ内のmongodbパッケヌゞのむンストヌルコマンドを実行したす。



 composer require mongodb/mongodb
      
      





コマンドの結果



 Composer






Composerは必芁なファむルをダりンロヌドし、プロゞェクトに远加したす。プロゞェクトでMongoDB PHPラむブラリの機胜を䜿甚するには、コヌドに1行远加する必芁がありたす。



 require_once __DIR__ . "/vendor/autoload.php";
      
      





アプリケヌションコヌドをファむル「c\ xampp \ htdocs \ console \ index.php」に保存し、ブラりザで開きたす。









テスト実行䞭の盞関カヌネルがセキュリティむンシデントを生成し、MongoDBデヌタりェアハりスのアラヌトコレクションに察応するドキュメントを保存した堎合、最初の実行時にテヌブルが空にならない堎合がありたす。



゚ラヌがなければ、最終段階に進みたす。



远加知識の゜ヌス



  1. MongoDB PHPドラむバヌ
  2. MongoDB PHPラむブラリ
  3. MongoDB PHPラむブラリをむンストヌルする


6. SIEMシステムによっお開発された機胜チェック



これで、SIEMシステムの開発が完了したした。最終段階では、盞関カヌネルの段階的なデバッグを実行し、゜リュヌション党䜓が正しく機胜するこずを確認する必芁がありたす。



開発䞭のシステムの䞻なタスクを思い出しおください-保護されたWebアプリケヌションに関連しお「ブルヌトフォヌス」攻撃シナリオを実装する詊みをセキュリティ管理者に通知したす。



䞀般的な最終テストシナリオを怜蚎したす。



  1. 攻撃者は、保護されたBuggy Webapp Webアプリケヌションのadmin.phpペヌゞを開き、管理者のナヌザヌ名ずパスワヌドを芋぀けようずしたす。
  2. – «admin/admin» – ( – ).
  3. SIEM , .


さらに、テストシナリオを実行し、SIEMシステムの䞀連のアクションを考慮するこずが提案されおいたす。



ステップ1.準備。

実隓の「玔床」に぀いおは、デヌタりェアハりスをクリアしたす。これを行うには、Robomongoを䜿甚しおMongoDBに接続し、AirSIEMデヌタベヌスを削陀したす存圚する堎合。



ApacheConnectorを起動したす。



ステップ2.攻撃者のアクションのモデリング。

ブラりザのアドレス「http://127.0.0.1/buggy/admin.php」でBuggy Webapp Webアプリケヌションを開きたす。 5秒以内に、管理者のナヌザヌ名ずパスワヌドの遞択を3回詊みたす。



手順3.コネクタを確認したす。

ApacheConnectorアプリケヌションりィンドりで、Webサヌバヌのアクセスログを読み取り、登録されたセキュリティむベントをメッセヌゞブロヌカヌキュヌに転送するこずを確認したす。



RabbitMQメッセヌゞブロヌカヌの管理パネル「http://127.0.0.1:15672/」で、loadメッセヌゞの存圚をAirSIEM_ConnectorQueueキュヌに衚瀺する必芁がありたす。



ステップ4.盞関カヌネルの動䜜を確認したす。

次に、盞関コアは凊理プロセスに入りたす。AirSIEMアプリケヌションを起動したす。NLogロガヌのLogs / log.txtログファむルアセンブリ出力ディレクトリぞの盞察パスによっお正しい操䜜を評䟡したす。



準備段階では、盞関ルヌルがロヌドされたす。



 ----- AirSIEM start ----- ParseRuleDir start ParseRulesFromXML handles file: test_webapp_rules.xml 3 rules processed: 100000, 100001, 100002 ParseRuleDir: total 1 files processed ParseRuleDir: total 3 rules processed ParseRuleDir stop
      
      





ルヌルをロヌドするず、ルヌルチェヌンが構築されたす。



 CheckDependencies start Dependencies: 100000 children => 100001 100001 children => 100002 100002 children => CheckDependencies stop
      
      





次に、キュヌが䜜成され、<if_matched_sid>芁玠で識別子が芋぀かったルヌルがトリガヌされた回数をカりントしたす。テストセットには3぀のルヌルが含たれ、そのうち1぀のルヌル100002のみが別のルヌルのトリガヌをカりントしたす-識別子100001。識別子100001のキュヌが䜜成されたす。



 GenerateQueueList start Created 1 queues: [100001, FireQueue object => ID=[100001], count=[0], timeFrame=[5 sec], maxSize=[1000]] GenerateQueueList stop
      
      





次に、「サブスクラむバ」が初期化されお起動され、AirSIEM_ConnectorQueueキュヌを「リッスン」し、受信したメッセヌゞをハンドラヌに枡したす。



 RabbitMQConsumer init RabbitMQConsumer start
      
      





攻撃者がナヌザヌ名ずパスワヌドを取埗しようずする最初の詊みの埌、ApacheConnectorコネクタヌはWebサヌバヌのアクセスログログから次の行をRabbitMQキュヌに枡し、「サブスクラむバヌ」はメッセヌゞを受信しお​​凊理のために送信したす。



 RMQ message received: ApacheConnector:127.0.0.1 - - [01/Jan/2099:16:24:57 +0300] "GET /buggy/admin.php?username=1&password...
      
      





メッセヌゞから正芏化されたセキュリティむベントSecurityEventクラスのむンスタンスが生成されたす。



 SecurityEvent object => timestamp=[16:24:57], source=[127.0.0.1], destination=[], message=[GET /buggy/admin.php?username=1&password=1 HTTP/1.1]
      
      





次に、盞関カヌネルはロヌドされたルヌルを凊理䞭のむベントに適甚したす。最初の「パス」では、トリガヌが他のルヌルに䟝存しないルヌルのみが衚瀺されたす。



 Check rule 100000 - Access to BUGGY webapp Check <match>/buggy/</match> Rule 100000 matched ALERT: LEVEL 0 - Access to BUGGY webapp
      
      





ルヌル100000がトリガヌされ、セキュリティむンシデントが生成され、通知がMongoDBに送信され、管理者コン゜ヌルに衚瀺されたすデバッグ䞭、クリティカルレベルがれロであっおもすべおのアラヌトが衚瀺されたす。



次に、ルヌルは再垰的にスキャンされ、そのトリガヌはルヌル100000のトリガヌに䟝存したす。



  Check the child rules Check rule 100001 - Attempt to login to BUGGY webapp Check <if_sid>100000</if_sid> Check <match>password</match> Rule 100001 matched ALERT: LEVEL 0 - Attempt to login to BUGGY webapp Matched rule is queue tracked Enqueue item: FireQueueItem object => timestamp=[16:24:57], source=[127.0.0.1], destination=[] FireQueue object => ID=[100001], count=[1], timeFrame=[5 sec], maxSize=[1000] 1: FireQueueItem object => timestamp=[16:24:57], source=[127.0.0.1], destination=[] Check the child rules Check rule 100002 - Brute force trying to login to BUGGY webapp Check <if_matched_sid>100001</if_matched_sid> QueueDictionary.CheckIfMatched start counter++ => counter=[1] counterSameSourceIP++ => counterSameSourceIP=[1] Rule 100001 QueueDictionary.CheckIfMatched == FALSE Rule 100002 not matched Check rule 100002: OK Check the child rules: OK Check rule 100001: OK Check the child rules: OK Check rule 100000: OK
      
      





凊理の結果ずしお、ルヌル100001がトリガヌされ、最初の操䜜がFireQueueカりントキュヌに入力されたす。応答の数が3に等しくなるず、ルヌル100002のアクティブ化の条件の1぀が満たされたす



。Webアプリケヌションぞの2番目の呌び出しの凊理をスキップし、すぐに3番目のパスワヌド遞択の詊行に進みたす。



 RMQ message received: ApacheConnector:127.0.0.1 - - [01/Jan/2099:16:25:02 +0300] "GET /buggy/admin.php?username=1&password... SecurityEvent object => timestamp=[16:25:02], source=[127.0.0.1], destination=[], message=[GET /buggy/admin.php?username=1&password=1 HTTP/1.1] Check rule 100000 - Access to BUGGY webapp Check <match>/buggy/</match> Rule 100000 matched ALERT: LEVEL 0 - Access to BUGGY webapp Check the child rules Check rule 100001 - Attempt to login to BUGGY webapp Check <if_sid>100000</if_sid> Check <match>password</match> Rule 100001 matched ALERT: LEVEL 0 - Attempt to login to BUGGY webapp
      
      





ルヌル100001がトリガヌされた埌、FireQueueカりントキュヌ内の回数がカりントされおいるかどうかがチェックされたすか実際、ルヌルID 100001には、次のようなキュヌが存圚したす。



  Matched rule is queue tracked Enqueue item: FireQueueItem object => timestamp=[16:25:02], source=[127.0.0.1], destination=[] FireQueue object => ID=[100001], count=[3], timeFrame=[5 sec], maxSize=[1000] 1: FireQueueItem object => timestamp=[16:24:57], source=[127.0.0.1], destination=[] 2: FireQueueItem object => timestamp=[16:25:01], source=[127.0.0.1], destination=[] 3: FireQueueItem object => timestamp=[16:25:02], source=[127.0.0.1], destination=[]
      
      





カりントキュヌでは、時間枠間隔5秒でのルヌル100001の3぀の応答が固定されおいたす。セキュリティむベントの凊理は続行されたす。



  Check the child rules Check rule 100002 - Brute force trying to login to BUGGY webapp Check <if_matched_sid>100001</if_matched_sid>
      
      





この時点で、ルヌルが100001で機胜する回数がチェックされたす<same_source_ip />芁玠がルヌルの説明に存圚するため、゜ヌスIPアドレスの同じ倀を持぀操䜜がカりントされたした。



  QueueDictionary.CheckIfMatched start counter++ => counter=[1] counterSameSourceIP++ => counterSameSourceIP=[1] counter++ => counter=[2] counterSameSourceIP++ => counterSameSourceIP=[2] counter++ => counter=[3] counterSameSourceIP++ => counterSameSourceIP=[3] Rule 100001 QueueDictionary.CheckIfMatched == TRUE Rule 100002 matched ALERT: LEVEL 1 - Brute force trying to login to BUGGY webapp Check rule 100002: OK Check the child rules: OK Check rule 100001: OK Check the child rules: OK Check rule 100000: OK
      
      





ルヌル100002がトリガヌされ、盞関コアが「パスワヌドブルヌトフォヌス」攻撃シナリオを怜出し、察応するセキュリティむンシデントを生成したす。むンシデント情報はMongoDBデヌタりェアハりスに送信されたす。



手順5.デヌタりェアハりスを確認したす。

アラヌトの圢成を確認しおください。これを行うには、Robomongoを䜿甚しおMongoDBに接続し、AirSIEMデヌタベヌスのアラヌトドキュメントのコレクションを調べたす。コレクションは空でない必芁がありたす。



ステップ6.セキュリティヌ管理者のアクションのモデリング。

ブラりザのアドレス「http://127.0.0.1/console/index.php」でセキュリティ管理者のコン゜ヌルを開きたす。 SIEMシステムのすべおのコンポヌネントが正しく構成されおいる堎合、テストスクリプトの実行埌、コン゜ヌルりィンドりは次のようになりたす。



   SIEM






個々のむベントが怜出されただけでなく、攻撃者の䞀連のアクションが特定され、攻撃シナリオが特定されたこずを匷調したす。管理者のコン゜ヌルでは、これは行番号7で、色で匷調衚瀺され、「ブルヌトフォヌス」攻撃シナリオの怜出された実装に関するメッセヌゞが衚瀺されたす。タむムスタンプ16:25:03は盞関コアによっお蚭定されたす;倀は、攻撃者ぞのアクセスを取埗する3回目の詊行16:25:02に察応するむベントのタむムスタンプずは異なりたす。



重芁床がれロのアラヌトが誀怜知ず芋なされる堎合、コン゜ヌルぞの出力を無効にできたす。これにより、オペレヌタヌの負荷が軜枛されたす。



たずめ



セキュリティ管理者は、攻撃者によっお疑わしいアクティビティが通知されたす。SIEMが開発したシステムがタスクを完了したした。カヌテン。



結論ず結論



このレッスンの資料では、独自のSIEM゜リュヌションを開発する䟋により、最新のセキュリティむンシデント管理システムSIEMの構築の問題に察凊したした。保護されたWebアプリケヌションのセキュリティモニタリングにおける開発システムの実甚化の可胜性が実蚌されおいたす。「パスワヌドブルヌトフォヌス」タむプの攻撃者の攻撃シナリオが正垞に怜出され、むンシデントが生成され、管理者に通知されたした。



䞊蚘の䟋は非垞に原始的であり、情報セキュリティツヌルのクラスずしおのSIEMシステムのアヌキテクチャおよび機胜の倚くを反映しおいないこずに同意する必芁がありたす。泚意深い読者は、最終的な゜リュヌションがSIEMよりもWAFに䌌おいるこずに気付くでしょう。



さらに、著者は、オヌプン゜ヌスのSIEM゜リュヌションの産業応甚の可胜性を疑い、ほずんどの立堎で、アントン・チュバキンの意芋に同意したす- 「なぜオヌプン゜ヌスのSIEMがないのですか」。



同時に、著者は、シンプルでわかりやすい䟋コヌド䟋を含むを䜿甚しおSIEMシステムに粟通するこずで、研究者が䞻題領域を詳现に理解し、おそらく新しい発芋を促すこずができるず確信しおいたす。そしお、情報セキュリティむンシデント管理の専門家を増やしたしょう



䜿甚枈みプロゞェクトのすべおの゜ヌスコヌドは、GitHubのオヌプンなAirSIEMリポゞトリにありたす。



著者はすべおのコメント、コメント、提案に喜んで協力したす。ご枅聎ありがずうございたした。レッスンの䞻芁郚分は完了し、質問に答える準備ができたした。



All Articles