使用机器学习检测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可执行语句后,可低落噪声。
https://p5.toutiaoimg.com/large/pgc-image/7df6f8755bac4a7c8e01b6010cbfffa8AST
https://p26.toutiaoimg.com/large/pgc-image/aef27cb4d1074ef2b6a7104a5500ed8cOpcode
2、使用Opcode关键词举行随机丛林训练
(1)安装Opcode插件
比方,可在Windows平台上使用VLD插件举行转换。
https://p9.toutiaoimg.com/large/pgc-image/efb7581da65d46fa9dcaf9d879f34043
(2)Opcode提取&TF-IDF值计算
① 加载恶意样本集;
② 编写提取和加载工具,将每个样本的Opcode生存成字符串,把所有字符串写入list中;
③ 使用CountVectorizer函数,将list内容转换成词频矩阵,为样本打标记(1);
④ 对白样本重复以上操作,为样本打标记(0);
⑤ 将恶意样本和白样本提取出的词频矩阵整合到一起;
⑥ 使用TfidfTransformer函数,把数值矩阵范化为TF-IDF值。
https://p26.toutiaoimg.com/large/pgc-image/d4fa85fbb9eb441fbad0f8d2b02e8e73
(3)随机丛林训练
颠末多重训练模型的对比,发现随机丛林训练结果最好。使用Train_Test_Split函数对所有训练样本集举行随机抽样,将关键词、TF-IDF、标记等特征送给训练模型,通过长时间训练,让模型能够通过Opcode关键字判断PHP Webshell是否存在恶意行为。
https://p26.toutiaoimg.com/large/pgc-image/4fb5cd61f7744f53a770265b31d516f1重要流程图
在实践中,一样平常搜集样本检出率达到97%以上,对变形伪装样本的检出率也达到75%以上。
3、使用AST举行图像识别迁移学习训练
由于AST具备较多语法树结构,相比Opcode分词结构不敷清晰,故使用关键词举行训练可能结果不佳。因此尝试将AST转换为二进制文件,再进一步转换成图像,使用图像识别方法举行训练。
(1)二进制文件转换
在训练中,提取AST语法树后转换为二进制文件。二进制文件中,每个字节范围在00~FF之间,对应灰度图像素0~255 。将二进制文件转换为矩阵,该矩阵又可以转换为一张灰度图。
https://p26.toutiaoimg.com/large/pgc-image/5f972ca73b744848825a38248115b649
(2)CNN(Convolutional Neural Networks)图像识别
虽然通过观看很难区分恶意样本与白样本纹理上存在的细微差异,但借鉴目前较为成熟的CNN图像识别算法举行图像分类可以识别。
卷积神经网络(CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。
卷积神经网络的构成包括:
· 输入层(Input Layer)
用三维矩阵代表一张图片,矩阵的长宽代表图片的巨细,矩阵的深度代表图像的色彩通道,黑白为1 。
· 卷积层(Convolution Layer)
卷积层的输入是上一层神经网络的一小块,它试图对神经网络的每一小块举行更加深入的分析,得到抽象水平更高的特征。一样平常来说,通过卷积层处理后的结点矩阵深度会增加。
· 池化层(Pooling Layer)
不会改变三维矩阵的深度,但是能够缩小矩阵的巨细,达到减少参数的目的。可以看做是将一个分辨率较高的图片转化为分辨率较低的图片的过程。
· 全连接层(Fully Connecced)
颠末多轮卷积和池化后,再颠末1-2个全连接层输出。可以将卷积和池化层看做特征提取,由最后的全连接层举行分类。
· Softmax层
转化为概率分布。
https://p6.toutiaoimg.com/large/pgc-image/03c057f593a84563b73fd0d5ddf80afc重要流程图
在实践中,上述方法对一样平常搜集样本的检出率只有70%左右,对变形伪装样本的检出率更低至55%以下。
由此可以看出,因AST自身特点,迁移学习方法的适用性不高,该方法可应用于恶意文件和域名检测等领域。
实践小结
1、使用Opcode关键词举行PHP Webshell检测具有较好结果;
2、使用AST举行迁移学习适用性较低,采用基于AST的代码动态语义分析方法结果更好,且该方法同样适用于JSP、ASP等协议下的Webshell 。
安博通应用先进的机器学习技术,实现了PHP Webshell的检测,资助用户识别网络安全领域的“伪装者”。
自成立以来,安博通始终对峙自主研发、不绝创新,以原创的安全可视化技术为千行百业抵御各类网络安全威胁,为用户连续创造网络安全业务新体验。 转发了
页:
[1]