关于智能病毒分析系统的设想

                                                                      关于智能病毒分析系统的设想

作者:安子矜
邮箱:anbingchun@sina.com

         就目前而言对于一般的电脑使用者来说杀毒软件是对付计算机病毒的唯一有效的方式。然而杀毒软件自身存在的滞后性使得对新病毒的防护总是滞后于新病毒的出现,即总是先有部分电脑被病毒所破坏,杀毒软件厂商才能捕获该病毒,为更多的电脑提供有效的保护,这段时间一般在两到五天之间。这段时间的延时是怎么产生的呢,主要有以下几部分组成:病毒感染部分电脑后,用户将可疑的病毒样本上报给杀毒软件公司需要一段时间;杀毒软件公司的病毒分析工程师对上报的可疑样本进行分析判断的时间;对分析确定的样本提取特征码,加入病毒库的时间;杀毒软件公司将最新的病毒库传送到升级服务器上的时间;以及用户升级病毒库的时间。而这当中最耗费时间的当数可疑病毒样本的分析过程和病毒特征码的添加过程。其中原因一方面是由于这个过程的技术难度较高,有很大的误判风险,病毒分析师十分小心谨慎的工作,另一方面就目前而言这一过程的主要工作必须由病毒分析工程师的手工操作完成,自动化程度非常低,也是病毒分析速度缓慢,杀毒软件升级实时性不好的重要原因,为了解决分析过程中自动化程度低的问题,本文提出一套计算机病毒智能自动分析的设想,与大家分享。
 该系统分三个模块来实现,分别是:病毒信息的搜集,病毒信息的综合分析,病毒特征码的添加:
 
第一个模块,病毒信息的搜集部分,
        有三个部分的信息需要被搜集:病毒的行为、病毒的特征和病毒的其他信息。利用已经完成的虚拟机控制程序等程序(以前写的一套程序,包括虚拟机中的一个病毒行为监控程序和本机上的一个虚拟机控制程序,用来当虚拟机中的系统被病毒破坏后,控制虚拟机回到初始状态,以备监控另一个程序的行为),再借助其他杀毒软件提供的信息我们完全可以搜集到足够的病毒信息。
 病毒的行为主要是指病毒运行过程中的一些行为特征,比如创建文件,远程线程注入等信息。
 病毒的特征信息主要是指,病毒的一些静态特征,比如说特定病毒的dump文件(病毒运行后,将内存映射中的内容以文件的形式保存)中的一些固定字符串,程序的版本信息(前不久又重写了提取版本信息的程序,比以前那个好用多了,主要被用来把正常文件挑出来)。另外,还可以把病毒中普遍出现的一些字符串作为特征,比如:杀毒软件的名称,del  **.exe 等字符串。以及病毒的图标信息(比如熊猫烧香病毒中的熊猫头像),和病毒程序的文件名信息(比如灰鸽子一般会有一个**key.dll文件),在病毒识别的广度方面的实际效果还是很好的,所有这些方面的信息都可以建立黑白两个表,从而把正常程序和病毒程序加以区分。
 其他病毒信息主要是指其他病毒软件提供的信息。这里重点是在获得尽可能多的不同软件对同一个样本的综合信息。
第二个模块,病毒信息的综合分析。
     将上一模块获得的所有信息进行综合的分析,确定病毒样本。
 对dump文件中特定字符串,提取出来的样本的分析工作。具体的内容是:在搜集了大量字符串信息后,很多情况下,一个样本会出现多个病毒名名称的提示:比如一个样本根据样本中的一个字符串提示是Trojan/PSW.QQPass 根据样本中的另一个字符串提示是 Trojan/Pass.Xiyou 病毒.。到底应该认定是什么病毒呢?解决的办法是,在每条字符串的记录中加上了,通过该特征字符串搜出的样本的数量和用该特征字符串对应的病毒名称添加入病毒库的数量的两个计数器。然后对这个问题建立一个数学模型,由于自己对这个数学模型没能想出好的解决方法,当时把这个问题放到了CSDN的论坛算法版块,为了使非信息安全领域的人员更好的理解问题本质,将问题转换成了一个更容易理解的问题,见附录1,得到的答案还算有一定参考价值。
 进一步还有很多工作要做,比如:
     A. 参考其他杀毒软件,以前一些杀毒软件厂商采取的方式是参考单一杀毒软件的扫描结果,比如说先用瑞星杀毒软件对样本进行扫描,提取出可以查杀的样本,再用第二种杀毒软件对剩下的样本进行扫描。以此类推,这样的问题在于如果其他软件的误报率为P的话,我们添加的误报率也会是P。而如果我们把这些信息进行链化,最简单的方法就是取其交集,那么误报率会降到P的n次方。当然如果使用复杂一些的分析方法,充分考虑准确性和效率的平衡点,效果会更好。
    B. 充分利用病毒的遗传性,及病毒释放出来的文件是病毒概率会比普通文件高好几个数量级;而能够释放出病毒的文件,这些样本文件本身是病毒的概率也会比普通样本高出几个数量级,我们在实际添加过程中也会经常遇到,一个样本释放出的Dll文件,已经能够查出,而由于样本本身加了另一种不同的壳而无法查出。利用病毒的遗传性很容易处理这种问题。
    C. 对监控程序的监控结果进行分析,比如修改了SSDT表,很可能是“Rootkit”类型的病毒,如果连接ftp或http下载文件,是Downloader的可能性会很大,而木马一般会通过电子邮件发送盗取的信息。
 除了上面提到的一些信息外,我们可以加以利用的信息还有很多,将所有这些信息利用类似刚才提到的方法进行综合分析,另外,我们未知病毒软件中的方法也可以利用。
 在病毒的综合分析方面,我们可作的工作还很多。在人工智能的模式识别领域和数据库中的数据挖掘方面的一些成果。我们也可以拿来加以利用。
第三个模块,病毒特征码的添加部分。
     一个病毒特征码的选择一般分三种情况来处理:加壳的、加Pach(指的是对程序的入口地址和入口处的指令进行修改)的、不加壳的(包括杀毒软件本身可以脱壳的情况)
 在判断是否加壳问题上,有很多方法比如:将程序进行压缩,看压缩比。另外前一段时间看密码学,受到启发也想了一种办法,在英文中各个字母出现的概率是固定的,破译专家常根据这一线索破译密文,相似的一个不加壳的程序个数值的分布概率也应该是有规律的的,而加壳后规律必然被破坏,通过这一特征应该也可以进行判断,不知道不同编译器编译的程序的统计概率是不是会不同。是否可以用类似方法识别不同的编译器。这样既是入口被该也不受影响。
     利用以上方法应该可以很好的判断一个程序是否带壳。
     panch的判断可以根据入口处程序段,前后很大范围内是否都为空,如果是的话应该是个panch,(还有待程序验证)。对于直接在入口附近插入panch的样本,直接按没带壳的情况加也可以。
      正确识别以后进入特征吗的寻找过程。
     带壳的样本以及Panch的样本的特征码比较好处理,直接加压缩数据部分和Panch本身就可以了。
 对于没带壳的,要解决这个问题,需要有一个类似IDA的反汇编工具。之后可以通过以下几种方式来找位置。首先是根据字符串的,已经积累了不少的特定病毒特有的字符串,找到调用这些字符串的位置,就是正确的添加位置,另一种方法是以样本中调用的API函数为参考,在样本中找一些病毒特有的API函数,在调用这些API函数的相观函数中找合适的位置。
 
     由于计算机系统性能方面的问题,就目前而言,本套系统还不适合直接部署到用户的计算机上,但如果杀毒软件厂商能够实现该系统,相信可以大大提高病毒分析人员的工作效率,并且待日后技术进一步成熟,可以考虑逐步将这些技术转移到用户的电脑上,彻底改变杀毒软件总是过期药的被动局面。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值