查看更多教程 https://on  itroad.com

配置auditd规则来监控SYSCALL

让我们创建一个规则来监视“kill” SYSCALL,它可用于查找所有被杀死的进程。

1.将以下规则添加到auditd规则配置文件/etc/audit/rules.d/audit.rules:

# vi /etc/audit/rules.d/audit.rules
-a exit,always -F arch=b64 -S kill -k kill_rule

其中:

-a exit,always 在这里,我们有动作和列表。
每当操作系统退出系统调用时,退出列表将用于确定是否需要生成审计事件。

-F arch=b64 -F 选项用于构建规则字段。
b64 表示计算机使用 x86_64 CPU 运行。
(无论是 Intel 还是 AMD 都无所谓。

-S kill -S 选项指定我们要监视的系统调用。

-k 这是用户定义的规则名称。

注意:“arch”是系统调用的 CPU 架构。
如果系统是 32 位操作系统,则需要设置“arch=b32”。

  1. 重启auditd服务使新规则生效。
# service restart auditd
  1. 我们可以使用“auditctl -l”命令验证定义的规则是否处于活动状态。
# auditctl -l
-a always,exit -F arch=b64 -S kill -F key=kill_rule

检查确认

让我们看一个例子,我们刚刚创建的规则是否真的有效。
我们将简单地启动一个“sleep 500”进程并杀死它。
这应该生成一个审计日志,其中包含所有详细信息,例如谁用什么程序/命令杀死了进程(uid)等。

  1. 在后台生成一个简单的睡眠进程。
# sleep 600 &
  1. 检查sleep进程的进程ID并杀死它。
# ps -ef | grep sleep
root      2089  1784  0 15:12 pts/0    00:00:00 sleep 600
# kill -9 2089
  1. 检查审计日志文件 /var/log/audit/audit.log 以获取终止审计日志。
    日志应类似于下图所示。
# tail -f /var/log/audit/audit.log
type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"
type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep"
type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"
  1. 有时审计日志可能很难找到我们感兴趣的日志。
    在这种情况下,我们也可以使用“ausearch”命令,并使用规则定义的键。
    例如:
# ausearch -k kill_rule
...
time->Wed Jun 20 15:13:11 2018
type=PROCTITLE msg=audit(1529507591.700:304): proctitle="-bash"
type=OBJ_PID msg=audit(1529507591.700:304): opid=2089 oauid=1001 ouid=0 oses=1 obj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ocomm="sleep"
type=SYSCALL msg=audit(1529507591.700:304): arch=c000003e syscall=62 success=yes exit=0 a0=829 a1=9 a2=0 a3=829 items=0 ppid=1783 pid=1784 auid=1001 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="bash" exe="/usr/bin/bash" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="kill_rule"
如何使用auditd来监控特定的SYSCALL

每当用户执行请求 Linux 内核提供服务的命令时,就会发生 SYSCALL。
有几个 SYSCALL,如 mount、umount、kill、open 等。
这些 SYSCALL 可以用 auditd 系统进行监控。
我们以“杀死”SYSCALL 为例。

用户想要捕获谁杀死了系统上的某个进程。
这可以通过编写一个审计规则来轻松实现,该规则可以在调用时捕获 SYSCALL 终止。

安装和配置auditd

auditd 主要预装在 Linux 发行版上。
如果它不可用,我们可以使用相应的操作系统包管理器来安装它。
例如,在 CentOS/RHEL 的情况下:

# yum install auditd

启用 auditd 服务以在启动时启动并使用“service”命令启动它。

# systemctl enable auditd
# service start auditd
日期:2020-09-17 00:13:56 来源:oir作者:oir