- 1 ausearchコマンドとは?
- 2 検証環境
- 3 人が見やすい形式に変換する方法(-i)
- 4 出力範囲を絞り込む方法
- 5 システムコール種別で絞り込む方法(-sc)
- 6 最初に条件にヒットしたものを表示する方法(--just-one)
- 7 タイプで絞り込む方法(-m)
- 8 成功/失敗で絞り込む方法(-sv)
- 9 プロセスIDで絞り込む方法(-p)
- Z 参考情報
1 ausearchコマンドとは?
Auditデーモン(auditd)が出力する監査ログを検索するコマンドです。監査ログはシステム運用者が実行した操作履歴で、デフォルトで/var/log/audit/audit.logに出力されます。監査者が監査ログを調査することで,いつ、だれが、何をしたか、を知ることができます。
監査に関するコマンドとして以下のものがあります。
コマンド名 | 概要 |
---|---|
ausearch | audit.logファイルから特定のログを検索する |
aureport | audit.logファイルから監査のサマリを作成する |
auditctl | Auditデーモンの動作に関する設定、およびAuditルールの定義を行う |
1.1 Auditデーモンの設定ファイル
Auditデーモンの設定は、/etc/audit/auditd.confで行います。監査ログの出力先、監査ログファイル数等を定義します。
2 検証環境
CentOS版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
ausearchコマンドの版数は以下のとおりです。
[root@server ~]# ausearch -v ausearch version 2.8.5
3 人が見やすい形式に変換する方法(-i)
audit.logは、そのままだと時刻がUNIX時間だったり、PIDが数値のままで分かりずらいです。以下のログは、オプション指定なしのときのログになります。
type=PROCTITLE msg=audit(1643460408.378:553): proctitle=2F7573722F7362696E2F69707461626C65732D726573746F7265002D77002D6E type=NETFILTER_CFG msg=audit(1643460408.378:554): table=security family=2 entries=4 type=SYSCALL msg=audit(1643460408.378:554): arch=c000003e syscall=54 success=yes exit=0 a0=4 a1=0 a2=40 a3=7329e0 items=0 ppid=723 pid=5588 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="iptables-restor" exe="/usr/sbin/xtables-multi" subj=system_u:system_r:iptables_t:s0 key=(null) -snip-
"-i"オプションを使うと、UNIX時間を現在時刻に変換したり、PIDをアカウント名に変換することができます。
[root@server ~]# ausearch -i -if /var/log/audit/audit.log ---- type=PROCTITLE msg=audit(2022年01月29日 21:46:48.378:553) : proctitle=/usr/sbin/iptables-restore -w -n ---- type=PROCTITLE msg=audit(2022年01月29日 21:46:48.378:554) : proctitle=/usr/sbin/iptables-restore -w -n type=SYSCALL msg=audit(2022年01月29日 21:46:48.378:554) : arch=x86_64 syscall=setsockopt success=yes exit=0 a0=0x4 a1=ip a2=IPT_SO_SET_REPLACE a3=0x7329e0 items=0 ppid=723 pid=5588 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=iptables-restor exe=/usr/sbin/xtables-multi subj=system_u:system_r:iptables_t:s0 key=(null) type=NETFILTER_CFG msg=audit(2022年01月29日 21:46:48.378:554) : table=security family=ipv4 entries=4 ---- -snip-
4 出力範囲を絞り込む方法
4.1 今日出力されたログに絞り込む方法(today)
今日のログを表示してみます。今が2/17 10:20だとすると、2/17 00:00から10:20までのログを表示することになります。
[root@server ~]# ausearch -i -ts today ---- type=DAEMON_START msg=audit(2022年02月17日 10:16:22.403:623) : op=start ver=2.8.5 format=raw kernel=3.10.0-1160.el7.x86_64 auid=unset pid=3905 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success ---- -snip- type=USER_END msg=audit(2022年02月17日 10:20:01.759:36) : pid=4052 uid=root auid=root ses=23 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success' [root@server ~]#
4.2 今週出力されたログを絞り込む方法(this-week)
今週出力されたログを表示してみます。日曜日から現在までのログを表示します。ログの1行目の2022年02月13日は日曜日です。
[root@server ~]# ausearch -i -ts this-week ---- type=DAEMON_START msg=audit(2022年02月13日 08:35:28.379:3736) : op=start ver=2.8.5 format=raw kernel=3.10.0-1160.el7.x86_64 auid=unset pid=600 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success ---- -snip- type=USER_END msg=audit(2022年02月17日 10:30:01.981:43) : pid=4145 uid=root auid=root ses=24 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success'
4.3 月で絞り込む方法(this-month)
今月出力されたログを表示してみます。1日から現在までのログを表示します。
[root@server ~]# ausearch -i -ts this-month ---- type=DAEMON_START msg=audit(2022年02月01日 19:30:58.980:7307) : op=start ver=2.8.5 format=raw kernel=3.10.0-1160.el7.x86_64 auid=unset pid=600 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success ---- -snip- type=USER_END msg=audit(2022年02月17日 10:30:01.981:43) : pid=4145 uid=root auid=root ses=24 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success'
4.4 昨日から今日に出力されたログを絞り込む方法(yesterday,today)
昨日から現在までのログを表示してみます。
[root@server ~]# ausearch -i -ts yesterday -te today ---- type=DAEMON_START msg=audit(2022年02月16日 15:24:14.926:403) : op=start ver=2.8.5 format=raw kernel=3.10.0-1160.el7.x86_64 auid=unset pid=600 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success ---- -snip- type=USER_END msg=audit(2022年02月17日 10:40:01.145:50) : pid=4242 uid=root auid=root ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success'
4.5 直近に出力されたログに絞り込む方法(recent)
直近とは10分前を意味します。現在時刻は10:48:14なので、10:38:14以降のログが出力されることになります。
[root@server ~]# date 2022年 2月 17日 木曜日 10:48:14 JST
直近10分前のログを表示してみます。
[root@server ~]# ausearch -i -ts recent ---- type=USER_ACCT msg=audit(2022年02月17日 10:40:01.083:44) : pid=4242 uid=root auid=unset ses=unset subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:accounting grantors=pam_access,pam_unix,pam_localuser acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success' ---- -snip- ---- type=USER_END msg=audit(2022年02月17日 10:40:01.145:50) : pid=4242 uid=root auid=root ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success' [root@server ~]#
4.6 時刻で絞り込む方法(-ts:開始,-te:終了)
本日の14:50:00から14:50:01の間に出力されたログを表示してみます。
[root@server ~]# ausearch -i -if /var/log/audit/audit.log -ts 14:50:00 -te 14:50:01 ---- type=USER_ACCT msg=audit(2022年02月17日 14:50:01.912:511) : pid=7184 uid=root auid=unset ses=unset subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:accounting grantors=pam_access,pam_unix,pam_localuser acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success' ----
5 システムコール種別で絞り込む方法(-sc)
writeシステムコールのログだけを出力してみます。
[root@server ~]# ausearch -i -sc write ---- type=PROCTITLE msg=audit(2021年11月09日 21:43:04.720:1608) : proctitle=/sbin/load_policy type=SYSCALL msg=audit(2021年11月09日 21:43:04.720:1608) : arch=x86_64 syscall=write success=yes exit=3882576 a0=0x4 a1=0x7fd663ed5000 a2=0x3b3e50 a3=0x7fffda842e60 items=0 ppid=75356 pid=75361 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=6 comm=load_policy exe=/usr/sbin/load_policy subj=unconfined_u:unconfined_r:load_policy_t:s0-s0:c0.c1023 key=(null) type=MAC_POLICY_LOAD msg=audit(2021年11月09日 21:43:04.720:1608) : policy loaded auid=root ses=6
6 最初に条件にヒットしたものを表示する方法(--just-one)
setsockoptシステムコールのログは全部で38872個あることがわかります。
[root@server ~]# ausearch -i -sc setsockopt|wc -l 38872
38872個のログの中から最初のログを表示してみます。
[root@server ~]# ausearch -i -sc setsockopt --just-one ---- type=PROCTITLE msg=audit(2021年11月09日 20:33:50.600:43) : proctitle=/usr/sbin/ebtables-restore --noflush type=SYSCALL msg=audit(2021年11月09日 20:33:50.600:43) : arch=x86_64 syscall=setsockopt success=yes exit=0 a0=0x3 a1=ip a2=unknown-ipopt-name(0x80) a3=0x18e9c80 items=0 ppid=640 pid=803 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=ebtables-restor exe=/usr/sbin/ebtables-restore subj=system_u:system_r:iptables_t:s0 key=(null) type=NETFILTER_CFG msg=audit(2021年11月09日 20:33:50.600:43) : table=filter family=bridge entries=0
7 タイプで絞り込む方法(-m)
7.1 サービス開始時のログを絞り込む(-m SERVICE_START)
httpdサービスを起動します。
[root@server ~]# systemctl start httpd.service
サービス開始時のログを表示してみます。
[root@server ~]# ausearch -i -ts today -m SERVICE_START ---- type=SERVICE_START msg=audit(2022年02月17日 11:45:29.510:317) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=httpd comm=systemd exe=/usr/lib/systemd/systemd hostname=? addr=? terminal=? res=success'
7.2 サービス終了時のログを絞り込む(-m SERVICE_STOP)
httpdサービスを終了します。
[root@server ~]# systemctl stop httpd.service
サービス終了時のログを表示してみます。
[root@server ~]# ausearch -i -ts today -m SERVICE_STOP ---- type=SERVICE_STOP msg=audit(2022年02月17日 11:46:53.991:318) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=httpd comm=systemd exe=/usr/lib/systemd/systemd hostname=? addr=? terminal=? res=success'
8 成功/失敗で絞り込む方法(-sv)
8.1 成功で絞り込む方法(yes)
[root@server ~]# ausearch -i -if /var/log/audit/audit.log -sv yes ---- type=SERVICE_START msg=audit(2022年02月17日 13:47:57.280:417) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=httpd comm=systemd exe=/usr/lib/systemd/systemd hostname=? addr=? terminal=? res=success'
8.2 失敗で絞り込む方法(no)
localhostにsshでログインします。このとき、故意にパスワードを間違えてみます。
[root@server ~]# ssh localhost root@localhost's password: Permission denied, please try again. root@localhost's password:
パスワードを間違えると、以下のログが出力されます。
[root@server ~]# ausearch -i -if /var/log/audit/audit.log -sv no ---- type=USER_AUTH msg=audit(2022年02月17日 13:56:45.476:468) : pid=6581 uid=root auid=unset ses=unset subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=password acct=root exe=/usr/sbin/sshd hostname=? addr=::1 terminal=ssh res=failed'
9 プロセスIDで絞り込む方法(-p)
rsyslogdのログを出力してみます。psコマンドを実行すると、rsyslogdのPIDは1088であることがわかります。
[root@server ~]# ps -C rsyslogd PID TTY TIME CMD 1088 ? 00:00:01 rsyslogd
[root@server ~]# ausearch -if /var/log/audit/audit.log -p 1088 ---- time->Sat Feb 5 23:15:33 2022 type=CRYPTO_KEY_USER msg=audit(1644070533.060:974): pid=1088 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=destroy kind=server fp=SHA256:0b:0e:65:fb:59:ea:b5:f3:61:72:4c:88:37:51:b4:0c:51:f5:1c:41:17:12:2c:49:78:1e:ba:b8:7a:40:20:db direction=? spid=1088 suid=0 exe="/usr/sbin/sshd" hostname=? addr=? terminal=? res=success'
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ