Wauzh原理简析及audit规则风险评估

HIDS基本原理

熟悉HIDS的朋友应该了解,服务器的shell监控一般有两种,一种依靠Linux的audit审计功能,比如Wazuh,一种是重编译和替换bash二进制文件,将shell上执行的命令实时通过socket传递到服务端。

前一种方法优点是记录完整,缺点是会产生大量的日志,以及audit.rules配置失误的话导致服务器宕机。

后一种方式虽然日志简洁,但如果通过命令远程执行漏洞不走服务器的shell则捕获不到操作。在此我主要介绍Wazuh所使用的audit监控。

audit的原理浅显来说,linux 用于用户空间与内核空间的中间层叫做syscall,是连接用户态和内核态的桥梁,当用户访问硬件设备,比如申请系统资源、操作设备读写、创建新进程时,用户空间发起请求,内核空间负责执行,syscall提供一套标准接口实现。

当用户空间向内核空间发出syscall时,会产生软中断,让程序由用户态进入内核态进而执行相应的操作,每个syscall都有唯一的系统调用号对应。

这样做的好处是内核空间是在受保护的地址空间中,用户空间程序无法直接执行内核代码,也无法访问内核数据。

网上举例了kill()函数的执行流程:

kill() -> kill.S -> swi陷入内核态 -> 从sys_call_table查看到sys_kill -> ret_fast_syscall -> 回到用户态执行kill()下一行代码。

参考syscall list:http://man7.org/linux/man-pages/man2/syscalls.2.html

audit框架如下:


Linux 监控框架:


除了Wazuh,开源Agent方案还有AuditBeat、OSQuery、NxLog等等,可以根据规模和平台的大小进行选择,各种入侵检测方案。

audit开启风险

规则配置建议

部署完wazuh-agent后,需要通过auditctl配置一些监控规则,auditctl官方文档中介绍,过多的规则将导致性能下降,建议合并规则,比如:

auditctl -a exit,always -S open -F success=0

auditctl -a exit,always -S truncate -F success=0

可以合并为一条规则:

auditctl -a exit,always -S open -S truncate -F success=0

此外,善用文件系统审核,比如如果只关注/etc中的文件,而不关心/usr或者/sbin,可以写作:

auditctl -a exit,always -S open -S truncate -F dir=/etc -F success=0

audit规则文件注意事项

audit规则文件默认路径为/etc/audit/audit.rules,非常需要注意的参数:

-e [0..2]    当参数为0时,暂时禁用审核;为1时,启用审核;为2时,不符合审核配置的操作将被拒绝

Set enabled flag. When 0 is passed, this can be used to temporarily disable auditing. When 1 is passed as an argument, it will enable auditing. To lock the audit configuration so that it can't be changed, pass a 2 as the argument. Locking the configuration is intended to be the last command in audit.rules for anyone wishing this feature to be active. Any attempt to change the configuration in this mode will be audited and denied. The configuration can only be changed by rebooting the machine.

-f [0..2]   当参数为0时,内核出现的严重错误会被忽略;为1时,当缓冲区耗尽或发生越界访问时会在/var/log/audit/audit.log日志中报错;为2时,到用户控件的audit守护进程传输错误、backlog超出限制、内存不足以及超出速率限制都会导致auditd使主机panic来阻止进一步的操作。

Set failure flag 0=silent 1=printk 2=panic. This option lets you determine how you want the kernel to handle critical errors. Example conditions where this flag is consulted includes: transmission errors to userspace audit daemon, backlog limit exceeded, out of kernel memory, and rate limit exceeded. The default value is 1. Secure environments will probably want to set this to 2.

-p [r|w|x|a] 文件系统监控将触发的权限访问类型,r =读取,w =写入,x =执行,a =属性更改,读和写默认是syscall中省略的,会导致产生过多日志

Describe the permission access type that a file system watch will trigger on. r=read, w=write, x=execute, a=attribute change. These permissions are not the standard file permissions, but rather the kind of syscall that would do this kind of thing. The read & write syscalls are omitted from this set since they would overwhelm the logs. But rather for reads or writes, the open flags are looked at to see what permission was requested.

已知问题如下:

1、默认audit.rules中,默认缓冲区buffer的大小为-b 320,有可能导致缓冲瓶颈,官方建议是将这个值翻倍也就是设置为640,视具体测试情况而定,当发生时日志报错为:audit: backlog limit exceeded

2、当-f 的参数设置为2时,由于错误日志超出限制,audit使主机通过重启的方式来应对,造成严重事故

在我司环境中,由于只存在Linux 64位系统,我只对execve进程执行syscall进行监控,因此只对服务器配置一条规则:

auditctl -a exit,always -F arch=b64 -S execve -k audit-wazuh-c

并且在规则配置前,会强制检查audit.conf(或者auditctl -s)检查参数的配置,当-e/enabled、-f/failure 参数为2时,则不允许auditctl规则的建立。

参考:

https://www.freebuf.com/articles/es/222976.html

https://linux.die.net/man/8/auditctl

https://linux.die.net/man/7/audit.rules

https://www.cnblogs.com/zl1991/p/6543634.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351