杀毒技术的历史和未来
杀毒技术的历史和未来(作者:重剑无锋)
第一章 与病毒奋战20年的杀毒引擎和特征库
很多人都把杀毒技术看得很神秘,其实无论杀毒软件的版本怎么升级、概念如何变化,基本的原理就是“杀毒引擎+特征码匹配”,杀毒引擎是枪,特征码是子弹,子弹越多,能杀的病毒就越多。很多人用盗版的杀软,不能升级特征库也就对付不了新的病毒。
特征库是由杀毒厂商收集到的病毒样本的特征码组成,而特征码则是病毒分析工程师从病毒程序中找到和正当软件的不同之处,截取一段类似于“搜索关键词”的程序代码。
当用杀毒引擎扫描硬盘、或者监控一个文件的动作时(比如下载、修改注册表等等),它会读取文件并且与特征库中的所有特征码“关键词”进行匹配,如果发现文件程序代码被“关键词”命中,就把那个文件判定为病毒——就像搜索引擎用关键词去精确匹配网页,定义足够多的关键词才能找到需要的结果。
总体来说,杀毒软件的工作流程是:采集样本(用户举报、杀毒厂商共享)—>病毒分析工程师截取特征码—>特征码加入特征库—>用户升级特征库。
特征库匹配是查杀已知病毒很有效的一项技术,也是杀毒引擎赖以工作的基础(扫描、监控都需要调用特征库),一直被杀毒软件沿用下来,国内外无数反病毒工作者为截取病毒特征码付出了巨大努力,所有特征码都需要严格的测试和比对,否则极易造成误伤。
在杀毒软件走过20年历史、互联网高速普及的今天,杀毒引擎和特征库匹配技术也受到越来越多质疑:木马数量急剧增加,人工截取特征码的效率有限。即使假设所有样本都能及时处理,特征库变大也会带来资源占用过大的问题,特别是杀毒引擎随系统启动时都要把特征库写入内存,这是杀毒软件遭到诟病的一大原因。
从杀毒软件的演变来看,杀毒软件为网络安全行业积累了宝贵的经验,也面临着不少问题:
① 1989年,第一款杀毒软件Mcafee诞生,开启杀毒软件的特征库时代
要了解Mcafee的工作原理,需要先看看人类最早的计算机病毒,是由美国一个著名黑客莫里斯编写的“虫子”,其实本来只是一个游戏产物,却爬出实验室弄瘫了几千台连网的电脑。
早期的病毒相对简单、技术含量现在来看完全小儿科,Mcafee等杀毒先驱使用了特征码匹配的方法,也就是分析病毒程序代码的“与众不同”,通过利用特征字符串(又称特征码)查出病毒。当时可能谁都没想到,这个思路会一直沿用到20年后的今天。
②上世纪90年代,防毒卡昙花一现,病毒的多样化催化广谱特征码
国内有记载的计算机病毒出现在1988年,就是一个小球不停地在屏幕上转悠。当时国内还没有杀毒软件,在1990年深圳一家公司做出了最早的防毒卡,随后瑞星跟进,并因此声名大噪,不过由于防毒卡不能解决新的病毒,很快就退出了市场。
到90年代中后期,Windows视窗操作系统一统天下,病毒也开始进化,呈现出多样化发展的趋势,比如多形幽灵、生成器、变体机、网络蠕虫等等,简单提取特征码已经没法应付花样繁多的病毒,一种更复杂的广谱特征码就此出现了。从本质上说,广谱特征码是一类病毒程序中通用的特征字符串。比如,有10种病毒都使用了一段相同的破坏硬盘的程序,那么把这段程序代码提取出来作特征码,就能达到用一个特征码查10个病毒的功效。一些厂商把这种做法称为“广谱特征码”,是为了增加杀毒技术的神秘色彩。病毒分析工程师的技术和经验成为杀毒软件表现的决定性因素。
③加壳技术兴起,特征库迎来第一道难关
鉴于杀毒软件运用特征库查杀的原理,黑客们从上世纪末开始将加壳作为逃避查杀的主要手段。加壳其实就是把木马病毒文件用加密算法压缩,让杀毒引擎无法读取这个文件,从而不能和特征库匹配。
加壳技术早在DOS时代就出现了,从上世纪末到2008年以来,特别是学做木马易做图的人同网游市场规模一样急速扩大,加壳被木马作者普及采用,给杀毒软件制造了不小的麻烦:
首先脱壳(解压缩)的难度很高,即便是相对简单的壳,一个反病毒高手逆向分析至少需要3天,再加上编写脱壳代码和测试,整个周期至少1周。也就是说,一个木马作者稍微修改一下加壳工具,再把木马加壳后传播出去,一周之内都不需要担心会被杀毒软件查到。
杀毒引擎查杀病毒一定要进行特征库匹配,木马加壳后就不得不先脱壳,这对杀毒软件造成了极大的困难,只能不断积累对各种加壳工具的脱壳经验。目前比较基本的加壳工具有50多种,一些技术相对高明的黑客自己修改而成的加壳工具更是数不胜数,其中个别加壳工具直到现在仍没有杀毒软件能够破解。不过,黑客们也发现,加壳并不是对抗杀毒软件最好的方式,因为一旦一类加壳工具被破解,大批木马就会被杀毒引擎用特征码检出。于是,一个更疯狂的疲劳战术出现了。
④2008年至今,网页挂马成就木马的疲劳战术
互联网上有大量安全性薄弱的网站,黑客通过SQL注入或跨站脚本漏洞攻击就能轻易实现大面积的网页挂马,这是当前木马最常用的传播手段,成本也很低廉。既然挂马网页可以不断发布新的木马,黑客们很自然地想到了冲垮杀毒软件特征库的办法,也就是定位杀毒软件特征库的截取方式,加快发布木马变种的频率,让杀毒厂商的分析工程师们疲于奔命。
无壳的木马虽然易于截取特征码,但制作简单,可以用工具针对杀软的特点批量修改,杀毒厂商则需要调配大量人手逐个分析,基本上只能跟在木马身后疲于奔命。
第二章 杀毒软件之惑
现在互联网上最强的黑势力是难以尽数的易做图工作室,比较出名的有赤兔马、老A、乐意马、铁血等等,这些都是木马可执行文件上带有品牌的,还有更多神秘低调的木马团伙,它们变种之快让人们难以想像,杀毒软件终于日益力不从心:
① 样本采集问题
为了尽快抓到木马样本,不少杀软开始尝试云安全的思路,一方面是让用户自动举报行为可疑的软件,另一方面是在用户访问到挂马网页时从网马中捕获。前者的问题在于木马作者在编写时通常早有对策,至于后者,就需要杀毒软件对挂马网页足够灵敏,而且用户量足够大。
②样本分析问题
木马的疲劳战术是杀毒厂商最为头疼的问题,杀毒引擎要工作,就要把新木马的特征码人工分析截取出来,还得严格测试保证不出现严重误杀。对一家大型杀软厂商来说,每天分析成百上千个新样本是没问题的,但如果每天有数十万个甚至上百万个新样本,没有哪家厂商能够有这样的人力。
③特征库升级问题
即便木马的特征码都能被提取入库,升级特征库也不容易。一方面是时效性,比如很多杀毒软件租用CDN服务器来发布特征库的更新,最快也得3个小时用户才能开始升级,更何况之前还需要分析编码,按照现在木马的变种速度,等到升级完特征库,比较有组织有实力的木马早就自动重新免杀了,这也是人们一直抱怨杀毒软件滞后查杀的重要原因。
④系统资源占用问题
特征库无限制增大对用户的影响也非常明显,首先杀毒软件只要开着,特征库就需要写入内存,定期升级特征库也要耗费不小的流量;杀毒引擎的特征码匹配式查杀、而且是全库匹配造成扫描速度很慢,很多用户因此只在电脑发生问题时才进行扫描,留下不小的安全隐患。
第三章 杀毒软件穷则思变
上述四个问题让杀毒软件在互联网时代极为尴尬,一些新的技术和想法开始出现:
①启发式扫描的利弊
启发式扫描指的“运用某种方式去判定事物的知识和技能”,是让杀毒软件具有学习能力的一项技术,通过行为判断、文件结构分析等手段,在较少依赖特征库的情况下能够查杀未知的木马病毒。在各杀毒软件中,小红伞的启发是公认最牛的,在安全论坛上的查毒测试总是无比强悍,但在国内小红伞的用户却非常少,一方面小红伞的知名度在国内较低,另一方面启发式扫描也有着无法回避的问题,就是动辄高达30~40%的误报率。
在实验性样本测试和安全技术爱好者看来,启发式扫描比特征库优越得多,但可以肯定的是,杀毒软件在明处,木马作者在暗处,Windows操作系统都漏洞百出,更何况是杀毒软件,黑客写出的木马要想有买家,一定是能对主流杀软免杀的,而不是在安全论坛上用来测试的样本。这也是绝大多数杀毒软件仍然坚持特征库杀毒引擎的重要原因。
②杀毒软件互相“学习”的潜规则
单个杀毒厂商采集样本和分析样本都有着处理能力的瓶颈,于是彼此之间互相学习(更准确的说是“抄袭”)就成了业内公开的潜规则,比如说使用其它杀毒引擎检测样本、逆向分析其它杀毒引擎的脱壳技术等等。
这个潜规则有效地促进了安全行业的“资源共享”,当一款杀毒软件能查杀某个新型木马,大约在两三天内其他杀毒软件都能纷纷跟进,但这也造成杀毒行业陷入同质化发展的局面,区别仅在于各自代码的编写质量,直观表现就是资源占用和扫描速度不同。穷则思变,杀毒软件需要改变,活跃了20年的特征库杀毒引擎是否会退出历史舞台?用户的需要将决定一切。
--------------------编程问答-------------------- 顶!学习了 --------------------编程问答--------------------
补充:云计算 , 云安全