Linux审计日志过滤与转发

 

一、        linux审计日志audit配置

默认以centos7的环境进行讲解,和centos6可能有些有些地方略微不同

audit配置文件:/etc/audit/auditd.conf

一般只要注意以下四项:

max_log_file = 50 #每个文件最大大小(MB)

num_logs = 4 #最大保留个数,默认大于4个会根据max_log_file_action 的方式进行处理,默认是rotate

flush = NONE # 默认情况下,审计日志为每20条flush一次,为了防止由于大量后台脚本运行产生的审计日志在频繁flush到磁盘,导致磁盘使用率过高(特别是没有cache直接落盘的RAID卡),所以需要修改flush模式为NONE。

local_events = yes # 是否写到本地,默认yes,如果已经开启了审计日志转发功能,根据需求是否关闭。

Audit的规则配置:/etc/audit/rules.d/audit.rules

-a exit,always -F arch=b64 -S execve -k exec //记录64位系统的所有用户的shell命令

-a exit,always -F arch=b32 -S execve -k exec //记录32位系统的所有用户的shell命令

-w /etc/crontab -p wa -k crontab       //监控crontab文件的写权限和属性权限

-w /etc/hosts -p wa -k hosts   //监控hosts文件的写权限和属性权限

-w /etc/hosts.allow -p wa -k hosts-allow //监控hosts.allow文件写权限和属性权限

-w /etc/hosts.deny -p wa -k hosts-deny  //监控hosts.deny文件写权限和属性权限

-w /etc/fstab -p wa -k fstab   //以此类推

-w /etc/passwd -p wa -k passwd

-w /etc/shadow -p wa -k shadow

-w /etc/group -p wa -k group

-w /etc/gshadow -p wa -k gshadow

-w /etc/chrony.conf -p wa -k ntp

-w /etc/sysctl.conf -p wa -k sysctl

-w /etc/security/limits.conf -p wa -k limits

-w /boot/grub2/grub.cfg -p wa -k grub

-w /etc/ssh/sshd_config -p wa -k ssh

-w /etc/udev/rules.d/ -p wa -k udev

-w /etc/profile -p wa -k profile

-w /etc/kdump.conf -p wa -k kdump

-w /etc/lvm/lvm.conf -p wa -k lvm

-w /etc/login.defs -p wa -k login-defs

-w /etc/syslog.conf -p wa -k rsyslog

w /etc/locale.conf -p wa -k i18n

-w /etc/sysconfig/network -p wa -k network

-w /etc/multipath.conf -p wa -k multipath

    -w:指定需要监控的文件。

    -p:指定监控的权限,rwxa,监控用户对这个目录的读写执行或数显变化时间戳的改变。

    -k:指定一个key,方便使用ausearch查询。

 

配置完后需要重启服务audit:

  service auditd restart     # 注意,不能用systemctl restart auditd ,auditd不支持。

重启后可以使用ausearch -k <key>来列出对应文件的修改记录,如ausearch -k multipath。

重启后audit生成的审计日志默认放在/var/log/audit/audit.log下

二、        audit实现日志转发

1、audit配置

audit有个rsyslog插件能实现转发到本地的rsyslog服务中

配置文件:                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

主要修改以下两项:

active = yes  # 开启转发功能,默认不开启

args = LOG_LOCAL2  # 已那个LOCAL2设备转发给rsyslog

service auditd restart     # 注意,不能用systemctl restart auditd ,auditd不支持。

2、rsyslog配置

rsyslog配置文件:

/etc/rsyslog.conf   # rsyslog程序配置文件

/etc/rsyslog.d/*.conf   # 这里讲解用来编写rsyslog的过滤规则。

/etc/rsyslog.conf主要修改以下配置:

*.* @@remote-host:514  

*.*:表示所有的设备日志所有的日志等级,包含我上面写的audit local2的这个设备的所有日志

@@:表示tcp协议,一个@表示udp协议。

remote-host:514:发给哪个服务器地址及端口。

然后重启服务即可:systemctl restart rsyslog.

注意:审计日志的还会输出到/var/log/message文件中,如果需要禁止输出到/var/log/message文件,可以修改rsyslog.conf配置项并重启即可:

*.info;mail.none;authpriv.none;cron.none.local2.none /var/log/messages 

       日志级别:

       debug       –有调式信息的,日志信息最多

info        –一般信息的日志,最常用

notice      –最具有重要性的普通条件的信息      

warning     –警告级别

err         –错误级别,阻止某个功能或者模块不能正常工作的信息

crit        –严重级别,阻止整个系统或者整个软件不能正常工作的信息

alert       –需要立刻修改的信息

emerg       –内核崩溃等严重信息

none        –什么都不记录

从上到下,级别从低到高,记录的信息越来越少

三、        审计日志过滤方法

1、 通过audit审计服务过滤

auditctl  -a always,exclude -F msgtype=PROCTITLE

-a always,exclude:排除PROCTITLE这种类型的日志

列出规则:auditctl -l

删除规则:auditctl -d always,exclude -F msgtype=SYSCALL

删除所以规则:auditctl -D

使用命令行重启后规则会失效,建议规则写入/etc/audit/rules.d/audit.rules文件中

2、通过rsyslog服务进行过滤

Linux审计日志样例:<150>Feb 18 12:10:01 bogon audispd: node=bogon type=PATH msg=audit(1581999001.279:3434): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=32828 dev=fd:00 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL

编辑:/etc/rsyslog.d/audit.conf

:msg, regex, "type=PATH" @192.168.43.130:5140 # 通过正则(regex)匹配到type=PATH字段的日志发送给192.168.43.130:5140。

:msg, regex, "type=PATH" ~    # 通过正则(regex)匹配到type=PATH字段的日志并过滤掉。

:msg, regex, "type=PATH"     # 通过正则(regex)匹配到type=PATH字段日志并保留,其他过滤。

以下是我再知识库里粘贴出来的过滤规则:

:msg, ereregex, "(bin|sbin|sa)\/(ping|top|mpstat|iostat|iotop|vmstat|sar|sadc|sh)\"" ~

:msg, ereregex, "(sbin|udev)\/(fstab_import|udisks-part-id|path_id|edd_id|scsi_id)\"" ~

:msg, ereregex, "(bin|sbin)\/(tr|sort|wc|cut|awk|gawk|grep|fgrep|egrep|sed|head|tail|tailf)\"" ~

:msg, ereregex, "(bin|sbin)\/(sleep|ls|expr|nohup|date|cat|du|dirname|tar|gzip|df|sg_persist|ip)\"" ~

:msg, ereregex, "(bin|sbin)\/(basename|hostname|readlink|bc|touch|dmesg)\"" ~

:msg, ereregex, "(bin|sbin)\/(consoletype|blkid|lsblk)\"" ~

:msg, ereregex, "\"(ping|top|mpstat|iostat|iotop|vmstat|sar|sadc|sh)\"" ~

:msg, ereregex, "\"(fstab_import|udisks-part-id|path_id|edd_id|scsi_id)\"" ~

:msg, ereregex, "\"(tr|sort|wc|cut|awk|gawk|grep|fgrep|egrep|sed|head|tail|tailf)\"" ~

:msg, ereregex, "\"(sleep|ls|expr|nohup|date|cat|du|dirname|tar|gzip|df|sg_persist|ip)\"" ~

:msg, ereregex, "\"(basename|hostname|readlink|bc|touch|dmesg)\"" ~

:msg, ereregex, "\"(consoletype|blkid|lsblk)\"" ~

:msg, ereregex, "(type=PATH)" ~

:msg, ereregex, "(key=\"exec\"|type=EXECVE)" @xxx.xxx.xxx.xxx:514

#将IP 替换为xxx.xxx.xxx.xxx

规则配置好后重启rsyslog即可。

3、通过logstash后端进行过滤

通过logstash插件drop{}可以进行过滤。

Logstash过滤前提解析必须得保证解析规则正确。

比如有一下审计日志:

Feb 18 11:13:32 bogon audispd: node=bogon type=SYSCALL msg=audit(1581995612.358:3187): arch=c000003e syscall=59 success=yes exit=0 a0=2649db0 a1=2766530 a2=27715a0 a3=7fffe5cf1100 items=2 ppid=54597 pid=56011 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts2 ses=56 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="exec"

通过logstash正则解析后的结果如下:

而后需要对审计日志进行过滤时,我们可以针对匹配某个字段进行过滤,如下:

目前在其他客户进行过滤的是第三种,主要过滤的日志类型有CWD,PATH,EOE。

Linux审计日志类型网址:https://access.redhat.com/articles/4409591#audit-record-types-2

猜你喜欢

转载自www.cnblogs.com/hel7512/p/12350023.html
今日推荐