🙌

Defender for CloudのFIM(ファイル整合性監視)を試す

2023/05/01に公開

はじめに

AzureのセキュリティサービスであるDefender for Cloudの機能の一つに
FIM(File Integrity Mmonitoring:ファイル整合性監視)がある。
ファイルが変更されたことを検知、監視する仕組みである。
実際にセットアップして、どのように検知されるかを試してみる。
なお、この機能の利用にはDefender for Servers Plan 2が必要となる。

セットアップ

Azure Monitor AgentとLogAnalytics Agentのどちらを使うかでセットアップ方法が異なる。
ここでは、LogAnalytics Agentを使用する。

まず、Defender for Cloudのワークロード保護のページを開き、「ファイルの整合性の監視」をクリックする。
※Defender for CloudのページはUIが頻繁に変更されている気がするのであくまで参考(画面は2023/5時点)

Defender for Cloud

次に使用するLogAnalyticsワークスペースを選択する。
右端のアイコンで、「UPGRADE PLAN」と表示されているワークスペースはDefender for Serversが有効になっていないもの、
「ENABLE」と表示されているものはDefender for Serversが有効になっていて、FIMの機能が有効になっていないものである。
なお、すでに有効化済の場合は何も表示されなくなる。
FIMで監視したいサーバに導入済のLogAnalytics Agentが接続されているワークスペースをクリックする。

Defender for Cloud

FIMの機能を有効化する画面が表示されるので、有効にする。

Defender for Cloud

「ファイルの整合性の監視」ページに遷移する。

Defender for Cloud

右上にある「設定」を押すことで、ファイルの監視対象の設定を実施できる。
デフォルトで設定されている監視対象は以下に記載されている。
監視対象のデフォルト設定

また、独自に監視対象のファイルやフォルダを設定することもできる。
Defender for Cloud

検知結果の確認

検知のタイミングは即時ではなく、インベントリデータの収集頻度に依存する。
インベントリデータの収集頻度

Windowsレジストリの場合は50分、Windowsファイルの場合は30分、Linuxファイルの場合は約15分おきにインベントリデータが収集され、
そのタイミングで前回と差分があれば変更されたものとみなされ、検知される。

なお、ファイルが変更されたことは確認できるが、ファイルの中身がどのように変更されたかは確認できない。
Defender for Cloud

検知頻度の変更

Linuxの場合、「/etc/opt/microsoft/omsagent/<LogAnalytics WorkspaceID>/conf/omsagent.d/LinuxFileChangeTracking.conf」にコンフィグファイルが存在する。
run_intervalを変更することで、更新頻度を変更できる。

Windowsはどこで設定されているか不明。
「C:\Program Files\Microsoft Monitoring Agent\Agent\Health Service State\」あたりと思われる。

$ cat /etc/opt/microsoft/omsagent/<LogAnalytics WorkspaceID>/conf/omsagent.d/LinuxFileChangeTracking.conf

#This is auto-generated file
 <source>
   type exec
   tag oms.changetracking.file
   command ((which python2 > /dev/null 2>&1 && python2 /opt/microsoft/omsconfig/Scripts/PerformInventory.py --InMOF /etc/opt/microsoft/omsagent/conf/omsagent.d/LinuxFileChangeTracking.mof --OutXML /var/opt/microsoft/omsagent/tmp/LinuxFileChangeTracking.xml > /dev/null) ||        (which python3 > /dev/null 2>&1 && python3 /opt/microsoft/omsconfig/Scripts/python3/PerformInventory.py --InMOF /etc/opt/microsoft/omsagent/conf/omsagent.d/LinuxFileChangeTracking.mof --OutXML /var/opt/microsoft/omsagent/tmp/LinuxFileChangeTracking.xml > /dev/null))             && /opt/microsoft/omsagent/ruby/bin/ruby /opt/microsoft/omsagent/plugin/change_tracking_runner.rb /var/opt/microsoft/omsagent/tmp/LinuxFileChangeTracking.xml
   format json
   run_interval 900s
 </source>
 <filter oms.changetracking.file>
   type filter_changetracking
   # Force upload even if the data has not changed
   force_send_run_interval 24h
   log_level warn
 </filter>
 <match oms.changetracking.file>
   type out.oms.changetracking.file
   log_level info
   num_threads 5
   buffer_chunk_limit 5m
   buffer_type file
   buffer_path /var/opt/microsoft/omsagent/state/out.oms.changetracking.file*.buffer
   buffer_queue_limit 10
   buffer_queue_full_action drop_oldest_chunk
   flush_interval 20s
   retry_limit 6
   retry_wait 30s
   max_retry_wait 30m

 </match>

また、「/etc/opt/microsoft/omsagent/<LogAnalytics WorkspaceID>/conf/omsagent.d/LinuxFileChangeTracking.mof」に監視する対象が記録されている。
追加したhostsファイルに関する設定が以下のように確認できる。
Azureポータル上で設定した内容が正しくサーバに反映されているかどうかはこのファイルを確認すればよい。

~~(省略)~~
instance of MSFT_nxFileInventoryResource as $MSFT_FileInventoryResourceInstance19
{
    DestinationPath = "/etc/hosts";
    Recurse = False;
    UseSudo = True;
    Links = "Follow";
    Checksum = "Sha256";
    Type = "File";
    MaxContentsReturnable = 0;
    MaxOutputSize = 5000000;
    ResourceId = "[MSFT_nxFileInventoryResource]Inventory19";
    ModuleName = "nxFileInventory";
    ModuleVersion = "1.4";
};
~~(省略)~~

Discussion