【Linux】安全审计-audit
文章目录
- 一、audit简介
- 二、开启auditd服务
- 三、相关文件
- 四、审计规则
- 五、审计日志查询及分析
- 附录1:auditctl -h
- 附录2:systemcall 类型
参考文章:
1、安全-linux audit审计使用入门
2、audit详细使用配置
3、Linux-有哪些常见的System Call?
写在前面:
1.写博客,做日常工作记录,好记性不如烂笔头嘛;
2.内容非原创,参考的文章已上文列出;
3.如有错误,欢迎指正。
一、audit简介
audit是Linux内核提供的一种审计机制,由于audit是内核提供的,因此,在使用audit的过程中就包含内核空间和用户空间部分:
auditctl
:用户态程序,用于审计规则配置和配置变更
kaudit:内核空间程序,根据配置好的审计规则记录发生的事件
auditd:用户态程序,通过netlink获取审计日志
通常的使用流程
用户通过auditctl配置审计规则
内核的kauditd程序获取到审计规则后,记录对应的审计日志
用户态的auditd获取审计日志并写入日志文件
二、开启auditd服务
systemctl status auditd.service
systemctl start auditd.service
三、相关文件
# 1.应用配置文件
/etc/audit/auditd.conf
# 2.添加规则的文件
/etc/audit/rules.d/audit.rules
# 3.日志所在目录
/var/log/audit/
四、审计规则
- 控制规则:用于更改审计系统本身的配置和设置。
auditctl -b 8192 # 配置buffer大小为8M
auditctl -e 0
auditctl -f 2
auditctl -s
- 文件系统规则:审核对特定文件或目录的任何类型的访问(比较常见)
# 项太多了,举例一个,监控针对/etc/passwd文件的读、写、执行和属性改变,关键字为change_passwd
auditctl -w /etc/passwd -p rwxa -k change_passwd
# 如果要查询,
ausearch -i -k change_passwd
详见附录 auditctl -h
- 系统调用规则:用于监视由任何进程或特定用户进行的系统调用
# -S 设置要监控的系统调用名或者系统调用号,下述命令仅作举例
需要补充例子
同样:详见附录 auditctl -h
五、审计日志查询及分析
# 仅列举比较常用的方式,-k后面跟创建审计规则时设置的关键字
ausearch -i -k ***
审计日志类似:(各个系统可不同)
审计日志-字段分析
-
type:audit消息类型,消息类型有100多种(具体查看请点击:audit消息类型)
比较常见有SYSCALL:代表这条记录是向内核的系统调用触发产生的. -
msg:消息的ID, 它有两个部分组成, 分号之前的是Unix的时间戳,分号之后的是真正的event ID(同一个应用程序的相同system call拥有相同的event ID, 同一个应用的不同system call则不同。)
-
arch: 调用system call的CPU构架
-
syscall:system call的类型(可使用
ausyscall --dump
来显示所有的系统调用) -
success:system call是成功或者失败
-
comm: 出现在任务列表中,应用程序的名称。
-
exe: 二进制程序的解析路径。
-
ses: 用户登录的session ID.
-
auid: audit ID, 针对某一用户,一个进程会被分配一个audit ID, 该audit ID会被传递给子进程,尽管在系统中用户切换,该audit ID将始终保持一致。 这样我们可以针对对某一用户进行trace。
-
a0 to a3: 系统调用的前四个参数的数字化,可以通过ausearch解码查看
-
items: 传递到应用程序的字符串数量
-
ppid:父进程的PID
-
pid:该进程的PID
-
uid: user ID。
-
gid: group ID。
-
euid, suid, fsuid: Effective user ID, set user ID, and file system user ID.
-
egid, sgid, fsgid: Effective group ID, set group ID, and file system group ID.
-
tty: 应用程序开启的终端,这种情况下pseudo-terminal used in an SSH session.
附录1:auditctl -h
[auditadm@localhost ~]$ auditctl -h
usage: auditctl [options]
-a <l,a> Append rule to end of <l>ist with <a>ction
-A <l,a> Add rule at beginning of <l>ist with <a>ction
-b <backlog> Set max number of outstanding audit buffers
allowed Default=64
-c Continue through errors in rules
-C f=f Compare collected fields if available:
Field name, operator(=,!=), field name
-d <l,a> Delete rule from <l>ist with <a>ction
l=task,exit,user,exclude
a=never,always
-D Delete all rules and watches
-e [0..2] Set enabled flag
-f [0..2] Set failure flag
0=silent 1=printk 2=panic
-F f=v Build rule: field name, operator(=,!=,<,>,<=,
>=,&,&=) value
-h Help
-i Ignore errors when reading rules from file
-k <key> Set filter key on audit rule
-l List rules
-m text Send a user-space message
-p [r|w|x|a] Set permissions filter on watch
r=read, w=write, x=execute, a=attribute
-q <mount,subtree> make subtree part of mount point's dir watches
-r <rate> Set limit in messages/sec (0=none)
-R <file> read rules from file
-s Report status
-S syscall Build rule: syscall name or number
--signal <signal> Send the specified signal to the daemon -t Trim directory watches
-v Version
-w <path> Insert watch at <path>
-W <path> Remove watch at <path>
--loginuid-immutable Make loginuids unchangeable once set
--backlog_wait_time Set the kernel backlog_wait_time
--reset-lost Reset the lost record counter
附录2:systemcall 类型
网上查询的,好多说是看这个文件https://github.com/torvalds/linux/blob/master/arch/sh/include/asm/unistd.h
# 不同系统间存在差距
# 下文只做简单举例,编号代表 类型值
$ ausyscall --dump
Using aarch64 syscall table:
0 io_setup
1 io_destroy
2 io_submit
3 io_cancel
4 io_getevents
5 setxattr
6 lsetxattr
7 fsetxattr
8 getxattr
9 lgetxattr
10 fgetxattr
11 listxattr
12 llistxattr
13 flistxattr
14 removexattr
15 lremovexattr
16 fremovexattr
17 getcwd
18 lookup_dcookie
19 eventfd2
20 epoll_create1
21 epoll_ctl
22 epoll_pwait
23 dup
24 dup3
25 fcntl
26 inotify_init1
27 inotify_add_watch
28 inotify_rm_watch
29 ioctl
30 ioprio_set
31 ioprio_get
32 flock
33 mknodat
34 mkdirat
35 unlinkat
36 symlinkat
37 linkat
38 renameat
39 umount2
40 mount
41 pivot_root
42 nfsservctl
43 statfs
44 fstatfs
45 truncate
46 ftruncate
47 fallocate
48 faccessat
49 chdir
50 fchdir
51 chroot
52 fchmod
53 fchmodat
54 fchownat
55 fchown
56 openat
57 close
58 vhangup
59 pipe2
60 quotactl
61 getdents
62 lseek
63 read
64 write
65 readv
66 writev
67 pread
68 pwrite
69 preadv
70 pwritev
71 sendfile
72 pselect6
73 ppoll
74 signalfd4
75 vmsplice
76 splice
77 tee
78 readlinkat
79 newfstatat
80 newfstat
81 sync
82 fsync
83 fdatasync
84 sync_file_range
85 timerfd_create
86 timerfd_settime
87 timerfd_gettime
88 utimensat
89 acct
90 capget
91 capset
92 personality
93 exit
94 exit_group
95 waitid
96 set_tid_address
97 unshare
98 futex
99 set_robust_list
100 get_robust_list
101 nanosleep
102 getitimer
103 setitimer
104 kexec_load
105 init_module
106 delete_module
107 timer_create
108 timer_gettime
109 timer_getoverrun
110 timer_settime
111 timer_delete
112 clock_settime
113 clock_gettime
114 clock_getres
115 clock_nanosleep
116 syslog
117 ptrace
118 sched_setparam
119 sched_setscheduler
120 sched_getscheduler
121 sched_getparam
122 sched_setaffinity
123 sched_getaffinity
124 sched_yield
125 sched_get_priority_max
126 sched_get_priority_min
127 sched_rr_get_interval
128 restart_syscall
129 kill
130 tkill
131 tgkill
132 sigaltstack
133 rt_sigsuspend
134 rt_sigaction
135 rt_sigprocmask
136 rt_sigpending
137 rt_sigtimedwait
138 rt_sigqueueinfo
139 rt_sigreturn
140 setpriority
141 getpriority
142 reboot
143 setregid
144 setgid
145 setreuid
146 setuid
147 setresuid
148 getresuid
149 setresgid
150 getresgid
151 setfsuid
152 setfsgid
153 times
154 setpgid
155 getpgid
156 getsid
157 setsid
158 getgroups
159 setgroups
160 uname
161 sethostname
162 setdomainname
163 getrlimit
164 setrlimit
165 getrusage
166 umask
167 prctl
168 getcpu
169 gettimeofday
170 settimeofday
171 adjtimex
172 getpid
173 getppid
174 getuid
175 geteuid
176 getgid
177 getegid
178 gettid
179 sysinfo
180 mq_open
181 mq_unlink
182 mq_timedsend
183 mq_timedreceive
184 mq_notify
185 mq_getsetattr
186 msgget
187 msgctl
188 msgrcv
189 msgsnd
190 semget
191 semctl
192 semtimedop
193 semop
194 shmget
195 shmctl
196 shmat
197 shmdt
198 socket
199 socketpair
200 bind
201 listen
202 accept
203 connect
204 getsockname
205 getpeername
206 sendto
207 recvfrom
208 setsockopt
209 getsockopt
210 shutdown
211 sendmsg
212 recvmsg
213 readahead
214 brk
215 munmap
216 mremap
217 add_key
218 request_key
219 keyctl
220 clone
221 execve
222 mmap
223 fadvise64
224 swapon
225 swapoff
226 mprotect
227 msync
228 mlock
229 munlock
230 mlockall
231 munlockall
232 mincore
233 madvise
234 remap_file_pages
235 mbind
236 get_mempolicy
237 set_mempolicy
238 migrate_pages
239 move_pages
240 rt_tgsigqueueinfo
241 perf_event_open
242 accept4
243 recvmmsg
260 wait4
261 prlimit64
262 fanotify_init
263 fanotify_mark
264 name_to_handle_at
265 open_by_handle_at
266 clock_adjtime
267 syncfs
268 setns
269 sendmmsg
270 process_vm_readv
271 process_vm_writev
272 kcmp
273 finit_module
274 sched_setattr
275 sched_getattr
276 renameat2
277 seccomp
278 getrandom
279 memfd_create
280 bpf
281 execveat
282 userfaultfd
283 membarrier
284 mlock2
285 copy_file_range
286 preadv2
287 pwritev2
288 pkey_mprotect
289 pkey_alloc
290 pkey_free
291 statx
292 io_pgetevents
293 rseq
294 kexec_file_load
424 pidfd_send_signal
425 io_uring_setup
426 io_uring_enter
427 io_uring_register
428 open_tree
429 move_mount
430 fsopen
431 fsconfig
432 fsmount
433 fspick
434 pidfd_open
435 clone3
1024 open
1025 link
1026 unlink
1027 mknod
1028 chmod
1029 chown
1030 mkdir
1031 rmdir
1032 lchown
1033 access
1034 rename
1035 readlink
1036 symlink
1037 utimes
1038 stat64
1039 lstat64
1040 pipe
1041 dup2
1042 epoll_create
1043 inotify_init
1044 eventfd
1045 signalfd
1049 newstat
1050 newlstat
1059 alarm
1060 getpgrp
1061 pause
1062 time
1063 utime
1064 creat
1066 futimesat
1067 select
1068 poll
1069 epoll_wait
1070 ustat
1071 vfork
1073 recv
1074 send
1075 bdflush
1076 oldumount
1077 uselib
1078 sysctl
1079 fork