图书前言

前    言

《恶意软件分析诀窍与工具箱——对抗“流氓”软件的技术与利器》一书提供了大量的解决方案和教程,能够提高个人分析恶意软件的技能和水平,或者避免受到恶意软件的攻击。不管您是进行取证调查、事件响应,还是出于个人兴趣对恶意软件进行逆向工程,本书都能够教会您许多达到目的的方法。本书在材料的选取上有几个重要的目标。第一个目标是希望能够将我们多年来处理恶意代码的经验以一种比较好的方式传授给非技术读者,同时又不能太简单,使技术读者也能从中受益。也就是说,恶意软件分析人员需要结合使用多种技能。我们希望读者至少应当熟悉下面一些知识:

● 网络和TCP/IP

● 操作系统内部原理(Windows和Unix)

● 计算机安全

● 取证和事件响应

● 程序设计语言(C、C++、Python和Perl)

● 逆向工程

● 漏洞利用研究

● 恶意软件基础

第二个目标是阐述各种工具的工作原理,而不仅仅是讲述如何使用工具。如果能够理解单击某个按钮(或者输入某个命令)后所发生的事情,而不是只知道单击哪个按钮,就能够更好地根据工具的输出结果进行分析,而不仅仅是收集输出结果。我们知道并不是每个人都愿意编写程序,因此在配书光盘中提供了50多个工具供读者使用,并且在整个正文中讨论了100多个其他的工具。我们尽量避免提供随处都可以找到的工具的链接。本书中讨论的工具都是我们所熟悉的,并且尽可能是免费的工具。

最后,本书并不是研究恶意软件样本或进行取证调查时所执行操作的完整指南。我们尽量包括了最常见问题的解决方案,但又是在其他书籍和网站上很少见到的知识。尽管恶意软件可能会运行在多种平台(如Windows、Linux、Mac OSX、移动设备和硬件/固件组件)上,但是本书主要关注分析Windows平台上的恶意软件。

0.1  本书读者对象

如果您要学习恶意软件,就应当阅读本书。我们期望本书的读者包括取证调查人员、事件响应人员、系统管理员、安全工程师、渗透测试人员、恶意软件分析师、漏洞利用研究人员和所有对安全感兴趣的人。如果您是如下所示的情况之一,您就是我们的目标读者之一。

● 您是组织内事件处理、事件响应或取证小组的成员,并且希望学习一些新的工具和技术来处理恶意软件。

● 您是系统、安全或网络管理员,并且希望理解如何更加高效地保护最终用户。

● 您是国家计算机紧急事件响应小组(Computer Emergency Response Team,CERT)的成员,并且需要识别和研究恶意软件的入侵。

● 您在某个反病毒或研究公司工作,并且需要实际分析和报告最新的恶意软件。

● 您是一名在校学生,并且希望学习一些学校不会教授的新技术。

● 您在IT领域工作,但是对目前的工作感到厌倦,因此您需要寻找一个新的专业来补充技术知识。

0.2  本书主要内容

本书组织成许多诀窍的集合,每个诀窍解决一个特定的问题,讲述一些工具的使用方法,或者讨论如何使用有趣的方式检测和分析恶意软件。其中有一些诀窍是独立的,即问题、讨论和解决方案都是在同一个诀窍中讲述。也有一些诀窍是联系在一起,共同描述一个问题的一系列操作步骤,共同解决一个更大的问题。本书涵盖了很多主题,随着学习的深入,所讨论的主题也变得越来越复杂和专业。如下所示是每一章所讨论主题的简要介绍:

● 第1章  行为隐匿:描述如何在不暴露自身身份的前提下进行在线调查。当按照本书进行练习或者在将来进行研究时,您可以使用该技术保持自身的安全。

● 第2章  蜜罐:描述如何使用蜜罐来收集采用蠕虫和病毒形式发布的恶意软件。使用这些技术,您可以收集到最新的恶意软件族的变种、实时与其他研究人员共享、分析攻击模式或者生成工作流自动分析样本。

● 第3章  恶意软件分类:说明如何识别、区分和组织恶意软件。您将学习如何使用定制的反病毒特征码检测恶意文件、确定样本之间的关系以及准确地找出攻击者可能在新变种中引入的新功能。

● 第4章  沙箱和多病毒扫描软件:描述如何使用在线病毒扫描软件和公共沙箱。您将学习如何使用脚本控制样本在目标沙箱中的行为、如何使用Python脚本在命令行下提交样本、如何将结果存储到数据库中以及如何根据沙箱结果扫描恶意证据。

● 第5章  域名与IP地址:说明如何识别和关联有关域名、主机名和IP地址的信息。您将学习如何跟踪fast flux域、确定域名的拥有者、定位攻击者拥有的其他系统,以及根据IP地址的地理位置信息创建静态或交互地图。

● 第6章  文档、shellcode和URL:在该章中,您会学习如何分析JavaScript、PDF、

● Office 文档以及恶意活动捕获的数据包。我们讨论了如何在调试器或模拟环境下提取shellcode并进行分析。

● 第7章  恶意软件实验室:说明了如何建立一个安全、可扩展和不太昂贵的实验室,在其中执行和监视恶意代码。我们分别讨论了涉及虚拟机或物理机的解决方案,并且使用真实或模拟的Internet。

● 第8章  自动化操作:描述如何在VMware或VirtualBox虚拟机中自动执行恶意软件。该章讲述了几个Python脚本,用于创建关于恶意软件行为的报告,包括网络流量日志和在物理内存中留下的证据。

● 第9章  动态分析:理解恶意软件行为最好的一种方式是执行并观察它的行为。该章将讲述如何构建自己的API监视器、如何防止某些证据被破坏、如何在不使用钩子的情况下实时记录文件系统和注册表活动、如何比较进程句柄表的变化,以及如何记录攻击者通过后门发送的命令。

● 第10章  恶意软件取证:关注使用取证工具检测rootkit和窃密恶意软件的各种方法。该章讲述了如何扫描文件系统和注册表搜索隐藏数据、如何绕过锁定文件限制并删除顽固的恶意软件、如何检测HTML注入以及如何研究新形式的注册表闲置空间。

● 第11章  调试恶意软件:讲述如何使用调试器分析、控制和操作恶意软件样本的行为。您将学习如何用Python控制调试会话,以及如何创建调试器插件来监视API调用、输出HTML形式的行为报告以及自动突出显示可疑活动。

● 第12章  反混淆:描述如何解码、解密和脱壳攻击者试图掩盖自己活动的数据。我们遍历了一个恶意软件样本的逆向工程过程,恢复出了被窃取的数据,该恶意软件加密了其网络数据。该章还介绍了破解域名生成算法的技术。

● 第13章  处理DLL:描述如何分析以DLL形式分发的恶意软件。您将学习如何枚举和检查DLL的导出函数、如何按照您的选择将DLL作为进程运行(并且绕过宿主进程限制)、如何将DLL作为Windows服务执行,以及如何将DLL转变为单独的可执行文件。

● 第14章  内核调试:有一些恶意软件只运行在内核模式下。该章讲述了如何调试受到恶意软件感染的虚拟机的内核,以便于理解恶意软件的底层功能。您将学习如何创建WinDbg脚本、脱壳内核驱动程序以及利用IDA Pro的调试器插件。

● 第15章  使用Volatility进行内存取证:描述了如何从物理机和虚拟机中获取内存样本、如何安装Volatility高级内存取证平台和有关插件,以及如何通过检测进程上下文的诡计和DKOM攻击开始分析。

● 第16章  内存取证:代码注入和提取:描述了如何从进程内存中检测和提取隐藏的代码(解除链接的DLL、shellcode等)。您将学习如何从内存样本中重建二进制文件,包括用户模式程序和内核驱动程序,以及如何根据内存转储中的信息重建加壳恶意软件的输入地址表(IAT)。

● 第17章  内存取证:rootkit:讲述了如何检测各种形式的rootkit活动,包括系统中存在的IAT、EAT、驱动程序IRP、IDT和SSDT钩子。您将学习如何识别在内核内存中不需要加载驱动程序进行隐藏的恶意软件、如何定位系统级的通知例程,以及如何检测隐藏运行Windows服务的企图。

● 第18章  内存取证:网络和注册表:讲述了如何搜索系统由于恶意软件样本的网络活动而留下的证据。您将学习如何检测活动连接、侦听套接字以及使用原始套接字和混杂模式的网卡。该章还讲述了如何从内存中提取注册表键和值。

0.3  建立环境

本书所执行的绝大多数的开发和测试Windows工具的活动都是在32位的Windows XP和Windows 7系统下进行的,使用了Microsoft的Visual Studio和Windows Driver Kit。如果需要重新编译本书提供的工具 (如为了修复某个bug),或者希望在源代码的基础上开发自己的工具,那么可以从这里下载开发环境:

● Windows Driver Kit:http://www.microsoft.com/whdc/devtools/WDK/default.mspx。

● Visual Studio C++ Express:http://www.microsoft.com/express/Downloads/#2010-Visual- CPP。

对于Python工具而言,我们都是在Linux(主要是在Ubuntu9.04、9.10或10.04)和Mac OSX 10.4和10.5下开发和测试的。您会发现绝大多数的Python工具都支持在多个平台下运行。如果需要安装Python,可以从http://python.org/download/处下载。建议使用Python 2.6或者更高的版本(但是不要使用3.x),因为这样能够与本书DVD中的绝大多数工具更好地兼容。

在整本书中,当讨论如何在Linux下安装工具时,我们都是假设使用的是Ubuntu系统。只要您理解了Linux系统的工作方式,您就会了解如何从源代码编译包、如何解决包的基本依赖问题,这样在使用其他Linux分发版本时就不会有任何问题。我们之所以选择使用Ubuntu,是因为本书中引用的绝大多数工具(或者工具依赖的库)要么是可以预安装的,可以通过apt-get包管理器获得,要么是工具的开发人员指定其工具要运行在Ubuntu系统中。

以下几种方式可以访问Ubuntu机器:

● 直接下载Ubuntu:http://www.ubuntu.com/desktop/get-ubuntu/download。

● 下载Lenny Zeltser的REMnux:http://REMnux.org。REMnux是一个预先配置了各种开源恶意软件分析工具的Ubuntu系统。REMnux提供两种形式的下载:VMWare镜像和ISO映像。

● 下载Rob Lee的SANS SIFT工作站:https://computer-forensicssans.org/community/ siftkit/。SIFT是一个预配置各种取证工具的Ubuntu系统。SIFT也提供了两种下载形式:VMWare镜像和ISO映像。

我们总是试图提供诀窍中使用工具的URL,然而有几个工具使用得特别频繁,同时出现在了5~10个诀窍中。因而没有在每次使用时都给出其链接,下面是在所有章节中都会经常用到的工具的列表:

● Sysinternals Suite:http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx。

● Wireshark:http://www.wireshark.org/。

● IDA Pro and Hex-Rays:http://www.hex-rays.com/idapro/。

● Volatility:http://code.google.com/p/volatility/。

● WinDbg Debugger:http://www.microsoft.com/whdc/devtools/debuggingdefault.mspx。

● YARA:http://code.google.com/p/yara-project/。

● Process Hacker:http://processhacker.sourceforge.net/。

阅读本书之前,还应当注意一些事情。许多工具都需要在管理员特权下安装和执行。通常情况下,将恶意代码与管理员特权混在一起是很糟糕的,因此必须非常小心地加固您的环境(参见第7章建立虚拟机),您必须还要了解那些禁止收集、分析、共享或报告恶意代码的法律法规。因为本书中讨论的技术并不一定在您所居住的国家或城市中是可以合法应用的。