计算机病毒智能识别的思考
一、建立数学模型
关于现在主流的主动防御技术,主要采取监控一系列的病毒可疑行为特征,如在注册表中添加启动项,注入其他进程等,再对这些特征乘以一个权值,最后将计算的这些值相加得到一个最后的值,用该值与某一阀值进行比较,最终该改程序是否是计算机病毒做出判断。
其数学模型是,监控的各特征(共监控n个特征)构成一个n维空间(X1、X2、X3、|……Xn),每种特征都会有一个权值定义为(a1、a2、a3……an),针对一个程序如果它符合特征一那么x1=1,否则x1=0,同理可以确定该程序是否符合其他病毒特征,并用x2、x3、x4、……xn表示,那么判断某个程序是否是病毒的过程就可以转化为对y=a1x1+a2x2……+anxn方程式的计算。将计算出来的y值与事先定义好的法制m进行比较,如果y<m说明该程序可疑程度较小,认定其为正常程序;如果y>m则说明该程序可疑程度很大,认定其为病毒程序。上面的过程还可以进一步转化为
y-m = a1x1+a2x2……+anxn-m
令z = y-m 则
z = a1x1+a2x2……+anxn-m
令k = -m 则
z = a1x1+a2x2……+anxn+k (式一)
当z小于0时,该程序的可疑程度较小,认定其为正常程序;当z大于0时,该程序的可疑程序很大,认定其为病毒程序。
二、对个系数进行优化
以上部分为对当前主流主动防御系统的数学模型的抽象。下面我们来讨论在认识了当前主动防御的数学实质之后,如何来指导现有的主动防御系统的优化。在实际工作中,对于式一方程中的各系数a1、a2、a3……an及k的选取主要依据设计者多年积累下来的经验,来主观的选取。那么我们能否从数学模型的角度出发,寻找一个获取更客观数值的方法呢?
不管其实际意义,单独看式一,它表示一个n维空间的超平面,设n维空间中的一个点A(x1=b1, x2=b2,……xn=bn),那么将A的坐标点带入(式一)计算其结果z ,当点A在超平面的上方是z大于0,当点A在超平面的下方时,z小于0。
如果将从程序中获取的各种特征(x2、x3、x4、……xn)看做是这个n为空间中的一个个的点,我们要找到这个理想的超平面z就是可以将已知的这些点完好的分成两部分,在超平面上方的点所代表的程序都是病毒程序,在超平面下方的点所代表的程序都是正常程序。那么这个超平面的系数就是我们需要优化的部分。
具体的方法是,找一个程序样本集,其中一部分是病毒程序的样本,另一部分是正常程序的样本。提取这些样本在运行时的行为特征,并抽象成n维空间中的点。寻找符合要求的超平面,确定其系数a1、a2、a3……an及k。
在这里寻找超平面的问题实质是一个基本是数学问题,具体方法请查找相关资料。
三、关于这个数学模型还存在的问题。
1、维度的选择,如果n过大很增加复杂程度。n过小又会影响准确定。所以要选最有代表性的特征,将其量化到该n维空间的一个维度上。由于病毒程序的特征众多,最好是能将相关的多个特征先进行归并,之后在量化到n维空间的一个维度上。归并的方法可以有多种。
一种是按技术类别归并,比如将所以操作注册表的特征进行归并,将所有操作文件的特征进行归并。
另一种是按实现功能进行归并,如将实现程序开机自启动这一个功能进行归并。
2、针对目前用到主动防御用的模型,每单个维度的上的取值只有两个,分别用0和1表示符合这个特征,或者不符合这个特征。由于单个维度上的计算简单所以在高维度的情况下的计算复杂程度并不高。但是个人觉得这种方式单个维度的信息含量太少,并不是一个合理的划分方式,最好可以将单维度上的取值扩展到一个整数域中[-a,a],并将维度适当降低。两者找到一个平衡。有负值的情况可以表示某种特征可以加强该程序为非病毒程序的可能性。
3、该模型无法描述时间序列上的特征。
比如某一病毒程序,它有这样的特征:先枚举当前程序中的窗口名称,定位到QQ登录窗口,获取窗口中的输入内容。接着连接网络向外发送数据。这是一个QQ木马病毒的典型特征,但是如果这两个特征反过来先向外发送数据,接着枚举当前程序中的窗口名称,定位到QQ登录窗口,获取窗口中的输入内容。那么具有这个特征的程序很可能就不是QQ木马。但是本文中的这个数学模型就很难表示类似这样的一系列动作先后顺序的特征。