Webshell检测方法(三) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

Webshell检测方法(三)

一叶飘零 技术 2020-02-19 09:15:00
1293530
收藏

导语:最近在学习webshell检测技术,看了一些科研性的文章,所以有了这个系列的文章。

Webshell检测方法(一)

Webshell检测方法(二)

0x01 前言

本篇paper来自ICCAI 2018,采用了fastText和随机森林算法相结合的FRF-WD模型,使用一些静态features和PHP opcode,对Webshell进行检测。但与之前的文章不同,本篇文章不再是基于HTTP流量检测,而是针对文件进行检测。

0x02 Background

Opcode是一种PHP脚本编译后的中间语言,对于PHP的语言引擎Zend执行代码,会经过如下4个步骤:

1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens);

2.Parsing, 将Tokens转换成简单而有意义的表达式;

3.Compilation, 将表达式编译成Opocdes;

4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

而现有的一些工作已经表明,通过opcodes的频率可以区分恶意软件和可信软件。虽然PHP Opcode不同于恶意软件识别中使用的Opcode,但是他们在本质上是一致的,故此本篇文章想要借助PHP Opcode来对恶意php webshell文件进行检测。

PHP拥有拓展Vulcan Logic Disassembler (VLD),其可以hook Zend引擎,方便我们dump出所有的opcodes,例如如下一句话木马:

< ?php eval($_POST['a']); ? >

如果我们运行该webshell,通过VLD,我们可以得到:

2020-01-13-14-28-06.png

而我们正可以利用fastText和VLD得到的Opcode,训练文本分类器模型。

0x03 实现方法

FRF-WD模型对于文件的特征提取,可以分为两大步:

1. 分析提取文件的静态特征

2. 利用PHP-VLD获取文件的Opcode,利用fastText训练文本分类器模型。

然后再利用上述获取的特征作为随机森林的输入,训练一个webshell检测模型。

1、静态特征

对于文件的静态特征,选取如下5种:

1.长字符串

为了bypass现有的webshell检测,大多数的webshell会进行混淆,其惯用技术是利用编码,如base64,但其缺点就是对于一个较短的webshell,会经过编码,拼接变成一个很长的字符串。并且只检测php tag中的长字符串,可以有效避免富文本,js,图片,video或是css文件的干扰。

2.信息熵(Information Entropy)

由于内容加密会增加信息熵,所以计算信息熵是检测加密webshell的一个非常好的手段。

3.IC(Index of Coincidence)

IC在分析自然语言明文和密文中非常有用,如果IC值较低,那么表明文件中可能存在混淆或加密。

4.关键词搜索

如果文本文件中存在敏感词,诸如:eval(), assert(), exec(), shell_exec(), passthru(), system(), show_source(), proc_open() and pcntl_exec(),则会被认为是一个可疑文件。

5.黑名单

如果文件中检测到诸如:

webshell by 、

hack by、

bypass AV、

password is *、

etc .....

那么可以认为其是一个可疑危险文件,因为一般正常文件的注释中不会存在这些语句。

2、PHP Opcode特征

考虑到PHP文件可以利用PHP-VLD快速得到PHP Opcode,那么可以尝试使用文本分类器来识别webshell。在本文中选用了fastText模型来训练文本分类器。

fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点:

1.fastText在保持高精度的情况下加快了训练速度和测试速度

2.fastText不需要预训练好的词向量,fastText会自己训练词向量

3.fastText两个重要的优化:Hierarchical Softmax、N-gram

同时,对于不同的文件,Opcode的数量可能只有少量,也可能有上千个,所以fastText比传统的深度学习方法TextCNN更适合处理这样的数据集。

工作大致分为3步:

1.通过PHP-VLD,将PHP文件代码转化为PHP Opcode;

2.使用fastText和标记好的样本对文本分类器进行训练;

3.使用训练好的文本分类器去判断哪些标记过的文本来自PHP Opcode;

最终得到的预测值用于文件Opcode的特征值。

3、分类器

在特征提取结束后,使用随机森林方法实现分类。

集成学习是通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

而随机森林是集成学习的一个子类,它依靠于决策树的投票选择来决定最后的分类结果。同时随机森林具有快速、高效、预测精度高等特点。同时其在生成过程中,能够获取到内部生成误差的一种无偏估计。

2020-01-13-15-24-43.png

0x04 数据实验

实验收集了共计8521个PHP文件,其中包括1587个PHP Webshell,其来自于github上一些webshell Project。对于正常文件来自于几个著名PHP框架,例如Yii2、Wordpress、CI等。

对于数据集,30%用于构建PHP Opcode文本分类器,70%用于随机森林的训练和模型测试。

为了证明FRF-WD模型的性能,实验使用了如下几个公式进行评估:

TP:True Positive、TP是正确分类为webshell文件的个数、TN:True Negative、FN是错误分类为良性文件的webshell文件的个数。

2020-01-13-15-12-15.png

2020-01-13-15-12-21.png

2020-01-13-15-12-27.png

由于在fastText模型中,word-Ngram是一个重要参数,为了找到最适合的N-gram,实验测试了n=1 ~ n=6,效果如下:

2020-01-13-15-16-02.png

可见最佳的N-gram是4-gram。

同时实验比较了随机森林模型,和随机森林与fastText相结合的模型性能的差异:

2020-01-13-15-17-50.png

2020-01-13-15-19-16.png

可见在不考虑PHP Opcode特征下,随机森林的准确率仅为88.97%,而在FRF-WD模型下,准确数在97.92%。同时ROC曲线也能说明FRF-WD模型拥有更好的性能。

0x05 后记

本文与之前的工作不同,之前的webshell检测使用了CNN对text进行分类,而本文则使用了fastText和随机森林结合的方式进行webshell检测。

0x06 参考链接

http://www.laruence.com/2008/06/18/221.html

https://blog.csdn.net/feilong_csdn/article/details/88655927

https://www.cnblogs.com/gczr/p/7097704.html

本文为 一叶飘零 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务