静态规则检测

通过之前的inotity机制监控web目录下文件的变动,可以通过以下几种维度进行恶意判断

检测点 基于业务特点 正常 异常
文件属主 统一的发布时间 属主为发布系统启动账户 属主为webserver进程账户
生成时间 工作时间 工作时间内生成 非工作时间生成
生成时间 同目录文件统一生成 大概率与同目录内其他文件在连续时间内生成 与同目录其他文件生成时间相差甚远
inode 同目录文件统一生成 同目录下文件inode连续分布 与同目录其他文件inode相差甚远
目录 上层目录不保存CGI CGI文件位于Web用户不可写目录 位于上传文件夹

静态规则就时使用正则去匹配, 参考笔者的 https://github.com/he1m4n6a/findWebshell

反弹shell检测

黑客获取webshell一般都是为了执行系统命令,一般会先反弹一个shell。检测规则:

  1. 通过netlink监控新建的进程

  2. 如果新bash进程属主是www-data(nginx进程权限属主),则存在被入侵风险

命令执行检测

反弹shell必定伴随着命令执行,内核监控exec等调用,查看执行命令的父进程是不是nginx等web进程,如果www-data的bash进程执行了系统命令则存在被入侵的情况。

机器学习检测

参考 https://zhuanlan.zhihu.com/p/58676764

  1. 计算文件的熵值

    正常文件的熵主要分布在4-6之间,形如正态分布,峰值在5左右,而webshell的分布更多的位于5-6之间。

  2. 命令执行类函数

    统计assert() eval() system() cmd_shell() shell_exec()出现的次数。

    依照这个思想,我们还可以选区常见的:

    (1)文件,目录操作类函数

    (2)解码编码类函数

    (3)文件压缩类函数

    (4)字符编码转换类函数

    (5)字符替换类函数

    (6)动态函数类等其他敏感不常见操作

  3. 最长的单词长度

    这个主要是针对进行编码加密的文件,他可能把符合php愈发的文件加密的乱七八糟

其他检测

其他的检测,不是集成在HIDS中。方法有:

  1. 流量检测:通过检测流量中的特征,比如中国菜刀进行webshell通信时候就有特征码。
  2. 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/