基于Simhash算法的Webshell检测方法*
2018-03-21孔德广蒋朝惠
孔德广,蒋朝惠,郭 春,周 燕
0 引 言
Webshell是一种黑客对服务器进行控制的后门程序[1]。如果黑客发现Web应用存在文件上传漏洞,46%的黑客都会上传Webshell进行后续的攻击[2]。根据《2016年中国互联网网络安全报告》[3]的统计,CNCERT/CC共监测到境内82 072个网站被植入了后门(Webshell)。黑客可以暗中对Web服务器进行远程控制,上传、查看、修改、删除网站服务器上的文件,读取并修改网站数据库的数据,甚至可以直接在网站服务器上运行系统命令。文件上传漏洞普遍存在于网站中,各大SRC也相继爆出过严重的文件上传漏洞[4-5]。文件上传漏洞虽然数量上不如SQL注入漏洞,但一旦爆发,危害要比SQL注入漏洞大很多,可以直接上传Webshell,从而拿下Web服务器。
目前,检测Webshell主要还停留在事前和事后。事前防御有可能被绕过,事后防御属于亡羊补牢,只有做到事中,才能确保Web服务器的安全。什么造成了文件上传漏洞?主要是因为程序员在编写网站的过程中,缺乏安全开发经验[6-9]。目前,主要防御文件上传漏洞的方法是客户端校验、服务端校验和WAF校验。
(1)客户端校验
不少程序员为了省事,直接在前端编写限制文件上传的过滤规则,通常有白名单也有黑名单形式。但是,这种做法会导致攻击者通过直接捕获数据包进行改包而绕过客户端校验。
(2)服务端校验
服务端校验是确保网站安全最基本的一个要求,主要方法有文件头Content-type字段校验、文件内容头校验、后缀名黑名单校验、后缀名白名单校验和自定义正则校验等手段。但是,如果程序员在编写服务端代码时考虑不周全,以上几种防御手段都可以绕过。同时,黑客可以结合文件包含漏洞、服务器解析漏洞、操作系统文件命名规则、Cms或者编辑器漏洞等绕过服务端校验,从而上传木马得到Webshell。
(3)WAF校验
目前,主流的防御方法是服务端校验配合WAF校验。但是,有些主机WAF为了不影响服务器的性能,会对校验的用户上传数据设置大小上限。这种情况可以使用垃圾数据进行填充,当超过设置的校验数据大小上限时,再填充木马,从而达到绕过WAF上传木马的目的。不同的WAF都存在或多或少的绕过方式,大部分原因在于WAF设置的检测策略存在缺陷。
此外,黑客还可以通过其他方式上传Webshell,如网站权限过大,SQL注入能将Webshell写入Web服务器;部分命令执行漏洞可以写入Webshell,这给防御带来了很多麻烦。因此,提出一种阻止黑客将Webshell写入Web服务器的方法迫在眉睫。
1 相关工作
为了抵御Webshell对网站的持续性危害,研究人员对Webshell的检测进行了大量研究。目前,主要的检测手段包括静态分析和动态分析两种。Truong Dinh Tu等人[10]采用静态分析的手段,检测文件中是否包含系统命令执行函数、恶意文件操作函数,并统计关键字出现的频率,设置阈值来判断被检文件是否为Webshell,但该方法不能检测代码混淆的Webshell。石刘洋等人[11]采用动态分析手段,从Web服务器日志中提取相关特征,如URL特征、网站交互频率、文本特征匹配以及页面关联性分析等识别Webshell,但日志过多,导致该检测方法效率很低。此外,由于WebShell是通过80端口与远程主机进行数据交换的,隐蔽性强导致检测效果不高。2006年,Jesse Kornblum[12]提出了模糊哈希算法,主要用于文件相似性比较,后被用于取证和恶意代码检测。而Jason Sherman将该算法应用于SSdeep[13],同时最新版的ModSecurity也增加了SSdeep检测Webshell的接口[14]。
目前,市面上检测工具非常多,NeoPI[15]就是一款国外流行的基于统计特征的Webshell检测工具。但是,该工具并没有提供一个阈值来确定哪些文件是Webshell,需要依靠专家知识来判断。而著名的Webshell检测工具D盾,主要使用规则是对文件静态特征进行匹配,但检测效果依赖于规则的有效性,很容易被绕过。目前,大部分检测工具基本都是事后查杀Webshell,即Webshell已经存留于服务器很长时间后才被查杀。这种检测方案缺陷很大,黑客有可能早已获得了相关隐私文件,达到了渗透的目的。因此,本文提出了一种基于Simhash的Webshell检测方法。该方法检测效率高,可以实现事中检测,即黑客上传成功Webshell后,在黑客还没采取后续行动前就能检测出Webshell并将其清除。
2 基于Simhash的Webshell检测方法及关键点
2.1 Simhash计算
Simhash是一种局部敏感散列算法,在2002年被Charika等人[16]提出,后来谷歌Manku等人[17]将该算法用于海量网页去重。该算法可将文本降维,生成一串位数较小的指纹。目前,Simhash算法在多种研究中得到应用,但在Webshell检测上还没有相关应用。
本文将每一个Webshell当成一个文本,经过分词、散列、加权、合并、降维,最终生成64 bit的Simhash值。因为Webshell与网页和文本具有不同特性,所以对Simhash的传统算法做如下2点改动。
分词。因为Webshell的特殊性,需要调用一些命令执行类函数、文件系统函数、数据库操作函数,回调函数、反射函数等特殊关键字,所以本文将Webshell按照换行符和特殊关键字进行分词。
权值。在文本分类中,一般依据分词的频率、属性计算权值。在Webshell的Simhash计算中,将各分词设置一个基础权值。由于Webshell中存在一些特殊关键字,如pwd、password、username、system、fopen等,可对这类字符进行加权,将其权值设为其他分词权值的2倍。
具体过程如下:
输入:Webshell文件
输出:每个Webshell的Simhash值
(1)创建一个64 bit向量,将其初始化为0。
(2)将Webshell文件进行分词处理,一般按照换行符进行分词,特殊情况下将特殊关键字单独分词。
(3)对特殊关键字进行加权,如system、popen、fopen、opendir、pathinfo、mysql_query、array_filter、array_reduce等特殊字符,将其权值设为其他分词权值的2倍。
(4)对每个Webshell分词进行散列,取其中64 bit散列值。
(5)加权合并。
(6)降维。
2.2 Simhash指纹库构建
目前,黑客使用的Webshell基本是前人写好的,也不排除有黑客使用新型的未知Webshell,但这些未知Webshell其中的大部分功能函数也是以前写好的函数。如图1所示,在网站内测过程中,收集市面上功能结构不重复的Webshell,通过Simhash算法生成Simhash初始指纹库。当网站运行期间,如果发现新增可疑文件是Webshell且Simhash指纹库中没有收录此指纹,即海明距离不等于零且最小值小于阈值时,就将其Simhash指纹更新至初始Simhash指纹库。
图1 Simhash指纹库构建
2.3 基于Simhash算法的webshell检测方法
如图2所示,对Web应用站点所有具有写权限的文件夹进行监控。当文件夹有新增文件即可疑文件时,计算可疑文件的Simhash值,然后与Simhash指纹库进行海明距离比较。如果海明距离等于0,则该可疑文件就是Webshell,直接删除该文件,并发邮件提醒网站管理员此网站正在遭受黑客攻击。如果海明距离的最小值小于阈值,则该可疑文件是变种Webshell,即黑客对Webshell代码进行了混淆。此时,将该变种Webshell的Simhash指纹添加到Simhash指纹库,删除该文件并通知网站管理员。如果海明距离大于阈值,则该文件为用户上传的正常文件。
图2 Simhash指纹库构建
3 实验与分析
为了选取合适的阈值,本实验搜集了200个功能结构不重复的Webshell,然后使用Simhash算法计算生成200个Webshell指纹,以构建Simhash指纹库。
黑客在使用Webshell前,最可能做的是只更改Webshell的登录口令。少部分黑客会删除作者信息、敏感特征,以绕过安全检测。极少数黑客会进行代码复用,重新编写Webshell并进行代码混淆。本文根据黑客心理,分别对200个Webshell进行编辑:修改登录口令,删除作者信息和注释,删除或者添加功能函数,增加无用代码进行混淆处理。计算它的Simhash指纹,并与未修改前的Webshell指纹比较海明距离。如表1所示,200个Webshell修改登录口令、作者信息、注释前后,海明距离不是0就是1;添加或删除功能函数、代码混淆前后,海明距离也在1~3波动。所以,本次实验将阈值设定为4,即如果海明距离小于4,则该可疑文件是Webshell。
表1 阈值变化情况
为了测试本文提出的检测方法的有效性,另外收集100个Webshell和1 000个正常文件混合作为实验样本。然后,分别使用本文检测方法、SSdeep、D盾进行检测。如表2所示,基于Simhash算法的检测方法一共检测出94个Webshell,有6个未检测出来,主要是因为Simhash指纹库指纹量较少所致。SSdeep只检测出84个Webshell,主要因为SSdeep阈值变化较大,在确保没有误报的情况下,漏报就会增多。D盾漏报较少,但误报较高,这与其检测规则有很大关系。通过对比可以发现,本文检测方法在低误报的情况下,能较好地检测出Webshell。同时,在检测时间方面,SSdeep所使用的比较算法会影响其检测速度;D盾检测规则大量运用正则匹配,严重影响检测速度;而本文提出的方法检测时间较短。究其原因,主要在于Simhash算法生成指纹效率高,计算海明距离速度快。
表2 市面上其他检测工具和本文检测方法效果对比
4 结 语
Webshell后门一直是我国面临的巨大威胁,本文提出一种基于Simhash算法的Webshell检测方法。该检测方法和传统的检测方法相比,误报大大降低。同时,由于Simhash算法的高效性,可以做到Webshell的实时检测,给应急响应留下了充足时间。但是,该检测方法的有效性需依靠完备的Simhash指纹库,仅依靠样本数据和少量更新的数据,不能满足新的安全需求,还要不断进行研究。
[1] Stranieri A,Zeleznikow J.WebShell:The Development of Web Based Expert Systems[J].Research and Development in Intelligent Systems XVIII,2002:245-258.
[2] Canali D,Balzarotti D.Behind the Scenes of Online Attacks:An Analysis of Exploitation Behaviors on the Web[C].20th Annual Network & Distributed System Security Symposium(NDSS 2013),2013.
[3] National Internet Emergency Center.China Internet Security Report in 2016[EB/OL].(2017-06-23)[2017-12-18].http://www.cert.org.cn/publish/main/upload/File/2016_cncert_report.pdf.
[4] CNVD.PHPEMS File Upload Vulnerability[EB/OL].(2017-11-20)[2017-12-18].http://www.cnvd.org.cn/flaw/show/CNVD-2017-35716.
[5] CNVD.Berta CMS Any File Upload Vulnerability[EB/OL].(2017-11-20)[2017-12-18].http://www.cnvd.org.cn/flaw/show/CNVD-2017-34604.
[6] Kieyzun A,Guo P J,Jayaraman K,et al.Automatic Creation of SQL Injection and Cross-site Scripting Attacks[C].Software Engineering,ICSE,2009:199-209.
[7] Martin M,Lam M S.Automatic Generation of XSS and SQL Injection Attacks with Goal-directed Model Checking[C].Proceedings of the 17th Conference on Security Symposium USENIX Association,2008:31-43.
[8] Balzarotti D,Cova M,Felmetsger V,et al.Saner:Composing Static and Dynamic Analysis to Validate Sanitization in Web Applications[C].Security and Privacy,2008:387-401.
[9] Appelt D,Nguyen C D,Briand L C,et al.Automated Testing for SQL Injection Vulnerabilities:an Input Mutation Approach[C].Proceedings of the 2014 International Symposium on Software Testing and Analysis,2014:259-269.
[10] Tu T D,Cheng G,Guo X,et al.Webshell Detection Techniques in Web Applications[C].International Conference on Computing,Communication and Networking Technologies IEEE,2014:1-7.
[11] 石刘洋,方勇.基于Web日志的Webshell检测方法研究[J].信息安全研究,2016(01):66-73.SHI Liu-yang,FANG Yong.Webshell Detection Method Research Based on Web Log[J].Research on Information Security,2016(01):66-73.
[12] Kornblum J.Identifying Almost Identical Files Using Context Triggered Piecewise Hashing[J].Digital Investigation,2006,3(03):91-97.
[13] Jason S.Ssdeep Project[EB/OL].(2017-11-07)[2017-12-18].http://ssdeep.sourceforge.net.
[14] Ivan R.Modsecurity-handbook[EB/OL].(2017-07-15)[2017-12-18].https://www.feistyduck.com/books/modsecurity-handbook.
[15] Scott B,Ben H.NeoPI:Detection of Web Shells Using Statistical Methods[EB/OL].(2016-08-15)[2017-12-18].https://github.com/Neohapsis/NeoPI.
[16] Charikar M S.Similarity Estimation Techniques from Rounding Algorithms[C].Proceedings of the Thiryfourth Annual ACM Symposium on Theory of Computing ACM,2002:380-388.
[17] Manku G S,Jain A,Das Sarma A.Detecting Nearduplicates for Web Crawling[C].Proceedin gs of the 16th International Conference on World Wide Web ACM,2007:141-150.