设计观点

精准传达 • 价值共享

洞悉互联网前沿资讯,探寻网站营销规律

webshell检测方法归纳

作者:Smileby陌少羽 | 2017-06-09 08:14 |点击:

一  什么是webshell


“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为匿名用户(入侵者)通过网站端口对网站服务器的某种程度上操作的权限。
简单理解:webshell就是一个web的页面,但是它的功能非常强大可以获得一些管理员不希望你获得的权限,比如执行系统命令、删除web页面、修改主页等。
webshell中由于需要完成一些特殊的功能就不可避免的用到一些特殊的函数,我们也就可以对着特征值做检查来定位webshell,同样的webshell本身也会进行加密来躲避这种检测。

二  webshell长什么样子


下图就是一张php webshell的截图,它的功能还是比较全的,如果你是网站管理员的话肯定是不希望普通用户获得下面的权限的。

webshell检测方法归纳
 

x01 webshell检测模型

Webshell的运行流程:hacker -> HTTP Protocol -> Web Server -> CGI。简单来看就是这样一个顺序:黑客通过浏览器以HTTP协议访问Web Server上的一个CGI文件。棘手的是,webshell就是一个合法的TCP连接,在TCP/IP的应用层之下没有任何特征(当然不是绝对的),只有在应用层进行检测。黑客入侵服务器,使用webshell,不管是传文件还是改文件,必然有一个文件会包含webshell代码,很容易想到从文件代码入手,这是静态特征检测;webshell运行后,B/S数据通过HTTP交互,HTTP请求/响应中可以找到蛛丝马迹,这是动态特征检测。

 

0x02 静态检测

静态检测通过匹配特征码,特征值,危险函数函数来查找webshell的方法,只能查找已知的webshell,并且误报率漏报率会比较高,但是如果规则完善,可以减低误报率,但是漏报率必定会有所提高。优点是快速方便,对已知的webshell查找准确率高,部署方便,一个脚本就能搞定。缺点漏报率、误报率高,无法查找0day型webshell,而且容易被绕过。对于单站点的网站,用静态检测还是有很大好处,配合人工,能快速定位webshell,但是如果是一个成千上万站点的大型企业呢,这个时候再人肉那工作量可就大了。所以用这样一种思路:强弱特征。即把特征码分为强弱两种特征,强特征命中则必是webshell;弱特征由人工去判断。加入一种强特征,即把流行webshell用到的特征作为强特征重点监控,一旦出现这样的特征即可确认为webshell立即进行响应。要解决误报和漏报,就不能拘泥于代码级别了。可以换个角度考虑问题:文件系统。我们可以结合文件的属性来判断,比如apache是noboy启动的,webshell的属主必然也是nobody,如果我的Web目录无缘无故多了个nobody属主的文件,这里就有问题了。最理想的办法是需要制度和流程来建设一个web目录唯一发布入口,控制住这个入口,非法进来的Web文件自然可以发现。

笔者基于静态检测的webshell工具

 

0x03 动态检测



 

webshell传到服务器了,黑客总要去执行它吧,webshell执行时刻表现出来的特征,我们称为动态特征。先前我们说到过webshell通信是HTTP协议。只要我们把webshell特有的HTTP请求/响应做成特征库,加到IDS里面去检测所有的HTTP请求就好了。webshell起来如果执行系统命令的话,会有进程。Linux下就是nobody用户起了bash,Win下就是IIS User启动cmd,这些都是动态特征。再者如果黑客反向连接的话,那很更容易检测了,Agent和IDS都可以抓现行。Webshell总有一个HTTP请求,如果我在网络层监控HTTP,并且检测到有人访问了一个从没反问过得文件,而且返回了200,则很容易定位到webshell,这便是http异常模型检测,就和检测文件变化一样,如果非管理员新增文件,则说明被人入侵了。缺点也很明显,黑客只要利用原文件就很轻易绕过了,并且部署代价高,网站时常更新的话规则也要不断添加。还有一个思路利用函数劫持。回忆一下,我们调试网马的时候,怎么还原它各种稀奇古怪的加密呢,简单,把eval改成alert就好了。类似的,所以我们可以在CGI全局重载一些函数(比如ASP.NET的global.asax文件),当有webshell调用的时候就可以发现异常。已js为例(php,asp等语言思路一样的,都是保存原函数,然后从新定义原函数,最后在调用保存的原函数),比如下面就是把eval重载,还可以弹出个危险提示等,吓退一些没经验黑客。
 

三   webshell检测有哪些方法

 


如果你怀疑你的网站被人上传了webshell或者你需要检查一下需要上线的代码中是否被嵌入了shell代码,就需要对这些文件进行扫描,那么有哪些方法可以扫描出这些webshell呢?
下面列举一下,也就是我们的webshell扫描工具中实现的功能。
1 求文件的重合指数index of coincidence(缩写为IC)
首先介绍一下什么是IC?

webshell检测方法

IC是用来判断文件是否被加密的一种方法。它的计算公式是这样的:

Σ(fi * (fi-1))/N(N-1)    :fi 代表样本中某个字母出现的比率,N代表字母出现在样本中的个数

通过计算,我们可以得到以下两个值:

english的IC值为0.0667,
english中一个完全随机的字符串的IC值为0.0385

那么这两个值有什么意义呢?
简单来说(english),
加密文件的IC值接近0.0385
明文文件的IC值接近0.0667
好了,那么我们就可以计算每个文件的IC值,如果这个文件的IC值接近0.0385,那么我们认为它是加密的,而一个web中加密的文件一般就意味着它是个为了逃避检测的webshell。

如没特殊注明,文章均为狐灵科技原创,转载请注明  https://www.hulingweb.cn/sjgd/20.html
多一份免费策划方案,总有益处。

请直接添加技术总监微信联系咨询

网站设计 品牌营销

多一份参考,总有益处

联系狐灵科技,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:023-68168040 / 大客户专线:15523356218