Handling webshell attacks: A systematic mapping and survey 论文阅读笔记

论文标题

Handling webshell attacks: A systematic mapping and survey

来源: Computers & Security

等级: CCF-B

论文作者

Abdelhakim Hannousse , Salima Yahiouche

论文链接

https://www.sciencedirect.com/science/article/pii/S0167404821001905

摘要

In recent years, there has been a significant increase in research interest in webshell attacks. Webshells are pieces of code that can be written in different scripting languages. They are uploaded to web servers after creating a breach making use of injection vulnerabilities. Webshells provide hackers a web interface to remotely execute commands, manipulate confidential data and invade web servers. The aim of this study is to provide researchers and practitioners with a holistic view of existing studies, approaches, techniques and tools for the detection of webshells and highlight potential gaps. To achieve this goal, a systematic mapping study is conducted. Forty-four primary studies are identified, surveyed and categorized following their scope of interest. Collections of malicious and benign webshells useful for validation and testing are identified. We also provide an overview of existing tools used for webshell detection with their limitations. Our findings revealed biases toward PHP webshells and machine learning technology as detection method. The study also revealed the need for more comprehensive studies and benchmark datasets for proper validation.

最近几年,人们对WebShell攻击的研究兴趣越来越大。WebShell是一段能被多种脚本语言写成的代码。黑客利用注入漏洞将这些代码上传到Web服务器上。WebShell提供黑客一个Web层面的接口来执行命令,操作机密数据,入侵Web服务器。这份研究的目的是提供研究者和从业者一个对现有研究、途径、技术、检测工具等的一个全面的了解,并且强调了潜在的差距。为了实现这个目的,我们进行了一个系统的提供信息的研究。有44项主要的研究根据它们研究的范围被认定,调查,分类。认定了用于检测和验证的样本数据集。我们同时提供了一个关于现有检测工具的综述并提及了它们的不足。我们的发现揭示了对PHPwebshell检测和机器学习检测方法的偏见。这项研究也解释了我们对更广泛的研究以及基准数据集的需要。

WebShell检测难点

  • 恶意的WebShell使用了和管理员使用的用于远程管理服务器的类似的函数
  • WebShell通常不会在系统日志中留下完整的记录,黑客也不会经常访问WebShell感染界面,使得管理员难以追踪
  • WebShell文件可大可小
  • WebShell可用多种语言脚本编写
  • 黑客可以通过隐藏函数以及字符串编码来绕过检测

本文贡献

  • 提出和分类现有的针对WebShell的研究
  • 找出最可取的技术来防御WebShell
  • 确定了用于验证一个方法可行的技术集
  • 找出识别方法和验证方法的潜在的缺陷

研究问题

  • 在各文献中确定了什么类型的研究
  • 如何将恶意webshell从良性webshell中区分出来
  • 有哪几种方法被提出用于检测WebShell
  • 有没有公开的数据集?
  • 有哪些技术手段来评估或验证提出的WebShell检测技术

问题一:在文献中确定了什么类型的研究

被认定的研究可以被分成三类做为基本注意点:分析,基准,检测

  • 分析研究:通过测试恶意网站webshell,当代黑客策略来提供一系列供工具使用的判断特征以自动检测
  • 基准研究:提供标准数据集来公平恰当地评估webshell检测技术
  • 检测研究:提出可行的解法来识别恶意webshell

问题二:如何将恶意webshell从良性webshell中区分出来

已有的研究基于不同的特征集来分辨。这些特征又基于经验和分析真实世界中的webshell,使用的特征可以根据其来源分类如源代码,操作码(中间码,字节码),流量。主要是源代码。

提取的特征可以被分为五类:词汇特征,句法特征,语义特征,统计特征,抽象特征

词汇特征

表明源代码的编写方式,对抗攻击可能在代码中使用特定关键词或模糊指令或参数来隐藏意图。

词汇特征的结果是字符串的数量和注释中的恶意字符串模式

句法特征

考虑脚本中用到的表达式,变量,函数。

条件语句用于使webshell适应目标平台,循环语句可以用于泄漏密码。标准的句法特征为使用条件或循环语句,调用危险函数和调用特定语言组件的比率。

语义特征

词汇和句法特征提供了一个webshell写法的概览。语义特征从词汇和句法中提出意图。

例如:不考虑脚本中循环的比例,而只考虑在端口扫描系统调用或登陆过程中的循环

统计特征

恶意webshell经常加密或模糊编码来绕过防火墙加密函数。加密函数也能被恶意webshell用于安全原因。

统计特征在通过比较统计数值(如信息熵,压缩率)来分辨恶意样本

抽象特征

主要考虑向量化源代码、字节码、网络流量等数据,然后用于深度机器学习的方法

主要使用抽象特征的原因:

  • webshell使用的多样性
  • 对抽象特征检测能力的普遍认同
  • 攻击者的绕过使得词法或句法这样的外显特征不那么明显
  • 句法特征的识别和定位太复杂
  • 对深度学习研究的兴趣
分类特征
词汇字符串数量、使用敏感词、不同字符串的数量、特殊字符数量……
句法使用模糊函数、条件语句的比例、循环语句的比例、全局变量数……
语义明显的数据流、404-HTTP-user agent头、异常#include语句……
统计最长单词长度、信息熵、高危函数数量、压缩率……
抽象向量化字节码、向量化源代码、字节码序列……

问题三:有哪几种方法被提出用于检测WebShell

机器学习:其他=7:3

机器学习

实验最多的是SVM和RF,最有效的是CNN和LSTM

单独学习

  • Yang et al. (2019) 提出实时webshell检测,基于HTTP Request
  • Sun et al. (2017) 提取其中的源码中的统计数值特征,根据数量分组,建模
  • Guo et al. (2020) 向量化字节码构造朴素贝叶斯模型,向量化的过程使用2-gram和TF-IDF模型
  • Zhu et al. (2020) SVM,提取混合特征
  • Kurniawan et al. (2019) 基于源码的统计特征,统计50个预定义的敏感函数的出现次数

集成学习

效果好像更好一点

  • Huang et al. (2020) 使用了两种特征(最长字符串,信息熵),21种高危函数和变量,对php字节码使用TF-IDF向量化。创新点在使用了两种字节码
  • Kangetal.(2020) 提出Stacking集成学习,组合了两个随机森林模型和AdaCost分类器。
  • Li et al. (2019b) 通过污点分析,从源代码中提取出八个句法特征和语义特征。
  • Tianmin et al. (2019) 实验发现XGBoost集成学习效果比RF,NB,MLP效果好

还有很多各种方法的组合,主要是stacking集成学习

深度学习

  • Li et al. (2019a) RNN-GRU 提取了脚本内的行内关联词语
  • Liu et al. (2019) 检测多种网络攻击,包括webshell攻击
  • Lv et al. (2019) 尝试了不同的CNN模型

...

非机器学习方法

方法/技术

  • Cubismo,利用了反事实化来搜索所有潜在的执行路径并发现PHP中的隐藏代码。此方法在初始化后对脚本进行分析,并忽略异常、运行时错误,应用递归来模糊处理多层加密。
  • Li et al. (2018) 将PHP关键字和内置函数映射从而将PHP代码被转换为不同的版本来执行
  • Tu et al. (2014) 用一个数据库储存危险函数和签名的危险分数。然后扫描所有文件,匹配数据库中的危险函数以及签名。如果分数超过一定阈值就会被上报

...

算法

  • Croix et al. (2019) 提出了WOWA训练算法,合并了5种启发:签名匹配,fuzzy哈希,危险路线,模糊程度,信息熵。使用遗传算法找到最优的参数
  • Wang et al. (2017) 计算特殊字符和转义字符的熵

工具

数据库匹配

签名,敏感词,规则,完整代码,文件哈希

机器学习工具

一些开源工具采用了机器学习技术,却没有更多的解释

污点检查器

用于检测注入点

沙盒

一个完全孤立的运行环境

综合检测工具

使用了多种技术或引擎

帮助工具

NeoPI:数值特征的排序,通过统计学的方法来检测混淆/编码的内容

问题四:有没有公开的数据集?

CNTC- 2017等

还有一些Github上的数据集

问题五:Webshell检测的V&V方法

个人感觉就是评估模型的一些方法

测试多种分类器

主要用于机器学习,同样的数据集用不同的分类器去测试,比较每个模型的表现如何

比较现有工具

将提出的解决方案的检测率与选择工具的报告率进行比较

相似工作间的比较

将提出方案的结果与其他类似方案的结果进行比较

运行时间分析

将解决方案的运行时间与其他工具或者类似工作的运行时间进行比较

基于测试环境的分析

有时候一个解决方案针对的是特定的软件需求,所以测试的用例要满足特定的执行场景

研究的问题与挑战

  • 机器学习的可解释性
  • WebShell语言的多样性
  • 特征选取的多样性
  • 缺少基准数据集
  • 合适的评估技术

总结

这是一篇讲WebShell检测的综述性文章,详细地介绍了研究方向和部分成果。