本日の記事は、SOC アナリスト 飛山駿、小寺博和 の記事です。
---
前回の記事ではEDR(Endpoint Detection and Response)製品を使った分析における課題とSOCでの取り組みについて紹介しました。本記事では、EDR分析の効率化のためにSOCで開発したEDR-SIEMについて紹介します。
はじめに
EDRログの分析においては次のような課題が存在しています。
- アラート数、ログ量が多く分析にかかる労力が大きい
- 過検知が多い
- アラートのSeverityが実際の事象の危険度と一致しない場合がある
SOCではこれらの課題の解決策の一つとして、複数の EDR アラートや監査ログを組み合わせたロジックにより高い精度でインシデントを検出可能な EDR-SIEM の開発を行いました。
図1のように、EDR-SIEMによりEDRの分析において以下のような効果が期待できます。
- 分析が必要なアラート数の削減:すべての EDR アラートが EDR-SIEM の自動分析の対象となるため、単体では脅威判定が難しいアラートもロジックとして組み込むことでフィルタ可能
- 確度の高いアラートの提示: アナリストのナレッジに基づくロジックや攻撃フローを意識したロジックにより、個別の EDR ログと比較してより確度の高いアラートを提示
- より柔軟な検知ルールの作成: 正規表現によるマッチングやカスタム IOC では実現が難しい難読化スクリプトの解読機能(※) により、Encoded Powershell のような過検知の多いアラートを検知するロジックも高い精度で作成可能
※難読化スクリプトの解読機能: Base64 文字列のデコード、難読化処理でよく用いられる replace, 連結文字列等の解除等
図1 EDR-SIEM によるアラート数の削減と確度の高いアラートの提示
EDR-SIEM の概要
SOC ではアラートのフィルタリングによりアナリストによる分析が必要なEDRアラート数を削減していますが、それでも毎日数百件以上のアラートを分析する必要があります。そこで、単体では脅威と判断することが難しいアラートの削減によりアナリストの負担を軽減するために EDR-SIEM を開発しました。EDR-SIEM はその名の通り EDR 製品のアラートがリアルタイムに蓄積されるアラート DB を分析対象として、事前に定義された検知ロジックにより分析を行い、確度の高いアラートもしくはアラート群を検出するシステムです。
より確度の高いアラートを提示するため、検知ロジックはアラートのフィールド(ex.: シグネチャ名、コマンドライン)を対象とした完全一致、部分一致、正規表現や難読化された文字列に対するマッチングなどの条件を柔軟に組み合わせて定義できるように設計しています。これにより複数のアラートの組み合わせや、エンコード/難読化された文字列の中身を考慮した検知を可能にしています。
また、ロジックのマッチングは各クライアント端末のアラートについて行われます。通常は一定時間(10分程度)ごとに最新のアラート群とマッチングを行う Realtime 検索が行われますが、指定した期間のアラート群とマッチングを行う Manual 検索モードも用意しており、過去に遡ってのマッチングもできるようになっています。
アーキテクチャ
EDR-SIEM のアーキテクチャを図2に示します。EDR-SIEM は Kubernetes 上で動作するよう実装しており、複数のコンテナから構成されています。
図2 EDR-SIEM のアーキテクチャ
WebUI は Vue.js を使って構築し、GUI から検知ロジックの登録/閲覧/編集/削除や、登録済みロジックによるManual 検索ジョブの登録などを実行できます。これらの操作はバックエンドのAPIサーバを通してDBに送信されます。
また、Message Queue と Kubernetes の ReplicaSet を使うことでDBに登録された検索ジョブを非同期かつ並列に実行できるようにしています。今後、検知ロジック数や検索ジョブが増加した場合でも、ReplicaSet 数を増加させることでスケールアウトが可能です。定期的に SIEM-Manager によって検索ジョブが取得されて Message Queue に配信され、複製された SIEM-Core コンテナがそれぞれ購読して実行するという流れです。
検知ロジック
検知ロジックは、比較的単純な条件の羅列とそれらの条件を組み合わせる条件式によって記述できるよう設計しました。条件式により、複数の条件に合致するアラート集合の組み合わせや絞り込み方法を指定することで複雑な条件を表現できます。
条件式には基本的な論理演算や集合演算の他、アラートの出現順序やアラート集合に含まれるアラート数を指定する演算子を使用できるようにしました。これにより、複数のアラートの組み合わせが出現することを検知するロジックを簡単に記述できるだけでなく、複数のアラートのそれぞれについて、出現順序やアラート内容が複数の条件を満たすなどの、より複雑な条件を満たすアラート群を検知するロジックも記述できるようになっています。
また、条件の指定方法として、文字列の完全一致や部分一致、正規表現による指定の他、Base64 文字列や難読化された Powershell スクリプトの文字列を解読してマッチングを行うことができるよう実装しました。これにより図3のように、例えばコマンドラインに downloadstring が含まれるかどうかを条件とした場合、コマンドラインにエンコードされた文字列が含まれていれば自動的に復号し、復号後の文字列に downloadstring という文字列が含まれているかどうかを判定することができます。
図 3 エンコードされたスクリプトのマッチング
おわりに
本記事では EDR 分析の課題を解決するための取り組みとして、SOC で開発した EDR-SIEM を紹介しました。EDR-SIEM の導入により、これまで困難だった監査ログを組み合わせた分析により被害端末での攻撃者の調査行為のような事象を検知可能になることが期待されます。また、導入時点の検知ロジックによる分析でアナリストの分析対象アラート数を 10% 程度削減されることを見込んでいます。今後、新たな検知ロジックを作成していくことでアナリストの分析対象アラート数のさらなる削減が可能となります。
EDR-SIEM は Ver.1 として SOC で運用を開始しましたが、今後もネットワークログとの連携や検知ロジック定義の自動化など、様々な機能を追加・拡張していく予定です。