静态规则检测
通过之前的inotity
机制监控web目录下文件的变动,可以通过以下几种维度进行恶意判断
检测点 | 基于业务特点 | 正常 | 异常 |
---|---|---|---|
文件属主 | 统一的发布时间 | 属主为发布系统启动账户 | 属主为webserver进程账户 |
生成时间 | 工作时间 | 工作时间内生成 | 非工作时间生成 |
生成时间 | 同目录文件统一生成 | 大概率与同目录内其他文件在连续时间内生成 | 与同目录其他文件生成时间相差甚远 |
inode | 同目录文件统一生成 | 同目录下文件inode连续分布 | 与同目录其他文件inode相差甚远 |
目录 | 上层目录不保存CGI | CGI文件位于Web用户不可写目录 | 位于上传文件夹 |
静态规则就时使用正则去匹配, 参考笔者的 https://github.com/he1m4n6a/findWebshell
反弹shell检测
黑客获取webshell一般都是为了执行系统命令,一般会先反弹一个shell。检测规则:
通过netlink监控新建的进程
如果新bash进程属主是www-data(nginx进程权限属主),则存在被入侵风险
命令执行检测
反弹shell必定伴随着命令执行,内核监控exec等调用,查看执行命令的父进程是不是nginx等web进程,如果www-data的bash进程执行了系统命令则存在被入侵的情况。
机器学习检测
参考 https://zhuanlan.zhihu.com/p/58676764
计算文件的熵值
正常文件的熵主要分布在4-6之间,形如正态分布,峰值在5左右,而webshell的分布更多的位于5-6之间。
命令执行类函数
统计
assert() eval() system() cmd_shell() shell_exec()
出现的次数。依照这个思想,我们还可以选区常见的:
(1)文件,目录操作类函数
(2)解码编码类函数
(3)文件压缩类函数
(4)字符编码转换类函数
(5)字符替换类函数
(6)动态函数类等其他敏感不常见操作
最长的单词长度
这个主要是针对进行编码加密的文件,他可能把符合php愈发的文件加密的乱七八糟
其他检测
其他的检测,不是集成在HIDS中。方法有:
- 流量检测:通过检测流量中的特征,比如中国菜刀进行webshell通信时候就有特征码。
- RASP检测:无论你的代码怎么混淆,最终底层解析还是一样的,RASP就可以在底层hook,获取混淆前的代码,在用之前的静态规则进行检测。
总结:
HIDS上不是只使用一种规则进行检测,都是多种规则和方法相互补充,类似于纵深防御的概念。因为一种方法总是有疏漏点,而多种方法相结合的方式可以把疏漏降低到最低。
参考:
https://paper.seebug.org/526/#_3
https://github.com/hi-WenR0/MLCheckWebshell
https://zhuanlan.zhihu.com/p/58676764
https://github.com/dennybritz/cnn-text-classification-tf/