企业安全实践(基础建设)之HIDS(下)
前言
HIDS运行依赖这样一个原理:一个成功的入侵者一般而言都会留下他们入侵的痕迹。
背景
在上一篇中,基于osquery实现了主机绝大部分信息差异变化的监控,但仍有部分信息是需要我们关注的。
网络连接
网络连接监控,在我的规则中包含有此条监控,但有个bug需要知道,我在一台网络连接数超过10W的主机上执行了此命令,CPU瞬时飙升为100%,在线上业务主机上是不适用的,因为这种现象可能会导致其中重要业务造成丢包或者干扰。为了解决这个问题我通过另一种办法实现了它,可以关注下此脚本
https://github.com/grayddq/NetWorkCheck
获取网络连接数巨大的信息时,我尝试了很多方法,比如netstat、cat /proc/net/tcp等都不满足我的需求,直到我尝试了ss命令,它的速度满足需求,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。我在脚本的核心的语句就是:
sudo ss -nap4 not dst 192.168.0.1/16 and not dst 10.0.0.0/8 and not dst 127.0.0.1 and not dst 172.16.0.1/12 and dport \> :1
可通过配置执行此脚本,进行网络连接的监控,辅助反弹shell的监控。
文件完整性检测
文件完整性检测,在HIDS中占的比例其实挺大的,它可以使你发现哪些文件被篡改替换了,添加了哪些文件后门,可以更加实时的发现一些安全隐患。
文件完整性检测在osquery其实有支持,但只是针对单一文件的监控,并没有发现针对目录的整体监控,为了解决这个问题,我尝试写了这个脚本,旨在对指定监控目录进行文件hash记录,定时运行,发现文件替换、修改等后门可疑程序。
在开发的过程中,发现Prelink服务会主动修改二进制文件,是为了系统加速各个程序的启动速度予以修改程序,进而文件的hash也就变动了。为此我兼容了prelink服务。
地址
https://github.com/grayddq/FileCheck
作者
咚咚呛,如有其他建议,可联系微信280495355
满足安全需求
1、支持自定义文件目录监控 2、支持目录递归监控 3、支持文件hash记录并比较 4、支持高危文件修改报警 5、支持prelink服务排除
技术细节
1、针对自定义的路径进行递归遍历操作,并对文件进行hash保存 2、当程序运行时先判断hash文件是否存在,不存在则创建,存在则获取当前文件hash与之比较 3、自定义高危文件名称,当修改时则进行高危日志打印 4、prelink服务会主动修改二进制文件,并记录prelink日志,当存在hash变动时,进行prelink日志检索,减少误报 5、相关告警日志默认存储在/var/log/filecheck.log文件中 6、hash文件保存在脚本目录名hash_db.txt中
测试环境
centos 7
python 2.7
部署
脚本放置在任意目录中 1)$ python FileCheck.py 尝试运行并生成hash_db.txt 2)配置crontab信息,定时执行,如5分钟一次。 3)$ cat /var/log/filecheck.log 查阅告警日志
配置
# 文件完整性检测目录,并递归子目录 CHECK_DIR = ['/bin/', '/sbin/', '/usr/bin/', '/usr/sbin/', '/usr/local/sbin/', '/usr/local/bin/'] # 重要高危告警文件名称 HEIGH_FILE_ALARM = ['login', 'ls', 'ps', 'ifconfig', 'du', 'find', 'netstat', 'bash'] # hash文件存储名称 HASH_DB = sys.path[0] + '/hash_db.txt' # 日志告警文件存储位置 ALARM_LOG = '/var/log/filecheck.log' # prelink服务会修改二进制文件,此处保存prelink服务的相关日志路径 PRELINK_LOG_PATH = ['/var/log/prelink/prelink.log', '/var/log/prelink.log']
日志结果
日志结果默认存储路径为:/var/log/filecheck.log
运行截图