您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
 订阅
  捐助
浅谈webshell检测方法
 
作者:携程安全中心 来源:黑客与极客 发布于:2015-5-16
817 次浏览     评价:      

一 什么是webshell

“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为匿名用户(入侵者)通过网站端口对网站服务器的某种程度上操作的权限。

简单理解:webshell就是一个web的页面,但是它的功能非常强大可以获得一些管理员不希望你获得的权限,比如执行系统命令、删除web页面、修改主页等。

webshell中由于需要完成一些特殊的功能就不可避免的用到一些特殊的函数,我们也就可以对着特征值做检查来定位webshell,同样的webshell本身也会进行加密来躲避这种检测。

二 webshell长什么样子

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

三 webshell检测有哪些方法

如果你怀疑你的网站被人上传了webshell或者你需要检查一下需要上线的代码中是否被嵌入了shell代码,就需要对这些文件进行扫描,那么有哪些方法可以扫描出这些webshell呢?

下面列举一下,也就是我们的webshell扫描工具中实现的功能。

1 求文件的重合指数index of coincidence(缩写为IC)

首先介绍一下什么是IC?

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。

2 求信息熵

信息熵是一个数学上颇为抽象的概念,在这里不妨把信息熵理解成某种特定信息的出现概率(离散随机事件的出现概率)。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。信息熵也可以说是系统有序化程度的一个度量。

熵是从整个集合的统计特性来考虑的,它从平均意义上来表征信源的总体特征,其公式为:

如果有一个系统S内存在多个事件S = {E1,…,En}, 每个事件的机率分布 P = {p1, …, pn},则每个事件本身的讯息为

Ie = ? log2pi

(对数以2为底,单位是位元(bit))

Ie = ? lnpi

(对数以e为底,单位是纳特/nats)

如英语有26个字母,假如每个字母在文章中出现次数平均的话,每个字母的讯息量为

I_e = -\log_2 {1\over 26} = 4.7

而汉字常用的有2500个,假如每个汉字在文章中出现次数平均的话,每个汉字的信息量为

I_e = -\log_2 {1\over 2500} = 11.3

整个系统的平均消息量为

H_s = \sum_{i=1}^n p_i I_e = -\sum_{i=1}^n p_i \log_2 p_i

因此我们可以求每个文件的信息熵值,值越大,为webshell的可能性越高。

3、求文件中的最长单词

求一个文件中的最长单词是多长,比较异常的长单词是很可疑的。如下面的第一位的有84070,毫无疑问他是加密后的一整串字符串,极有可能是webshell

84070        /home/wwwroot/default/webshell/css.php

4、文件的可压缩比

文件的压缩比=压缩文件后的大小/文件的原始大小。

那么什么样的文件的压缩比比较大呢?这就要说到压缩算法的本质:

压缩的实质,在于消除特定字符分布上的不均衡,通过将短码分配给高频字符,而长码对应低频字符实现长度上的优化。

做了个简单的实验:将一个txt文件中填充了一堆的a字符,总大小为345KB,用7z压缩后为1K

那么我们是否可以这样理解,由base64编码过的文件,消除了非ascii的字符,这样实际上base64编码过的文件的字符就会表现为更小的分布的不均衡,压缩比就会变大。

5、特征值匹配

这里提到的特征值匹配分为2个部分:第一个是匹配特征函数和代码,也就是说webshell中会用到的而一般文件不会用到的函数和代码。第二个是指匹配特定webshell中的特征值。

第一种情况我们需要对这些函数和特征代码做整理,然后与文件进行匹配。

第二种情况需要收集出现过的webshell,将其中的特征码提取出来。目前已知的库位500个webshell的特征库,可以准确识别99%的已知的webshell。

6、文件属性

第一种:在web服务器中,文件一般的创建时间是几种的,如果某些文件的创建时间比较异常,那么它就有可能是webshell。

第二种:在web攻击过程中,有一种手法是利用mysql到出一句话木马到web目录中,那么这个导出的文件有其特殊性,所有导出的文件的权限都是666.那么我可以这么认定,权限为666的文件有可能是webshell。

四 朴素贝叶斯模型

以上几种方法都有其准确率和误报情况,经过测试,每个方法都能检测出一部分webshell并且存在着一定程度的误报,那么如何将他们的检测结果整合起来,来更准确的判定一个文件是否webshell?

由于我们的检测方法基本上是离散的,所以考虑使用朴素贝叶斯模型。

首先用数学语言描述一下我们的问题:

一个文件的检测结果有两种:是webshell和不是wenshell。那么检测结果是webshell的概率我们用P(y=1)来表示,检测结果不是webshell的概率我们用P(y=0)来表示。

假设我们的检测方法有5种,那么x = [x1,x2,x3,x4,x5].

假设我们检测一个文件后各个检测方法的结果为:x1 = 1,x2=0,x3=0,x4=0,x5=1

那么我们的目的是计算出P(y=1|x)和P(y=0|x)。也就是计算出该文件是webshell和不是webshell的概率各是多少,概率更大的我们就做为最终结果。

下面我们推演一下:

首先是贝叶斯公式为:

那么我们需要的P(y=1|x)为:

由于P(y=1|x)和P(y=0|x)中的分母都是一样的,所以我们只要求出分子进行比较,那个值比较大就取那个值。

现在我们未知的值为p(x1=1|y=1),p(x2=0|y=1),p(x3=0|y=1),p(x4=0|y=1),p(x5=1|y=1),p(y=1)

这些值应该如何得到呢?

首先我们需要一个样本,样本中大量的web文件,其中混有各种webshell,这些标签我们是可以确定的,那么下面我们要做的就是利用程序对这些样本进行检测,根据检测结果计算出我们需要的值,比如:

p(x1=0|y=1):它代表的意思就是检测的文件是webshell,利用x1检测方法的检测结果为0(不是webshell)

如果结果为P(y=1|x)>P(y=0|x),我们就判定该文件是webshell。

工具回头会在FB发布,敬请期待。

   
818 次浏览  评价: 差  订阅 捐助
 
相关文章

iOS应用安全开发,你不知道的那些事术
Web安全之SQL注入攻击
移动APP安全在渗透测试中的应用
从Google备份互联网看“数据安全”
 
相关文档

web安全设计与防护
互联网海量内容安全处理技术
黑客攻击与防范技术
WEB黑盒安全检测
 
相关课程

WEB网站与应用安全原理与实践
web应用安全架构设计
创建安全的J2EE Web应用代码
信息安全问题与防范
 

iOS应用安全开发
Web安全之SQL注入攻击
APP安全在渗透测试中的应用
初探PHP的SQL注入攻击的技术
从Google备份看“数据安全”
更多...   

WEB网站与应用安全原理与实践
web应用安全架构设计
创建安全的J2EE Web应用代码
注册信息安全专业人员(CISP)
信息安全管理
信息安全问题与防范

相关咨询服务
应用架构设计与构建

中国银行 信息安全技术及深度防御
Web应用安全架构、入侵检测与防护
某财税领域知名IT服务商 Web安全测试
普瑞克斯 web安全设计、测试与优化
北京和利时 性能和安全性测试
SUN中国工程研究院 JSF框架、安全
更多...   
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号