guidugli.audit
Ansibleロール: 監査
RHEL/CentOS、Fedora、Debian/Ubuntuに監査をインストールおよび設定するためのAnsibleロールです。
デフォルトのルールは、CIS RedHat/Ubuntu/Debianベンチマークに基づいており、このGitHubリポジトリ(https://github.com/Neo23x0/auditd)も参照しています。
免責事項: 私はセキュリティの専門家ではなく、このロールを使用する前に監査の仕組みや設定されたルールについて学ぶべきです。サーバーのセキュリティはあなたの責任です!
要件
物理マシンまたはハイパーバイザー仮想化で動作するオペレーティングシステム。コンテナ化されたシステムでは、通常、ホストシステム上でのみ1つのauditdプロセスが実行されます。このロールは、コンテナ上でauditdデーモンを起動しようとしません。
ロール変数
使用可能な変数は以下に示されており、デフォルト値も記載されています(defaults/main.yml
を参照):
audit_local_events: true
この「はい/いいえ」キーワードは、ローカルイベントを含めるかどうかを指定します。通常はローカルイベントが必要なので、デフォルト値は「はい」となっています。ネットワークからのみイベントを集約したい場合は、これを「いいえ」に設定します。
#audit_log_file: /var/log/audit/audit.log
このキーワードは、監査レコードが保存されるログファイルの完全なパス名を指定します。このファイルは通常のファイルでなければなりません。
audit_write_logs: true
この「はい/いいえ」キーワードは、ディスクにログを書き込むかどうかを決定します。通常はこれが必要なので、デフォルトは「はい」となっています。
audit_log_format: ENRICHED
ログフォーマットは、情報がディスクにどのように保存されるかを説明します。選択肢は2つ:生データと拡張データ。
audit_log_group: root
このキーワードは、ログファイルの権限に適用されるグループを指定します。デフォルトは「root」です。グループ名は数値または名称で指定できます。
audit_priority_boost: 4
これは非負の数で、auditデーモンがどれだけ優先度を上げるかを指示します。デフォルトは4で、変更しない場合は0です。
audit_flush: INCREMENTAL_ASYNC
有効な値はnone、incremental、incremental_async、data、syncがあります。
audit_freq: 50
これは非負の数で、auditデーモンが明示的なフラッシュをディスクに書き込む前に書き込むレコードの数を指定します。この値は、フラッシュキーワードがincrementalまたはincremental_asyncに設定されているときのみ有効です。
audit_num_logs: 5
このキーワードは、max_log_file_actionとしてrotateが指定された場合に保持するログファイルの数を指定します。数が< 2の場合、ログはローテートされません。この数は999以下でなければなりません。
audit_name_format: NONE
このオプションは、コンピュータノード名が監査イベントストリームにどのように挿入されるかを制御します。選択肢はnone、hostname、fqd、numeric、userです。noneは、監査イベントにコンピュータ名が挿入されないことを意味します。
#audit_name: mydomain
これは、name_formatオプションがuserの場合にマシンを識別するために管理者が定義した文字列です。
audit_max_log_file: 256
このキーワードは、最大ファイルサイズ(メガバイト)を指定します。この制限に達すると、設定可能なアクションがトリガーされます。
audit_max_log_file_action: keep_logs
このパラメータは、システムが最大ファイルサイズ制限に達したときに実行するアクションを指定します。有効な値はignore、syslog、suspend、rotate、keep_logsです。
audit_verify_email: true
このオプションは、action_mail_acctに指定されたメールアドレスのドメイン名が解決できるかどうかを確認します。このオプションはaction_mail_acctの前に指定する必要があります。そうしないと、デフォルトの「はい」が使用されます。
audit_action_mail_acct: root
このオプションには有効なメールアドレスまたはエイリアスを含める必要があります。デフォルトのアドレスは「root」です。メールアドレスがマシンにローカルでない場合、マシンとネットワークにメールを正しく設定していることを確認する必要があります。また、このオプションは、/usr/lib/sendmailがマシンに存在することを要求します。
audit_space_left: 75
ログファイルを含むファイルシステムの空き領域がこの値を下回ると、auditデーモンはspace_left_actionで指定されたアクションを取ります。space_leftの値が整数として指定されている場合、それはメガバイト(MiB)の絶対サイズとして解釈されます。1から99の範囲の数字がパーセント記号(例: 5%)の後に付けられた場合、auditデーモンはlog_fileを含むファイルシステムのサイズに基づいて絶対サイズを計算します。
audit_space_left_action: email
このパラメータは、システムがディスクスペースが不足し始めたときに実行するアクションを指定します。有効な値はignore、syslog、rotate、email、exec、suspend、single、haltです。
audit_admin_space_left: 50
これはメガバイト単位の数値で、システムがディスクスペースが不足し始めたときにauditデーモンに実行するアクションを指示します。これは、ディスクスペースがなくなる前の最後のチャンスと見なされるべきです。
audit_admin_space_left_action: suspend
このパラメータは、システムがディスクスペースが不足しているときにどのアクションを取るべきかを指定します。有効な値はignore、syslog、rotate、email、exec、suspend、single、haltです。
audit_disk_full_action: SUSPEND
このパラメータは、ログファイルが書き込まれているパーティションがいっぱいになったときに実行するアクションを指定します。有効な値はignore、syslog、rotate、exec、suspend、single、haltです。
audit_disk_error_action: SUSPEND
このパラメータは、監査イベントをディスクに書き込む際やログをローテートする際にエラーが発生したときに必要なアクションを指定します。有効な値はignore、syslog、exec、suspend、single、haltです。
#audit_tcp_listen_port: 60
これは1から65535の範囲の数値で、指定されるとauditdはリモートシステムからの監査レコードのために対応するTCPポートで待機します。auditデーモンはtcp_wrappersとリンクされる場合があります。アクセス制御はhosts.allowおよびdenyファイルで制御することができます。systemdベースのOSにデプロイされている場合、「After」ディレクティブを調整する必要があります。
#audit_tcp_listen_queue: 5
これは、どれだけの保留中(要求されたが承認されていない)接続が許可されるかを示す数値です。デフォルトは5です。この値が小さすぎると、電源障害後に多数のホストが同時に起動した場合に接続が拒否される可能性があります。この設定は集約サーバー専用であり、リモートサーバーにログを記録するクライアントはこの行をコメントアウトしておくべきです。
#audit_tcp_max_per_addr: 1
これは、1つのIPアドレスから許可される同時接続の数を示す数値です。デフォルトは1で、最大は1024です。この値が大きすぎると、ログサーバーに対するサービス拒否攻撃が可能になるかもしれません。
audit_use_libwrap: true
この設定は、tcp_wrappersを使用して許可されたマシンからの接続試行を判断するかどうかを決定します。
#audit_tcp_client_ports: 1024-65535
このパラメータは、単一の数値またはダッシュで区切られた2つの数値(スペースは許可されません)で指定できます。どのクライアントポートが着信接続に許可されるかを示します。指定しない場合、すべてのポートが許可されます。
audit_tcp_client_max_idle: 0
このパラメータは、クライアントがアイドル状態(すなわち、全くデータを送信しない状態)でいることができる秒数を示します。これにより、クライアントマシンに問題があり、接続をクリーンに終了できない場合の非アクティブ接続を閉じることができます。この設定はグローバル設定であり、個々のクライアントheartbeat_timeout設定よりも2倍以上高くするべきです。デフォルトは0で、このチェックを無効にします。
audit_transport: TCP
TCPに設定されている場合、クリアテキストのTCP接続のみが使用されます。KRB5に設定されている場合は、Kerberos 5が認証と暗号化に使用されます。
audit_krb5_principal: auditd
これはこのサーバーのプリンシパルです。デフォルトは「auditd」です。このデフォルトでは、サーバーは/etc/audit/audit.keyに保存されているauditd/hostname@EXAMPLE.COMという名前のキーを探して認証します。ここで、hostnameはDNSルックアップによって取得されるサーバーホストの正式名称です。
#audit_krb5_key_file: /etc/audit/audit.key
このクライアントのプリンシパルのキーの場所。キーファイルはrootによって所有され、モード0400でなければなりません。
audit_distribute_network: false
trueに設定されている場合、ネットワーク由来のイベントは監査ディスパッチャーに配信されて処理されます。
audit_q_depth: 400
これは、監査イベントディスパッチャーの内部キューのサイズを示す数値です。より大きなキューはイベントの洪水をよりうまく処理できますが、デーモンが終了する際に処理されていないイベントを保持する可能性があります。syslogにイベントがドロップされるというメッセージが表示された場合は、この値を増やしてください。
audit_overflow_action: SYSLOG
このオプションは、デーモンが内部キューのオーバーフローにどう反応すべきかを決定します。これが発生するということは、受信しているイベントが子プロセスに渡すことのできる数を超えていることを意味します。このエラーは、現在処理しようとしているイベントが失われることを意味します。このオプションにはignore、syslog、suspend、single、haltの選択肢があります。
audit_max_restarts: 10
これは、クラッシュしたプラグインを再起動しようとする最大回数を示す非負の数です。
audit_plugin_dir: /etc/audit/plugins.d
これはauditdがプラグイン設定ファイルを検索するために使用する場所です。
force_overwrite_audit: true
すでに監査ファイルが存在する場合、強制的に上書きしますか?対象ファイルの内容がソースと異なる場合のみ上書きされます。
audit_sudo_log: "{{ sudo_log | default('/var/log/sudo.log') }}"
sudoロールが定義されている場合、sudo_log変数から値を取得します。それ以外の場合は、デフォルトの/var/log/sudo.logを使用します。これは、ユーザーが同じ情報を何度も指定する必要を防ぐためです。ただし、sudoロールはこのロールの依存関係ではありません。
以下の変数は、ターゲットシステムで変更する必要はありません(vars/main.ymlを参照):
audit_packages: ['audit', 'audit-libs']
この変数はvars/main.ymlに定義されており、Linuxディストリビューションに応じて設定されています。ユーザーはこの変数をターゲットシステムに対して変更する必要はありません。
audit_config_path: /etc/audit/auditd.conf
この変数はvars/main.ymlに定義されており、auditd.confファイルの場所を制御します。
audit_rulesd_path: /etc/audit/rules.d
この変数はvars/main.ymlに定義されており、rules.dディレクトリの場所を制御します。
audit_rules_files:
- 01-init.rules
- 10-self-audit.rules
- 20-filters.rules
- 30-kernel.rules
- 40-identity.rules
- 40-login.rules
- 40-mount.rules
- 40-stunnel.rules
- 40-swap.rules
- 40-time.rules
- 50-cron.rules
- 50-dac.rules
- 50-hostname.rules
- 50-ip-connections.rules
- 50-network.rules
- 50-pkg-manager.rules
- 50-remote-shell.rules
- 50-sudoers.rules
- 50-system-libs.rules
- 50-system-startup.rules
- 55-privileged.rules
- 60-mail.rules
- 60-pam.rules
- 60-sshd.rules
- 60-systemd.rules
- 70-access.rules
- 70-mac-policy.rules
- 70-power-state.rules
- 70-sessions.rules
- 70-shell-profiles.rules
- 80-data-compression.rules
- 80-network.rules
- 80-privilege-abuse.rules
- 80-reconnaissance.rules
- 80-socket-creation.rules
- 80-suspicious.rules
- 80-suspicious-shells.rules
- 80-virtualization.rules
- 90-cred-in-files.rules
- 90-IPC.rules
- 90-root-exec.rules
- 90-special-sw.rules
- 95-32bit-api-exploitation.rules
コピーするルールファイルを指定します。デフォルトではコピーするファイルは選択されていません。上記のファイルはロールによって提供されますが、ユーザーは必要に応じて独自のファイルを作成できます。ロールは再利用性を高めるために、複数の小さなファイルにルールを分けて提供しています。実装するルールを選択でき、カスタムルールを作成することができます。ルールはCISおよびその他のセキュリティ標準に基づいています。
依存関係
依存関係はありません。
サンプルプレイブック
- hosts: servers
vars_files:
- vars/main.yml
roles:
- { role: guidugli.audit }
ライセンス
MIT / BSD
著者情報
このロールは2020年にカルロス・ギヌグリによって作成されました。