AV是我习惯的简写,全名应该叫Anti-Virus,从这个英语字面含义和一些对反病毒历史的追溯,我发现最初人们想表现的并不是杀毒,今天我们总是习惯叫杀毒软件,其实是不准确的。Anti的本意是抵制、防护,它应该叫抗病毒,或者防病毒。不论抗或者防都说明对病毒的未雨绸缪。杀毒则是一种后发补救的策略,虽说亡羊补牢犹未晚,但毕竟还是有一些损失的。
叫杀毒软件则是典型的中国特色,比如健康,中国人一般平时是不太注意健康的,等到有病了才要去看病。中国的反病毒公司出于宣传效果需要,就必然要搞的威风凛凛,给AV技术带来一层杀气腾腾的神秘色彩。
说起概念,我很欣赏一些国外的宣传,这里不防就给NAV做个广告:
看到没,上面这图就是Symentec给自己做的宣传页,诺顿在发布会上用瑜伽诠释了它的文化“自由分享,安心沟通”,瑜伽的充分舒展身体,意味着自由,意味着无限延伸。
如今的网络你可以安心沟通么?显然不能!网络上广告满天飞,流氓插件群魔乱舞,垃圾邮件像一只只马蜂乱蛰,一些“黑客”整天无聊的扫来扫去,D站D得不亦乐乎。这个时候,你认为你需要的,显然不是浪费时间和精力的去检查,去杀灭,你希望的也许是一个安心的防护套件,让我们可以自由、安心的冲浪。
反病毒理念的不同造就各种不同的反病毒产品,不过上天有好生之德,本文作者亦本着万物以自己的喜好为准,所以并不特别推荐你用哪种AV,也请勿问我。
二、混沌初开:
自从盘古开天辟地的以来,出来了两个神仙级的人物,一个被人称为Doctor Soloman,一个叫Eugene Kaspersky,另外还有两个叫Peter Norton和Mcafee。这几位神仙有感人间妖风阵阵^-^,病毒横行。决定制定一套法典,用来解救世人,于是他们的研究,促成了当年反病毒理论的基础。这些基础理论,经过后来的一些教授、专家们推广开来,就形成了今天的反病毒体系。
在那个时代,还有无数的高人,自己苦心孤诣的修炼,但终因天资所限、时不与我,或者剑走偏锋,步步险招,无法修炼成正果。
远古的反病毒软件主要有:
Anti-virus collection by V.Bontchev
F-Prot
File Shiled by McAfee
NOD of Slovak AV
TbScan
AVP by E.Kaspersky
Dr.Web by Igor Daniloff
Norton AV
Solomon's Toolkit
LEVEL3 virus dedicated AV by SAC
IBM Anti-Virus
除了这些,还有更多的针对某个病毒的专杀,这里就不一一列出了。值得注意的是:我在这里尽量列出今天你还能熟知的名字,然而尽管我努力,历史终究是无情的。你在上面看到的,一部分和大多数我没列出来的已经成为遥远的过去,只有像我这样喜欢怀旧的人,偶尔会想起那些曾经的同病毒决战的侠士。
最初病毒不多,能掌握写病毒会被人视为天才,好像现在还是这样?大家的抗病毒办法都是针对一个个病毒写专杀,后来因为病毒多了,大家开始编写类似批处理的脚本,这样用户在选择1 2 3 菜单来选择查杀哪个病毒,这本质还是一对一的检测方式。
还有多少朋友记得DOS中那个编制菜单用来选择的命令?
早期的AV几乎都是这样过来的,但是随后神仙们发现这样做不行,病毒数量膨胀的太快,文件格式具备通用处理过程,每次的专杀都有一些重复工作的地方。所以神仙们的反病毒理论逐渐浮出水面,这个时候,开始形成了通用反病毒技术。整个的针对大量的病毒的处理,也开始了模块化分工,扫描/清除,文件修复等。
于是AV开始转型,具备扫描模块、清除模块、特征库,AV外围技术也开始如火如荼的发展起来,主动监控、完整性检查、免疫技术等等。
下面这一段就是最初一个完整的用来清除引导病毒的AV源代码:
=====================================================================
.model tiny
.radix 16
.code
org 100
start:
mov dx,offset message
mov ah,09
int 21
xor ax,ax
int 16
or al,20
cmp al,'y'
je Goforit
mov dx,offset notdone
mov ah,09
int 21
mov ax,4c01
int 21
GoForIt:
xor ax,ax
mov ds,ax
mov ax,word ptr ds:[413]
mov cs:ConvMEM,ax
mov di,offset Int13
mov si,13*4
movsw
movsw
push cs
pop ds
cmp ConvMem,280
je RegConvMem
mov ah,09
mov dx,offset StrangeConv
int 21
RegCOnvMem:
mov ax,0201
mov bx,offset OrgSector
mov cx,1
mov dx,80
int 13
call TunnelInterrupts
mov ax,0201
mov bx,offset NewSec
mov cx,1
mov dx,80
int 13
push cs cs
pop es ds
mov di,offset NewSec
mov si,offset OrgSector
mov cx,200
repz cmpsb
jcxz NoDifference
mov ax,0301
mov bx,offset OrgSector
mov cx,1
mov dx,80
int 13
mov ah,3c
mov dx,offset sample
xor cx,cx
int 21
xchg bx,ax
mov ah,40
mov dx,offset NewSec
mov cx,200
int 21
mov ah,3e
int 21
LOCKEMIN:
cli
mov ah,09
mov dx,offset fixed
int 21
xor ax,ax
int 16
jmp LOCKEMIN
Nodifference:
mov ah,09
mov dx,offset noprob
int 21
mov ax,4c00
int 21
TunnelInterrupts:
push ax bx cx dx es ds si di
xor ax,ax
mov ds,ax
push word ptr ds:[04]
push word ptr ds:[06]
cli
mov word ptr ds:[04],offset Int1
mov word ptr ds:[06],cs
pushf
pushf
pop ax
or ax,100
push ax
popf
xor ax,ax
call dword ptr cs:[int13] ;tunnel interrupt 13
pushf
pop ax
and ax,0feff
push ax
popf
ExitTunnel:
les bx,dword ptr cs:[Root13]
cli
xor ax,ax
mov ds,ax
pop word ptr ds:[06]
pop word ptr ds:[04]
mov word ptr ds:[13*4],bx
mov word ptr ds:[13*4+2],es
sti
pop di si ds es dx cx bx ax
ret
Int1:
cmp cs:found,1
je exitint1
push bp
mov bp,sp
push ax bx cx dx es ds si di
mov ax,ss:[bp+2]
mov cx,4
shr ax,cl
add ax,ss:[bp+4]
cmp ax,0c000
jb DoneInt1
mov cs:found,1
les bx,SS:[bp+2]
mov word ptr cs:[Root13],bx
mov word ptr cs:[Root13+2],es
DoneInt1:
pop di si ds es dx cx bx ax bp
exitint1:
iret
StrangeConv db 0a,0dh,'Conventional Memory Suspicious.',0a,0dh,24
Fixed db 0a,0dh,'Virus Cleaned - sample saved in VIRUS.MBR .',0a,0dh
db 'Now COLD REBOOT IMMEDIATELY!!!!!!!!!!!!!!!!',0a,0dh,24
NoProb db 0a,0dh,'No Stealthing Detected. No Action Taken.',0a,0dh,24
notdone db 0a,0dh,'No Action Taken.',0a,0dh,24
Message:
db 0a,0dh
db '--==[Stormbringer''s Instant Stealth MBR Virus Remover.]==--',0a,0dh
db ' USE AT YOUR OWN RISK! RTFM Before Using! ',0a,0dh
db 0a,0dh,'Continue (y/N)',24
sample db 'Virus.MBR',0
found db 0
NewSec db 200 dup(?)
OrgSector db 200 dup(?)
Int13 dd ?
Root13 dd ?
ConvMem dw ?
end start
======================================================================
此时的反病毒程序,基本都是采用汇编编写。我们通过更多早期的反病毒程序源代码可以看出这个事实:抗病毒软件基本都使用纯汇编语言编写。而一个建立在理论体系化上面的完整杀毒程序代码量都不会少,这使得进入反病毒这个领域的门栏高得让人望而生畏。后来,使用纯C和C++编写的反病毒程序和相关模块多了起来,其中一部分还是基于跨平台的考虑。而在整个AV历史中,只有极少的爱好者使用Pascal语言来编写反病毒程序。
这是某AV查壳部分源代码:
======================================================================unp proc
call readTitle
jc noUnp
cmp varNP,0
je noUnp
call scanPack
noUnp:
ret
endp
scanPack proc
push ax bx cx dx bp di es
mov es,baseSeg
mov di,regIP
lea si,sigUnp
noLastSig:
push si
scanMore:
call scanChSumB ;1
jne nextSig
......
====================================================================== 还有一些扫描和清除模块的源代码,限于篇幅,就不一一贴出了。
远古的病毒库也较为简单,别惊讶,下面这几行,就是当年的大名鼎鼎的F-PORT的病毒特征库中的一小段:
======================================================================Valert y0Jny5dM+OMjnm-2mljm7hpsUBQrVAqq5M6i05mO0m+4gBqYUlBNBU
Taiwan OVn5aMFMA6-KNMqpYCbw-qCOqWQBEPDX553mpwNRvlehJgNldYp6Bz
Durban fEJn-jPjD2m5mjIrJb8oKcVZJMgmhkBcjcaOMnjj3YnYjvuDtW
Pretoria G7kmu5s5rypVosPPtvczLY7fKUc5MjucEPYkkM7F0od24-HW
XA1 g0knPMSjgjKH5mj5PhOA4gK6l7jr8KJWYhOKw3mm8KgCHYMM-W
Kennedy h0ljSMDMd864oME5TM+YjgeKpLuHbjmjah0fuOTM0ptAfu6LZI
8-tunes jp1TKjd5htmjnMZcwNwj+THd70MrOFFKM4X55TjjURT5JMBsnv
Virdem NWk5s5Ij9osXSctXAX82MMnmm674Rtw09rkRDu7e9fTlbO479rNbvdIipT
======================================================================
后来,时代要求科学合理的病毒库出现,病毒库不单包括病毒名、特征码,还要包括清除方法。于是人们改进了原来病毒库的结构,如下就是后来许多人采用的改进病毒库结构:
====================================================================== .!.:rc393,[VD/SLAM]
.:0.:16.:66.:00.:0C 4F8E 0D9A.:3E.:0C.:20 BC46 CF5D.:AUTO+.:62.:0.:AUTO
.!.:rc393,[VD/SLAM]
.:0.:16.:E9.:00.:0C 2A7F 96BF.:DD.:0C.:20 48A4 2DBD.:AUTO+.:152.:0.:AUTO
======================================================================
三、开元盛世:
从1994年起,AV正式成熟起来,此时的AV正慢慢走入了鼎盛时代,这个时候,以AVP为首的反病毒厂商开始大刀阔斧的占领市场,反病毒从最初的谁行谁上,演变为需要靠广告战,价格战来抢夺市场。市场的竞争就难免豪夺巧取,于是在欧洲强胜一时的Dr.Solomon开始走下坡路,最终无奈被NAI(MCAFEE)收购。
更多后起之秀们,从前辈那学来的知识,也开始参与了市场激烈的竞争,只是在反病毒技术和体系上,再也没有突破过AVP和Dr.Solomon的厂商。由于Dr.Solomon被MCAFEE收购,所以天下的反病毒引擎分为了两个派系,一个AVP(Kaspersky Antivirus)派系,一个NAI派系(Dr.Solomon派)。
而只有Eugene Kaspersky此时正式开创了一个反病毒的神话(见本人AVP神话一文),其它的商家无一不搅在市场的这个利益的角斗场。在地下病毒站,VXER们讨论和剖析的反病毒产品主要有:AVP、TBAV、F-Prot、Dr.Web,说起这个不外乎有这样的意义,我们把目光放得更远,抛却商业的争夺看到的是,在病毒作者心目中反病毒产品的力量。事实上AVP和F-PROT以大量的病毒样本库闻名,地下的VXER经常使用这两款杀毒软件来进行样本交换。
这里,让我们怀念一下Dr.Solomon,这位反病毒历史上极其重要的人物,他在1989年的反病毒产品图片(来之不易啊):
后来的For Windows 3.x Win NT 3.X 的:
由于AVP的技术成功,使得大量第三方AV产品使用AVP的引擎来工作,这里面知名的有F-Secure、AVK等。也有许多后来学习利用AVP技术的产品,比如DR.Web,它是Igor Daniloff所领军打造的产品,这哥们也是一个顶尖逆向工程高手,而且很早以前他还经常在地下站点发表反病毒和逆向的相关文章,从对Drweb的老版本查看,我经常发现AVP的影子,连病毒库的结构,都有几分形似。
这个时候的反病毒不仅在市场上大获全胜,赚了大把的票子,在用户的需求和市场的竞争下,技术上也成熟起来,具备了:
1、高速的扫描/特征匹配算法。
2、合理的病毒库,大量的病毒样本,完善的病毒清除方法。
3、产品线全面,各种主流系统的兼容DOS/Win9x/Winnt/2000,NOVELL、LINUX/UNIX四处开花。
4、以监控为主的防护概念普及和应用。
5、启发扫描、虚拟机、人工智能全面应用。
直到今天,这些技术依然是整个AV体制的坚石和基础,而今天AV技术的发展却缓慢鲜有创新。
四、赚并堕落着:
没错,反病毒的今天已经开始了堕落,这种堕落体现在关键技术上的不思进取,市场上的尔虞我诈。反病毒商家的自我炒作,彼此炒作已经屡见不鲜。而由于基础反病毒技术的浅显化,使得大量的小手工作坊又一次涌现出来,这些手工作坊的产品不仅没有多少创意。而且它们这些良莠不齐的反病毒/反木马产品,混淆着用户的视听。
在网络上,各个BBS中,你会发现N多人都在谈论病毒,整天谈论的就是怎么清除一个木马,木马又改注册表哪里啦?木马把文件拷贝到哪儿啦?TXT文件关联是不是又被修改啦?等等,并觉得这就是“技术”,乐此不疲。我经常被人家这样问来问去,在某种意义上,我觉得这侮辱了反病毒技术,这个活儿应该叫客服!
当然这种堕落也是病毒技术的堕落,初接触计算机那种对病毒的神秘感已经彻底消失,今天的病毒是看得见的,今天的病毒作者十有八九的不懂变形、多态,你看那几百K的木马,近1M的后门,形形色色的蠕虫和垃圾邮件们依靠操作系统漏洞、应用程序的BUG和对用户的社交工程欺骗来传播。
反病毒公司这个年代大喜过望,因为几乎不用对抗那些诡异的病毒,传统的那些多态、变形的DOS/WIN9X病毒已经随着系统的变换成为昨日黄花,那个年代AV做的再烂都已经无关紧要,新的平台给了大家站在同一个起跑线的机会。如今的商业反病毒公司面对木马几乎是居高临下的傲视,这让反病毒的公司的分析员多少有些无聊,是的,整天面对那些重复着、弱智的木马,那些单一的、垃圾的代码,生活变得那么乏味,没有激情,没有可敬的敌人,惺惺相惜的对手。病毒和反病毒从原来的曲高和寡,彻头彻尾的沦落为下里巴人。
我们以前要面对的是这样一些天才:
29/A成员,以Benny为首的29/A不少高手,写过许多非常具有创意的病毒、包括一些划时代的病毒,Benny是一个对技术执着的顶尖高手。值得一提的是:他虽然写了很多病毒,但他写的这些病毒仅仅是一种技术研究,事实上国内也有不少病毒高手,在默默研究病毒技术,以更深层次的技术交流为目的。有的高手还研究病毒技术的应用,包括针对爆发蠕虫的遏制。安全届最初找到通过PEB获取kernel.dll地址,从而获得ShellCode 使用API的方法时,人人叫好,而这却是被病毒高手们玩烂的技术。还有一些高手,自己写出来针对自己病毒的清除程序,原因仅仅是反病毒公司编写的清除模块不能检测和正常的清除病毒。您不信么?看看下面这段SMF病毒组织一个作者在自己的病毒清除工具包中的自述:
From author:
~~~~~~~~~~~~
I write this program, because AV programs like AVP or DrWeb can't cure
some of my virii :) Sorry, this version not tested archives and packed
files. They test only COM/EXE files. Make report at dav.rep file.
Detected all HLL-virii from DVL #3 - #4.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CIH作者,不管怎么说,陈赢豪的学习能力是值得敬佩的,因为在他写CIH之前不久,大约是两周,捷克的加密解密高手EliCZ刚刚公开自己的研究成果:通过IDT从Ring3切换到Ring0的方法,这个方法刚刚被披露没几天,就被陈赢豪创造性的应用在的病毒上。
然而,今天我们对抗的却是这样一些所谓“高手”
Jeremy Jaynes是个百万富翁,也是个垃圾邮件发送高手,他雇佣人专门进行收费互联网垃圾邮件发送业务。
Jay Echouafni ,CEO,同时也是一个黑客,控制了傀儡网络进行给竞争对手DDOS攻击。
Andrew Schwarmkoff 是俄罗斯一个黑客团体成员,善于自己改造木马/后门利用来发动社会工程学的钓鱼攻击。
病毒和反病毒仿佛商量过似的,一起开始了赚钱,不同的是,病毒作者“低调”的赚钱,钻着法律的空子,依靠网络的不可控的现实。而反病毒公司则天经地义,明目张胆。
五、前路在哪里:
今天,似乎没有多少人对反病毒产品的未来进行探索。F-Prot已经不像当年那么风光无限,虽然它的启发扫描的逻辑依然被我所赞叹。卡巴斯基(Kaspersky)“独孤求败”的寂寞和不能出世的无奈并不为多少外人所知。然而市场毕竟是市场,用户并不关心你的启发扫描模块的优劣。据我所知,有几个厂商的反病毒引擎,已经近4年几乎没有更新过,这些年惟一更新的就是不断的炒作。有的“要求进步”的公司则直接建立了研究室,你别以为这是独立探索最新反病毒技术的地方,事实上这是逆向先进反病毒产品,从而用来亦步亦趋的跟着学的研究室。
每天都是一个变革的开始,给新生的力量带来了机会,Microsoft也正式的介入了这个领域,事实上在遥远的DOS年代Microsoft就染指了一次反病毒市场,那是个时候正好是免疫技术流行的时代,Microsoft错误的以为免疫技术足以应对各种病毒,于是CPAV一度在DOS下流传。然而天山派剑术的轻灵终究无法抵挡昆仑派内力的雄厚,所以Microsoft败得很惨。但Microsoft又是一个善于学习的商家,今天Anti-Spyware 、Windows OneCare 、Windows Defender 卷土重来,一波波态势逼人。
而传闻中MS Anti-Spyware某次升级后会不小心删除Norton Antivirus,这是不是又预示一场不公平的竞争开始。
未来在那里,谁又能看的清呢,于是笔者killer只好寻根一下历史,企图借历史一双慧眼去先知一下未来。现在看来,有所惑有所不惑,把酒夜话,一切尽在不言中。
Creditz:F-Secure,提供部分图片。