Linux Auditのパーサーを書いていますが、標準に準拠していないように見える奇妙なケースに遭遇しました。
私のリファレンスは Red Hatのドキュメント です。
適切な監査レコードは次のようになります。
_type=USER_CMD msg=audit(1464013671.517:403): pid=3569 uid=0 auid=1000 ses=7 msg='cwd="/root" cmd=123 terminal=pts/1 res=success'
_
次のレコードを見てみましょう。
_type=DAEMON_START msg=audit(1464013652.147:626): auditd start, ver=2.4 format=raw kernel=3.16.0-4-586 auid=4294967295 pid=3557 res=success
_
ドキュメントには、name = value形式に適合しない_auditd start
_については何も記載されていません。
これは何ですか?どこで読むことができますか?
さらに、ドキュメントには次のように書かれています
各レコードは、空白またはコンマで区切られたいくつかの名前と値のペアで構成されます。
_auditd start, ver=2.4
_がコマンドとスペースで区切られていることがわかるので、明らかに正しくありません。
なぜそうなのですか?標準本当にはどこに記述されていますか?
次のレコードを見てみましょう。
_type=CWD msg=audit(1464013682.961:409): cwd="/root"
_
type=CWD msg=audit(1464013682.961:409):
と_cwd="/root"
_の間に2つのスペースがあります。それは意味がありません。実際、この動作は_type=CWD
_および_cwd="/root"
_のレコードでのみ観察されました。
なぜそうなのですか?
注:最近のDebianでこれらのログを生成しました。
だから私は問題のごく一部を解決しました-私はそれを見つけましたauditd start, ver=2.2
は有効です。しかし、ドキュメントを見つけることができませんでした。私が持っている唯一のドキュメントは、RedHatのマニュアルの例です。
例7.5。追加のaudit.logイベント
次のAuditイベントは、auditdデーモンの正常な開始を記録します。 verフィールドには、開始されたAuditデーモンのバージョンが表示されます。
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=500 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
次のAuditイベントは、UIDが500のユーザーがrootユーザーとしてログインしようとして失敗したことを記録します。
type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=500 auid=500 ses=1 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="root" exe="/bin/su" hostname=? addr=? terminal=pts/0 res=failed'
悲しいことに、これらは単なる例です。どこにも見つからないので、規格の実際のドキュメントを読みたいと思います。
私は公式メーリングリストにそれらの質問をしました( 私の質問への完全な回答を参照してください )。
これが私が学んだことです:
理由がわかりませんauditd start
存在しますが、これが私の質問に対するSteveGrubbの答えです。
Auditd start、userなどのすべての要素はどこにリストされていますか?コロン(タイプとmsg = audit(…)をフィールドから分離する)とレコードのフィールドの間で何が発生する可能性があるかを指定するドキュメントが見つかりません。
実際には何もありません。Libauparseがこれらすべてを処理するので、あなたはそうする必要はありません。翻訳を行いたい場合は、ログをauparseにフィードしてから、イベントを希望どおりにフォーマットすることができます。
基本的に、答えはauparseライブラリのどこかに隠されています。
一部のレコードがコンマと空白で区切られているのはなぜですか?例:
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=500 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
昔、レコードは人間が読める形式(笑わないでください)と機械で消費できる形式の両方を目的としていました。時間の経過とともに、これらは名前と値のペアに変換されてきました。あなたが上で言及したものでさえ修正されました。
これはすでにSteveGrubbによってパッチが適用されています。
パッチ: https://www.redhat.com/archives/linux-audit/2016-July/msg00086.html