NFLabs. エンジニアブログ

セキュリティやソフトウェア開発に関する情報を発信する技術者向けのブログです。

Elastic の EDR を使ってみた

こんにちは、NFLabs. ソリューション事業部の saika です。この記事は NFLaboratories Advent Calendar 2022 の7日目の記事です。

はじめに

近年、Elastic のセキュリティ領域における進化には目覚ましいものがあります。今回は Elastic の EDR である Elastic Defend というものを少し触ってみたのでご紹介させてください。有償の機能もあるので一部機能だけのご紹介となること、また筆者に EDR の実運用経験がないため運用という視点がかけてること、ご承知いただければと思います。

Elastic には Elastic Agent というホスト上で稼働し様々なログやメトリクスを収集するエージェントツールがあります。Elastic Agent は監視対象のシステムに合わせて Integration と呼ばれる拡張機能を追加することで真価を発揮します。現時点でおよそ 300 を超える Integration がありますが、サクッと一覧を確認したい方は Elastic 公式のデモクラスタにアクセスしてみることをおすすめします。

ここからが本題ですが、Elastic Defend とは Integration の一つです。これと Elastic Security の他の機能を組み合わせると、脅威の保護/検知から対応まで Kibana 上で完結させることができます。本記事は、Elastic Defend を中心として Elastic Security をいろいろ触ってみた共有記事となっております。なお、検証に利用した Elastic のバージョンは 8.5.2 です。

触ってみる

準備

Elastic + Kibana + Fleet Server の構築については割愛します。

Elastic Agent のインストール

まずは監視対象の Windows 端末に Elastic Agent をインストールします。左のメインメニューの Management -> Fleet から Add agent を押下します。

名前を設定して Policy を作成するとインストール用のコマンドが表示されるので Windows 端末上で実行してインストールします。

Elastic Defend の追加

まずは、Windows 端末のエージェントにアサインされてる Policy に Elastic Defend の Integration を追加します。Policy から Elastic Defend の設定画面を確認します。Trusted Application の設定や、どういうログを収集するかなどの設定ができます。また、Ransomware/Memory Threat/Malicious Behavior などの各種保護機能の設定ができますが、これらは有償ライセンスがないと有効にできないので今回は検証しません。今回は、Register as antivirus の設定だけ有効にして、あとはデフォルト設定で検証します。これにより、Windows Defender の代わりに Elastic security が Windows の保護機能として有効になります。

収集したログの確認

Elastic Defend を追加することで、Process/File/Registry/Network などの各種ログが収集されるようになりました。Security -> Explorer -> Hosts から、アラートも含めてログを一覧することができます。

ログのパネルに表示されている立方体のアイコンをクリックすると Analyzer を開くことができます。

プロセスの親子関係や、通信を発生させてるのかなどが一目でわかるので便利です。すでに終了したプロセスか、現在も生きているプロセスなのか見分けがつくのもいいですね。

Osquery を使ってみる

次に Osquery を使ってみます。Osquery とは SQL ライクなコマンドで OS の状態を取得できるオープンソースツールです。「Osquery Manager」の Integration を追加することで、Elastic Agent をデプロイしているすべての端末に対して問い合わせができるようになります。

Integration を追加すると左のメインメニューに OSquery が追加されます。New Live Query からクエリをたたくことができます。

プロセスや、ファイル、レジストリキーなども検索できるので、例えば特定の端末から怪しい痕跡が見つかったときに、管理下の他の端末に対して同様の痕跡がないか一斉に検索をかけることができ非常に有用です。

アラートをあげてみる

最初に Security -> Manage -> Rules より Manage rules を押下し、elastic の prebuilt のルールをロードします。とりあえず EICAR テストファイルをダウンロードしてみます。

無事にアラートが上がりました。ちなみに、Protection レベルは Detect/Prevent の二つから選ぶことができ、Detect の場合はホストからのファイルの削除は行われずにアラートのみが上がります。

独自のルールを作成する

Security -> Manage -> Rules -> Create new rule から独自のルールが作成可能です。ルールのタイプは全部で5種類あります。

タイプ 概要
Custom Query 普段 Kibana で検索をするときに使っている KQL(Kibana Query Language)で記述するルール。検索に一致するログがあればアラートが上がる。
Machine Learning アノマリ検知など(有償ライセンスが必要)
Threshold 検索クエリに一致するログが一定のしきい値を超えた場合にアラートを上げる
Event Correlation EQL(Event Query Language)でルールを記述する。複数の条件を順序付きで記述でき、それらの条件に一致するログがシーケンシャルに発生した際にアラートを上げる
Indicator Match インジケータを格納したインデックスを用意し、それとマッチするログがあればアラートを上げる

ここでは Event Correlation と Indicator Match を紹介します。

Event Correlation

Event Correlation では EQL でルールを記述します。EQL の詳細な記法についてはhttps://www.elastic.co/guide/en/elasticsearch/reference/current/eql-syntax.htmlを参照していただくこととして、ここでは一つだけ例示して簡単に説明します。

sequence by process.pid with maxspan=5m
  [ process where (process.name == "cmd.exe" and event.action == "start") ]
  [ file where file.name == "hoge.txt" ]

EQL では sequence ブロックで複数の条件を時系列的に定義できます。maxspan句でマッチをかける最大の期間を設定することができるほか、by句で指定したフィールドが同じ値を持つものについてマッチをかけることができます。よって上のルールは「cmd.exe という名前を持つプロセスがスタートしてから5分以内に hoge.txt というファイルを操作した」という条件になります。

実際に作成したルールが↑です。hoge.txt ファイルを作成して cmd.exe より削除したところ、無事にアラートが上がりました。

Indicator Matching

Indicator Match の検証のためにまずはサンプルのインジケータを格納したインデックスを作成します。

PUT /sample-ioc-001
{
  "mappings": {
    "properties": {
      "ip_addr": {
        "type": "ip"
      },
      "@timestamp": {
        "type": "date"
      }
    }
  }
}

PUT /sample-ioc-001/_doc/1
{
  "ip_addr": "93.184.216.34",
  "@timestamp": "2022-12-01T00:00:00"
}

Indicator Match に使用するインデックスには、@timestamp のフィールドが必須なことに注意します。

インデックスが準備できたらルールを作成します。

照合対象のログのフィールド destination.ip と、インジケータのフィールド ip_addr を指定してルールを作成します。

アラートが上がりました🎉

その他の機能について

端末の隔離やプロセスの停止などの操作も Kibana から可能です。ただしこれは有償ライセンスの機能なので今回は検証できませんでした。また、これらの機能は、Endpoint management API として提供されていますが、このAPIも有償ライセンスが必要な他、ライセンスのレベルによって使用できるAPIに差異があったので少し注意が必要かもしれません。詳細はEndpoint management API | Elastic Security Solution [master] | Elastic をご参照ください。

最後に

今回は Elastic Defend を中心として Elastic Security の紹介をさせていただきました。今回扱った範囲は Elastic Security のごく一部の範囲でありますが、無償でもこれだけの機能が使用できるのは驚きです。個人的にはプロセスダンプやエンドポイントからのファイルの取得機能などがあれば嬉しいな~と思いました。今後の進化に期待ですね!Elastic は構築もエージェントの導入も簡単なのでみなさん是非とも使ってみてください!