最后防线:三款开源HIDS功能对比评估
2023-2-7 08:3:43 Author: 奶牛安全(查看原文) 阅读量:21 收藏

本文是对Wazuh, Osquery, AgentSmith这三款开源HIDS进行功能性的评估,目的是取长补短,做一个完善的HIDS系统。

简介

HIDS的功能主要是依靠agent的数据收集功能, 所以HIDS的功能对比,实际上是agent的功能对比。

HIDS主要是为了检测主机系统的异常行为,也就是说,必须要建立各种基线,在基线的基础上进行事件监控,从事件中甄别出异常行为或误报,从而不断地调整更新基线。

那么,agent必须要采集各种系统信息生成各种基线,并且通过轮循或实时监控的方式来收集各种事件。

agent由于必须要主机系统上运行,有着不抢占资源,无感知,尽可能精准的要求,
所以开发agent需要使用更贴近系统,管控资源更好,不需要依赖大量运行库的语言,一般都是使用C/C++,也有使用rust和Go。

评估标准

由于基线数据的采集频次不需要很高,可以使用定时采集方式,降低对业务服务进程的性能影响。所以,采集基线数据的开发难度不是很高。

事件监控,很多时候是希望不要遗漏,尽量精准和实时,但同时又不占大量资源,尽量不影响业务系统的运行。所以,事件监控的开发难度就非常高,特别是实时监控方面。

基于上面考虑,对agent的功能评估标准大致如下:

  • 基线:整体占40分,包含10条基线,每条基线4分。

    1. 设备基线:系统的硬件设备(CPU型号,内存设备型号,存储设备,各种外设)
    2. 系统基线:cpu个数,内存使用,磁盘使用,分区加载,系统版本,发行版,启动时长,系统限制
    3. 供应链基线:软件管理的仓库
    4. 软件基线:软件列表,软件详细信息
    5. 配置基线:shell配置,启动配置,加载配置,分区配置
    6. 用户基线: 用户列表,组列表,权限列表
    7. 网络基线:网卡个数,地址信息,ARP信息,路由信息,DNS信息,防火墙信息
    8. 服务基线:服务列表,已启动的服务,服务所管理的进程,定时任务
    9. 容器基线:docker版本,镜像,网络,容器
    10. 安全基线:apparmor配置和运行状态,selinux配置和运行状态,yara配置,suid程序
  • 事件监控:总分60。由于在操作系统里,基本上一切事件都可以归结为进程的活动。

    1. 谁启动进程:进程树,检测进程隐藏,so注入,提权行为
    2. 某个进程退出:监控进程异常退出
    3. 哪个进程插入内核模块:检测rootkit/bootkit
    4. 哪个进程操作某个文件:检测恶意篡改,痕迹隐藏,恶意授权
    5. 哪个进程启动socket:检测高危端口和外连行为
    6. 哪个进程操作某个进程:检测动态注入和DOS行为

各种基线

功能有无这样表示:
1: 有 0: 无

设备基线

基线WazuhOsqueryAgentSmith
CPU110
内存设备信息010
PCI设备010
块设备010
RAID设备010
智能卡010
USB信息010
固件010
ACPI010
IO设备映射010

系统基线

功能WazuhOsqueryAgentSmith
CPU信息110
内存信息111
磁盘加载010
磁盘使用110
内核信息111
发行版信息111
系统限制010
系统信息(主机名之类)111
系统控制配置110
系统负载010

供应链基线

功能WazuhOsqueryAgentSmith
APT010
yum010
pip000
npm000

软件基线

功能WazuhOsqueryAgentSmith
deb包110
rpm包110
emerge包(gentoo)010
python包010
npm包000

配置基线

功能WazuhOsqueryAgentSmith
主机列表010
协议列表010
服务端口列表010
ld配置000
登录配置000
shell配置000
fstab配置000
web配置000
DB配置000
MQ配置000

用户基线

功能WazuhOsqueryAgentSmith
ssh配置010
用户信息110
组信息010
当前登录用户010
命令历史011
sudo配置010

AgentSmith可以通过execve钩子的日志来重组命令历史,而且会比Osquery更精确

网络基线

功能WazuhOsqueryAgentSmith
网卡信息110
地址信息110
ARP信息010
路由信息110
DNS信息010
防火墙信息010

服务基线

功能WazuhOsqueryAgentSmith
/etc/init.d000
systemd000
crontab010
/etc/xdg/autostart/000

容器基线

功能WazuhOsqueryAgentSmith
docker信息010
docker镜像010
docker卷010
docker网络010
docker容器010
docker进程列表011
docker容器文件变动011

AgentSmith的事件内置了命名空间字段,所以,可以从这来获得容器里的进程变动和文件变动。

安全基线

功能WazuhOsqueryAgentSmith
apparmor配置010
selinux配置010
yara配置010

事件监控

谁启动进程:进程树,检测进程隐藏,so注入,提权行为, 监控进程启动

  • Wazuh:没有进程树,有检测进程隐藏,没有检测so注入,没有检测提权,可以通过Audit来监控进程启动
  • Osquery:通过Audit监控进程启动
  • AgentSmith:除了没有检测进程隐藏,都有

某个进程退出:监控进程异常退出

  • Wazuh:通过Audit监控进程异常退出
  • Osquery:通过Audit监控进程异常退出
  • AgentSmith:有

哪个进程插入内核模块:检测rootkit/bootkit

  • Wazuh:通过Audit的SYSCALL类型来过滤
  • Osquery:通过Audit的SYSCALL类型来过滤
  • AgentSmith:有

哪个进程操作某个文件:检测恶意篡改,痕迹隐藏,恶意授权

  • Wazuh:通过AuditAudit的SYSCALL类型来过滤,但无法检测隐藏文件
  • Osquery:通过AuditAudit的SYSCALL类型来过滤,但无法检测隐藏文件
  • AgentSmith:有,无法检测隐藏文件

哪个进程启动socket:检测高危端口和外连行为

  • Wazuh:通过Audit的SYSCALL类型来过滤
  • Osquery:通过Audit的SYSCALL类型来过滤
  • AgentSmith:有

哪个进程操作某个进程:检测动态注入和DOS行为

  • Wazuh:通过Audit的SYSCALL类型来过滤
  • Osquery:通过Audit的SYSCALL类型来过滤
  • AgentSmith:有

这三款HIDS都没有检测隐藏文件和隐藏进程的能力(Wazuh有检测隐藏进程能力)。
它们都可以获取全量进程创建和退出信息,也可以获取所有文件和目录访问信息。
但像top, ps这些命令获取进程列表都是读取/proc,用户态的rootkit可以直接挂钩readdir这些libc函数,对于getdents的返回有针对地跳过,就可以达到隐藏某个进程。Wazuh是通过kill发信号给进程,然后再检测是否在/proc存在。
对于隐藏文件,也是同样挂钩。
所以,这三款HIDS应该这样做:

  1. 某进程创建了,没有退出事件,看是否在/proc下有该进程
  2. 某路径访问了,在用户态检测一下该路径是否存在。

Osquery在监控这些事件时,也可以通过eBPF来实现,
但bpf是在Linux 3.18才开始出现,很多特性是4.1才出现。所以对内核要求比较高

结论

从基线完善度来说,Osquery是最好的。从事件监控来说,AgentSmith是最好的。

如果要开发一个完善的HIDS,可以参照Osquery的基线功能和AgentSmith事件监控功能。Wazuh在功能完善性表现只是一般。在深度开发的情况下,可以不用参考它。

觉得好,请关注,转发和点在看,谢谢!

暗号:ae969


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247488176&idx=1&sn=879142f6acbdcb291b432f8d4f6a45aa&chksm=fdf979a5ca8ef0b3b979a8cfe9b27dc8885427eab347fb31c94c2e43c6eac72eae8066652fe7#rd
如有侵权请联系:admin#unsafe.sh