3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OCI BaseDB のファイル変更を AIDE + rsyslogd + Logging Analytics + Monitoring で取得する

Last updated at Posted at 2023-07-17

※ 2023/07/30 編集
・概要に別記事へのリンクを追記
・3-2.ソースの作成 で指定する、Supplemental Filenameの正規表現が誤っていたため修正

概要

※aide.log の権限変更を行うことで、rsyslog, logrotateを利用しないで実施する方法を別の記事に記載しています。
OCI BaseDB のファイル変更を AIDE + Logging Analytics + Monitoring で取得する ( rsyslogd無し版 )

OCI BaseDB (Linux) の構成ファイル変更を検知するために、Linux 標準の AIDE (Advanced Intrusion Detection Environment) を使って監視してみる。

OCI の BaseDB では、デフォルトで AIDE がインストールされているため、その設定を流用する。
※Linuxコンピュートだとインストールされていないので、インストールが必要

なお、AIDEでは 結果が出力されるログが root 権限固定となってしまうため監視できなかった。
そのため、ローテート時の権限付与がやりやすい、rsyslogd 経由で AIDE のファイル変更検知ログを出力して監視を行った。

また、OCI Logging Anaytics の検索結果を OCI Monitoring でメトリックとして収集する、という情報があまりなかったため、AIDEの検知件数の Monitoring への連携もやってみた。

1.AIDE 設定

1-1.初期状態の確認

パッケージはデフォルトでインストールされている。
バージョンは 0.15 が入っている。( 2023/07現在 )
このあたりのバージョン情報を参照すると、少し古めのバージョンが入っている模様。

[root@dbvcn1 ~]# rpm -qa | grep aide
aide-0.15.1-13.0.1.el7.x86_64

1日1回チェック処理が動作している

[root@dbvcn1 cron.d]# cat /etc/cron.d/aide
# Generated by Chef. Changes will be overwritten.

28 02 * * * root  /usr/bin/systemctl restart aidescan.service
[root@dbvcn1 cron.d]# 

起動してみると、検知結果のログ(/var/log/aide/aide.log)が切り替わることが分かる。

[root@dbvcn1 cron.d]# /usr/bin/systemctl restart aidescan.service
[root@dbvcn1 cron.d]# 
-------
[root@dbvcn1 aide]# while :; do echo -n "$(date '+%Y/%m/%d %H:%M:%S') "; ls -l /var/log/aide/; sleep 5; done2023/07/17 07:10:39 total 8
-rw------- 1 root root 2390 Jul 17 06:51 aide.log
-rw------- 1 root root  168 Jul 13 02:28 aide.log.prev
2023/07/17 07:10:44 total 8
-rw------- 1 root root 2390 Jul 17 06:51 aide.log
-rw------- 1 root root  168 Jul 13 02:28 aide.log.prev
2023/07/17 07:10:49 total 8
-rw------- 1 root root 2390 Jul 17 06:51 aide.log
-rw------- 1 root root  168 Jul 13 02:28 aide.log.prev
2023/07/17 07:12:34 total 4
-rw------- 1 root root    0 Jul 17 07:10 aide.log ★切り替わった
-rw------- 1 root root 2390 Jul 17 06:51 aide.log.prev
2023/07/17 07:12:39 total 4
-rw------- 1 root root    0 Jul 17 07:10 aide.log
-rw------- 1 root root 2390 Jul 17 06:51 aide.log.prev

aide 自体の設定

cat /etc/aide.conf
----
< *** 省略 *** >
#p:      permissions
#i:      inode:
#n:      number of links
#u:      user
#g:      group
#s:      size
#b:      block count
#m:      mtime
#a:      atime
#c:      ctime
#S:      check for growing size
#acl:           Access Control Lists
#selinux        SELinux security context
#xattrs:        Extended file attributes
#md5:    md5 checksum
#sha1:   sha1 checksum
#sha256:        sha256 checksum
#sha512:        sha512 checksum
#rmd160: rmd160 checksum
#tiger:  tiger checksum
#n:       number of links
< *** 省略 *** >
# Only what PCI needs
# cannot use xattrs when FS do not support it
PCI = p+i+u+g+acl+xattrs+sha512
PCI_LOG = p+i+u+g+acl+xattrs+S+l+ftype+n
< *** 省略 *** >
# Core OS Rules
#
/etc            PCI
/bin            PCI
/sbin           PCI
/lib            PCI
/lib64          PCI
/usr/lib        PCI
/usr/lib64      PCI
/usr/bin        PCI
/usr/sbin       PCI
/boot           PCI
< *** 省略 *** >
# Logs that opc_logging writes
/var/log/kern.log$       LOGFILES
/var/log/local0.log$     LOGFILES
/var/log/local1.log$     LOGFILES
/var/log/local2.log$     LOGFILES
/var/log/local3.log$     LOGFILES
/var/log/local5.log$     LOGFILES
/var/log/local4.log$     LOGFILES
/var/log/local6.log$     LOGFILES
/var/log/local7.log$     LOGFILES
/var/log/news.log$       LOGFILES
/var/log/ftp.log$        LOGFILES
/var/log/daemon.log$     LOGFILES
/var/log/cron.log$       LOGFILES
/var/log/lpr.log$        LOGFILES
/var/log/user.log$       LOGFILES
/var/log/syslog.log$     LOGFILES
/var/log/uucp.log$       LOGFILES
/var/log/auth.log$       LOGFILES
/var/log/authpriv.log$   LOGFILES
/var/log/mail.log$       LOGFILES
/var/log/audit/audit.log$ LOGFILES

PCI や LOGFILES、PCI_LOG という検知の定義が設定されており、
/etc 等主要なディレクトリは、PCI による検知が設定されている。

■ デフォルト定義の比較

設定値 比較方法 NORMAL DIR PCI PCI_LOG LOGFILES
#p: permissions 権限変更
#i: inode: inode番号変更(移動など)
#u: user 所有者変更
#g: group グループ変更
#s: size サイズ変更
#acl: Access Control Lists acl変更
#xattrs: Extended file attributes 拡張ファイル属性変更
#sha512: sha512 checksum チェックサム変更
#n: number of links リンク数変更
#selinux SELinux security context selinux の acl変更
#S: check for growing size ファイルサイズの増加
#l: link name linkの名前変更
#ftype: type of file ファイルタイプ変更

※ /var/log/xxx を PCI_LOG で監視しようとすると、ローテートされてサイズが変わった場合に検知されてしまうため、LOGFILES のままが良さそう。

1-2.AIDE設定変更

このまま /var/log/aide.log を監視したかったが、
チェックの都度、新しく作成される aide.log の権限が root:640 になってしまい、LoggingAnalytics 用ユーザに権限を付与する方法が簡単では無さそうだったため、諦めた。

※ aide.log に情報を追記するための、 report_append=true は AIDE 0.17 から使える機能 だったため、0.15 で設定するとエラーになってしまった。

そのため、rsyslogd 経由でログ出力し、logrotate でローテート+権限付与することとした。

まずは、aide.conf の設定を変更し、rsyslogd 経由で出力する。

vi /etc/aide.conf
---
#report_url=syslog:LOG_LOCAL3
syslog_format=yes
report_url=file:@@{LOGDIR}/aide.log
---
★以下のように変更し、syslog 出力を有効化し、aide.log の出力を無効化
---
report_url=syslog:LOG_LOCAL3
syslog_format=yes
#report_url=file:@@{LOGDIR}/aide.log

1-3. rsyslogd 設定変更

rsyslogd は、LOCAL3 の出力設定がデフォルトで入っている。
/var/log/local3.log に出力されるため、そのまま使用する。

[root@dbvcn1 rsyslog.d]# cat /etc/rsyslog.d/opc.conf
# This file is managed by Chef. Local changes will be lost.
# Auto-populate the syslog config from the syslog_targets attribute
kern.*  -/var/log/kern.log
local0.*        -/var/log/local0.log
local1.*        -/var/log/local1.log
local2.*        -/var/log/local2.log
local3.*        -/var/log/local3.log
local5.*        -/var/log/local5.log
local4.*        -/var/log/local4.log
local6.*        -/var/log/local6.log
local7.*        -/var/log/local7.log
< *** 省略 *** >

この状態でチェックしてみると、検知されて、/var/log/local3.log に出力された。

[root@dbvcn1 rsyslog.d]# date;/usr/bin/systemctl restart aidescan.service;date
Mon Jul 17 16:17:25 JST 2023
Mon Jul 17 16:19:27 JST 2023
----
[root@dbvcn1 tmp]# tail -f /var/log/local3.log
2023-07-17T16:19:15.844161+09:00 dbvcn1 aide: AIDE 0.15.1 found differences between database and filesystem!!2023-07-17T16:19:15.844299+09:00 dbvcn1 aide: summary;total_number_of_files=51382;added_files=1;removed_files=0;changed_files=2
2023-07-17T16:19:16.137066+09:00 dbvcn1 aide: file=/var/log/local3.log; added
2023-07-17T16:19:16.538271+09:00 dbvcn1 aide: file=/etc/aide.conf;Inode_old=1052278;Inode_new=1052277;SHA512_old=qG5AZNnzrCuvnVn1STUQpZvMKFpPyN2tp01RiOeASoiOEckgpER9HdFH7vw0+Hyw3ZT6oyRhU9steMJwCCp0dw==;SHA512_new=QTP0VOHKRTEK58jsXPqTNX/m3Hdi/gyqsdqaw/X34CLBEp6ys0t1cpR5iKE6dECFGbGxZ5ANAbEnzbm5U1uCrw==
2023-07-17T16:19:16.539302+09:00 dbvcn1 aide: file=/etc/sysconfig/network-scripts/ifcfg-ens3;SHA512_old=hT7AxHZyuCkE24bMOUS91pLjyQBk7TiOfOPve9ar6S/zCVSLbKWaIrVG2yB6fmwFwWqnRfe6XQYpBl+a1XKVdQ==;SHA512_new=CUrBl3Y6uSP+4YTH4vxU77yfXQZb6pjYG4fl8T3GGXK+9zQII2rBJ1I9u3XNE0ue8oMM8E9I4nLjERCVSqb77A==

1-4. logrotated 設定変更

Logging Analytics 用ユーザで監視ができるように、rsyslogd によるローテート後のログ権限を、640 -> 644 に変更する

[root@dbvcn1 logrotate.d]# vi /etc/logrotate.d/opc
# This file is managed by Chef. Local changes will be lost.
# Auto-populate syslog files from the syslog_targets attribute
/var/log/kern.log
/var/log/local0.log
/var/log/local1.log
/var/log/local2.log
/var/log/local3.log
< *** 省略 *** >
/var/log/seam.log
{
        sharedscripts
        daily
        rotate 7
 
        dateext
        dateformat -%s
        create 0640 root logs  ★ここを変更する
        missingok
        compress
< *** 省略 *** >

権限のマスクを、以下のように変更する
        create 0644 root logs

ローテートしてみる。その他の read 権限が付与された。

/usr/sbin/logrotate -fv /etc/logrotate.conf
結果
[root@dbvcn1 ~]#  ls -ltr /var/log/local*
-rw-r-----  1 root logs      0 Jul 17 07:01 /var/log/local7.log
-rw-r-----  1 root logs      0 Jul 17 07:01 /var/log/local2.log
-rw-r-----  1 root logs   1813 Jul 17 08:56 /var/log/local0.log-1689551922.gz
-rw-r-----  1 root logs    559 Jul 17 09:17 /var/log/local0.log-1689553055.gz
-rw-r-----  1 root logs    316 Jul 17 16:08 /var/log/local4.log-1689578736.gz
-rw-r-----  1 root logs    641 Jul 17 16:19 /var/log/local3.log-1689578736.gz
-rw-r-----  1 root logs   6893 Jul 17 16:25 /var/log/local0.log-1689578736.gz
-rw-r--r--  1 root logs      0 Jul 17 16:25 /var/log/local4.log ★ 644 になっている
-rw-r--r--  1 root logs   3471 Jul 17 18:09 /var/log/local3.log ★ 644 になっている
-rw-r--r--  1 root logs 100030 Jul 17 20:50 /var/log/local0.log ★ 644 になっている

2.OCI Logging Analytics エージェントインストール

2-1. BaseDB にエージェントをインストール

OCI Logging AnalyticsでOracle Databaseの関連ログを取り込んで分析する
こちらのサイトを参考にさせて頂き、
RPM のダウンロード、およびインストールを行う。
※Logging Analytics 用プラグインのデプロイが必要だと思ったので、次の項番で実施。

2-2. プラグインのデプロイ

OCI WEB コンソールより、
管理エージェント ⇒ 対象のエージェントを選択 で詳細画面へ遷移
「プラグインのデプロイ」ボタンを押下し、Logging Analytics にチェックを入れて更新。
image.png

デプロイ完了して少し待ってから、「プラグインのデプロイ」を押下すると、チェックが付く
image.png

3.OCI Logging Analytics 監視設定

3-1.ロググループの作成

ログ・グループを作成する。
 管理 ⇒ ログ・グループ ⇒ 作成

3-2.パーサーの作成

AIDE 用のパーサーを作成する。
 管理 ⇒ パーサー ⇒ パーサーの作成 ⇒ 正規表現タイプ
image.png

実際に取得したサンプルログを貼り付けて次へ
image.png

検知した行を選択して次へ (図の例だと、1行目はサマリのため、2行目以降を選択する必要あり)
image.png

各フィールドを対象に、ドラッグして属性を入力する。

画面イメージ
image.png
※最後のフィールドは、オプションのチェックは「無し」なので注意

対象 ラジオボタン フィールド 正規表現 オプション
日付部分(緑?) フィールドとして TIME [^\s]+ チェック無し
ホスト名部分(オレンジ) フィールドとして Host Name (Server) [^\s]+ チェック無し
facilityっぽい aide 固定部分(青) リテラルテキストとして aide: チェック無し
file= 固定文字(緑) リテラルテキストとして file= チェックあり
ファイル名 セミコロンまで(黄色) フィールドとして Supplemental Filename [^;]* チェックあり
セミコロン(緑) リテラルテキストとして ; チェックあり
セミコロンより後ろの文字全て(オレンジ) フィールドとして Message .* チェック無し

最終的な正規表現

[^\s]+\s+([^\s]+)\s+([^\s]+)\s+(?:file=)?([^;]*)?(?:;)?(.*)

エラーになっていないことを確認して次へ
image.png

パーサー作成完了。

3-3.ソースの作成

作成したパーサーを使った、Linux Host 用のソースを作成する。
 管理 ⇒ ソース ⇒ ソースの作成

エンティティタイプは、Host(Linux) を選択する。
パーサーは、作成した AIDE 用のパーサーを選択。
含まれているパターンには、
 /var/log/local3.log
を指定する。
※ local3.log* を指定すると、ローテートされた gz ファイルも読み込んでしまうため、アスタリスクは不要
image.png

ソース作成後、「関連付けられていないエンティティ」に、インストールした Linux 用のエンティティが表示されているはずなので、選択して、「アソシエーションの追加」を押下。
image.png

アソシエーションの追加をする。
image.png

「ログエクスプローラで表示」を押下し、ログ・エクスプローラに遷移すると、AIDE ログが表示される。
image.png

3-4.自動検索用のグループ作成とポリシーの追加

Logging Analytics の検索結果を OCI Monitoring で自動収集するために、グループ作成とポリシーの追加を行う。

マニュアルはこちら
 保存済検索の問合せを自動的に実行するスケジュールの作成

グループと権限についての詳細はこちら
 スケジュール済タスクに対するすべての操作の実行をユーザーに許可

まず以下の動的グループを作成する。
※Logging Analytics の検索タスクを、モニタリング・サービスにメトリックを投稿できるようにする

ALL {resource.type='loganalyticsscheduledtask', resource.compartment.id='xxxx'}

次に、ポリシーの作成。
※ 動的グループが Logging Analytics の検索タスクを実行できるようにするポリシーを作成する
※ コンパートメントに絞っている
※ 1行目は自身が所属するグループを指定。それ以外は作成した動的グループを指定。

allow group <group name> to use loganalytics-scheduled-task in compartment <compartment_name>
allow dynamic-group <作成した動的グループ>  to use metrics in compartment <compartment_name>
allow dynamic-group <作成した動的グループ>  to read management-saved-search in compartment <compartment_name>
allow dynamic-group <作成した動的グループ>  to {LOG_ANALYTICS_QUERY_VIEW} in compartment <compartment_name>
allow dynamic-group <作成した動的グループ>  to {LOG_ANALYTICS_QUERYJOB_WORK_REQUEST_READ} in compartment <compartment_name>
allow dynamic-group <作成した動的グループ>  to READ loganalytics-log-group in compartment <compartment_name>
allow dynamic-group <作成した動的グループ>  to read compartments in compartment <compartment_name>

3-5.ログエクスプローラで検索条件の調整

検索条件を保存する前に、AIDE の抽出結果より不要なものを除く。

AIDE ではヘッダー行と集計行が出力されるため、検知された件数からは除外する必要がある。
ヘッダー行では、パースした結果 Supplemetal Filename に「AIDE」が格納されるため、「AIDE」の条件は検索から除外する。
図のように検索した結果の「AIDE」をクリックして、検索から除外 を押下すると、検索結果から除外される。
image.png

同様に、集計行は Supplemetal Filename から「summary」を除外する。

除外した結果のクエリ文字列はこうなる。
image.png

3-6.ログエクスプローラで検索条件の保存

調整した検索結果を保存して、Monitoring のカスタムメトリックを作成する。

ログエクスプローラの画面右上のアクションから、「名前を付けて保存」で検索条件を保存。
image.png

次に、再度画面右上のアクションから、「検出ツールの作成」でルールを作成。
ターゲット・サービスで、モニタリングを指定する。
メトリック・ネームスペースは、任意の文字列を指定できる。
間隔は1時間とした。
image.png

これで定期的に検索が実行され、モニタリングに反映される。

モニタリング ⇒ メトリック・エクスプローラにて、
作成したカスタムメトリックを表示して結果を確認する。
image.png

この結果を、アラームなどに連携することで、構成ファイルが変更された場合に検知する、という事ができるはず。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?