Help us understand the problem. What is going on with this article?

Linuxの監査システム Auditについて理解する

はじめに

本記事はLinuxの監査システムであるAuditについて記載しています。

AuditはLinuxの監査システムとして、監査ルールを定義し、システムで発生したセキュリテイに関するイベントをログファイルに出力します。

ログファイルに出力されたメッセージを監視することで、セキュリテイに関するイベントを検知することができます。

Auditでは以下の監査ルールが設定可能です。

  • 制御ルール
  • システムコールルール
  • ファイルシステムルール

Auditの概要

Auditはauditdデーモンとして起動し、カーネルから受け取った監査結果をログファイルに出力します。

全般的な設定は/etc/audit/auditd.confファイルで設定します。

  • /etc/audit/auditd.conf
#
# This file controls the configuration of the audit daemon
#

local_events = yes
write_logs = yes
log_file = /var/log/audit/audit.log
log_group = root
log_format = RAW
flush = INCREMENTAL_ASYNC
freq = 50
max_log_file = 8
num_logs = 5
priority_boost = 4
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
verify_email = yes
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
use_libwrap = yes
##tcp_listen_port = 60
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
distribute_network = no

Auditを操作するための基本的なコマンドは以下になります。

コマンド 説明
auditctl Auditの動作に関する設定、Auditルールの定義を行う
ausearch Auditのログファイルから監査結果を検索
aureport Auditのログファイルから監査結果のレポートを作成

監査ルールはauditctlコマンドを実行するか、永続的な設定を行う場合は/etc/audit/rules.d/audit.rulesファイルで設定を行います。

auditctl

auditctlコマンドの使用方法について、ルール別に解説します。

制御ルール

Auditの動作に関する設定を行います。

  • Auditの監査を無効(0)、有効(1)に設定または、設定をロック(2)し変更不可にする(以下は有効にする場合)
    # auditctl -e 1
  • オプションの設定値を表示
    # auditctl -s
  • 全てのAuditルールの削除
    # auditctl -D

システムコールルール

システムコールに関するルールを設定します。

書式:auditctl -a <アクション>,<リスト> -F <フィールド>=<値> -S <システムコール> -k <キー名>

  • システムコールを定義
    # auditctl -a always,exit -F arch=b64 -S adjtimex,settimeofday -k time-change
  • システムコールルールの確認
    # auditctl -l
-a always,exit -F arch=b64 -S adjtimex,settimeofday -F key=time-change

-Sに指定するシステムコール名やシステムコール番号は、/usr/include/asm/unistd_64.hファイルを参照するか、ausyscallコマンドで確認できます。

  • openが含むシステムコール名で検索
    # cat /usr/include/asm/unistd_64.h | grep open
#define __NR_open 2
#define __NR_mq_open 240
#define __NR_openat 257
#define __NR_perf_event_open 298
#define __NR_open_by_handle_at 304
  • ausyscallコマンドでopenが含むシステムコール名で検索

# ausyscall open

open               2
mq_open            240
openat             257
perf_event_open    298
open_by_handle_at  304

ファイルシステムルール

ファイルシステムに関するルールを設定します。
ファイルに対して書き込みや属性変更等が行わなれた場合はログに出力します。

書式:auditctl -w <ファイル> -p <パーミッション> -k <キー名>

  • ファイルシステムルールの定義
    # auditctl -w /etc/passwd -p wa -k identity
  • ファイルシステムルールの確認
    # auditctl -l
-w /etc/passwd -p wa -k identity

例としてtestというアカウントでパスワードを変更すると、以下のように/var/log/audit/audit.logファイルにパスワード変更のログが出力されているのが確認できます。

type=USER_CHAUTHTOK msg=audit(1582528251.037:19125): pid=32026 uid=0 auid=0 ses=2508 subj=unconfined_u:unconfined_r:passwd
_t:s0-s0:c0.c1023 msg='op=PAM:chauthtok grantors=pam_pwquality,pam_unix acct="test" exe="/usr/bin/passwd" hostname=localho
st.localdomain addr=? terminal=pts/1 res=success

ausearch

ausearchコマンドは指定した条件に従って、監査ログからキーワードで一致したログを検索して出力します。/etc/audit/auditd.confファイルのlog_fileで指定したログファイルを対象とします。

  • Auditログファイルの検索(以下は-iで日時やpidをテキストテキスト変換し、-kでキーワードを指定)
    # ausearch -i -k time-change
----
type=CONFIG_CHANGE msg=audit(2020年02月24日 15:00:55.539:17800) : auid=root ses=2118 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=time-change list=exit res=yes 
----
type=CONFIG_CHANGE msg=audit(2020年02月24日 15:01:17.592:17824) : auid=root ses=2118 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=remove_rule key=time-change list=exit res=yes 
----
type=CONFIG_CHANGE msg=audit(2020年02月24日 15:08:59.057:17944) : auid=root ses=2118 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key=time-change list=exit res=yes 
  • 指定したメッセージタイプに一致するイベントを検索(以下は-mでログインに関するイベント、--start todayで今日の日時を指定)
    # ausearch -m USER_LOGIN --start today
----
time->Thu Apr 30 21:25:25 2020
type=USER_LOGIN msg=audit(1588249525.137:125): pid=1341 uid=0 auid=0 ses=1 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=login id=0 exe="/usr/sbin/sshd" hostname=192.168.10.10 addr=192.168.10.10 terminal=/dev/pts/0 res=success'
  • 指定可能なメッセージタイプを抽出するワンライナー
    # ausearch -m help 2>&1 | awk -v RS=' ' '/^[A-Z]{2}/{ print}' | sort

aureport

aureportコマンドは指定した条件に従って、監査ログのレポートを出力します。

  • Auditレポートの生成(以下は-lでログインに関するレポート、-iで日時やpidをテキストテキスト変換し、-tsから-teでログの検索範囲として開始日時と終了日時を指定)
    # aureport -l -i -ts yesterday -te now
Login Report
============================================
# date time auid host term exe success event
============================================
1. 2020年02月23日 21:12:44 root <IPアドレス> /dev/pts/0 /usr/sbin/sshd yes 132
2. 2020年02月24日 12:52:29 root <IPアドレス> ssh /usr/sbin/sshd no 16883
3. 2020年02月24日 12:52:35 root <IPアドレス> /dev/pts/0 /usr/sbin/sshd yes 16901
4. 2020年02月24日 15:45:37 root <IPアドレス> /dev/pts/1 /usr/sbin/sshd yes 18626
5. 2020年02月24日 18:27:12 root <IPアドレス> /dev/pts/0 /usr/sbin/sshd yes 21660
  • Auditレポートの生成(サマリー)
    # aureport --summary
Summary Report
======================
Range of time in logs: 1970年01月01日 09:00:00.000 - 2020年02月24日 16:07:17.070
Selected time for report: 1970年01月01日 09:00:00 - 2020年02月24日 16:07:17.070
Number of changes in configuration: 220
Number of changes to accounts, groups, or roles: 5
Number of logins: 7
Number of failed logins: 1
Number of authentications: 14
Number of failed authentications: 12
Number of users: 2
Number of terminals: 9
Number of host names: 3
Number of executables: 24
Number of commands: 28
Number of files: 48
Number of AVC's: 3716
Number of MAC events: 9
Number of failed syscalls: 25835
Number of anomaly events: 10
Number of responses to anomaly events: 0
Number of crypto events: 89
Number of integrity events: 0
Number of virt events: 0
Number of keys: 3
Number of process IDs: 13855
Number of events: 90789

キーボード入力の監査

aureportコマンドを活用し、ターミナルで入力したコマンドをログに記録することができます。

キーボード入力の監査を行うためには、以下のファイルに次の設定値を記述します。

  • /etc/pam.d/system-auth
  • /etc/pam.d/password-auth
session required pam_tty_audit.so disable=* enable=test

動作確認を行うために以下のコマンドを実行し、tesユーザに変更します。

  • ユーザ変更
    # su -l test

例として適当に以下のコマンドを実行し、ctrl + dでログアウトします。

$ date
$ echo "test"
$ top

以下のコマンドを実行すると、testユーザがターミナルで実行したコマンドが確認できます。

# aureport --tty --start today

TTY Report
===============================================
# date time event auid term sess comm data
===============================================
1. 2020年04月30日 21:58:09 184 0 ? 1 bash "date",<ret>,"echo \"test\"",<ret>,"top",<ret>,<^L>,<^D>

/etc/audit/rules.d/audit.rules

永続的な設定は/etc/audit/rules.d/audit.rulesファイルで設定します。
設定変更後はauditdの再起動を行うことで設定が反映されます。

おわりに

システム管理者としてAuditは必要な知識です。

Auditはオープンシステムの標準的なレベルとして、OS関連のセキュリティ規格であるControlled Access Protection Profile (CAPP)の要件を満たすように作られています。

参考

Brutus
DevOpsとAIの二刀流を目指す凡人。Python、RaspberryPi、Linux、Docker、k8s、セキュリティ、Oracle Cloud、Terraform、Ansible等について発信しています。登壇、執筆等あれば、Twitterよりメッセージお願いします。
https://brutus.ml/
gauss
株式会社GAUSSは、AIソフトウェアを組み込んだサーバの提供、AIサービス構築のコンサルティング、AIのエンジニア育成をセットにしてサービス提供を展開するスタートアップ企業です。
https://gauss-ai.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした