こんにちは、ひろかずです。
Microsoft Defender for Endpoint(以下、MDE)稼働中の環境で、Microsoft Defender AntiVirus(以下、MDAV)がパッシブモードになったことを検知したいという声が聞こえてきたので一筆書きます。
tl;dr的な何か
- MDE稼働中の状態であれば、Advanced Huntingを用いてMDAVの動作モードを確認するクエリーが既定で用意されている
- 既定のクエリーに一手間加えることで、クエリーを定期実行し、検出時にアラートを発することが可能
- MDEをブロックモードで動作させない場合、MDAVがパッシブモードになることは、MDEの保護機能が動作しないことを意味する
参考ドキュメント
ざっくり構成
工程
- 事前準備
- 既定のクエリーを基にアラートルールを作成
- 動作確認
前提条件
- Microsoft Defender Security Centerのテナントが構成済みであること
- Microsoft Defender Security CenterのAdvanced Huntingを利用可能な権限を有していること
- 必要に応じてMicrosoft Defender Security CenterのAdvanced featuresの設定変更が可能な権限を有していること
- 一台以上のWindows PCにMDEをオンボードしており、Microsoft Defender Security Centerにテレメトリを送信している状態であること
- MDEを稼働しているWindows PCに、サードパーティのアンチマルウェア製品を導入できる権限を有していること
1. 事前準備
1-1. 端末側の確認
- サードパーティのアンチマルウェア製品を端末にインストールし、セキュリティプロバイダが以下のような状態になっていることを確認
- 今回はサードパーティのアンチマルウェア製品として、ウィルスバスター クラウドを用いました
- [Windows セキュリティの設定]を検索 > [ウイルスと脅威の防止] > [プロバイダーの管理]を選択
1-2. Microsoft Defender Security Centerの確認
- Microsoft Defender Security Centerにログインし、[Settings] > [Acbanced features]を選択
- [Enable EDR in block mode]がOFFになっていることを確認する
2. 既定のクエリーを基にアラートルールを作成
- Microsoft Defender Security CenterのAdvanced Hunting画面を開き、[Queries] > [Community] > [General queries] > [MD AV Signature and Platform Version]を選択
- クエリーを以下のように修正
let avmodetable = DeviceTvmSecureConfigurationAssessment
| where ConfigurationId == "scid-2010" and isnotnull(Context)
| extend avdata=parsejson(Context)
| extend AVMode = iif(tostring(avdata[0][0]) == '0', 'Active' , iif(tostring(avdata[0][0]) == '1', 'Passive' ,iif(tostring(avdata[0][0]) == '4', 'EDR Blocked' ,'Unknown')))
| project DeviceId, AVMode;
DeviceTvmSecureConfigurationAssessment
| where ConfigurationId == "scid-2011" and isnotnull(Context)
| extend avdata=parsejson(Context)
| extend AVSigVersion = tostring(avdata[0][0])
| extend AVEngineVersion = tostring(avdata[0][1])
| extend AVSigLastUpdateTime = tostring(avdata[0][2])
| project DeviceId, DeviceName, OSPlatform, AVSigVersion, AVEngineVersion, AVSigLastUpdateTime, IsCompliant, IsApplicable
| join avmodetable on DeviceId
| join DeviceInfo on DeviceId // 追加行
| where Timestamp > ago(1h) // 追加行
| project-away DeviceId1
| where AVMode == "Passive" // 追加行
- [Create detection rule]を選択
- [Alert details]として、以下のように設定
- [Actions]には特に設定しない
- [Scope]として、[All devices]を選択
- 作成すると、画面下の[Custom detections]に作成したクエリーが登録されます
3. 動作確認
- 1時間毎の定期実行であるため、検出されるのを待ちます
- 事前準備の状態になって、12時間を経過していない場合、動作モードが切り替わっていないかもしれません
- 検出すると、以下のようなメールが届きました
- インシデントを開くとこのように表示されています
- 期待通り、パッシブモードになった端末を作成した検知ルールに基づいてアラートすることができました。
おわりに
- Advanced Huntingのクエリー結果をアラートにするにはTimestampとDeviceID、Report IDが必要です
- Threat & Vulnerability Management系のスキーマにはTimestampとReport IDがありませんので、DeviceInfo辺りをJoinすると良いんじゃないかと思いました
- 特定のアプリケーションがインストールされたことををアラートにするなどの応用もできそうですね
今日はここまでです。
お疲れ様でした。