クラウドエンジニアブログ

クエリとか詳しくないけど、Advanced Hunting を使ってみた

藤田 健

こんにちは。Microsoft 365 のデバイスセキュリティ関連の導入を担当している藤田です。

本記事では Microsoft のセキュリティ製品である、Microsoft Defender XDR (旧名称 : Microsoft 365 Defender) の機能をご紹介します。

Microsoft Defender XDR は以下の製品と連携し、これら製品が受け取ったアラートなどを統合し Microsoft 365 Defender ポータルから一元的に確認することができます。

  • Microsoft Defender for Endpoint
  • Microsoft Defender for Office 365
  • Microsoft Defender for Identity
  • Microsoft Defender for Cloud Apps
  • Microsoft Defender 脆弱性の管理
  • Microsoft Entra ID Protection
  • Microsoft Purview データ損失防止
  • Microsoft Defender for Cloud Apps アプリ ガバナンス

今回は、Microsoft Defender XDR の機能の中から Advanced Hunting と呼ばれる機能にフォーカスして紹介します。

本機能は Microsoft Defender ポータル (以降 Defender ポータル) やマイクロソフトの公開情報では「Advanced Hunting」、「高度な追及」、「高度な操作」など様々な表記がありますが、本記事では「Advanced Hunting」で統一し記載します。

Advanced Hunting はクエリベースで脅威を検査することができるツールです。Defender 製品群で検知したログやデータに対して検査をすることにより、既知の脅威と潜在的な脅威の両方を確認することが可能です。


Advanced Hunting とは

Advanced Hunting は冒頭でも紹介しましたが、クエリベースで脅威を検索することができるツールです。
検索の範囲は最大 30 日間のデータとなり、その期間内のデータから既知の脅威や、潜在的な脅威を確認することが可能です。
検索の方法には大きく分けて 2 つのモードが用意されています。

  • ガイド付きモード
  • 高度モード

これらモードの使い分けとしては、Kusto 照会言語 (以降 KQL ) を使用してクエリを作成するのに慣れている場合は、「高度モード」を使ってクエリを作成します。
一方で KQL でのクエリ作成に慣れていない場合や、クエリビルダーで直感的に作成したい場合は「ガイド付きモード」を利用してクエリを作成することができます。

また、他にもコミュニティクエリと呼ばれる、多様なクエリがあらかじめ用意されていて、それらを活用することでも Advance Hunting を利用することが可能です。
コミュニティクエリにはコードの先頭にコメントでどういったクエリであるかも説明されているものがほとんどなので、コミュニティクエリのサンプルから KQL の書き方を理解していくといった使い方もできるでしょう。

私自身は KQL や他のクエリなどをほとんど触ってこなかったので、初心者視点で使い方を紹介できればと思います。




ガイド付きモードを試してみる

それでは早速 Advanced Hunting を試していきます。
クエリを使って検索するためには、30 日間以内にデータがないとそもそも検索結果がでてこないため、
今回動作を確認した検証環境ではあらかじめアラートを上げて、下準備をしてあります。

本番環境であれば、いくつかのアラートが出力されているかと思いますが、動作確認のために検証環境などでお試しされたい方は、EICAR などを使って先にいくつかアラートを上げておくか、自分が検索したい内容が引っかかるアラートを上げておく必要があります。

管理ポータルへのアクセス、フィルターの作成準備

それでは早速、Defender ポータルから試していきましょう。
Defender ポータルへアクセスし、「追及」-「高度な追及」を選択します。



Advanced Hunting の画面が表示されます。



上記のような画面ではなく、直接クエリを書き込むような画面が表示されている場合は、「+」-「ビルダーでクエリを実行する」を選択すれば同じ画面が表示されます。


それでは早速ログの検索を始めていきたい所ですが、画面上に様々なフィルターが表示されていて、私は分かりづらいなと感じました……。
そういった場合はフィルターを切り替えてシンプルにしましょう。
以下の「切り替えてその他のフィルターと条件を表示します」のトグルをクリックすることで切り替えることができます。



切り替えると以下のようなシンプルな表示に変化します。




フィルター条件を設定して、デバイス情報を検索する

続いてフィルターに条件を指定して、実際に検索をかけてみましょう。
今回は ”デバイス情報” のフィルターを使い、条件として ”デバイス名” に ”desktop” が含まれることを設定します。


「フィルターを選択」をクリックし、「Device info」をクリックします。


「Device info」のプルダウンの中から、「DeviceName」をクリックします。



選択が終わると以下のように、フィルター条件が変化します。



続いて、フィルター条件を追加します。今回のフィルターはデバイス名で検索されるため、デバイス名に ”desktop が含まれる場合” としました。



これでフィルターの指定は完了です。続いてクエリの検索範囲を変更したい場合は以下の「過去 30 日」となっている箇所をクリックし、任意の期間に変更します。
今回は ”過去 30 日” とします。(※デフォルト値は ”7 日間” になっています。)



ここまで完了したら、「クエリを実行」をクリックすることで検索することができます。



検索を実行すると、下のタブが「結果」タブに自動で代わり検索結果が表示されます。



検索結果のレコードをクリックすることで、詳細を確認することも可能です。




詳細を見てみると、オンボードの状態や、OS バージョン、どのマシングループに含まれているかなどの情報も見ることができました。



フィルターと条件を設定し、クエリを実行することでこのように検索することができます。
フィルターに関しては直観的かと言われるとそうは言い切れないため使い勝手が良いとは言えませんが、0からクエリを書くよりは簡単に試せます。


続いてはアラートのログを検索してみます。




アラートログを検索する

続いてはアラートログを検索していきます。
※基本的には前記した内容と同じ手順になりますので、一部手順は割愛します。


フィルターを ”Alerts” の ”DeviceName” にし、条件は ”デバイス名に desktop を含む” 場合としています。


クエリの実行結果を見てみると、事前に実施しておいた、EICAR が検知された際のアラートが確認できました。



このような形で、検知したアラートについても検索することができます。
ここまで紹介した 2 パターンはどちらも DeviceName で検索するフィルターでしたが、
次は少し視点を変えたフィルターを紹介します。




デバイスへのログオンに失敗したログを検索する

ここまではデバイス情報やアラート情報に対してデバイス名を条件にして検索しましたが、
例えばデバイスへのログオンに失敗したログなどは検索できないのか探してみました。
※基本的には前記した内容と同じ手順になりますので、一部手順は割愛します。


フィルターの条件など探すこと数十分……
見つけたフィルターを使って試してみます。


フィルターを ”Logon events” の “EventType” にし、条件を ”DeviceLogonEvents” の “LogonFailed” にします。



クエリを実行すると、結果が表示されました。1つレコードの中身を見てみましょう。
以下のように、どのユーザーがログオンに失敗していて、どの IP アドレスからアクセスされたのかなどの情報まで表示されます。



このように、フィルター条件の探し方に慣れが必要な所感ですが、KQL がわからなくても、検索することができました!
続いては Tips を紹介します。




Tips : ガイド付きモードで作ったフィルターを KQL のコードで表示する方法

ここまで、ガイド付きモードでの利用方法について説明してきましたが、
ガイド付きモードで作った内容を KQL のコードで見るとどうなるのか、気になりませんか?


これを見る方法があります。ひとつ前のログオンに失敗したログをベースに説明します。


以下は前記したログオンに失敗したログを検索したフィルター条件です。
右上にある鉛筆マークをクリックすることで、この条件を KQL で確認することが可能です。



実際に鉛筆マークを押してみると、以下のようにコードの画面に遷移します。
こちらがログオンに失敗したログを検索しているクエリ文となります。



「ガイド付きモード」で作ったフィルター条件は、KQL で書くとどうなるかを確認し、学ぶことができます
こうして徐々に書き方を学んで「高度モード」でクエリを作成するなんてこともできるのではないでしょうか。




コミュニティクエリについて

続いては冒頭にも少し記載しました、コミュニティクエリについて紹介します。
コミュニティクエリは、クエリ作成の左側にあります。


カテゴリー分けされているため、カテゴリーの中から実施したいものを選んでいく使い方です。



今回はたまたま見つけた、ウイルスから保護したログを検索するコミュニティクエリを紹介します。
前記したアラートログの検索結果で表示された EICAR に関連するログが確認できると想定されます。


それでは早速コミュニティクエリを開いてみましょう。
「Protection events 」 - 「Antivirus detections」の「︙」をクリックし、「クエリエディターで開く」をクリックします。
※「クエリを実行」をクリックすることで、すぐに検索することも可能です。



タブに Antivirus detections が開かれ、クエリの内容を確認することが可能です。
ガイド付きモードで作成したクエリを KQL 形式で確認する方法を前記していますが、
コミュニティクエリのほうがより実践的なクエリとなっているため、KQL でクエリを作成するための参考にできます。



クエリを実行した結果は以下となります。
想定通り、EICAR でテスト検出した際のログを確認することができました。
Advanced Hunting を使いこなせれば、様々な角度から調査をすることができます。



コミュニティクエリには、他にも様々なクエリが用意されているため、細かく見ていけばある程度の調査クエリは揃っているので、まずコミュニティクエリを見て、無さそうだったら自分でクエリを作成するといった使い方も有効です。

最後に

Advanced Hunting に関する紹介は以上になります。
私自身、KQL やその他クエリ言語を使ったことがなかったので、ガイド付きモードの存在はとても助けられました!
ただし、ガイド付きモード自体の癖があり、使いづらさといったところも感じたので、早々に KQL を理解し、高度モードで使えるようになることが重要です。


今回は紹介しませんでしたが、作成したクエリを保存することも可能です。
また、カスタム検出ルールというものを作成し、定期的なクエリ実行やアラートの生成、応答アクションを実行させるといった使い方も可能ですのでこちらは機会があればご紹介します。

いかがだったでしょうか。
今回は私も初心者目線からという紹介だったので、これから Advanced Hunting を使ってみようと思っている方の、お役に立てたら幸いです。

弊社では Microsoft のセキュリティ製品の導入をはじめ、使ってみたいけどどの機能から使ってみたらよいのかわからない、PoC などミニマムな環境から始めてみたいといったご要望がある場合は「ゼロトラストセキュリティ スターターパック」でのご支援も可能ですので、お気軽にお問合せいただけますと幸いです。




関連ページ

侵入後の攻撃を検知する Microsoft の EDR - Microsoft Defender for Endpoint
ゼロトラストセキュリティを素早く実現 - ゼロトラストセキュリティ スターターパック

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録