本帖最后由 z13667152750 于 2012-3-29 22:20 编辑
最近有人在360区和hips区发帖大谈360卫士8.6测试版误将白加黑样本中的白文件exe隔离,而致黑的dll文件不顾
首先,我们需要知道这类样本是怎样利用白文件逃过安全软件的主防以及防火墙的
dll文件本身无法运行,需要通过exe加载dll来实现功能
在编写软件时,如果一个软件的功能很多,或者要实现其功能需要较复杂的过程,那么没有人会将所有的代码全部编写在一起,然后编译为一个单独的exe文件.编程人员会将其功能分拆,这些分拆的功能就是dll,这样做的优势非常多,dll可以不要自己辛苦编写,可以使用共用的dll,在升级的时候也会比较方便,不需要更新全部文件,只需要更新部分相关的exe\dll等即可;微软自己便提供许多dll,尤其是对于游戏来说,微软提出的directx 9 \10\11便是一系列的dll;许多高级语言也自带一些dll,所以很多程序如果没有安装vc 2008等组件便无法运行,这些组件其实就是很多共用dll文件.
正常情况下,exe会调用编程者希望调用的dll,但是加载哪些dll文件是有一定规定的,会在exe自身目录下寻找或者系统目录等地方按照一定顺序寻找对应文件名的dll并加载到exe中运行其代码(没错,就是依靠文件名匹配dll的),2010年闹得沸沸扬扬的windows dll预加载漏洞就是和dll加载顺序有关
未严格编程的exe会将其加载的dll随意执行,并且还不会对同名dll文件进行是否是自己希望加载的特定dll文件的校验,而dll本身不会生成进程,dll自身挂在exe的进程下默默执行代码
看到这里大家就应该知道白加黑样本就是由于白的exe文件错误加载了黑的dll文件对电脑造成危害的.白的exe是无害的,dll才是有害的,但是exe被坏人利用了
也许有人会说,既然这样,行为防御为什么无法拦截这种样本?
说到这里就必须提到数字签名这种东西,我在这里不想提太多密码学的知识,只是告诉打大家一个大前提:数字签名的依据是对文件的散列函数值(MD5\HASH等)使用私钥进行加密,和每一个私钥配对的都有一个公钥,私钥是各个公司自己保存且不得外泄,公钥则是开放给互联网所有用户的,其作用是,对私钥加密过的散列函数值进行校验,确认其是否真正是由对应私钥加密的.在每个有签名的文件尾部都有一块区域用于保存私钥加密信息,然后一使用对应公钥进行计算校验,就可以知道该文件的散列函数值是否改变过,是否是真正由对应私钥加密的.
总之,只要经过公钥私钥校验就可以知道被签名文件的散列函数是否改变过,是否是经过某一特定私钥加密的.散列函数未改变即等同与文件未被修改过(私钥公钥可以用于商务活动,并且经过其校验的电子合具同有法律效力)
互联网上的数字签名均掌握在少有的几家公司手中(如comodo,被symantec收购的versign),其他互联网公司向他们购买商业使用的私钥,为自己的软件产品加上签名,这些签名也不是随意发布的,需要考核以及金钱,以保证签名不被滥用.
由于应用程序多种多样,各种hips不可能为每个程序单独制定规则,因此hips依据这些数字签名建立可信分组(当然,只有几家大的签名提供公司卖出的签名才允许被加入其中),允许其组内程序的所有行为而不加以检测
白加黑样本的厉害之处就在与,现有的hips(防火墙也类似)均以进程为单位进行行为检测,也就是说hips(或防火墙)看到的这个有签名的白exe文件被dll利用在执行的行为,均是该exe文件自己执行的,和什么dll没有任何关系.由于被利用的白文件有可靠公司的签名,因此被自动放行所有行为,行为防御和防火墙形同虚设.
|