开源HIDS osquery的主机监控功能和实现原理。 osquery代码链接:osquery osquery表结构:表结构 本文是在安装它之后,从osqueryi中的表再调研代码来获取它的实现
对系统使用的设备建立基线,从而发现故障的设备,用于IDC机房。 不足之处:这些功能用于传统机房。对于云时代并不适用
功能 | 实现原理 |
---|---|
acpi设备 | 读取/sys/firmware/acpi/tables目录 |
块设备 | 通过调用udev库API读取 |
设备信息(设备文件,指纹,分区) | 通过sleuthkit第三方库读取 |
硬件事件 | 通过读取udev事件 |
intel mei信息 | 通过读取/dev/mei0 |
RAID信息(设备,特性,驱动) | 读取/proc/mdstat |
固件信息(内存阵列和地址映射,内存设备和地址映射,故障信息,OEM特征,SMBIOS),设备平台信息 | 读取/sys/firmware/dmi/tables/DMI,/sys/firmware/efi/systab |
PCI设备 | 读取/usr/share/misc/pci.ids, /usr/share/hwdata/pci.ids,/usr/share/pci.ids |
智能卡信息 | 通过smartmontools库获取 |
USB信息 | 通过udev库读取 |
IO设备的内存映射 | 读取/proc/iomem |
建立系统基线,获取系统基本信息,如CPU,内存,磁盘,分区,内核版本,加载的模块,系统运行时长,内存控制参数,系统限制,属于哪个发行版 不足之处:
/boot
,
/lib/modules
的内容,确保哪些是系统加载,哪些是手动加载
/etc/init.d
,而是读取/etc/rc.d/
, 或者支持systemd
/etc/fstab
,确保哪些分区是系统默认加载,哪些是其它操作加载的
功能 | 实现原理 |
---|---|
cpu运行状态 | 读取/proc/stat |
cpu寄存器列表 | 通过内联汇编读取cpu信息 |
cpu msr信息 | 读取/dev/cpu/<id>/msr |
内存信息 | 读取/proc/meminfo |
共享内存信息 | 通过shmctl等API获取 |
磁盘加密 | 使用cryptsetupy库来获取磁盘加密情况 |
加载的分区 | 读取/proc/mounts |
内核信息 | 通过读取/proc/cmdline, /proc/version |
内核模块 | 通过读取/proc/modules |
系统时间 | 获取当前时间 |
系统启动时长 | 调用sysinfo |
系统信息(cpu个数,机器名,配置) | 读取/proc/cpuinfo, /etc/hostname和调用sysconf等API |
系统控制配置 | 读取/etc/sysctl.conf, /run/sysctl.d, /etc/sysctl.d,/usr/local/lib/sysctl.d, /usr/lib/sysctl.d, /lib/sysctl.d |
系统限制 | 调用getrlimit获取 |
发行版及版本 | 读取/etc/os-release, /etc/redhat-release, /etc/gentoo-release |
自启动项 | 读取/etc/xdg/autostart/, /etc/init.d/ |
系统负载 | 通过调用getloadavage的接口来获取 |