GitChat · 安全 | 基于机器学习的 Webshell 发现技术探索

GitChat 作者:兜哥
原文: 基于机器学习的 Webshell 发现技术探索
关注公众号:GitChat 技术杂谈,一本正经的讲技术

第十一章WebShell检测

WebShell就是以ASP、PHP、JSP或者CGI等文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将ASP或PHP后门文件与网站服务器web目录下正常的网页文件混在一起,然后就可以使用浏览器来访问ASP或者PHP后门,得到一个命令执行环境,以达到控制网站服务器的目的。顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。WebShell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于WebShell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

在攻击链模型中,整个攻击过程分为以下几个步骤:

  • Reconnaissance(踩点)

  • Weaponization(组装)

  • Delivery(投送)

  • Exploitation(攻击)

  • Installation(植入)

  • C2(控制)

  • Actions (行动

enter image description here

github上WebShell相关项目

白样本主要使用常见的基于PHP的开源软件,主要包括以下几种。

WordPress

WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。

WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的。用户可以在支持 PHP 和 MySQL数据库的服务器上使用自己的博客。

WordPress有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用HTML代码、CSS、PHP等相关知识。WordPress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中文语言包。WordPress拥有成千上万个各式插件和不计其数的主题模板样式。

项目地址为:https://wordpress.org/

enter image description here

phpcms主页

phpMyAdmin

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。

项目地址为:https://www.phpMyAdmin.net/

enter image description here

Yii主页

特征提取

方法一:词袋&TF-IDF模型

我们使用最常见的词袋模型&TF-IDF提取文件特征。

把一个PHP文件作为一个完整的字符串处理,定义函数load_one_file加载文件到一个字符串变量中返回。

由于开源软件中包含大量图片、js等文件,所以遍历目录时需要排除非php文件。另外开源软件的目录结构相对复杂,不像前面章节的垃圾邮件、垃圾短信等是平面目录结构,所以要求我们递归访问指定目录并加载指定文件。

加载搜集到的WebShell样本,并统计样本个数,将WebShell样本标记为1。

加载搜集到的开源软件样本,并统计样本个数,将开源软件样本标记为0。

将WebShell样本和开源软件样本合并。

使用2-gram提取词袋模型,并使用TF-IDF进行处理。

所谓的2-gram是词袋模型的一个细分类别,也有的机器学习书籍里面单独把2-gram或者说n-gram作为单独的模型介绍。n-gram基于这样一种假设,第n个单词只和它前面的n-1个词有关联,每n个单词作为一个处理单元。

enter image description here

PHP常见opcode

通常可以通过PHP的VLD(Vulcan Logic Dumper,逻辑代码展现)是扩展来查看PHP文件对应的opcode。

然后在php.ini配置文件中添加 用于激活VLD,其中默认位置位于lib目录中。VLD还可以从github上下载并安装,步骤为:

VLD项目的主页为:

http://pecl.php.net/package/vld

GitChat · 安全 | 基于机器学习的 Webshell 发现技术探索

对应的opcode为:

以一个常见的一句话木马为例:

通过VLD查看的结果为:

对应的opcode为:

使用2-gram对opcode进行分组,结果为:

完整的处理流程为:

enter image description here

PHP代码处理流程图

代码实现方面,首先使用VLD处理PHP文件,把处理的结果保存在字符串中。

PHP的opcode都是由大写字母和下划线组成的单词,使用findall函数从字符串中提取全部满足条件的opcode,并以空格连接成一个新字符串。

遍历读取指定目录下全部PHP文件,保存其对应的opcode字符串。

来源:软件供应链

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年8月9日
下一篇 2017年8月9日

相关推荐