环境
- Red Hat Enterprise Linux 8
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 5
- Red Hat Enterprise Linux 4
问题
- 如何审计系统时间更改?
决议
- 确保系统时间正确至关重要。有缺陷的程序、虚拟机监控程序时间注入或不良操作可能会导致系统时间更改。
设置审计规则
auditd服务可用于记录触发系统时间更改的所有事件。
-
首先检查auditd服务是否正在运行
[root@host ~]# service auditd status
-
接下来,添加一个新规则来观察系统时间变化(系统调用adjtimex、clock_settime、settimeofday和clock_adjtime)
[root@host ~]# auditctl -a exit,always -F arch=b64 -S clock_settime -S adjtimex -S settimeofday -S clock_adjtime -k ADJTIME [root@host ~]# auditctl -a exit,always -F arch=b32 -S clock_settime -S adjtimex -S settimeofday -S clock_adjtime -k ADJTIME
在此示例中,为此审计规则定义了一个名为“ADJTIME”的过滤器关键字。
-
要测试审计规则,请更改系统时间,然后在审计日志中搜索定义的关键字
[root@host ~]# hwclock --hctosys [root@host ~]# ausearch -k ADJTIME
示例输出如下:
time->Sat Jan 19 22:37:33 2008 type=SYSCALL msg=audit(1200753453.330:86): arch=40000003 syscall=79 success=yes exit=0 a0=bffeb53c a1=bffeb534 a2=0 a3=0 items=0 ppid=2133 pid=3177 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 comm="hwclock" exe="/ sbin/hwclock" subj=root:system_r:unconfined_t:s0-s0:c0.c1023 key="adjtime"
备选的 systemtap 脚本
或者,可以使用 systemtap
脚本,但在这里使用 systemtap
不太方便,因为它需要安装 debuginfo 包。
-
创建
timechange.stp
脚本#!/usr/bin/env stap # Systemtap script to watch the system time change events by monitoring # adjtimex, clock_settime, settimeofday, clock_adjtime systemcalls. # # Run Instructions: # # yum install systemtap # # stap-prep # # stap -v <thiscript.stp> # probe syscall.{adjtimex, clock_settime, settimeofday, clock_adjtime}.return { ts = task_current() printf ("%s syscall_name:%s proc_name:%s uid:%ld pid:%d ppid:%d parent_proc:%s kernel_function:%s process_trace:%s cmd_line_args:%s\n", ctime(gettimeofday_s()), name, execname(), uid(), pid(), ppid(), pexecname(), ppfunc(), pstrace(ts), cmdline_str()) }
-
执行脚本
# yum -y install systemtap # stap-prep # stap -v ./timechange.stp
示例输出如下:
# stap -v timechange.stp [...] Thu Sep 16 05:11:55 2021 syscall_name:clock_settime proc_name:ntpdate uid:0 pid:22893 ppid:9195 parent_proc:bash kernel_function:SyS_clock_settime process_trace: ntpdate(22893) bash(9195) sshd(9184) sshd(1240) cmd_line_args:ntpdate -u 0.rhel.pool.ntp.org Thu Sep 16 06:59:35 2021 syscall_name:adjtimex proc_name:ntpd uid:38 pid:997 ppid:1 parent_proc:systemd kernel_function:SyS_adjtimex process_trace: ntpd(997) cmd_line_args:/usr/sbin/ntpd -u ntp:ntp -x Thu Sep 16 07:02:41 2021 syscall_name:clock_settime proc_name:date uid:0 pid:23717 ppid:9195 parent_proc:bash kernel_function:SyS_clock_settime process_trace: date(23717) bash(9195) sshd(9184) sshd(1240) cmd_line_args:date -s Thu Sep 16 10:29:16 2021 Thu Sep 16 04:59:23 2021 syscall_name:settimeofday proc_name:systemd-timedat uid:0 pid:23734 ppid:1 parent_proc:systemd kernel_function:SyS_settimeofday process_trace: systemd-timedat(23734) cmd_line_args:/usr/lib/systemd/systemd-timedated Thu Sep 16 05:18:50 2021 syscall_name:settimeofday proc_name:hwclock uid:0 pid:24794 ppid:9195 parent_proc:bash kernel_function:SyS_settimeofday process_trace: hwclock(24794) bash(9195) sshd(9184) sshd(1240) cmd_line_args:hwclock --hctosys