初入安全行业,一边阅读相关资料,一边总结,希望自己能在对杀毒软件技术加深理解的同时,也帮助到同是初学者的朋友。
一款杀毒软件,能够在病毒入侵时,迅速拦截(例如防火墙);也能够通过主动的扫描,发现可疑的文件或进程(例如执行病毒/漏洞扫描)。这实际上是被动的网络安全技术和主动的网络安全技术这两种,这里主要科普第二种。
一
首先,杀毒软件是怎么分辨病毒和普通文件的呢?当有病毒在网络上出现并牺牲了一部分用户后,杀软厂商会分析病毒的特征,例如,第10字节到20字节的十六进制代码是什么,把它记录下来;只要有文件的第10字节到第20字节的十六进制代码相同,就判断为病毒。
这种方法提取的是简单特征码,在计算机普及的早期很有效,但是随着病毒变种的增多,同一类的病毒,不仅可能第10到20字节的代码不同,甚至没有连续3个字节的内容是相同的,显然提取简单特征码的方法已经行不通了,于是出现了广谱特征码。这种方法是间隔的选取病毒的字节作为特征,在这些字节间的代码(字节掩码)不予参考,如此,病毒的变种也能被查杀,但是误报率(非病毒被误判为病毒的几率)也提高了。
误报率增高,对用户是个很大的干扰,怎么办呢?在这个时候,启发式扫描诞生了,不再是简单的比较病毒和文件的固定字节,而是先对病毒的行为分析。我们知道,不同类型的病毒,大多有一些相同的行为,例如,篡改注册表启动项,强行进入R0等,通过对文件的代码指令以及汇编指令的地址进行分析,可以大致判断出文件的行为,如果有以上行为,则判断是病毒。
随着虚拟技术的进步,还出现了通过行为特征来判断病毒的方式,这里的行为,是指的让其实际的运行一下,观察有没有破坏性行为。不过这里的运行,是运行在虚拟机里的,一旦确认文件是安全的,再把文件放在实体机上运行。例如,沙箱,就是这种技术的应用,快播流行时,有用户明知道捆绑了病毒也非用不可,关掉杀软也要看。怎么办呢,总不能让用户电脑中毒吧?沙箱就很好的解决了这个问题。
另外,病毒自身可以加壳,杀软如果不具备相应的脱壳技术,也无法识别,通过行为特征来判断的技术,可以让病毒脱掉壳露出原形,准备入侵时,再来识别。
病毒研制技术与反病毒技术之间,一直是一个此消彼长,相互对抗和平衡的局面。病毒研制团队为了追求利益,不断研制出新的病毒,各家杀软厂商也都拥有自己核心的查杀技术。那么,如何评判一款杀软呢?
二
杀毒软件是用来查杀病毒的,那么首先看的是它的查杀率。
理论上,病毒样本库越大,能识别病毒的几率就越高。但是病毒数目是海量的,且不断变化的,一个固定或更新很慢的病毒库是不能满足要求的,再加上在病毒库中的查询要快,误报率要低,杀毒软件判断文件是否是病毒的技术——杀毒引擎的自学习能力就很重要了。自学习指的是利用海量的样本,先分析病毒和正常文件的特征,再得出数学模型,最后用这个模型去区分出病毒;并且这套算法还要可以不断总结归纳,得出新的模型,来适应不断变化的病毒。
病毒样本库最先是放在本地的,随着库的增大,且本地的计算性能通常不是很高,造成了臃肿的病毒库占用存储空间、查杀响应不及时的问题。随着云计算的普及,病毒库开始逐渐本放在了云端,不占用本地空间,且计算性能相对较高。在用户本地搜集完特征数据后,上传到云端,分析得出结论后,再返回给本地。因此,在本地和云端间传输的速度,以及云端实时动态计算的能力也很重要。
用户使用杀软,不会希望它把正常使用的文件误杀,这会儿看的是误报率。
降低误报率,除了提高以上数学模型的准确度,一个数量巨大的白名单(有的称文件信誉机制)也能解放杀软,让其尽可能查杀,返回给终端用户结果前,再过一遍白名单,把与白名单中相同的文件过滤掉就可以了。
三
杀软想要对病毒进行全面的捕杀,除了以上提到的,还有大量的技术;各家杀软厂商也不断研究新的机制,申请专利。
作为安全行业资历尚浅的一枚同学,还需要不断的学习。