网络安全运营之无监督学习实现Webshell检测

2020-11-13 7,990

1.jpg

将机器学习应用于Webshell安全检测,有效降低Webshell误报率、漏报率。免去过于复杂的Webshell特征规则库维护工作,减少运维成本。分析Web服务器日志,无需在应用服务器上部署检测脚本,也无需高成本的解析网络镜像流量,降低Webshell检测成本。无需识别Web应用开发语言、无需区分JSP、PHP、ASP、CGI等具体Webshell分类,对所有Webshell具有通用性。

2.png
Webshell是什么
3.png

Webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。

2.png
Webshell的危害
3.png

4.jpg

Webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于Webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

Webshell是网站应用比较严重的安全威胁,黑客可以利用Webshell长期获得网站应用的访问权限,并且可以利用存在Webshell的应用服务器作为跳板机进一步渗透内网。因此,防护Webshell攻击对于网站应用安全以及内网安全十分重要。

2.png
Webshell具有隐蔽性
3.png

5.jpg

很多人都知道Webshell的危害,但是很难除掉,这是因为Webshell后门具有隐蔽性,一般有些会隐藏在正常文件中并修改文件时间以达到隐蔽目的的,还有的利用服务器漏洞进行隐藏,另外一些隐藏的Webshell可以隐藏于正常文件带参数运行脚本后门。此外,Webshell可以穿越服务器防火墙,由于是被控制的服务器或远程过80端口传递的,防火墙察觉不到,很难将它挡在外面,只能看着它这样大摇大摆的入侵我们的服务器。

使用Webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。并且它不会主动消耗流量,很多杀毒软件对它也无可奈何,不能识别它是正常软件还是病毒。

2.png
Webshell可远距离操作
3.png

6.jpg

这是大多数黑客都喜欢Webshell的一个好处,黑客可以在千里之外就入侵目标服务器,它可以短期或长期的入侵目标服务器,在管理员不知道的情况下入侵目标服务器,并且在有需要的时候才侵占服务器,给服务器留下很大的安全隐患。

2.png
Webshell预防措施
3.png

通常,黑客会利用Web服务器软件中存在的漏洞来安装Webshell。因此,消除这些漏洞对于避免失陷Web服务器的潜在风险很重要。以下是一些与Webshell相关的预防措施:

7.jpg

① 如果不使用,要禁用危险的PHP函数,例如exec()、shell_exec()、passthru()、system()、show_source()、proc_open()、pcntl_exec()、eval()与assert()。

② 如果必须要启用这些命令,请确保未授权用户无法访问这些脚本。此外,使用escapeshellarg()和escapeshellcmd()可以确保不能将用户输入注入到shell命令中,从而导致命令执行漏洞。

③ 如果Web应用程序正在使用上传表单,请确保上传的表单是安全的,并且仅允许上传白名单所允许的文件类型。

④ 不要相信用户输入的信息。

⑤ 不要盲目使用在线论坛或网站上的代码。

⑥ 对于WordPress,如果不需要,要避免安装第三方插件。如果需要使用插件,请确保插接件其信誉良好且经常更新。

⑦ 在敏感目录(如图片或上传)中禁用PHP执行。

⑧ 锁定Web服务器用户权限。

2.png
Webshell传统检测方法
3.png

静态检测

8.png

静态特征检测是指针对Webshell中可能使用的关键词、高危函数、文件修改的时间、文件之间的关联关系等静态属性进行规则匹配。检测过程需要建立一个包含各种规则的Webshell特征库,如:“关键字:大马|小马|木马|Webshell”,“高危函数:eval()、excute()、run()、exec()、phpinfo()”,“WEB文件修改时间”,“文件与文件之间的关联关系”等特征。将文件自身的关键字、高危函数、修改时间、文件与文件之间是否有关联等特征与Webshell特征库中的规则进行匹配,若命中特征则视该文件为Webshell。

动态检测

9.png

为了避免Webshell被静态检测方法直接识别到,黑客开发了通过采用加密方式绕过部分静态特征检测的变种Webshell。为了弥补静态检测方法对此类Webshell检测能力的不足,便有了Webshell动态检测方法。动态检测首先提取镜像流量,然后解析出流量中的web应用脚本文件(jsp、php、asp、cgi、jspx、aspx等),最后通过检测web应用请求访问的web应用脚本文件是否采用了加密混淆技术、web应用请求是否命中Webshell请求特征库等,来判断该web脚本文件是否为Webshell。

除了传统的检测方法,可以利用机器学习技术帮助安全运营人员实现更高效的检测,下面是态势感知平台无监督学习实现webshell检测的思路和实现方式,可供大家参考。

2.png
无监督学习实现Webshell检测
3.png

分析特征

10.jpg

Webshell具有以下两种隐蔽特性:

① 恶意Webshell只会被少数几个恶意攻击人员访问,普通人员不会访问Webshell(因为不知道有这个页面的存在),且访问次数也远远小于正常页面。

② 正常Web页面彼此之间会通过超文本协议互相链接,引导用户一步步点击访问系统,Webshell因为隐藏自身的需要不会与其它页面互相链接,以免暴露自己。

基于上述特性,通过对出入度、访问量等多个维度建立多模型融合,进行攻击事后的网页后门检测,来判断页面是否为Webshell。

检测思路

11.jpg

通常黑客在网上挂马之后,只有他知道且会去访问这个Webshell,这种页面访问用户很少,对应的访问量、 IP数也很少。同时 Webshell 与应用中其它页面的联系很少,这样它的出入度会很小或者为0。网站正常页面和非正常页面(Webshell)的访问特征是不一样的,假设对外Web系统被攻陷植入Webshell,那么就会出现如下状况:

① 访问量:恶意Webshell只会被少数几个恶意攻击人员访问,普通人员不会访问Webshell(因为不知道有这个页面的存在),且访问次数也远远小于正常页面。

② 访问关系:正常Web页面彼此之间会通过超文本协议互相链接,引导用户一步步点击访问系统,Webshell因为隐藏自身的需要不会与其它页面互相链接,以免暴露自己。

③ 页面响应:Webshell是用来帮助攻击者控制Web系统和操作系统,因此在访问过程中必然会返回一些系统的敏感信息,这些信息虽然内容难以预测,但从统计角度,和Web系统的返回信息特征存在明显差异。

实现方式

12.jpg

在平台上提出一种低误报率和低漏报率的基于机器学习的网站挂马监测模型,将机器学习应用于Webshell安全检测,有效降低Webshell误报率、漏报率。免去过于复杂的Webshell特征规则库维护工作,减少运维成本。采用分析Web服务器日志,无需在应用服务器上部署检测脚本,也无需高成本的解析网络镜像流量,降低Webshell检测成本。无需识别Web应用开发语言、无需区分JSP、PHP、ASP、CGI等具体Webshell分类,对所有Webshell具有通用性。

13.png

2.png
态势平台Webshell检测
3.png

首先,读取各类Web应用服务上的日志;然后,按照一定的规约进行日志格式化处理;最后,对格式化后的日志数据进行特征化处理,得到所有页面特征列表,为后期机器学习的应用提供服务。

14.png

实现流程图

步骤一:读取web应用日志

从各类web应用代理(nginx、apache等)服务器上,按天将web应用日志存入本地检测服务器相应目录下。web应用日志需满足记录了如下字段:客户端来访IP地址(remote_user)、记录访问时间(time_local)、记录请求的URL和HTTP协议(request)、记录请求的响应状态(status)、记录web应用响应大小(body_bytes_sent)、记录从哪个页面链接访问过来的(http_referer)、记录客户端浏览器相关信息(http_user_agent)、用户身份(http_cookie)。

步骤二:日志格式化处理

对web日志进行统一格式化处理。拆分出request字段中的请求方法(method)、页面(path)、请求参数(para),拆分出http_referer字段中的主机(host)、页面(path)这些数据信息。

具体拆分要求如下:

① request字段拆分:例如将“GET /ab/cd/ef.jsp?id=123&name=456 HTTP/1.1”拆分为{“method”:“GET”,“path”:“/ab/cd/ef.jsp”,“para”:“id=123&name=456”}

② http_referer字段拆分:例如将“https://www.abc.com/index.jsp”拆分为{“host”:“www.abc.com”,“path”:“/index.jsp”}

步骤三:path规约

因为web应用可能使用不同的框架(J2EE、.NET、PHP)开发,所以URI存在hash、随机数等情况,这样会导致生成的目录树相对庞大,通过对path做统一规约,可以有效合并web应用中的相似的URI,使得最终生成的URI目录树简洁、合理。

现有技术方案对path进行规约时,采用的是正则表达式字符串匹配的方式进行处理,采用这种方式处理path需要要求web应用在开发时约定好随机数的格式及出现位置。这种处理方式对于不同的web应用不具备通用性,后期维护灵活性也相对较差。为了解决传统方案的不足,本发明在处理path规约时采用了kmeans方式来实现path规约处理,对request字段及http_referer字段中的path进行数据标准化规约。

步骤四:页面预处理

过滤日志中响应值非200、500的不存在页面并调用path规约模型生成用于页面特征抽取的预处理数据。

步骤五:页面特征抽取

因Webshell文件与正常页面文件访问特征会有诸多不同,例如:Webshell出度、入度一般小于或等于1,正常页面出入度一般大于3;Webshell来访IP相对单一,正常页面会有很多IP访问等等特征。

步骤六:算法模型计算

提取所有页面中的各类特征,采用算法模型计算各页面的异常分值,Webshell分值会远远高于正常页面的分值。

现有技术方案只是采用单一的算法模型进行异常分值计算,不同的算法模型在对同一Webshell进行分值计算时分值往往会有所偏差。为减少Webshell检测的误报率、漏报率,因此本方法分别使用如下算法模型进行计算:GMM(高斯混合模型)、Local Outlier Factor(局部异常因子算法)、Isolation Forest(孤立森林),生成最终异常页面分值表。通过添加阈值使每一个算法都有决策权,最终通过组合模型管理的投票机制选择异常。

步骤七:告警生成

根据GMM、Local Outlier Factor、Isolation Forest算法分别计算出的各URI异常分数值,取各算法最异常的URI交集,生成疑似Webshell告警。

15.png

2.png
总结
3.png

随着云技术的普及,Webshell已成为云上安全最大的威胁,快速发现Webshell并及时响应是当下关注的热点,利用机器学习可以更高效的解决以上问题。面对大量的待分析安全数据和越来越普及的高级威胁攻击,灵活运用机器学习技术,能够更好帮助安全人员发现威胁、降低告警误报率,也能减轻运维压力。安全能力才能不断提升,安全系数也会不断提高。

我们的目标是保护网络安全,为各政府单位、各企业发展,为国家富强保驾护航。

16.gif


本文作者:观安信息

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/146118.html

Tags:
评论  (0)
快来写下你的想法吧!

观安信息

文章数:3 积分: 25

观大千数据,安无尽网络

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号