こんにちは、ひろかずです
SIEMでよくあるユースケースの「アーカイブログの分析」がAzure Sentinelでもできるの?って声が聞こえてきたので、一筆書きます
- 2020/1/17: 日付データの抽出の仕方を加筆
- 2020/1/17: ブックで、オリジナルのタイムスタンプを扱えることについて記述を追記
tl;dr的な何か
- Sentinelは、アーカイブデータを直接ロードすることができないので、logstashを使ってアーカイブデータをストリームとしてロードする
- カスタムログを設定し、Log Analytics AgentからSentinelに転送し、カスタムフィールドを設定して分析できるようにする
- Azure Sentinelは、基本的に取り込まれた時点のタイムスタンプ(TimeGenerated)を使うので、オリジナルのタイムスタンプは、自分で書いたクエリーの中でのみ利用できる
ざっくり構成
前提
- Azure Sentinelが有効化済みであり、ワークスペースが利用可能であること
- 分析するログをs3にアーカイブ済みであること
- インスタンスにs3に対する権限が適切に付与されていること
- インスタンスは、ubuntu-bionic-18.04-amd64-server-20191002 (ami-06d51e91cea0dac8d)を利用
工程
- logstashのをインストールし、必要なプラグインを設定する
- Log Analytics Agentをインストール
- カスタムログとカスタムフィールドの設定
- 分析してみる
参考ドキュメント
1. logstashをインストールし、プラグインを設定する
logstashをインストール
$ sudo apt-get install default-jre
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ sudo apt-get install apt-transport-https
$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
$ sudo apt-get update
$ sudo apt-get install logstash
必要なプラグインをインストール
- input-s3とoutput-fileプラグインをインストール
$ sudo apt-get install jruby
$ sudo gem install bundler
$ cd /usr/share/logstash
$ sudo bin/logstash-plugin install logstash-input-s3
$ sudo bin/logstash-plugin install logstash-output-file
コンフィグファイルを設定
$ sudo vi /etc/logstash/conf.d/squidlog.conf
- 以下のように編集して保存
input {
s3 {
region => "BACKET-REGION"
bucket => "BACKET-NAME"
prefix => "logs"
interval => "10"
additional_settings => {
force_path_style => true
follow_redirects => false
}
}
}
filter { }
output {
file {
path => "/var/log/logstash/access.log"
codec => line { format => "%{message}"}
}
}
logstashサービス起動設定と起動
$ sudo systemctl enable logstash
$ sudo systemctl start logstash
アーカイブしたログデータをロードする
- ロードする対象ファイルを保管用s3バケットから分析用s3バケットへコピーする
- 分析用s3バケットへコピーする時点で、ファイル圧縮は解除しておくこと
/var/log/logstash/access.log
が作成(更新)されることを確認/var/log/logstash/access.log
を手元にダウンロードしておく
2. Log Analytics Agentをインストール
- Azure上の[Sentinel]管理画面の[データコネクタ]から[syslog]を選択し、[コネクタページを開く]を選択
- [Install agent on a non-Azure Linux Machine]を選択して、[Azure 以外の Linux マシンのエージェントをダウンロードして
インストールする >]を選択 - [LINUX 用エージェントのインストールとオンボード]のコピーボタンを選択
- インスタンス上で以下コマンドを実行
$ sudo apt-get update -y
$ sudo apt-get install -y python-ctypes
$ sudo wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh && sh onboard_agent.sh -w xxxxxxxx -s xxxxxxxx -d opinsights.azure.com
- この部分は、[LINUX 用エージェントのインストールとオンボード]のコピーボタンで取得した内容を貼り付けること
3. カスタムログとカスタムフィールドの設定
カスタムログの設定
- Azure上の[Sentinel]管理画面の[データコネクタ]から[syslog]を選択し、[コネクタページを開く]を選択
- [ワークスペースの詳細設定の構成を開く >]を選択
- [Data]-[カスタムログ]を選択し、[追加+]を選択
- 手元にダウンロードしたログファイルをアップロードして、[次へ]を選択
- [改行]を選択し、レコードが正しく分割されることを確認して、[次へ]を選択
- [Linux]を選択し、ログ収集パスとして
/var/log/logstash/access.log
を設定して[+]ボタンを選択し、[次へ]を選択
- カスタムログの名前を付けて、[完了]を選択
アーカイブしたログデータをロードする(二度目)
- ロードする対象ファイルを保管用s3バケットから分析用s3バケットへコピーする
- 分析用s3バケットへコピーする時点で、ファイル圧縮は解除しておくこと
/var/log/logstash/access.log
が作成(更新)されることを確認
カスタムフィールドの設定
- Azure上の[Sentinel]管理画面の[データコネクタ]から[syslog]を選択し、[Log Analytics に移動する]を選択
- スキーマペインの[Custom Logs]を展開し、登録したカスタムログ名をクエリ欄に記入して、[実行]を選択
- 表示されたログを展開し、[…]を選択して、[フィールドを抽出]を選択
- RawData欄のフィールドとして抽出したい部分を範囲選択し、カスタムフィールド名を設定して、[展開]を選択
- 2020/1/17加筆
- タイムスタンプの場合は、フィールドの種類を[日付時刻(ISO8601)]を指定すること
- このログの場合、先頭部分がISO8601形式であるので、その部分を範囲選択する
- 抽出結果を確認し、期待通り抽出できていれば、[抽出条件の保存]を選択
- ロードされたログの量が乏しい場合、十分に抽出できない可能性があることに注意
4. 分析してみる
アーカイブしたログデータをロードする(三度目)
- ロードする対象ファイルを保管用s3バケットから分析用s3バケットへコピーする
- 分析用s3バケットへコピーする時点で、ファイル圧縮は解除しておくこと
/var/log/logstash/access.log
が作成(更新)されることを確認
カスタムフィールド(タイムスタンプ)を使ったクエリーを実行する
- 上記のようなクエリーを実行したところ、取り込み時刻(TimeGenerated)ではなく、カスタムフィールド(ORG_TIME_S3_CF)を条件にクエリーすることができました
最後に
- アーカイブされたログデータを取り込んで、オリジナルのタイムスタンプでの分析をすることはできました
- 一方で、Azure Sentinelのブックやハンティングテンプレートで用意されいる表示時刻変更UIは、取り込み時刻(TimeGenerated)を参照するのが現状です
- 2020/1/17加筆: ブックにおけるオリジナルのタイムスタンプを用いた分析について、別記事にて手法を紹介しております
今日はここまでです
お疲れさまでした