最近在研究webshell检测的小东西,所以开启一个专门记录webshell检测工具开发的专栏,若有遗漏之处,请大佬们指出。
本篇大致了解以下内容
- 什么是webshll?有哪些类型?各自有什么不同?
- Webshell有哪些常见的检测方式?
- 对于webshell检测,最难的挑战是什么?
【什么是webshll?有哪些类型?各自有什么不同?】
属于木马其中一种类型,主要是攻击者通过web端,上传一些恶意代码文件,尝试获取服务器信息和权限的文件,一般的,利用能够执行系统命令、加载代码的函数,或者组合一些普通函数,完成一些高级间谍功能的网站后门的脚本,叫做 Webshell
大致分一句话木马、小马(通常比较简单)、大马(代码量大,可以更好获取服务器信息,但易被发现)
【Webshell有哪些常见的检测方式?】
大致分为五种
- 静态检测:常见的就是正则匹配 和 文件md5对比,只能检测固定的木马脚本
- 动态检测:
- 污点分析模拟执行:主要是借助php编译的特性,在php的语法分析中生成AST,获取命令执行关键执行节点,并获取最终结果【可以借助php parser】
- 语法检测:剥离代码、注释,分析变量、函数、字符串、语言结构
- 统计学检测:主要是根据Webshell脚本与正常源码的差异性来识别的
- 词袋统计
- 基于黑白名单的检测
- 基于抽象语法树的评分规则
- 基于opcode的机器学习研究【词袋分析】
【哪一种检测方式是比较有效的?】
- 河马采用的海量hash值匹配,数据够大,准确率也会变高
- 单纯是php检测的话,可以采用AST抽象树,进行代码剥离,得到最终的执行结果,这个是D盾的做法
- 也可以用机器学习,通过数据训练出来的hash值和敏感词,进行统计计分,同样需要大量的数据支撑