如何使用 auditd 或其他方式记录特定二进制文件/脚本的执行情况

如何使用 auditd 或其他方式记录特定二进制文件/脚本的执行情况

我手头有以下情况。我在 /usr/bin 中有一个或多个特定的可执行文件,我将其中一个称为 /usr/bin/execute ,它们可能是编译后的二进制文件或脚本文件,例如 perl 或 python 脚本。

我希望记录任何用户启动这些特定二进制文件的时间。我希望从中获得的信息基本上是:

  • 可执行文件的名称/路径
  • 提供给可执行文件的参数
  • 执行该操作的用户
  • 日期/时间

此外,我希望这些信息采用一种在需要时可以合乎逻辑地解析的格式。

Auditd 乍一看是个不错的选择,但出于某种原因,它以奇怪的方式将上述信息拆分为两个条目。例如,在上面的示例中,我想跟踪程序 /usr/bin/execute 的运行情况。我将向 auditctl 添加以下语句:

-a exit,always -F arch=b32 -S execve
-a exit,always -F arch=b64 -S execve

(我还没有找到如何指定“/usr/bin/execute”作为唯一记录的内容,如果有谁知道如何做到这一点,我将不胜感激)

在使用一个参数运行 /usr/bin/execute 后的日志中,我得到以下两个相关条目:

type=SYSCALL msg=audit(1447688181.106:819746): arch=c000003e syscall=59 success=yes exit=0 a0=2898528 a1=26e3308 a2=2720008 a3=7fff176c1840 items=3 ppid=10697 pid=10715 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts4 ses=8 comm="execute" exe="/usr/bin/perl" key=(null)
type=EXECVE msg=audit(1447688181.106:819746): argc=3 a0="/usr/bin/perl" a1="/usr/bin/execute" a2="some_arg.txt"

由于某种原因,信息被分成两个条目。在第一个 SYSCALL 消息中,我获取了用户的 uid,在第二个 EXECVE 消息中,我获取了路径(在“a1”中,我不确定它是否一致)和参数。除了这更难解析之外,我没有找到这些语句之间的明确联系来协调它们是同一事件的一部分。整个输出似乎与我想要完成的任务不符,所以我正在寻找更好的方法。

Tl;Dr:我可以让 auditd 以通常可解析的方式将此信息记录到文件中,无论是脚本还是二进制文件?我可以将日志记录限制到仅此可执行文件吗?如果不行,另一个审计守护进程是否是更好的选择?

谢谢。

答案1

无论您如何在 auditd 中执行此操作,您都必须使用一些解析器来获取所需的信息(除非 ausearch 的选项之一有帮助)。

首先,只监视特定的命令,假设命令是 /usr/bin/who (二进制文件)和 /usr/bin/whatis (shell 脚本),然后使用规则

-w /usr/bin/who -p x -k my_execs
-w /usr/bin/whatis -p x -k my_execs

设置完这些规则后,重启auditd服务,然后执行

who -a
whatis who

然后以 root 身份

ausearch -i -k my_execs

要得到

----
node=mynode.mydomain type=CONFIG_CHANGE msg=audit(11/18/2015 08:38:22.724:847290) : auid=burn ses=145 subj=unconfined_u:system_r:auditctl_t:s0 op="add rule" key=my_execs list=exit res=yes
----
node=mynode.mydomain type=CONFIG_CHANGE msg=audit(11/18/2015 08:38:22.724:847291) : auid=burn ses=145 subj=unconfined_u:system_r:auditctl_t:s0 op="add rule" key=my_execs list=exit res=yes
----
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:25.381:847344) : item=1 name=(null) inode=524297 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:25.381:847344) : item=0 name=/usr/bin/who inode=2102799 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL
node=mynode.mydomain type=CWD msg=audit(11/18/2015 08:38:25.381:847344) :  cwd=/tmp
node=mynode.mydomain type=EXECVE msg=audit(11/18/2015 08:38:25.381:847344) : argc=2 a0=who a1=-a
node=mynode.mydomain type=SYSCALL msg=audit(11/18/2015 08:38:25.381:847344) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x11728e0 a1=0x1172d90 a2=0x10e8020 a3=0x18 items=2 ppid=1810 pid=22443 auid=burn uid=burn gid=burn euid=burn suid=burn fsuid=burn egid=burn sgid=burn fsgid=burn tty=pts0 ses=145 comm=who exe=/usr/bin/who subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=my_execs
----
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:31.052:847381) : item=2 name=(null) inode=524297 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 nametype=NORMAL
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:31.052:847381) : item=1 name=(null) inode=786482 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:shell_exec_t:s0 nametype=NORMAL
node=mynode.mydomain type=PATH msg=audit(11/18/2015 08:38:31.052:847381) : item=0 name=/usr/bin/whatis inode=2112811 dev=fd:00 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 nametype=NORMAL
node=mynode.mydomain type=CWD msg=audit(11/18/2015 08:38:31.052:847381) :  cwd=/tmp
node=mynode.mydomain type=EXECVE msg=audit(11/18/2015 08:38:31.052:847381) : argc=2 a0=/bin/sh a1=/usr/bin/whatis
node=mynode.mydomain type=EXECVE msg=audit(11/18/2015 08:38:31.052:847381) : argc=3 a0=/bin/sh a1=/usr/bin/whatis a2=who
node=mynode.mydomain type=SYSCALL msg=audit(11/18/2015 08:38:31.052:847381) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x1172d90 a1=0x1172500 a2=0x10e8020 a3=0x18 items=3 ppid=1810 pid=22504 auid=burn uid=burn gid=burn euid=burn suid=burn fsuid=burn egid=burn sgid=burn fsgid=burn tty=pts0 ses=145 comm=whatis exe=/bin/bash subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=my_execs

您可以看到 ausearch 已提取您想要的事件(使用您的密钥)。SYSCALL 元素为您提供 who、where 和其他元素,EXECVE 元素为您提供参数,CWD 为您提供位置和 PATH 中有关所涉及文件的详细信息。作为此系统的参考,上面的 inode 映射到

524297  /lib64/ld-2.12.so
2102799 /usr/bin/who
786482  /bin/bash
2112811 /usr/bin/whatis

您可以查看https://people.redhat.com/sgrubb/audit了解更多信息

相关内容