【操作系统】安全审计-audit

参考文章:

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/

3.1应用配置文件

举例:
在这里插入图片描述

# 配置项解析,只列举了一部分
1.log_file:审计日志文件的完整路径;
2.log_format:写日志时使用的格式;
3.flush:多长时间向日志文件中写一次数据。(值可以是NONE、INCREMENTAL、DATA和SYNC之一。如果设置为NONE,则不需要做特殊努力来将数据刷新到日志文件中。如果设置为INCREMENTAL,则用freq选项的值确定多长时间发生一次向磁盘的刷新。如果设置为DATA,则审计数据和日志文件一直是同步的。如果设置为SYNC,则每次写到日志文件时,数据和元数据是同步的。)
4.freq:如果flush设置为INCREMETNAL,审计守护进程在写到日志文件中前 从内核中接收的记录数。
5.num_logs:max_log_file_action:如果没有设置num_logs值,它就默认为0,意味着从来不循环日志文件。设置为ROTATE时要保存的日志文件数目。必须是0~99之间的数。如果设置为小于2,则不会循环日志。如果递增了日志文件的数目,就可能有必要递增/etc/audit/audit.rules中的内核backlog设置值,以便留出日志循环的时间。
6.space_left:以兆字节表示的磁盘空间数量。当达到这个水平时,会采取space_left_action参数中的动作。
7.space_left_action:当磁盘空间量达到space_left中的值时,采取这个动作。有效值为IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和 HALT。
	7.1如果设置为IGNORE,则不采取动作。
	7.2如果设置为SYSLOG,则向系统日志/var/log/messages写一条警告消息。
	7.3如果设置为 EMAIL,则从action_mail_acct向这个地址发送一封电子邮件,并向/var/log/messages中写一条警告消息。
	7.4如果设置为 SUSPEND,则不再向审计日志文件中写警告消息。
	7.5如果设置为SINGLE,则系统将在单用户模式下。如果设置为SALT,则系统会关闭。
8.action_mail_acct:负责维护审计守护进程和日志的管理员的电子邮件地址。如果地址没有主机名,则假定主机名为本地地址,比如root。必须安装sendmail并配置为向指定电子邮件地址发送电子邮件。
9.admin_space_left:以兆字节表示的磁盘空间数量。这个值应小于space_left。如果达到这个水平,则会采取admin_space_left_ action所指定的动作。(用这个选项设置比space_left更多的主动性动作,以防万一space_left_action没有让管理员释放任何磁盘空间。)
10.admin_space_left_action:当自由磁盘空间量达到admin_space_left指定的值时,则采取动作。有效值为IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和HALT。与这些值关联的动作与space_left_action中的相同。
11.disk_full_action:如果含有审计文件的分区已满,则采取这个动作。可能值为IGNORE、SYSLOG、SUSPEND、SINGLE和HALT。与这些值关联的动作与space_left _action中的相同。(提示:如果不循环审计日志文件,则含有/var/log/audit/的分区可能变满并引起系统错误。因此,建议让/var/log/audit/位于一个单独的专用分区。)
12.disk_error_action:如果在写审计日志或循环日志文件时检测到错误时采取的动作。值必须是IGNORE、SYSLOG、SUSPEND、SINGLE和HALT之一。与这些值关的动作与space_left_action中的相同。

四、审计规则

  1. 控制规则:用于更改审计系统本身的配置和设置。
auditctl -b 8192	# 配置buffer大小为8M
auditctl -e 0
auditctl -f 2
auditctl -s
  1. 文件系统规则:审核对特定文件或目录的任何类型的访问(比较常见)
# 项太多了,举例一个,监控针对/etc/passwd文件的读、写、执行和属性改变,关键字为change_passwd
auditctl -w /etc/passwd -p rwxa -k change_passwd
# 如果要查询,
ausearch -i -k change_passwd

详见附录 auditctl -h

  1. 系统调用规则:用于监视由任何进程或特定用户进行的系统调用
# -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
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值