CentOS/RHEL 上の Auditd ツールを使用した Linux システム監査について学習する
システム監査とは、単に特定の対象システムの詳細な分析を指します。監査は、そのシステムを構成するさまざまな部分の検査と、さまざまな関心領域における重要な評価 (および必要に応じてテスト) で構成されます。
こちらもお読みください: Lynis – Linux システム用のセキュリティ監査およびスキャン ツール
RHEL/CentOS 上の重要なサブシステムの 1 つである Linux 監査システムは、一般にauditd として知られています。これは、システム上のセキュリティ関連情報を追跡する手段を実装します。事前設定されたルールを使用して、システム上で発生しているイベントに関する膨大な量の情報を収集し、それらをログ ファイルに記録することで、監査トライアルを作成します。
イベントの日時、種類、結果などの情報を記録できます。イベントを引き起こしたユーザー、ファイル/データベースに加えられた変更。 PAM、LDAP、SSH などのシステム認証メカニズムの使用。
また、Auditd は、監査構成ファイルに加えられた変更や監査ログ ファイルへのアクセスの試み、システムとの間で情報をインポートまたはエクスポートする試み、およびその他の多くのセキュリティ関連情報も登録します。
Linux 監査システムはなぜ重要ですか?
- システム上で外部プログラムやプロセスを実行する必要がなく、システムが自立します。
- 高度に構成可能であるため、必要なシステム操作を表示できます。
- これは、システムの潜在的な侵害の検出または分析に役立ちます。
- 独立した検出システムとして機能します。
- 侵入検知システムと連携して侵入検知を有効にすることができます。
- これは、フォレンジック調査を監査するための重要なツールです。
Linux 監査システムのコンポーネント
監査システムには、次の 2 つのコア コンポーネントがあります。
- ユーザー空間のアプリケーションとユーティリティ/ツール、および
- カーネル側のシステム コール処理 - ユーザー空間アプリケーションからのシステム コールを受け入れ、それらを 3 種類のフィルター、つまりユーザー、タスク、終了<、または除外します。
最も重要な部分はユーザー空間監査デーモン (auditd) です。このデーモンは、事前設定されたルールに基づいてカーネルから情報を収集し、ログ ファイルにエントリを生成します。デフォルトのログは /var/log/audit/audit.log です。
さらに、audispd (監査ディスパッチャ デーモン) は、auditd と対話し、リアルタイムで実行する他のプログラムにイベントを送信するイベント マルチプレクサです。イベント処理。
監査システムの情報を管理および取得するためのユーザースペースツールが多数あります。
- auditctl – カーネルの監査システムを制御するためのユーティリティ。
- ausearch – 特定のイベントの監査ログ ファイルを検索するユーティリティ。
- aureport – 記録されたイベントのレポートを作成するユーティリティ。
RHEL/CentOS/Fedora に監査ツールをインストールして構成する方法
まず、次のように rpm コマンドと grep ユーティリティを使用して、監査ツールがシステムにインストールされていることを確認してください。
rpm -qa | grep audit
上記のパッケージがインストールされていない場合は、root ユーザーとしてこのコマンドを実行してインストールします。
yum install audit
次に、auditd が有効で実行されているかどうかを確認し、ターミナルで以下の systemctl コマンドを発行します。
--------------- On CentOS/RHEL 7 ---------------
systemctl is-enabled auditd
systemctl status auditd
systemctl start auditd [Start]
systemctl enable auditd [Enable]
--------------- On CentOS/RHEL 6 ---------------
service auditd status
service auditd start [Start]
chkconfig auditd on [Enable]
次に、メイン設定ファイル /etc/audit/auditd.conf を使用して auditd を設定する方法を見ていきます。ここのパラメータを使用すると、ログ ファイルの場所、ログ ファイルの最大数、ログ形式、ディスクがいっぱいになった場合の対処方法、ログ ローテーション、その他多くのオプションの定義など、サービスの実行方法を制御できます。
vi /etc/audit/auditd.conf
以下のサンプル出力から、パラメータは一目瞭然です。
監査ルールを理解する
前述したように、auditd はルールを使用してカーネルから特定の情報を収集します。これらのルールは基本的に auditctl オプション (マニュアル ページを参照) であり、/etc/audit/rules.d/audit.rules ファイル (CentOS の場合) でルールを事前設定できます。 6、/etc/audit/audit.rules ファイルを使用して、起動時にロードされるようにします。
定義できる監査ルールは 3 種類あります。
- 制御ルール – これらにより、監査システムの動作とその構成の一部を変更できます。
- ファイル システム ルール (ファイル監視とも呼ばれます) – 特定のファイルまたはディレクトリへのアクセスの監査を有効にします。
- システム コール ルール – 任意のプログラムによって行われたシステム コールのログを許可します。
ここで、メイン設定ファイルを開いて編集します。
vi /etc/audit/rules.d/audit.rules
このファイルの最初のセクションには制御ルールが含まれている必要があることに注意してください。次に、中央のセクションに監査ルール (ファイル監視とシステム コール ルール) を追加し、最後のセクションには制御ルールでもある不変設定が含まれています。
Auditd 制御ルールの例
-D #removes all previous rules
-b 3074 #define buffer size
-f 4 #panic on failure
-r 120 #create at most 120 audit messages per second
Auditd ファイル システム ルールの例
次の構文を使用してファイル監視を定義できます。
-w /path/to/file/or/directory -p permissions -k key_name
オプションの場合:
- w – 監視するファイルまたはディレクトリを指定するために使用されます。
- p – ログに記録する権限、r – 読み取りアクセスの場合、w – 書き込みアクセスの場合、x –アクセスの実行と a – ファイルまたはディレクター属性の変更用。
- -k – どのルール (またはルールのセット) が特定のログ エントリを作成したかを識別するためのオプションの文字列を設定できます。
これらのルールにより、監査でこれらの重要なシステム ファイルに変更を加えるイベントを監視できるようになります。
-w /etc/passwd -p wa -k passwd_changes
-w /etc/group -p wa -k group_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes
Auditd システムコールルールの例
以下のフォームを使用してシステムコールルールを設定できます。
-a action,filter -S system_call -F field=value -k key_name
どこ :
- アクション – 可能な値は 2 つあります: 常にまたは決してなし。
- フィルター – カーネル ルール一致フィルター (タスク、終了、ユーザー、および除外) がイベントに適用されることを指定します。
- システム コール – システム コール名。
- フィールド – ルールを変更するためのアーキテクチャ、PID、GID などの追加オプションを指定します。
定義できるルールをいくつか示します。
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S sethostname -S setdomainname -k system_locale
次に、最後にファイルの最後に不変設定を追加します。次に例を示します。
-e 1 #enable auditing
-e 2 #make the configuration immutable -- reboot is required to change audit rules
Auditd ルール設定ファイルのサンプル
Auditctl ユーティリティを使用して Auditd ルールを設定する方法
または、次の例のように auditctl を使用して、実行中にオプションを auditd に送信します。これらのコマンドは、構成ファイル内のルールをオーバーライドできます。
現在ロードされているすべての監査ルールをリストするには、-l
フラグを渡します。
auditctl -l
次に、いくつかのルールを追加してみます。
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/group -p wa -k group_changes
auditctl -w /etc/sudoers -p wa -k sudoers_changes
auditctl -l
Auditd ログ ファイルについて
すべての監査メッセージは、デフォルトで /var/log/audit/audit.log ファイルに記録されます。ログ エントリの形式を理解するために、ルールをロードし、ルールに一致するイベントの後に生成されたログ エントリを確認します。
秘密のバックアップ ディレクトリがあると仮定すると、この監査ルールは、このディレクトリへのアクセスまたは変更の試みをログに記録します。
auditctl -w /backups/secret_files/ -p rwa -k secret_backup
ここで、別のシステム アカウントを使用して、上記のディレクトリに移動し、ls コマンドを実行してみます。
cd /backups/secret_files/
ls
ログエントリは次のようになります。
上記のイベントは 3 種類の監査レコードで構成されます。 1 つ目はtype=SYSCALL です。
type=SYSCALL msg=audit(1505784331.849:444): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=8ad5c0 a2=90800 a3=0 items=1 ppid=2191 pid=2680 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts1 ses=3 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="secret_backup"
2 つ目はtype=CWDです。
type=CWD msg=audit(1505784331.849:444): cwd="/backups/secret_files"
そして最後のものはtype=PATHです:
type=PATH msg=audit(1505784331.849:444): item=0 name="." inode=261635 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:default_t:s0 objtype=NORMAL
すべてのイベント フィールド (msg、arch、ses など) とその意味の完全なリストは、監査システム リファレンスで見つけることができます。
それは今のところすべてです。次の記事では、ausearch を使用して監査ログ ファイルにクエリを実行する方法について説明します。監査ログから特定の情報を検索する方法について説明します。ご質問がございましたら、以下のコメント欄からお問い合わせください。