CentOS / RHELの監査ツールでLinuxシステム監査を学ぶ


システム監査とは、単に特定の対象システムの詳細な分析のことです。監査は、そのシステムを構成するさまざまな部分の調査と、さまざまな関心分野での重要な評価(および必要に応じてテスト)から成ります。

ある[ RHEL/CentOS のLinux監査システム上の重要なサブシステムの一つは auditd として知られています。システム上のセキュリティ関連情報を追跡する手段を実装します。システム上で発生しているイベントに関する膨大な量の情報を事前設定されたルールを使用して収集し、ログファイルに記録して監査試行を作成します。

日付、時刻、種類、イベントの結果などの情報を記録できます。イベントを引き起こしたユーザー、ファイル/データベースに加えられた修正。 PAM、LDAP、SSHなどのシステム認証メカニズムの使用。

Auditd は、監査設定ファイルへの変更や監査ログファイルへのアクセスの試み、システムとの間での情報のインポートまたはエクスポートの試み、およびその他のセキュリティ関連の情報もすべて登録します。

  1. It doesn’t require any external programs or processes to run on a system making it self-reliant.
  2. It is highly configurable therefore enables you to view any system operation(s) you want.
  3. It helps in detecting or analyzing potential compromises of a system.
  4. It is capable of working as an independent detection system.
  5. It can work with Intrusion Detection Systems to enable intrusion detection.
  6. It is a vital tool for auditing forensics investigations.

監査システムには、次の2つの主要コンポーネントがあります。

  • user-space applications and utilities/tools, and
  • kernel-side system call processing – this accepts system calls from user-space applications and passes them through three types of filters, namely: user, task, exit, or exclude.

最も重要な部分はユーザースペース監査デーモン( auditd )です。これは事前に設定されたルールに基づいてカーネルから情報を収集し、ログファイルにエントリを生成します。デフォルトのログは /var/log/audit/audit.log です。

また、 audispd audit dispatcherデーモン)は、 auditd とやり取りしてリアルタイムで実行したい他のプログラムにイベントを送信するイベントマルチプレクサです。イベント処理

監査システムから情報を管理および取得するためのユーザースペースツールは多数あります。

  • auditctl – a utility for controlling the kernel’s audit system.
  • ausearch – a utility for searching audit log files for specific events.
  • aureport – a utility for creating reports of recorded events.

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 はルールを使用してカーネルから特定の情報を収集します。これらのルールは基本的には /etc/audit/rules.d/audit.rules ファイル(CentOSでは)でルールを事前設定できる auditctl オプション(manページを参照)です。 6、 /etc/audit/audit.rules ファイルを使用して、起動時に読み込まれるようにします。

定義できる監査規則は3種類あります。

  • Control rules – these enable modification of the audit system’s behavior and a few of its configurations.
  • File system rules (also referred to as file watches) – enable auditing of access to a certain file or a directory.
  • System call rules – permits logging of system calls made by any program.

メイン設定ファイルを編集用に開きます。

# vi /etc/audit/rules.d/audit.rules

このファイルの最初のセクションには制御ルールが含まれている必要があります。それから中間のセクションにあなたの監査ルール(ファイル監視とシステムコールルール)を追加してください、そして最後に最後のセクションはコントロールルールでもある不変性設定を含みます。

-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

この構文を使用してファイル監視を定義できます。

-w /path/to/file/or/directory -p permissions -k key_name

どこでオプション:

  • w – is used to specify a file or directory to watch over.
  • p – permissions to be logged, r – for read access, w – for write access, x – for execute access and a – for change of file or director attribute.
  • -k – allows you to set an optional string for identifying which rule (or a set of rules) created a specific log entry.

これらの規則は監査がこれらの重要なシステムファイルに変更を加えるイベントを見ることを可能にします。

-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

以下のフォームを使用してシステムコールルールを設定できます。

-a action,filter -S system_call -F field=value -k key_name

ここで、

  • action – has two possible values: always or never.
  • filter – specifies kernel rule-matching filter (task, exit, user and exclude) is applied to the event.
  • system call – system call name.
  • field – specifies additional options such as architecture, PID, GID etc to modify rule.

これがあなたが定義できるいくつかのルールです。

-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

auditctlユーティリティを使用して監査ルールを設定する方法

または、次の例のように 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

すべての監査メッセージはデフォルトで /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を使用して監査ログファイルを照会する方法について説明します。監査ログから特定の情報を検索する方法について説明します。ご質問がある場合は、下記のコメント欄からご連絡ください。