赞
踩
参考文章:
1、安全-linux audit审计使用入门
2、audit详细使用配置
3、Linux-有哪些常见的System Call?
写在前面:
1.写博客,做日常工作记录,好记性不如烂笔头嘛;
2.内容非原创,参考的文章已上文列出;
3.如有错误,欢迎指正。
audit是Linux内核提供的一种审计机制,由于audit是内核提供的,因此,在使用audit的过程中就包含内核空间和用户空间部分:
auditctl
:用户态程序,用于审计规则配置和配置变更
kaudit:内核空间程序,根据配置好的审计规则记录发生的事件
auditd:用户态程序,通过netlink获取审计日志
通常的使用流程
用户通过auditctl配置审计规则
内核的kauditd程序获取到审计规则后,记录对应的审计日志
用户态的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/
举例:
# 配置项解析,只列举了一部分 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中的相同。
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.
[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
网上查询的,好多说是看这个文件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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。