您的位置 首页 php

使用机器学习检测PHP Webshell的研究实践

Webshell知多少

Webshell是以PHP、ASP、JSP或CGI等网页文件形式存在的一种代码执行环境。 在网络攻击过程中,Webshell是一种常用的恶意脚本,攻击者可以利用它在Web服务器上执行系统命令、窃取数据等。在入侵网站过程中,攻击者通常需要以各种方式获取Webshell,从而获得网站的控制权,再进行入侵。此外,攻击者入侵内网的肉鸡后,为了维持可用的传输通道,也需要创建肉鸡主动连接攻击者的反弹Webshell 。

Webshell具有隐蔽、便捷等特点,由于PHP语法灵活,通过隐藏敏感函数、关键字替换和拆分、使用特殊字符等方式可以有效变形和混淆,从而绕过安全检测。 通常可以将恶意Webshell分类为:

· 大马

通常体积较大,包含较多功能,会调用系统的关键函数,且会以代码加密形式进行隐藏。

· 小马

通常体积较小,只包含文件上传功能。

· 一句话木马

基本框架不变,但代码极短,通常只包含一行代码。使用方便,可单独作为一个文件或插入其他正常文件中,变形多,查杀难度高。

几种检测恶意Webshell的通用方法

· 特征检测

传统基于恶意特征的模式匹配和MD5检测等手段, 其优点是成本低、速度快,其缺点是无法检测未知威胁,容易被绕过。

· 统计分析

使用统计学方法,提取文件的关键特征,例如信息熵、特征代码、最长单词、压缩比、重合指数等,对其进行识别与检测。 其优点是对经过混淆代码或模糊编排的Webshell文件有良好的识别效果,其缺点是对“正常”文件有较多误报和漏报。

· 流量特征检测

提取网络流量的元数据,例如TCP/IP包头信息、HTTP/DNS协议内容、数据包描述字段、数据包个数、会话信息等;再基于元数据特征制定恶意Webshell规则,例如如果符合流量为上行、文件后缀异常、Payload中存在疑似攻击内容等元数据探针,则检测命中。 其优点是部署简单、检测迅速,其缺点是能力与规则成正比,漏报表现不稳定,且对加密流量没有高性能解决方案。

· 机器学习方法

基于SVM(支持向量机)、贝叶斯算法、随机森林等方法,选取合适的正常样本和恶意样本进行降噪、向量化与随机抽样,对检测模型不断训练优化,将样本交给模型判断。 其优点是具备不错的未知威胁检测能力,其缺点是对样本要求较高。

· 动态语义检测

无论Webshell代码如何变形,其行为是不变的,可以通过代码动态模拟执行和语义污点分析进行检测,多采用RASP方式。 其优点是对精心设计的变形木马检出率高,其缺点是RASP需要串行部署,占用业务资源。

使用机器学习方法检测PHP Webshell

在实际应用中,每种检测方法都有自身的优劣,安全产品选择适合场景的方法,通过取长补短形成独特的解决方案。此次主要介绍PHP类Webshell,借助Scikit-learn(SKlearn)工具,采用机器学习相关方法进行检测的实践。

1、AST和Opcode

AST(抽象语法树)是PHP 7引入的新特性。PHP收到请求或执行命令时,首先进行词法和语法分析,生成AST,再生成字节码Opcode 。Opcode是一种PHP脚本编译后的中间语言,与Java的Bytecode和.NET的MSL类似。

在进行样本数据分析时,如果直接使用PHP源码进行分析,由于其中包含混淆、花操作、注释等无用内容,会导致噪声,效果变差。将PHP Webshell源码转化成AST或Opcode可执行语句后,可降低噪声。

AST

Opcode

2、使用Opcode关键词进行随机森林训练

(1)安装Opcode插件

例如,可在Windows平台上使用VLD插件进行转换。

(2)Opcode提取&TF-IDF值计算

① 加载恶意样本集;

② 编写提取和加载工具,将每个样本的Opcode保存成字符串,把所有字符串写入list中;

③ 使用CountVectorizer函数,将list内容转换成词频矩阵,为样本打标记(1);

④ 对白样本重复以上操作,为样本打标记(0);

⑤ 将恶意样本和白样本提取出的词频矩阵整合到一起;

⑥ 使用TfidfTransformer函数,把数值矩阵范化为TF-IDF值。

(3)随机森林训练

经过多重训练模型的对比,发现随机森林训练效果最好。使用Train_Test_Split函数对所有训练样本集进行随机抽样,将关键词、TF-IDF、标记等特征送给训练模型,通过长时间训练,让模型能够通过Opcode关键字判断PHP Webshell是否存在恶意行为。

主要流程图

在实践中,一般搜集样本检出率达到97%以上,对变形伪装样本的检出率也达到75%以上。

3、使用AST进行图像识别迁移学习训练

由于AST具备较多语法树结构,相比Opcode分词结构不够清晰,故使用关键词进行训练可能效果不佳。因此尝试将AST转换为二进制文件,再进一步转换成图像,利用图像识别方法进行训练。

(1)二进制文件转换

在训练中,提取AST语法树后转换为二进制文件。二进制文件中,每个字节范围在00~FF之间,对应灰度图像素0~255 。将二进制文件转换为矩阵,该矩阵又可以转换为一张灰度图。

(2)CNN(Convolutional Neural Networks)图像识别

虽然通过观看很难区分恶意样本与白样本纹理上存在的细微差异,但借鉴目前较为成熟的CNN图像识别算法进行图像分类可以识别。

卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。

卷积神经网络的组成包括:

· 输入层(Input Layer)

用三维矩阵代表一张图片,矩阵的长宽代表图片的大小,矩阵的深度代表图像的色彩通道,黑白为1 。

· 卷积层(Convolution Layer)

卷积层的输入是上一层神经网络的一小块,它试图对神经网络的每一小块进行更加深入的分析,得到抽象程度更高的特征。一般来说,通过卷积层处理后的结点矩阵深度会增加。

· 池化层(Pooling Layer)

不会改变三维矩阵的深度,但是能够缩小矩阵的大小,达到减少参数的目的。可以看做是将一个分辨率较高的图片转化为分辨率较低的图片的过程。

· 全连接层(Fully Connecced)

经过多轮卷积和池化后,再经过1-2个全连接层输出。可以将卷积和池化层看做特征提取,由最后的全连接层进行分类。

· Softmax层

转化为概率分布。

主要流程图

在实践中,上述方法对一般搜集样本的检出率只有70%左右,对变形伪装样本的检出率更低至55%以下。

由此可以看出,因AST自身特点,迁移学习方法的适用性不高,该方法可应用于恶意文件和域名检测等领域。

实践小结

1、使用Opcode关键词进行PHP Webshell检测具有较好效果;

2、使用AST进行迁移学习适用性较低,采用基于AST的代码动态语义分析方法效果更好,且该方法同样适用于JSP、ASP等协议下的Webshell 。

安博通应用先进的机器学习技术,实现了PHP Webshell的检测,帮助用户识别网络安全领域的“伪装者”。

自成立以来,安博通始终坚持自主研发、不断创新,以原创的安全可视化技术为千行百业抵御各类网络安全威胁,为用户持续创造网络安全业务新体验。

文章来源:智云一二三科技

文章标题:使用机器学习检测PHP Webshell的研究实践

文章地址:https://www.zhihuclub.com/78501.shtml

关于作者: 智云科技

热门文章

网站地图