本文是对Wazuh, Osquery, AgentSmith这三款开源HIDS进行功能性的评估,目的是取长补短,做一个完善的HIDS系统。
HIDS的功能主要是依靠agent的数据收集功能, 所以HIDS的功能对比,实际上是agent的功能对比。
HIDS主要是为了检测主机系统的异常行为,也就是说,必须要建立各种基线,在基线的基础上进行事件监控,从事件中甄别出异常行为或误报,从而不断地调整更新基线。
那么,agent必须要采集各种系统信息生成各种基线,并且通过轮循或实时监控的方式来收集各种事件。
agent由于必须要主机系统上运行,有着不抢占资源,无感知,尽可能精准的要求,
所以开发agent需要使用更贴近系统,管控资源更好,不需要依赖大量运行库的语言,一般都是使用C/C++,也有使用rust和Go。
由于基线数据的采集频次不需要很高,可以使用定时采集方式,降低对业务服务进程的性能影响。所以,采集基线数据的开发难度不是很高。
事件监控,很多时候是希望不要遗漏,尽量精准和实时,但同时又不占大量资源,尽量不影响业务系统的运行。所以,事件监控的开发难度就非常高,特别是实时监控方面。
基于上面考虑,对agent的功能评估标准大致如下:
基线:整体占40分,包含10条基线,每条基线4分。
事件监控:总分60。由于在操作系统里,基本上一切事件都可以归结为进程的活动。
功能有无这样表示:
1: 有 0: 无
基线 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
CPU | 1 | 1 | 0 |
内存设备信息 | 0 | 1 | 0 |
PCI设备 | 0 | 1 | 0 |
块设备 | 0 | 1 | 0 |
RAID设备 | 0 | 1 | 0 |
智能卡 | 0 | 1 | 0 |
USB信息 | 0 | 1 | 0 |
固件 | 0 | 1 | 0 |
ACPI | 0 | 1 | 0 |
IO设备映射 | 0 | 1 | 0 |
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
CPU信息 | 1 | 1 | 0 |
内存信息 | 1 | 1 | 1 |
磁盘加载 | 0 | 1 | 0 |
磁盘使用 | 1 | 1 | 0 |
内核信息 | 1 | 1 | 1 |
发行版信息 | 1 | 1 | 1 |
系统限制 | 0 | 1 | 0 |
系统信息(主机名之类) | 1 | 1 | 1 |
系统控制配置 | 1 | 1 | 0 |
系统负载 | 0 | 1 | 0 |
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
APT | 0 | 1 | 0 |
yum | 0 | 1 | 0 |
pip | 0 | 0 | 0 |
npm | 0 | 0 | 0 |
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
deb包 | 1 | 1 | 0 |
rpm包 | 1 | 1 | 0 |
emerge包(gentoo) | 0 | 1 | 0 |
python包 | 0 | 1 | 0 |
npm包 | 0 | 0 | 0 |
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
主机列表 | 0 | 1 | 0 |
协议列表 | 0 | 1 | 0 |
服务端口列表 | 0 | 1 | 0 |
ld配置 | 0 | 0 | 0 |
登录配置 | 0 | 0 | 0 |
shell配置 | 0 | 0 | 0 |
fstab配置 | 0 | 0 | 0 |
web配置 | 0 | 0 | 0 |
DB配置 | 0 | 0 | 0 |
MQ配置 | 0 | 0 | 0 |
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
ssh配置 | 0 | 1 | 0 |
用户信息 | 1 | 1 | 0 |
组信息 | 0 | 1 | 0 |
当前登录用户 | 0 | 1 | 0 |
命令历史 | 0 | 1 | 1 |
sudo配置 | 0 | 1 | 0 |
AgentSmith可以通过execve钩子的日志来重组命令历史,而且会比Osquery更精确
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
网卡信息 | 1 | 1 | 0 |
地址信息 | 1 | 1 | 0 |
ARP信息 | 0 | 1 | 0 |
路由信息 | 1 | 1 | 0 |
DNS信息 | 0 | 1 | 0 |
防火墙信息 | 0 | 1 | 0 |
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
/etc/init.d | 0 | 0 | 0 |
systemd | 0 | 0 | 0 |
crontab | 0 | 1 | 0 |
/etc/xdg/autostart/ | 0 | 0 | 0 |
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
docker信息 | 0 | 1 | 0 |
docker镜像 | 0 | 1 | 0 |
docker卷 | 0 | 1 | 0 |
docker网络 | 0 | 1 | 0 |
docker容器 | 0 | 1 | 0 |
docker进程列表 | 0 | 1 | 1 |
docker容器文件变动 | 0 | 1 | 1 |
AgentSmith的事件内置了命名空间字段,所以,可以从这来获得容器里的进程变动和文件变动。
功能 | Wazuh | Osquery | AgentSmith |
---|---|---|---|
apparmor配置 | 0 | 1 | 0 |
selinux配置 | 0 | 1 | 0 |
yara配置 | 0 | 1 | 0 |
这三款HIDS都没有检测隐藏文件和隐藏进程的能力(Wazuh有检测隐藏进程能力)。
它们都可以获取全量进程创建和退出信息,也可以获取所有文件和目录访问信息。
但像top, ps这些命令获取进程列表都是读取/proc,用户态的rootkit可以直接挂钩readdir这些libc函数,对于getdents的返回有针对地跳过,就可以达到隐藏某个进程。Wazuh是通过kill发信号给进程,然后再检测是否在/proc存在。
对于隐藏文件,也是同样挂钩。
所以,这三款HIDS应该这样做:
某进程创建了,没有退出事件,看是否在/proc下有该进程 某路径访问了,在用户态检测一下该路径是否存在。
Osquery在监控这些事件时,也可以通过eBPF来实现,
但bpf是在Linux 3.18才开始出现,很多特性是4.1才出现。所以对内核要求比较高
从基线完善度来说,Osquery是最好的。从事件监控来说,AgentSmith是最好的。
如果要开发一个完善的HIDS,可以参照Osquery的基线功能和AgentSmith事件监控功能。Wazuh在功能完善性表现只是一般。在深度开发的情况下,可以不用参考它。
觉得好,请关注,转发和点在看,谢谢!
暗号:ae969