基本信息
- 作者: Michael Sikorski Andrew Honi
- 译者: 诸葛建伟 姜辉 张光凯
- 丛书名: 安全技术大系
- 出版社:电子工业出版社
- ISBN:9787121224683
- 上架时间:2014-4-17
- 出版日期:2014 年4月
- 开本:16开
- 页码:704
- 版次:1-1
- 所属分类:计算机 > 安全 > 计算机病毒
编辑推荐
不管你是否有恶意代码分析的背景和经验,《恶意代码分析实战》极其丰富的内容都将使你获益匪浅。
《恶意代码分析实战》教你如何、以及何时使用恶意代码分析技术,深入掌握恶意代码分析工具的核心功能,从而达到准确诊断、及时突破、快速响应的效果。
《恶意代码分析实战》一经问世,便赢来业内好评如潮,被业内人士一致推荐为入门、晋级的权威读本。
权威,详尽,经典——每一位认真学习过《恶意代码分析实战》的读者,必将在恶意代码分析的专业技能上获得巨大的提升。
内容简介
计算机书籍
《恶意代码分析实战》是一本内容全面的恶意代码分析技术指南,其内容兼顾理论,重在实践,从不同方面为读者讲解恶意代码分析的实用技术方法。
《恶意代码分析实战》分为21章,覆盖恶意代码行为、恶意代码静态分析方法、恶意代码动态分析方法、恶意代码对抗与反对抗方法等,并包含了shellcode 分析,C++恶意代码分析,以及64 位恶意代码分析方法的介绍。本书多个章节后面都配有实验并配有实验的详细讲解与分析。通过每章的介绍及章后的实验,本书一步一个台阶地帮助初学者从零开始建立起恶意代码分析的基本技能。
《恶意代码分析实战》获得业界的一致好评,IDA Pro 的作者Ilfak Guilfanov 这样评价本书:“一本恶意代码分析的实践入门指南,我把这本书推荐给所有希望解剖Windows 恶意代码的读者”。
《恶意代码分析实战》的读者群主要是网络与系统安全领域的技术爱好者与学生及恶意代码分析研究方面的安全从业人员。
作译者
安德鲁·哈尼格(Andrew Honig)是美国国防部的一位信息保障专家。他在国家密码学院
(National Cryptologic School)教授软件分析、逆向工程和Windows系统编程的课程,并是一位CISSP安全认证专家。安德鲁是VMware虚拟化产品几个零日漏洞的发现者,并开发了一些可以检测新型恶意代码(包括内核套件)的创新工具。作为一位精于恶意代码与良性软件分析技术的专家,他已经拥有超过10年的计算机安全业界分析师的经验。
诸葛建伟,博士,清华大学网络与信息安全实验室副研究员,狩猎女神科研团队负责人。著作《网络攻防技术与实践》获全国优秀教材一等奖,《Metasploit渗透测试魔鬼训练营》在当当、京东、亚马逊进入新书畅销榜前三:翻译多本优秀技术书籍。蓝莲花战队联合创始人与领队,2013年带领战队以全球第四、亚洲第一的历史最佳战绩,成为中国第一次闯入DEFCON CTF总决赛的战队,在CTFTIME全球排名第五位。积极参与社会微公益活动,以译者稿费支持清华大学电脑传爱公益行动。新浪微博:@清华诸葛建伟
姜辉,高级软件研发工程师,现就职于百度,主要从事Windows应用程序开发。入职百度之前,在腾讯电脑管家工作,主要从事安全沙箱相关的研发工作。在清华大学信息与网络安全实验室读硕士期间,主要研究沙箱,硬件虚拟化下恶意代码的动态行为分析方法。
张光凯,高级软件工程师,2008年毕业于西安建筑科技大学,毕业后从事文件系统领域的研发工作,主要方向为基于Windows NT平台的文件系统驱动研发,目前就职于EMC公司从事存储虚拟化相关的研发工作,涉猎范围主要包括块设备、文件系统,以及操作系统内核。
目录
前言
不幸的是,几天之后网络管理员再次打电话过来,告诉你说敏感信息又被窃取了。这看起来似乎是相同的攻击,但你却不知道该做什么。很显然,你部署的入侵检测系统特征库失效了。因为更多的主机被感染了,而你的杀毒软件并没有提供足够的保护来隔离攻击威胁。现在,公司高层管理人员要求你解释发生了什么,而你可以告诉他们的只是一个名为TROJ.snapAK的恶意代码。你没有针对最重要问题的答案,这让他们认为你是一位不称职的安全工程师。
你该如何确定TROJ.snapAK恶意代码在做什么,从而可以让你消除这个威胁?你如何才能出
一个更有效的网络检测特征?你怎样才能找出其他感染了这个恶意代码的主机呢?你该如何确保你删除了整个恶意代码程序包,而不只是其中的一部分呢?你该如何回答管理层关于这个恶意代码干了些什么的问题呢?
如果你所有能做的,只是告诉你的老板,说你需要聘请昂贵的外部咨询顾问,因为你不能保护自己的网络,这真的不是确保工作饭碗的好办法。
幸运的是,你有着足够的智慧,马上啃起了这本《恶意代码分析实战》,从这本书中你将学到的技能,可以教你如何来回答这些困难的问题,并为你展示保护网络免受恶意代码侵害的方法。
什么是恶意代码分析
恶意代码,也称为恶意软件,在大多数计算机入侵事件中都扮演了重要角色。任何以某种方式来对用户、计算机或网络造成破坏的软件,都可以被认为是恶意代码,包括计算机病毒、木马、蠕虫、内核套件、勒索软件、间谍软件,等等。尽管各种不同的恶意代码类型会做一些完全不同的事情(你将会在本书中看到),作为恶意代码分析师,我们拥有一组核心的工具和技术,用来解剖分析各式各样的恶意代码。
恶意代码分析是一种解剖恶意代码的艺术,了解恶意代码是如何工作的、如何识别它,以及如何战胜或消除它。你并不是需要成为一名超级黑客,才能进行恶意代码分析。
网络上每天有着数以百万计,甚至更多的恶意代码,恶意代码分析成为了任何一位从事计算机安全事件响应安全工程师的必需技能。此外,由于恶意代码分析专业人才的短缺,熟练的恶意代码分析师正处于强烈的人才需求之中。
这么说吧,这不是一本关于如何找到恶意代码的书籍。我们的重点是在如何分析已经找到的恶意代码。我们专注于Windows操作系统上发现的恶意代码——因为到目前为止,Windows操作系统还是最为常用的操作系统。但你所学到的技能可以为你在任何操作系统上分析恶意代码提供支持。我们还将专注在可执行文件上,因为它们是最常见的,也是你所遇到的最难以分析的一些文件。与此同时,我们选择不讨论如恶意JavaScript脚本、Java程序等其他类型的恶意代码,相反的是,我们选择对方法进行深入讨论,用于分析更加高级的威胁,比如后门、隐蔽性恶意代码和内核套件。
先决条件
不管你是否有恶意代码分析的背景或经验,你都会从本书中受益。
第1~3章将讨论基础的恶意代码分析技术,即使你没有安全或编程经验,也可以用这些技术来进行恶意代码分析。第4~14章则覆盖中等级别的内容,可以让你武装上一些用来分析大多数恶意程序的主流工具与技能。这些章节都需要一些关于编程语言的基本知识。第15~19章,则提供最先进的技术材料,即使对资深的恶意代码分析师来说都是有用的,因为这部分内容涵盖了恶意代码分析的一些战术和技巧,在分析最为复杂的恶意代码样本时都用得上,比如那些应用了对抗反汇编、反调试技术或加壳技术的恶意代码。
本书将教你如何以及何时使用各种恶意代码分析技术。了解何时应该使用特定的技术与掌握技术本身一样重要,因为在某个特定状况下使用了错误的技术,可能会是在令人沮丧地浪费时间。我们不会涵盖每一个工具,因为工具会随时改变,而它的核心功能才是最重要的。此外,我们将在整本书中使用切合实际的恶意代码样本(你可以从http://www.practicalmalwareanalysis.com/ 或http://www.nostarch.
com/malware.htm下载),来为你揭示在分析真实世界中恶意代码时会遇到的各种状况。
实践动手学习
我们有着逆向工程和恶意代码分析专业课程的丰富教学经验这些经验已经告诉我们,学生只有通过使用所学习的技能进行动手实践练习时,才能真正掌握和学到这些技能。我们也发现了实验作业的质量与讲授的课程内容同等重要,如果没有一个实验作业部分,要学会如何分析恶意代码是几乎不可能的。
从始至终,本书中绝大多数章节最后都会给出一些实验作业,让你来练习这一章中所讲授的技术。这些实验作业为你提供了真实恶意代码样本的挑战,旨在展示你将在真实世界中遭遇到恶意代码中最为普遍的类型和行为。这些实验作业旨在加强每章中所介绍的基本概念,而不会用一些无关信息来让你无所适从。每个实验都包括一个或多个恶意文件(可以从http://www.practicalmalwareanalysis.com/,或者http://www.nostarch.com/malware.htm下载),以及一些特意设计来引导你完成实
验的问题,此外也给出了对这些问题的简短答案,以及对恶意代码样本的详细分析过程。
序言
2011年夏天,我参加了在内华达州拉斯维加斯召开的黑客大会,聆听了Peiter(麦基)Zatko的主题演讲。麦基在他的演讲中,引入了现代软件中本质存在的不对称性。他解释了他如何分析了9 000个恶意代码的二进制文件样本,而他的样本集平均源代码行数为125行(LOC)。
你可能认为麦基的样本集中只包含了那些“简单”或是“寻常”的恶意代码。你也许会问,那些真正的“武器”会有多大规模呢?比如说(能够让你屏住呼吸的)——Stuxnet病毒?根据Larry L.Constantine的说法1,Stuxnet病毒包含了约15 000行源代码,因此是样本集平均125行代码的120倍。
Stuxnet病毒是一个高度专业性和目标性的“战争武器”,大概可以理解为其代码行数高于平均大小的原因。
我们稍微离开一会儿恶意代码的世界,来看看我所使用的文本编辑器(gedit,GNOME中的文本编辑器),其中包含了295行源代码的gedit.c,而gedit.c仅仅是其中128个源文件(以及其他3个目标)中的1个源文件。2GNOME GIT源代码库经过统计之后,总共有128个文件和3个目录,共计70 484行源代码。合法程序的源代码数量与恶意代码的比值超过了500∶1。与一个如文本编辑器这样相当简单的工具相比,恶意代码样本从平均源码行数上看起来似乎非常高效!麦基的恶意代码样本集平均125行源代码对我来说似乎有点低,因为不同类型“恶意代码”定义的存在。很多恶意应用程序是一类“套件”,拥有许多功能和基础设施元素。为了看看这类恶意代码的大致规模,我统计了Zeus网银木马中你应该认为是合理的“源代码”部分(.cpp、.obj、.h等)的代码行数,结果是253 774行。将一个像是Zeus网银木马这样的恶意程序与麦基的恶意代码样本集平均大小相比,我们现在看到了一个新的比值,超过了2 000∶1。然后麦基将恶意代码源代码行数与用来检测和查杀恶意代码的安全产品源代码行数进行比较,他估计现在主流的安全防御产品源代码行数大概是1000万行左右。为了让算术变得简单一些,来想象一样存在有至少1250万行源代码的安全防护产品,这样就使得防御性软件代码与进攻性软件代码的比值进入了100 000∶1的级别。换句话说,对于每1行源代码的进攻火力,防御者需要写出10万行作为防御堡垒的源代码。
1 http://www.informit.com/articles/article.aspx?p=1686289
2 http://git.gnome.org/browse/gedit/tree/gedit?id=3.3.1
麦基也将恶意代码源代码行数与恶意代码试图颠覆的操作系统源代码行数进行了比较。分析师估计Windows XP操作系统的源代码行数为4 500万行。而没人知道Windows 7有多少行源代码。麦基认为一个现代操作系统大概会有15 000万行源代码,想必他指的是Windows的最新版本。同样让我们保守估计到12 500万行,以简化我们的计算,这样我们就得出了一个100万比1的比值,来估计目标操作系统的大小规模与滥用操作系统的恶意武器大小规模之间的比例。
让我们停下来,概括一下我们已经获得的源代码行数计数分析结果。
·120:1:Stuxnet病毒与平均恶意代码大小规模的比值。
·500:1:简单的文本编辑器与平均恶意代码大小规模的比值。
·2 000:1:恶意代码套件与平均恶意代码大小规模的比值。
·100 000:1:防守工具软件与平均恶意代码大小规模的比值。
·1 000 000:1:目标操作系统与平均恶意代码大小规模的比值。
从一位防御者的角度来看,防御性工具和目标操作系统和平均恶意代码大小规模的比值,是多么地让人心情沮丧。甚至将平均恶意代码大小规模换成恶意代码套件的大小规模,也不会很好地改善防御者所面临的境遇!它看起来像是我们的防御者(以及他们的供应商)花费了很多努力生产出成千上万的源代码,而最终只能看到它们被装备着少得多源代码的入侵者们无情戏弄。
那防御者应该怎么做呢?答案就是不要被那些火力强大的领跑者牵着鼻子走,而将一个“障碍”重新定义为“机会”!忘记安全防御工具和目标操作系统的大小规模——那可不是你可以左右的东西。回到你可以欢呼雀跃的事实上来,因为恶意代码样本的规模还是比较小的(相对来说)。想象一下如果你试图去了解安全防御工具在源代码级别上是如何工作的,那里便有1 250万行源代码等着你来分析,这无疑将是一项非常艰巨的任务,尽管一些研究人员也将这种不可思议的项目分配给自己。作为一个令人难以置信的例子,请阅读由Tavis Ormandy 撰写的“Sophail:对Sophos反病毒软件的批判性分析”3,同样也在2011年的Black Hat拉斯维加斯黑客大会上进行了展示。这种庞大规模的分析是一种另类,而并不是常人可以选择的准则。不要试图去担心数以百万行计的源代码(或者是成千上万行),关注那些大概一千行甚至更少的源代码——这也是目前世界上大多数恶意代码主要的组成部分。作为一名防御者,你对恶意代码进行分析的主要目标是:确定它做了什么、它在你的环境中是如何表现的,以及我们应该如何处理它。当处理这些合理规模的样本,并积累合适的技能之后,你便有机会来回答这些问题,从而降低企业的安全风险。
如果说恶意代码编写者随时会向你提供此类规模的样本,而你正在阅读的这本书会为你提供所需要的技能。《恶意代码分析实战》是一本我认为每一个恶意代码分析师都应该作为指导手册而珍藏的书籍。如果你是一个初学者,你需要仔细研读技术介绍,以及动手实践每个实验作业,来进入到逆向工程的世界。而如果你是一位中等水平的分析师,本书会带着你提升到一个新的水平。如果你是一个资深的安全工程师,你也会发现那些额外的宝石,来推动你达到更高的级别——你就能够在被你所指导的一些新手问到问题时,告诉他们说:“去读读这本优秀的指南”。
本书实际上是一本二合一的书籍——首先,它是一本教材,指导读者如何分析现代的恶意代码。
你可能只是以这个理由购买了本书,并已经从本书的技术指导中受益匪浅。然而,作者们又加倍努力,基本上是又写了一本书,其中包含了大量的实验练习、简短答案,以及详细分析过程,呈现在书籍中每章的后面与附录C中。作者们同时编写了所有用作例子的恶意代码样本,确保了一个既丰富又安全的学习环境。
因此,当你作为数字领域防御者,面对明显的不对称局面时,请不要绝望,相反的,你应该对恶意代码目前采用的技术形式表达出乐观态度。有了像《恶意代码分析实战》这样优秀的指导书籍之后,你就可以拥有所需的技能,来更好地检测与应对你的企业或者客户所面对的入侵事件。作者们都是这个领域内的技术专家,你会发现很多从工作一线提取的建议,而不是从一个孤立研究实验室中得到的一些理论。接下来你可以沉浸在本书的阅读中,获得关于恶意代码每一个细节的知识,
媒体评论
Dino Dai Zovi,自由安全咨询师
一本最为全面的恶意代码分析技术指南,覆盖了所有恶意代码分析所需的关键技术,帮助你理解最新恶意代码带来的技术挑战。
Chris Eagle,美国海军研究生院,计算机科学系高级讲师
一本恶意代码分析的实践入门指南,我把这本书推荐给所有希望解剖Windows恶意代码的读者。
—— Ilfak Guilfanov,IDA PRO创始人
一本恶意代码分析的优秀指南,所有章节都包含有详细的技术解释和动手实践案例教程,让你能够立即面对真实的恶意代码。
—— Sebastian Porst,Google软件工程师
本书为各个技术层次上的读者带来逆向工程方法,提供了一大堆覆盖各种技术并且容易访问的实践案例,将带领你更加深入地理解逆向工程的艺术与科学。我强烈推荐本书,无论是新手还是领域专家。
—— Danny Quist,博士,OFFENSIVE COMPUTING创始人
如果你只要读一本恶意代码的书籍,或是希望进入到恶意代码分析师的世界,就来看这本书吧!
—— Patrick Engbretson,达科他州立大学教授,The Basics of Hacking and Pen Testing一书的作者
为软件安全或入侵检测系统等研究生级别高级课程提供很好的课程资料,实践案例对学生学习逆向工程方法、恶意代码分析和理解等方面具有特殊的价值。
—— Sal Stolfo,哥伦比亚大学教授