Red Hatの森若です。
RHEL には監査ログを取得する audit の仕組みがあります。 監査ログとは、主に各種のセキュリティ要件を満たすため、システムで発生する様々なイベントを検出して記録する仕組みです。
あらかじめ指定したファイルへのアクセス、システムコールの呼出し、コマンド実行、認証、認証の失敗、サービスの開始・終了など多数のイベントをログに保存できます。 もちろん無意味に大量のログを取得しても負荷がかかるだけですので、必要なものだけを取得するよう管理者がルールを設定します。
監査のために作られた仕組みですが、システムのトラブルシュートにも有用です。 たとえば「何らかのプロセス xx がファイル /fuga/hoge をたまに更新している。xxを発見したい」のようなケースで役立ちます。
audit機能概要
linux kernelには監査ログを取得するauditの仕組みがあります。
- システムコール呼出や、その成功・失敗、対象となるファイル、利用されたファイル名、SELinux コンテキストなどを条件として、あらかじめイベントを発生させる条件を auditctl で指定しておきます。
- 実際に該当するイベントがあると、kauditdにイベントが登録されます。
linux kernel内だけでイベントを取得するわけではなく、systemdやPAM、shadow-utilsなども連携してサービスのライフサイクルやユーザ認証・作成・削除などのイベントも収集します。
audit用のnetlinkでauditdやsystemd-journaldがイベントを受けとって監査ログを保存します。
- auditdのログから、付属するツールを使って各種のレポートを生成できます。
- audispdは、auditログの内容により関連するプログラムを実行できます。
- journalでは
journalctl _TRANSPORT=audit
とすることでauditログだけを表示することができます。
audit機能の難しいところ
auditを一般のシステム管理者が活用するには少しハードルがあります。 kernelのシステムコールという比較的低いレベルの知識が必要になる点です。 そのためkernelやシステムコールに全く馴染みがない状態で活用することは難しいです。
kernelやシステムコールに多少馴染みがあっても、ある目的のために 何を監視するとよいのかは一般に自明ではありません。 /usr/share/audit/sample-rules を見ると 各種のセキュリティ規格むけに作られたルールが集積されています。 ここを起点にして調べていくのがよいでしょう。
たとえば PCI DSS v3.1むけのルールである 30-pci-dss-v31.rules の中には 「ユーザが監査ログへアクセスしようとする」ことを記録するために以下のような設定があります。
## 10.2.3 Access to all audit trails. -a always,exit -F dir=/var/log/audit/ -F perm=r -F auid>=1000 -F auid!=unset -F key=10.2.3-access-audit-trail -a always,exit -F path=/usr/sbin/ausearch -F perm=x -F key=10.2.3-access-audit-trail -a always,exit -F path=/usr/sbin/aureport -F perm=x -F key=10.2.3-access-audit-trail -a always,exit -F path=/usr/sbin/aulast -F perm=x -F key=10.2.3-access-audit-trail -a always,exit -F path=/usr/sbin/aulastlogin -F perm=x -F key=10.2.3-access-audit-trail -a always,exit -F path=/usr/sbin/auvirt -F perm=x -F key=10.2.3-access-audit-trail
すこしキーワードを紹介します。なんとなく上のルールが読みとけるかと思います。 詳しくは auditctl の man page を参照してください。
キーワード | 意味 |
---|---|
always | システムコール開始時にaudit contextを保存する |
exit | システムコールが終了した時にイベントを記録するかの判定を行う |
dir, path | システムコール引数のディレクトリやパス |
perm | システムコールが必要とする権限 |
auid | 最初にログインした時のUID。(suなどをしても変更されない) |
key | ログのフィルタ用に記録する key |
/var/log/audit/ディレクトリへの読み込みアクセスや、audit関連のレポートを出力するコマンド実行のタイミングで "10.2.3-access-audit-trail" という キーワードつきで監査ログに記録するというルールです。
audit機能を利用するときの情報源
RHELで audit機能を利用する時には、以下ドキュメントを参照します。 この記事でとりあげなかった auditctl の利用方法や、ルールをシステムで永続的に利用するための augenrules についての説明があります。 関連する man pageもぜひ読みましょう。
RHEL ドキュメント 「セキュリティーの強化」内「システムの監査」 access.redhat.com