为什么80%的码农都做不了架构师?>>>
基本信息
作者: (美)Michael Hale Ligh Steven Adair Blake Hartstein Matthew Richard
译者: 胡乔林 钟读航
丛书名: 安全技术经典译丛
出版社:清华大学出版社
ISBN:9787302274407
上架时间:2012-2-8
出版日期:2012 年1月
开本:16开
页码:584
版次:1-1
样章试读:http://product.china-pub.com/59230
内容简介:
针对多种常见威胁的强大而循序渐进的解决方案
我们将《恶意软件分析诀窍与工具箱——对抗“流氓”软件的技术与利器》称为工具箱,是因为每个诀窍都给出了解决某个特定问题或研究某个给定威胁的原理和详细的步骤。在配书光盘中提供了补充资源,您可以找到相关的支持文件和原始程序。您将学习如何使用这些工具分析恶意软件,有些工具是作者自己开发的,另外数百个工具则是可以公开下载的。如果您的工作涉及紧急事件响应、计算机取证、系统安全或者反病毒研究,那么本书将会为您提供极大的帮助。
●学习如何在不暴露身份的前提下进行在线调查
●使用蜜罐收集由僵尸和蠕虫分布的恶意软件
●分析javascript、pdf文件以及office文档中的可疑内容
●使用虚拟或基础硬件建立一个低预算的恶意软件实验室
●通用编码和加密算法的逆向工程
●建立恶意软件分析的高级内存取证平台
●研究主流的威胁,如zeus、silent banker、coreflood、conficker、virut、clampi、bankpatch、blackenergy等
作者简介
Michael Hale Ligh是Verisign iDefense公司的恶意代码分析专家,专门从事开发各种用于检测、解密以及调查恶意软件的工具。在过去数年里,他在里约热内卢、上海、吉隆坡、伦敦、华盛顿特区和纽约等地讲授恶意软件分析课程,已经培训了数百名学生。在进入Verisign iDefense公司之前,Michael在全国最大的医疗保健服务提供商之一中担任漏洞研究员,并提供黑客伦理服务。正是由于担任过该职务,他对逆向工程以及操作系统内部的背景有着深刻理解。
目录
第1章 行为隐匿 1
1.1 洋葱路由器(tor) 1
1.2 使用tor研究恶意软件 4
1.3 tor缺陷 7
1.3.1 速度 7
1.3.2 不可信赖的tor操作员 7
1.3.3 tor阻止列表 8
1.4 代理服务器和协议 8
1.4.1 超文本传输协议(http) 8
1.4.2 socks4 9
1.4.3 socks5 9
1.5 基于web的匿名代理 14
1.6 保持匿名的替代方法 15
1.6.1 蜂窝internet连接 15
1.6.2 虚拟专用网 16
1.7 唯一且匿名 18
第2章 蜜罐 19
2.1 nepenthes蜜罐 20
2.1.1 利用nepenthes收集恶意软件样本 20
2.1.3 使用基于python的 http接收nepenthes提交的文件 25
2.2 使用dionaea蜜罐 27
2.2.1 使用dionaea收集恶意软件样本 27
2.2.2 使用基于python的http接收dionaea提交的文件 30
2.2.3 实时事件通告以及使用xmpp共享二进制文件 31
2.2.4 分析重放dionea记录的攻击 32
2.2.5 使用p0f工具被动识别远程主机操作系统 33
2.2.6 使用sqlite 和gnuplot绘制dionaea记录的攻击模式图 35
第3章 恶意软件分类 39
3.1 使用clamav分类 39
3.1.1 检查现有clamav特征码 40
3.1.2 创建自定义clamav特征码数据库 42
3.2 使用yara分类 46
3.2.1 将clamav特征码转换到yara格式特征码 46
3.2.2 使用yara和peid识别加壳文件 47
3.2.3 使用yara检测恶意软件的能力 49
3.3 工具集成 53
3.3.1 使用python识别文件类型及哈希算法 54
3.3.2 编写python多杀毒扫描软件 56
3.3.3 python中检测恶意pe文件 60
3.3.4 使用ssdeep查找相似恶意软件 64
3.3.5 使用ssdeep检测自修改代码 66
3.3.6 使用ida和bindiff检测自修改代码 68
第4章 沙箱和多杀毒扫描软件 73
4.1 公用杀毒扫描软件 73
4.1.1 使用virus total扫描文件 74
4.1.2 使用jotti扫描文件 76
4.1.3 使用novirusthanks扫描文件 77
4.1.4 启用数据库的python多杀毒上传程序 78
4.2 多杀毒扫描软件的比较 82
4.3 公用沙箱分析 82
4.3.1 使用threatexpert分析恶意软件 82
4.3.2 使用cwsandbox分析恶意软件 84
4.3.3 使用anubis分析恶意软件 85
4.3.4 编写joebox autoit脚本 86
4.3.5 使用joebox应对路径依赖型恶意软件 88
4.3.6 使用joebox应对进程依赖型动态链接库 89
4.3.7 使用joebox设置主动型http代理 91
4.3.8 使用沙箱结果扫描项目 92
第5章 域名与ip地址 99
5.1 研究可疑域名 99
5.1.1 利用whois研究域 100
5.1.2 解析dns主机名 104
5.2 研究ip地址 107
5.3 使用被动dns和其他工具进行研究 109
5.3.1 使用bfk查询被动dns 110
5.3.2 使用robtex检查dns记录 111
5.3.3 使用domaintools执行反向ip搜索 112
5.3.4 使用dig启动区域传送 113
5.3.5 使用dnsmap暴力攻击子域 114
5.3.6 通过shadowserver将ip地址映射到asn 115
5.3.7 使用rbl检查ip信誉 117
5.4 fast flux域名 118
5.4.1 使用被动dns和ttl检测fast flux网络 119
5.4.2 跟踪fast flux域名 121
5.5 ip地址地理映射 123
第6章 文档、shellcode和url 127
6.1 分析javascript 127
6.1.1 使用spidermonkey分析javascript 127
6.1.2 使用jsunpack自动解码javascript 130
6.1.3 优化jsunpack-n的解码速度和完整性 133
6.1.4 通过模拟浏览器dom元素触发漏洞利用 134
6.2 分析pdf文档 138
6.2.1 使用pdf.py从pdf文件中提取javascript 138
6.2.2 伪造pdf软件版本触发漏洞利用 142
6.2.3 利用didier stevens的pdf工具集 145
6.2.4 确定利用pdf文件中的哪些漏洞 148
6.2.5 使用distorm反汇编shellcode 154
6.2.6 使用iibemu模拟shellcode 159
6.3 分析恶意office文档 161
6.3.1 使用officemalscanner分析microsoft office文件 161
6.3.2 使用disview和malhost-setup调试office shellcode 167
6.4 分析网络流量 170
6.4.1 使用jsunpack从报文捕获文件中提取http文件 171
6.4.2 使用jsunpack绘制url关系图 173
第7章 恶意软件实验室 177
7.1 网络互联 179
7.1.1 实验室中tcp/ip路由连接 180
7.1.2 捕获、分析网络流量 182
7.1.3 使用inetsim模拟internet 185
7.1.4 使用burp套件操作http/https 188
7.2 物理目标机 191
7.2.1 使用joe stewart开发的truman 191
7.2.2 使用deep freeze保护物理系统 192
7.2.3 使用fog克隆和映像磁盘 194
7.2.4 使用mysql数据库自动调度fog任务 197
第8章 自动化操作 201
8.1 恶意软件分析周期 201
8.2 使用python实现自动化操作 203
8.2.1 使用virtualbox执行自动化恶意软件分析 203
8.2.2 分析virtualbox磁盘以及内存映像 208
8.2.3 使用vmware执行自动化恶意软件分析 210
8.3 添加分析模块 213
8.3.1 在python中使用tshark捕获报文 214
8.3.2 在python中使用inetsim收集网络日志 216
8.3.3 使用volatility分析内存转储 217
8.3.4 组合所有的沙箱块 219
8.4 杂项系统 229
8.4.1 使用zerowine和qemu执行自动化分析 229
8.4.2 使用sandboxie和buster执行自动化分析 233
第9章 动态分析 237
9.1 变化检测 237
9.1.1 使用process monitor记录api调用 239
9.1.2 使用regshot进行变化检测 240
9.1.3 接收文件系统变化通知 242
9.1.4 接收注册表变化通知 245
9.1.5 句柄表的差异比较 246
9.1.6 使用handlediff研究代码注入 250
9.1.7 观察bankpatch.c禁用windows文件保护的活动 252
9.2 api监视/钩子 253
9.2.1 使用microsoft detours构建api监视器 254
9.2.2 使用api监视器追踪子进程 260
9.2.3 捕获进程、线程和映像加载事件 263
9.3 数据保护 267
9.3.1 阻止进程终止 268
9.3.2 阻止恶意软件删除文件 270
9.3.3 阻止加载驱动程序 272
9.3.4 使用数据保护模块 273
9.3.5 使用reactos创建定制命令shell 276
第10章 恶意软件取证 283
10.1 the sleuth kit(tsk) 283
10.1.1 使用tsk发现备用数据流 283
10.1.2 使用tsk检测隐藏文件和目录 286
10.1.3 使用microsoft脱机api查找隐藏注册表数据 293
10.2 取证/事件响应混合 298
10.2.1 绕开poison ivy锁定的文件 298
10.2.2 绕开conficker文件系统的acl限制 302
10.2.3 使用gmer扫描rootkit 306
10.2.4 通过检查ie的dom检测html注入 309
10.3 注册表分析 318
10.3.1 使用regripper插件对注册表取证 319
10.3.2 检测恶意安装的pki证书 325
10.3.3 检查泄露数据到注册表的恶意软件 328
第11章 调试恶意软件 335
11.1 使用调试器 335
11.1.1 打开和附加到进程 336
11.1.2 为shellcode分析配置jit调试器 337
11.1.3 熟悉调试器的图形用户界面 339
11.1.4 检查进程内存和资源 344
11.1.5 控制程序执行 347
11.1.6 设置和捕获断点 348
11.1.7 使用有条件的日志记录断点 351
11.2 immunity debugger的python api接口 352
11.2.1 使用python脚本和pycommand调试 353
11.2.2 在二进制文件中检测shellcode 356
11.2.3 调查silentbanker木马的api钩子 360
11.3 winappdbg python调试器 363
11.3.1 使用winappdbg工具操作进程内存 364
11.3.2 使用winappdbg工具设计一个python api监视器 366
第12章 反混淆 373
12.1 解码常见算法 373
12.1.1 python中的逆向xor算法 373
12.1.2 使用yaratize检测xor编码的数据 378
12.1.3 使用特殊字母解码base64 379
12.2 解密 382
12.2.1 从捕获的数据包中隔离加密数据 382
12.2.2 使用snd反向工具、findcrypt和kanal搜索加密机制 384
12.2.3 使用zynamics bindiff移植open ssl的符号 386
12.2.4 在python中使用pycrypto解密数据 387
12.3 恶意软件脱壳 389
12.3.1 查找加壳恶意软件的oep 390
12.3.2 使用lordpe转储进程内存 392
12.3.3 使用imprec重建导入表 394
12.4 与脱壳有关的资源 400
12.5 调试器脚本 401
12.5.1 破解域名生成算法 402
12.5.2 使用x86emu和python解码字符串 406
第13章 处理dll 411
13.1 枚举dll的导出函数 411
13.1.1 cff explorer 412
13.1.2 pefile 412
13.1.3 ida pro 413
13.1.4 常见和不常见的导出名 414
13.2 使用rundll32.exe执行dll 415
13.3 绕过宿主进程的限制 416
13.4 使用rundll32ex远程调用dll导出函数 418
13.4.1 创建新工具的原因 418
13.4.2 使用rundll32ex 420
13.5 使用loaddll.exe调试dll 421
13.5.1 将dll加载到调试器中 421
13.5.2 找到dll的入口点 422
13.6 捕获dll入口点处的断点 422
13.7 执行作为windows服务的dll 423
13.7.1 服务dll的入口点 424
13.7.2 服务初始化 424
13.7.3 安装服务dll 425
13.7.4 传递参数给服务 425
13.8 将dll转换成独立的可执行文件 428
第14章 内核调试 431
14.1 远程内核调试 431
14.2 本地内核调试 431
14.3 软件需求 432
14.3.1 使用livekd进行本地调试 432
14.3.2 启用内核调试启动开关 433
14.3.3 调试vmware工作站客户机(在windows系统中) 436
14.3.4 调试parallels客户机(在mac os x上) 438
14.3.5 windbg命令和控制简介 439
14.3.6 探索进程和进程上下文 445
14.3.7 探索内核内存 451
14.3.8 在驱动程序加载时捕捉断点 456
14.3.9 脱壳驱动程序 463
14.3.10 转储和重建驱动程序 469
14.3.11 使用windbg脚本检测rootkit 474
14.3.12 使用ida pro进行内核调试 479
第15章 使用volatility进行内存取证 483
15.1 内存获取 483
15.1.1 使用moonsols windows内存工具箱转储内存 483
15.1.2 使用f-response获取远程、只读内存 486
15.1.3 访问虚拟机的内存文件 487
15.2 准备安装volatility 488
15.2.1 volatility概览 488
15.2.2 在内存转储中研究进程 491
15.2.3 使用psscan检测dkom攻击 496
15.2.4 研究csrss.exe的备用进程列表 499
15.2.5 识别进程上下文的技巧 501
第16章 内存取证:代码注入与提取 507
16.1 深入研究dll 507
16.1.1 搜寻已加载的可疑dll 508
16.1.2 使用ldr_modules检测未链接的dll 510
16.2 代码注入和vad 514
16.2.1 研究vad 514
16.2.2 转换页面保护 517
16.2.3 在进程内存中搜索证据 520
16.2.4 使用malfind和yara识别注入代码 522
16.3 重建二进制文件 527
16.3.1 从内存中重建可执行文件的映像 529
16.3.2 使用impscan扫描导入函数 530
16.3.3 转储可疑的内核模块 533
第17章 内存取证:rootkit 537
17.1 检测iat钩子 537
17.2 检测eat钩子 539
17.3 检测内联api钩子 540
17.4 检测idt钩子 543
17.5 检测驱动程序的irp钩子 544
17.6 检测ssdt钩子 547
17.6.1 ssdt的角色 548
17.6.2 钩子和钩子检测 548
17.7 使用ssdt_ex自动研究 551
17.8 根据附加的内核线程搜索rootkit 552
17.8.1 使用线程在内核中隐藏 553
17.8.2 在内存转储中检测分离线程 554
17.9 识别系统范围的通知例程 555
17.9.1 找出检查的位置 555
17.9.2 使用notifyroutines插件 556
17.10 使用svscan定位恶意的服务进程 557
17.10.1 恶意软件如何滥用服务 558
17.10.2 scm的服务记录结构 558
17.10.3 枚举进程内存中的服务 560
17.10.4 blazgel木马的例子 560
17.10.5 使用volatility的svcscan插件 561
17.11 使用mutantscan扫描互斥体对象 564
第18章 内存取证:网络和注册表 567
18.1 探索套接字和连接对象 567
18.1.1 套接字和连接证据 567
18.1.2 套接字和连接对象 569
18.2 分析zeus留下的网络证据 570
18.3 检测企图隐藏tcp/ip的活动 572
18.3.1 扫描套接字和连接对象 572
18.3.2 其他项目 574
18.4 检测原始套接字和混杂模式的网络接口 574
18.4.1 混杂模式的套接字 574
18.4.2 检测混杂模式 575
18.5 注册表分析 575
18.5.1 使用内存注册表工具分析注册表证据 576
18.5.2 通过最后写入时间戳排序注册表项 580
18.5.3 使用volatility和reg-ripper 582
● 网络和TCP/IP
● 操作系统内部原理(Windows和Unix)
● 计算机安全
● 取证和事件响应
● 程序设计语言(C、C++、Python和Perl)
● 逆向工程
● 漏洞利用研究
● 恶意软件基础
第二个目标是阐述各种工具的工作原理,而不仅仅是讲述如何使用工具。如果能够理解单击某个按钮(或者输入某个命令)后所发生的事情,而不是只知道单击哪个按钮,就能够更好地根据工具的输出结果进行分析,而不仅仅是收集输出结果。我们知道并不是每个人都愿意编写程序,因此在配书光盘中提供了50多个工具供读者使用,并且在整个正文中讨论了100多个其他的工具。我们尽量避免提供随处都可以找到的工具的链接。本书中讨论的工具都是我们所熟悉的,并且尽可能是免费的工具。
最后,本书并不是研究恶意软件样本或进行取证调查时所执行操作的完整指南。我们尽量包括了最常见问题的解决方案,但又是在其他书籍和网站上很少见到的知识。尽管恶意软件可能会运行在多种平台(如Windows、Linux、Mac OSX、移动设备和硬件/固件组件)上,但是本书主要关注分析Windows平台上的恶意软件。
0.1 本书读者对象
如果您要学习恶意软件,就应当阅读本书。我们期望本书的读者包括取证调查人员、事件响应人员、系统管理员、安全工程师、渗透测试人员、恶意软件分析师、漏洞利用研究人员和所有对安全感兴趣的人。如果您是如下所示的情况之一,您就是我们的目标读者之一。
● 您是组织内事件处理、事件响应或取证小组的成员,并且希望学习一些新的工具和技术来处理恶意软件。
● 您是系统、安全或网络管理员,并且希望理解如何更加高效地保护最终用户。
● 您是国家计算机紧急事件响应小组(Computer Emergency Response Team,CERT)的成员,并且需要识别和研究恶意软件的入侵。
● 您在某个反病毒或研究公司工作,并且需要实际分析和报告最新的恶意软件。
● 您是一名在校学生,并且希望学习一些学校不会教授的新技术。
● 您在IT领域工作,但是对目前的工作感到厌倦,因此您需要寻找一个新的专业来补充技术知识。
本书组织成许多诀窍的集合,每个诀窍解决一个特定的问题,讲述一些工具的使用方法,或者讨论如何使用有趣的方式检测和分析恶意软件。其中有一些诀窍是独立的,即问题、讨论和解决方案都是在同一个诀窍中讲述。也有一些诀窍是联系在一起,共同描述一个问题的一系列操作步骤,共同解决一个更大的问题。本书涵盖了很多主题,随着学习的深入,所讨论的主题也变得越来越复杂和专业。如下所示是每一章所讨论主题的简要介绍:
● 第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章建立虚拟机),您必须还要了解那些禁止收集、分析、共享或报告恶意代码的法律法规。因为本书中讨论的技术并不一定在您所居住的国家或城市中是可以合法应用的。
致 谢
Michael向现在以及曾经的老板们表示感谢,因为他们提供了鼓励和激发创意的良好环境。Michael同时也要感谢他的同事们和工作中共享知识的所有人。尤其感谢AAron Walters和Ryan Smith,他们毫不犹豫地参与了有趣的新技术研究和讨论。特别感谢从繁忙的工作中抽出时间审阅本书的朋友们:Lenny Zeltser、Tyler Hudak和 Ryan Olson。
Steven向那些在幕后花费了无数个小时调查恶意软件以及与网络犯罪作斗争的人们致以感谢!同时对Shadowserver Foundation的同事们的辛勤工作以及促使Internet变得更加安全的无私奉献的精神表示感谢!
我们还要感谢以下人员:
● Wiley出版社的Maureen Spears和Carol A. Long,他们帮助完成了我们的第一本书。
● Ilfak Guilfanov(以及Hex-Rays小组)与Halvar Flake(以及Zynamics小组),允许我们使用一些他们的灵巧的工具。
● 所有本书参考过的工具的开发人员,特别是Frank Boldewin、Mario Vilas、Harlan Carvey以及Jesse Kornblum在其专业知识领域上帮助审阅了本书的一些诀窍。
● 其他书籍、博客的作者,以及有助于收集社区讨论知识的网站。
——Michael、Steven、Blake和 Matthew
《恶意软件分析诀窍与工具箱——对抗“流氓”软件的技术与利器》一书提供了大量的解决方案和教程,能够提高个人分析恶意软件的技能和水平,或者避免受到恶意软件的攻击。不管您是进行取证调查、事件响应,还是出于个人兴趣对恶意软件进行逆向工程,本书都能够教会您许多达到目的的方法。本书在材料的选取上有几个重要的目标。第一个目标是希望能够将我们多年来处理恶意代码的经验以一种比较好的方式传授给非技术读者,同时又不能太简单,使技术读者也能从中受益。也就是说,恶意软件分析人员需要结合使用多种技能。我们希望读者至少应当熟悉下面一些知识:
● 网络和TCP/IP
● 操作系统内部原理(Windows和Unix)
● 计算机安全
● 取证和事件响应
● 程序设计语言(C、C++、Python和Perl)
● 逆向工程
● 漏洞利用研究
● 恶意软件基础
第二个目标是阐述各种工具的工作原理,而不仅仅是讲述如何使用工具。如果能够理解单击某个按钮(或者输入某个命令)后所发生的事情,而不是只知道单击哪个按钮,就能够更好地根据工具的输出结果进行分析,而不仅仅是收集输出结果。我们知道并不是每个人都愿意编写程序,因此在配书光盘中提供了50多个工具供读者使用,并且在整个正文中讨论了100多个其他的工具。我们尽量避免提供随处都可以找到的工具的链接。本书中讨论的工具都是我们所熟悉的,并且尽可能是免费的工具。
最后,本书并不是研究恶意软件样本或进行取证调查时所执行操作的完整指南。我们尽量包括了最常见问题的解决方案,但又是在其他书籍和网站上很少见到的知识。尽管恶意软件可能会运行在多种平台(如Windows、Linux、Mac OSX、移动设备和硬件/固件组件)上,但是本书主要关注分析Windows平台上的恶意软件。
0.1 本书读者对象
如果您要学习恶意软件,就应当阅读本书。我们期望本书的读者包括取证调查人员、事件响应人员、系统管理员、安全工程师、渗透测试人员、恶意软件分析师、漏洞利用研究人员和所有对安全感兴趣的人。如果您是如下所示的情况之一,您就是我们的目标读者之一。
● 您是组织内事件处理、事件响应或取证小组的成员,并且希望学习一些新的工具和技术来处理恶意软件。
● 您是系统、安全或网络管理员,并且希望理解如何更加高效地保护最终用户。
● 您是国家计算机紧急事件响应小组(Computer Emergency Response Team,CERT)的成员,并且需要识别和研究恶意软件的入侵。
● 您在某个反病毒或研究公司工作,并且需要实际分析和报告最新的恶意软件。
● 您是一名在校学生,并且希望学习一些学校不会教授的新技术。
● 您在IT领域工作,但是对目前的工作感到厌倦,因此您需要寻找一个新的专业来补充技术知识。
本书组织成许多诀窍的集合,每个诀窍解决一个特定的问题,讲述一些工具的使用方法,或者讨论如何使用有趣的方式检测和分析恶意软件。其中有一些诀窍是独立的,即问题、讨论和解决方案都是在同一个诀窍中讲述。也有一些诀窍是联系在一起,共同描述一个问题的一系列操作步骤,共同解决一个更大的问题。本书涵盖了很多主题,随着学习的深入,所讨论的主题也变得越来越复杂和专业。如下所示是每一章所讨论主题的简要介绍:
● 第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章建立虚拟机),您必须还要了解那些禁止收集、分析、共享或报告恶意代码的法律法规。因为本书中讨论的技术并不一定在您所居住的国家或城市中是可以合法应用的。
致 谢
Michael向现在以及曾经的老板们表示感谢,因为他们提供了鼓励和激发创意的良好环境。Michael同时也要感谢他的同事们和工作中共享知识的所有人。尤其感谢AAron Walters和Ryan Smith,他们毫不犹豫地参与了有趣的新技术研究和讨论。特别感谢从繁忙的工作中抽出时间审阅本书的朋友们:Lenny Zeltser、Tyler Hudak和 Ryan Olson。
Steven向那些在幕后花费了无数个小时调查恶意软件以及与网络犯罪作斗争的人们致以感谢!同时对Shadowserver Foundation的同事们的辛勤工作以及促使Internet变得更加安全的无私奉献的精神表示感谢!
我们还要感谢以下人员:
● Wiley出版社的Maureen Spears和Carol A. Long,他们帮助完成了我们的第一本书。
● Ilfak Guilfanov(以及Hex-Rays小组)与Halvar Flake(以及Zynamics小组),允许我们使用一些他们的灵巧的工具。
● 所有本书参考过的工具的开发人员,特别是Frank Boldewin、Mario Vilas、Harlan Carvey以及Jesse Kornblum在其专业知识领域上帮助审阅了本书的一些诀窍。
● 其他书籍、博客的作者,以及有助于收集社区讨论知识的网站。
——Michael、Steven、Blake和 Matthew