Edited at

ausearchコマンドの使い方


1 ausearchコマンドとは?

auditログを人が見やすいように変換したり、指定した条件でログを抽出したりするコマンドです。

auditログは、以下のファイルに格納されています。

なお、auditログの出力制御は、auditctlコマンドで行うことが可能です。

[root@server ~]# ls -l /var/log/audit/*

-rw-------. 1 root root 6663860 9月 8 16:30 /var/log/audit/audit.log


2 検証環境

VMware Workstation 14 Playerのゲストマシン(1台)を使いました。


ゲストマシンのOS版数

[root@server ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

[root@server ~]# uname -r
3.10.0-693.el7.x86_64



ausearchコマンドの版数

[root@server ~]# ausearch -v

ausearch version 2.7.6


3 人が見やすい形式に変換する方法(-i)

数値で表示されるユーザID(例:UID=0)を文字列(例:UID=root)に変換したり、

UNIX時間(★印)を現在時刻(●印)に変換する。


変換前のログ

[root@server ~]# less /var/log/audit/audit.log

type=DAEMON_START msg=audit(★1526280612.485:9877): op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=4294967295 pid=556 uid=0 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=success
-以下、略-

現在時刻に変換する。


変換後のログ

[root@server ~]# ausearch -i -if /var/log/audit/audit.log

type=DAEMON_START msg=audit(●2018年05月14日 15:50:12.485:9877) : op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=unset pid=556 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success
-以下、略-


4 出力範囲を絞り込む方法(-ts:開始,-te:終了)


4.1 時刻で絞り込む方法

9時48分から9時50分までのログを表示してみます。

[root@master ~]# ausearch -i -if /var/log/audit/audit.log -ts 09:48:00 -te 09:50:00

----
type=SYSCALL msg=audit(2017年03月27日 09:48:49.071:1131) : arch=x86_64 syscall=stat success=no exit=EACCES(許可がありません) a0=0x7fb282b79590 a1=0x7ffdf5a8f600 a2=0x7ffdf5a8f600 a3=0x7fb276ec2792 items=0 ppid=6449 pid=6554 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:48:49.071:1131) : avc: denied { getattr } for pid=6554 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
----
type=SYSCALL msg=audit(2017年03月27日 09:48:49.072:1132) : arch=x86_64 syscall=lstat success=no exit=EACCES(許可がありません) a0=0x7fb282b796e8 a1=0x7ffdf5a8f600 a2=0x7ffdf5a8f600 a3=0x0 items=0 ppid=6449 pid=6554 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:48:49.072:1132) : avc: denied { getattr } for pid=6554 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file


4.2 月で絞り込む方法(this-month)

今月に出力されたログを表示してみます。

[root@server ~]# ausearch -i -ts this-month

----
type=DAEMON_START msg=audit(2018年09月08日 14:59:55.539:6302) : op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=unset pid=591 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success
----
type=SERVICE_START msg=audit(2018年09月08日 14:59:56.060:7) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=auditd comm=systemd exe=/usr/lib/systemd/systemd hostname=? addr=? terminal=? res=success'

-中略-

----
type=CRED_DISP msg=audit(2018年09月08日 16:40:01.117:251) : pid=1861 uid=root auid=root ses=16 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_env,pam_unix acct=root exe=/usr/sbin/crond hostname=? addr=? terminal=cron res=success'
----
type=USER_END msg=audit(2018年09月08日 16:40:01.130:252) : pid=1861 uid=root auid=root ses=16 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-week)

今週出力されたログを表示してみます。

[root@server ~]# ausearch -i -ts this-week


4.4 昨日から今日で絞り込む方法(yesterday,today)

[root@server ~]# ausearch -i -ts yesterday -te today


4.5 今日のログに絞り込む方法(today)

今日出力されたログを表示してみます。

今が2/24 21:47だとすると、2/24 00:00から21:47までのログを表示することになります。

[root@server ~]# ausearch -i -ts today


4.6 直近のログに絞り込む方法(recent)

直近とは、10分前(recent)からを意味します。

[root@server ~]# ausearch -i -ts recent


5 システムコール種別で絞り込む方法(-sc)

setsockoptシステムコール(★印)だけを出力してみます。


setsockoptシステムコールだけを表示した場合

[root@server ~]# ausearch -i -sc setsockopt

----
type=PROCTITLE msg=audit(2018年05月14日 15:50:18.809:44) : proctitle=/usr/sbin/ip6tables-restore --wait=2 -n
type=SYSCALL msg=audit(2018年05月14日 15:50:18.809:44) : arch=x86_64 syscall=★setsockopt success=yes exit=0 a0=0x4 a1=ipv6 a2=IP6T_SO_SET_REPLACE a3=0x1d9dd60 items=0 ppid=648 pid=763 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=ip6tables-resto exe=/usr/sbin/xtables-multi subj=system_u:system_r:iptables_t:s0 key=(null)
type=NETFILTER_CFG msg=audit(2018年05月14日 15:50:18.809:44) : table=filter family=ipv6 entries=4
----
type=PROCTITLE msg=audit(2018年05月14日 15:50:18.838:45) : proctitle=/usr/sbin/ip6tables-restore --wait=2 -n
type=SYSCALL msg=audit(2018年05月14日 15:50:18.838:45) : arch=x86_64 syscall=★setsockopt success=yes exit=0 a0=0x4 a1=ipv6 a2=IP6T_SO_SET_REPLACE a3=0x1d9c650 items=0 ppid=648 pid=763 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=ip6tables-resto exe=/usr/sbin/xtables-multi subj=system_u:system_r:iptables_t:s0 key=(null)
type=NETFILTER_CFG msg=audit(2018年05月14日 15:50:18.838:45) : table=raw family=ipv6 entries=3
----

writeシステムコール(★印)だけを出力してみます。


writeシステムコールだけを表示した場合

[root@server ~]# ausearch -i -sc write

----
type=PROCTITLE msg=audit(2018年05月14日 20:45:34.301:320) : proctitle=setenforce 0
type=SYSCALL msg=audit(2018年05月14日 20:45:34.301:320) : arch=x86_64 syscall=★write success=yes exit=1 a0=0x3 a1=0x7fffcdcfb190 a2=0x1 a3=0x7fffcdcfaea0 items=0 ppid=14674 pid=16870 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=7 comm=setenforce exe=/usr/sbin/setenforce subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=MAC_STATUS msg=audit(2018年05月14日 20:45:34.301:320) : enforcing=0 old_enforcing=1 auid=root ses=7
----
type=PROCTITLE msg=audit(2018年05月14日 20:50:47.480:330) : proctitle=setenforce 1
type=SYSCALL msg=audit(2018年05月14日 20:50:47.480:330) : arch=x86_64 syscall=★write success=yes exit=1 a0=0x3 a1=0x7ffcd6669350 a2=0x1 a3=0x7ffcd6669060 items=0 ppid=14674 pid=17139 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=7 comm=setenforce exe=/usr/sbin/setenforce subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=MAC_STATUS msg=audit(2018年05月14日 20:50:47.480:330) : enforcing=1 old_enforcing=0 auid=root ses=7
----
type=PROCTITLE msg=audit(2018年06月25日 17:29:12.491:216) : proctitle=setenforce 0
type=SYSCALL msg=audit(2018年06月25日 17:29:12.491:216) : arch=x86_64 syscall=★write success=yes exit=1 a0=0x3 a1=0x7ffd9aca2210 a2=0x1 a3=0x7ffd9aca1f20 items=0 ppid=1354 pid=2956 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts2 ses=4 comm=setenforce exe=/usr/sbin/setenforce subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=MAC_STATUS msg=audit(2018年06月25日 17:29:12.491:216) : enforcing=0 old_enforcing=1 auid=root ses=4


6 最初に条件にヒットしたものを表示する方法(--just-one)

setsockoptのログは全部で24888個あります。

[root@server ~]# ausearch -i -sc setsockopt|wc -l
24888

24888個のうち、最初にヒットしたsetsockoptだけを表示する。
[root@server ~]# ausearch -i -sc setsockopt --just-one
----
type=PROCTITLE msg=audit(2018年05月14日 15:50:18.809:44) : proctitle=/usr/sbin/ip6tables-restore --wait=2 -n
type=SYSCALL msg=audit(2018年05月14日 15:50:18.809:44) : arch=x86_64 syscall=setsockopt success=yes exit=0 a0=0x4 a1=ipv6 a2=IP6T_SO_SET_REPLACE a3=0x1d9dd60 items=0 ppid=648 pid=763 auid=unset uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=(none) ses=unset comm=ip6tables-resto exe=/usr/sbin/xtables-multi subj=system_u:system_r:iptables_t:s0 key=(null)
type=NETFILTER_CFG msg=audit(2018年05月14日 15:50:18.809:44) : table=filter family=ipv6 entries=4


7 タイプで絞り込む方法(-m)


7.1サービス開始時のログを絞り込む(-m SERVICE_START)

サービス開始時のログを確認する。

[root@server ~]# ausearch -i -ts today -m SERVICE_START

----
type=SERVICE_START msg=audit(2018年09月08日 14:59:56.060:7) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=auditd comm=systemd exe=/usr/l
ib/systemd/systemd hostname=? addr=? terminal=? res=success'
----
-以下、略-


7.2 サービス終了時のログを絞り込む(-m SERVICE_STOP)

サービス終了時のログを確認する。

[root@server ~]# ausearch -i -ts today -m SERVICE_STOP
----
type=SERVICE_STOP msg=audit(2018年09月08日 14:59:57.197:22) : pid=1 uid=root auid=unset ses=unset subj=system_u:system_r:init_t:s0 msg='unit=plymouth-quit comm=systemd exe=/usr/lib/systemd/systemd hostname=? addr=? terminal=? res=success'
----
-以下、略-


7.3 Dockerイメージの作成、削除のログを絞り込む (-m VIRT_CONTROL)

Dockerイメージをpullする。

[root@master audit]# docker pull busybox

Dockerイメージをpullしたときのログ(★印)を確認する。
[root@master audit]# ausearch -i -ts today -m VIRT_CONTROL
★type=VIRT_CONTROL msg=audit(2017年02月25日 20:47:11.344:1387) : pid=1025 uid=root auid=unset ses=unset msg='user=root auid=root exe=? hostname=? reason=api op=create vm=? vm-pid=? exe=/usr/bin/docker-current hostname=? addr=? terminal=? res=success'

削除するイメージを確認する。
[root@master audit]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/busybox latest 7968321274dc 6 weeks ago 1.11 MB

イメージを削除する。
[root@master audit]# docker rmi 7968321274dc

Dockerイメージを削除したときのログ(★印)を確認する。
[root@master audit]# ausearch -i -ts today -m VIRT_CONTROL
★type=VIRT_CONTROL msg=audit(2017年02月25日 20:52:04.171:1415) : pid=1025 uid=root auid=unset ses=unset msg='hostname=? reason=api op=remove vm=? vm-pid=? user=root auid=root exe=? exe=/usr/bin/docker-current hostname=? addr=? terminal=? res=success'


8 成功/失敗で絞り込む方法(-sv)


成功したものだけを表示する(yes)

[root@server ~]# ausearch -i -if /var/log/audit/audit.log -sv yes

----
type=DAEMON_START msg=audit(2018年05月14日 15:50:12.485:9877) : op=start ver=2.7.6 format=raw kernel=3.10.0-693.el7.x86_64 auid=unset pid=556 uid=root ses=unset subj=system_u:system_r:auditd_t:s0 res=success
----
-以下、略-


失敗したものだけを表示する(no)

[root@master ~]# ausearch -i -if /var/log/audit/audit.log -sv no

----
type=SYSCALL msg=audit(2017年03月27日 09:20:54.437:1121) : arch=x86_64 syscall=stat ★success=no exit=EACCES(許可がありません) a0=0x7fb282b79510 a1=0x7ffdf5a8f5e0 a2=0x7ffdf5a8f5e0 a3=0x7fb276ec2792 items=0 ppid=6449 pid=6451 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:20:54.437:1121) : avc: denied { getattr } for pid=6451 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
----
type=SYSCALL msg=audit(2017年03月27日 09:20:54.439:1122) : arch=x86_64 syscall=lstat ★success=no exit=EACCES(許可がありません) a0=0x7fb282b79668 a1=0x7ffdf5a8f5e0 a2=0x7ffdf5a8f5e0 a3=0x0 items=0 ppid=6449 pid=6451 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(none) ses=unset comm=httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(2017年03月27日 09:20:54.439:1122) : avc: denied { getattr } for pid=6451 comm=httpd path=/var/www/html/kernel-3.10.0-514.el7/linux-3.10.0-514.el7.centos.x86_64/HTML/index.html dev="sda3" ino=9952163 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file
-以下、略-


9 プロセスIDで絞り込む方法(-p)

PID=1だけのログを出力してみます。

[root@server ~]# ausearch -if /var/log/audit/audit.log -p 1

----
time->Mon May 14 15:50:12 2018
type=SERVICE_START msg=audit(1526280612.875:7): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='unit=auditd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
----
-以下、略-


X その他(備忘録)


X.1 ausyscallコマンドの使い方

システムコールの名前から番号を求める。その逆もおこなう。

サポートしているシステムコールの名前と番号一覧を表示する。

[root@master ~]# ausyscall --dump
Using x86_64 syscall table:
0 read
1 write
2 open
3 close
4 stat
5 fstat
-中略-
317 seccomp
318 getrandom
319 memfd_create
320 kexec_file_load
321 bpf
[root@master ~]#

5番のシステムコールの名前を表示する。
root@master ~]# ausyscall 5
fstat

read文字列を名前に含むシステムコールの番号を表示する。
[root@master ~]# ausyscall read
read 0
pread 17
readv 19
readlink 89
readahead 187
set_thread_area 205
get_thread_area 211
readlinkat 267
preadv 295
process_vm_readv 310
[root@master ~]#

readだけの番号を知りたい場合は--exactを付ける。
[root@master ~]# ausyscall read --exact
0


x 参考情報

Linux auditdでアクセス拒否されたファイルを探し出す

AUDIT ログファイルの検索