前言:
读者对象
过去20年中出版过不少计算机病毒方面的出版物,但只有少数是由计算机病毒研究专业人士(“圈里人”)所写。尽管很多书都讨论了计算机病毒问题,但它们通常是面向初学者,根本引不起专业人员太多的兴趣。只有少数著作勇敢深入地探讨了技术细节,而只有理解了技术细节,才能有效防御计算机病毒。
现有书籍的部分问题在于:很少介绍当今计算机病毒的复杂性。例如,这些书籍未从技术上详细讨论快速传播的计算机蠕虫如何利用漏洞来侵入远程系统,也没讨论最近出现的代码演化技术(如代码变形)。如果读者想要弄懂本书涉及的所有知识,可能需要花很多时间来阅读大量的计算机病毒和安全方面的文章和学术论文,可能需要对恶意代码钻研多年,才能具备从浩瀚的信息海洋中提取重要信息的能力。
本书最主要的读者是那些每天都要对付病毒的IT及安全专业人员。今天,系统管理员甚至家庭用户常常需要对付网络中的电脑蠕虫和其他恶意程序。不幸的是,安全课程很少培训如何防范电脑病毒,公众很少知道如何分析和保卫其网络免受这些攻击。更糟的是,过去没有任何著作细致讨论过计算机病毒分析技术。
另外,对任何对信息安全感兴趣的人来说,知道病毒编写者现今的“技术成就”也是很重要的。
多年来,计算机病毒研究人员一直关注的是“文件”或“染毒对象”。安全专家们则相反,只关注网络级的可疑事件。可是现在,像CodeRed蠕虫这样的威胁通过网络把其代码注入到有漏洞进程的内存空间中,而不会“感染”磁盘上的对象。今天,学会从各种视角—文件(存储)、内存和网络—进行观察特别重要,并要学会使用恶意代码分析技术将各方面的事件关联起来。
这些年来,笔者培训过很多病毒和安全分析人员,使他们能够高效地分析和响应恶意代码威胁。本书包含了我曾遭遇过的各种问题,例如像Commodore 64计算机上的8位病毒这样的老式威胁。书中介绍了最早的电脑病毒使用的技术,如隐藏(stealth)技术,以及在各种平台上应用的病毒技术。这样,读者就会认识到:当今的rootkit根本不代表什么新技术!书中可以找到对32位Windows蠕虫威胁的详细分析和对“漏洞利用代码”(exploit)的深入讨论,还包括涉及64位病毒及移动设备上的“袖珍怪物”。自始至终,笔者的目标是展示旧攻击手段如何在新威胁中获得“新生”,并以适当的程度揭示最新攻击的技术细节。
笔者确信很多读者都希望加入到对抗恶意代码的斗争中来,而且有些读者可能和笔者一样还会成为新防御技术的发明人。但是,所有读者都应该清楚这个领域的潜在危险和挑战!
本书涵盖的内容
本书的目的是展示当前计算机病毒和反病毒软件的最新技术,并向读者讲授计算机病毒分析和防护的方法学。笔者从各种视角—文件(存储)、内存和网络—讨论了病毒的感染技术,对过去20年中黑客们开发的各种恶劣的病毒技巧进行了分类和讲解,而且还介绍了当前对于代码多态性和漏洞利用这些复杂威胁所采取的措施。
阅读本书最简单的方法是:逐章阅读。但有时理解了后面章节中对应的防御技术后,可以更好地理解前面章节中的攻击技术。任何情况下,如果读者感觉哪一章不符合自己口味或感觉太难或太冗长,都可以跳到下一章。笔者确信所有人都会发现书中的某些部分非常难而某些部分却很简单,具体感受依赖于个人的知识情况而定。
本书假定读者熟悉相关技术,并具有一定的编程能力。本书涉及的东西很多,根本不可能对每一样都充分地展开讲解。然而,本书会准确地告诉读者如果要成功地对付恶意威胁,还需要去什么地方学习什么额外知识。为方便读者,本书每章都给出了详细的参考文献清单,可以据此找到那些必要的背景知识。
本书未涵盖的内容
本书未详细讨论木马程序和后门程序。本书关注的重点是自我复制型的恶意代码。因为讨论普通恶意代码的好书有很多,但讨论电脑病毒的好书却不多。
笔者未在本书中给出任何可能被读者直接用来开发新病毒的病毒代码,不属于“如何编写病毒”这一类书。然而,笔者认为:坏人对于本书中讨论的大部分技术都已经很熟悉了,因此好人需要学习更多的知识,并开始从攻击者的角度去思考(而不是行动),才能开发出有效的防御方案!
有意思的是,很多大学都尝试开设电脑病毒研究课程,其中主要讲述如何编写病毒。一个学生能够编写可以感染全世界数百万台系统的病毒是否真的有助于病毒研究?这些学生是否就更懂得如何开发更好的防御方案?显然,答案是不……
实际上,这些课程应该着重于分析现有的恶意威胁。世界上现有的威胁太多了,都有待于学生们去理解和对其做点什么。
当然,电脑病毒知识和《Star Wars》(星球大战)中的“原力”(The Force)一样,根据使用者不同,对知识的利用也可能从善变为恶。笔者不能逼迫读者远离“黑暗面”(Dark Side),但真诚地劝诫读者不要用本书中学到的知识作恶。
联系方式
如果读者在本书中发现错误或想建议作者在下一版本中阐明或增加某些内容,我很乐意收到大家的来信。我正计划在我的网站上增加对本书某些内容的阐释、可能的勘误和相关的新信息。尽管我认为我们已经找出了大部分问题(特别是那些在深夜里或在病毒及安全紧急事件发生期间写成的段落里的问题),但我不相信像本书这么复杂和这么厚的著作会没有任何小缺陷。尽管如此,我还是根据我的科研知识,竭尽全力向读者提供“可信赖”的信息。
Peter Szor
美国加州Santa Monica市
pszor@acm.orghttp://www.peterszor.com致 谢
首先,我要感谢我的妻子Natalia在过去15年多来对我工作的鼓励!我也要谢谢她在我写作本书期间所有的周末都毫无怨言地独自忍受了那些我们本来可以共同度过的时光。
我要感谢所有为本书诞生出过力的人士。这本书由计算机病毒方面的一系列文章和论文发展而来,其中有些是多年来我与其他研究人员合著的。Eric Chien、Peter Ferrie、Bruce McCorkendale和Frederic Perriot对第7章和第10章有杰出的贡献,在此深表谢意。
如果没有很多朋友、卓越的防毒研究专家和同事的帮助,本书是不可能写成的。首先,我要感谢Vesselin Bontchev博士在我们共事的多年间教给我恶意程序的术语。Vesselin因其在病毒研究方面极度的严谨和认真而闻名,他极大地影响和支持了我的研究。
十分感谢以下曾鼓励过我写作本书并在病毒研究方面指导过我以及多年来对我的研究有很大影响的人士:Oliver Beke、Zoltan Hornak、Frans Veldman、Eugene Kaspersky、Istvan Farmosi、Jim Bates、Frederick Cohen博士、Fridrik Skulason、David Ferbrache、Klaus Brunnstein博士、Mikko Hypponen、Steve White博士和Alan Solomon博士。
非常感谢本书的技术评审们,他们是:Vesselin Bontchev博士、Peter Ferrie、Nick FitzGerald、Halvar Flake、Mikko Hypponen、Jose Nazario博士和Jason V. Miller。他们对本书早期手稿的鼓励、批评、洞察和审阅工作绝对是无价的。
我还要感谢Janos Kis和Zsolt Szoboszlay,在BBS还是计算世界的交流中心时期,他们允许我访问和分析那些造成大规模危害的病毒代码。我还要感谢Gunter May,他送给我一个礼物—一台C64,这在过去对东欧小孩来说最好的礼物。
十分感谢Symantec公司的每位同事,特别是Linda A. McCarthy和Vincent Weafer,他们对我写作此书给予了极大的鼓励。我还要感谢Nancy Conner和Chris Andry,她们做了出色的编辑工作。如果没有她们的帮助,这个项目现在绝对不可能完成。我还应该特别感谢Jessica Goldstein、Kristy Hart和Christy Hackerd,她们在出版过程中一直给予我帮助。
十分感谢“计算机反病毒研究组织”(Computer Antivirus Researchers Organization,CARO)、VFORUM和“反病毒紧急讨论列表”(AntiVirus Emergency Discussion List,AVED List)的所有过去和现在的成员,感谢他们对计算机病毒和其他恶意程序及防御方案的激动人心的讨论。
我想感谢《Virus Bulletin》(病毒公告)杂志的所有工作人员,谢谢他们近10年来在国际上发表我的文章和论文,并允许我在本书中使用那些材料。
最后,我非常感激从事教师职业的父母和祖父母,他们给予了我数学、物理、音乐和历史方面的优异的“家庭教育”。