保存成功
订阅成功
保存失败,请重试
提交成功

基于机器学习的 Webshell 发现技术探索

刘焱,网络ID兜哥,资深安全专家,具有十年云安全产品经验,主要研究方向为机器学习、僵尸网络、威胁情报、沙箱技术。对企业安全建设和机器学习感兴趣同学可以添加公众号 兜哥带你学安全
查看本场Chat

第十一章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

攻击链模型

在针对网站的攻击中,通常是利用上传漏洞,上传WebShell,然后通过WebShell进一步控制web服务器,对应攻击链模型是Install和C2环节。

常见的WebShell检测方法主要有以下几种:

静态检测,通过匹配特征码,特征值,危险函数函数来查找WebShell的方法,只能查找已知的WebShell,并且误报率漏报率会比较高,但是如果规则完善,可以减低误报率,但是漏报率必定会有所提高。

动态检测,执行时刻表现出来的特征,比如数据库操作、敏感文件读取等。

语法检测,根据PHP语言扫描编译的实现方式,进行剥离代码、注释,分析变量、函数、字符串、语言结构的分析方式,来实现关键危险函数的捕捉方式。这样可以完美解决漏报的情况。但误报上,仍存在问题。

统计学检测,通过信息熵、最长单词、重合指数、压缩比等检测。

本章主要以常见的WebShell数据集为例子介绍基于WebShell文件特征的检测技术。 介绍WebShell检测使用的数据集以及对应的特征提取方法,介绍使用的模型以及对应的验证结果,包括朴素贝叶斯和深度学习的MLP、CNN。基于WebShell文件访问特征的检测方法不在本章范围内。

数据集

数据集包含WebShell样本2616个,开源软件PHP文件9035个。

WebShell数据来自互联网上常见的WebShell样本,数据来源来自github上相关项目,为了演示方便,全部使用了基于PHP的WebShell样本。

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

互动评论
评论
篮子4 年前
在网络传输层能否直接进行web漏洞检测,不基于协议解析,就和图片数据一样,给你一个网络数据包,通过深度学习直接检测,或者推荐下aper
评论
篮子4 年前
目前,国内外有哪些权威的网络安全数据集,不限webshell
评论
篮子4 年前
变种和加了混淆的webshell,通常是运行时才能发现,采用深度学习能否检测静态的代码,识别出webshell
评论
下一秒待续4 年前
n-gram做提取的时候,有没有考虑降维,如果需要降维的话,需要怎么做?在数据预处理阶段做了哪些工作?
评论
joseph.herder💭4 年前
对于php有没有工具可以检测出webshell?
评论
任何4 年前
我写了一个基于规则的检测源码中SQLI的程序,瓶颈是有些规则之间会有些冲突,在检测的广泛性和准确性之间,不好平行,机器学习有什么好的思路吗?
评论
任何4 年前
1、词袋模型为什么选择n-gram,n取值是尝试出来的吗?有规律或者经验吗? 2、实际使用中,机器学习方法检测webshell效果怎么样,与传统基于特征的检测比怎么样? 3、检测webshell的思路能够用来检测其它安全问题吗?比如SQLI?
评论
fnmsd4 年前
常见一句话木马写错了吧?那个就是个echo get参数啊?
评论
YoGe4 年前
这样的检测通常是如何应用到生产环境的呢?
评论
Ziksang4 年前
对于node javascript机器学习可以用在那些方面
评论
Adele4 年前
对于没有显示出jsp等后缀的网站如何检测?
评论
sharecast4 年前
jsp和aspx的没有分析测试么?
评论
兜哥(作者)4 年前
除了opcode这块有差异 其他方式jsp asp与php基本相同 jsp和php我们还有一个基于沙箱的思路 做成了一个demo scanner.baidu.com你可以玩下 总的来说 jsp的变种不如php多 甚至可以说远不是一个数量级
评论
查看更多