软件安全分析与应用

软件安全分析与应用"

作者:苏璞睿、应凌云、杨轶
ISBN:9787302472070
定价:¥59
字数:千字
页数:
出版时间:2017.11.01
开本:
版次:1-2
装帧:
出版社:清华大学出版社
简介

本书作者根据其多年的软件安全研究成果,对软件安全分析方法进行了梳理和总结。全书由易到难、由浅入深地全面介绍了二进制程序分析所需的基础知识和基础分析工具,程序切片、符号执行、模糊测试、污点分析等软件分析基础方法,以及相关分析方法在恶意代码分析、软件漏洞挖掘分析、网络协议逆向分析、移动智能终端应用软件安全分析等方面的应用。本书不仅介绍了相关方法和原理,还分析了当前国际上相关的主流工具和系统,可供读者学习和参考;同时,在安全分析应用方面,也结合了大量的真实案例,有助于读者进一步深刻理解相关方法与技术的原理和价值。

本书不仅可作为网络空间安全专业本科生、研究生相关课程的教材,也可供对软件安全感兴趣的广大学者以及从事软件漏洞和恶意代码分析工作的专业人员参考。

前言

序

网络空间安全已是世界各国关注的重要战略问题,各国政府、学术界、产业界都投入了大量的资源来改善网络空间安全状况,发展网络空间安全防护手段。为适应网络技术和应用的快速发展,各种新的安全技术、安全产品、安全方案层出不穷。当前网络系统中,从不同层次、不同角度实现的安全产品已广泛应用,但从近年来曝光的各类安全事件来看,各种攻击手段仍然防不胜防。究其原因,软件漏洞及其利用是攻击成功的关键,也是系统防御的难点。

“千丈之堤,以蝼蚁之穴溃;百尺之室,以突隙之烟焚。”纵然我们有完美的安全模型和设计方案,但在这些方案的实现中,开发人员的疏忽或个别技术的缺陷都可能引入软件漏洞,让整个方案失效,甚至直接威胁整个系统的安全。2010年,震网蠕虫利用7个软件漏洞成功突破了伊朗核电站的物理隔离网络,造成严重破坏;2011年,攻击者利用漏洞成功渗透进入了著名的安全公司RSA公司的内部网络,并窃取了大量敏感信息;2015年,以擅长攻击著称的黑客团队Hacking Team的内部网络遭受攻击,大量的漏洞利用代码、内部研讨资料等敏感数据泄露。这些案例都给我们敲响了警钟,无论多么安全的防护方案都有可能因为“小小的”软件缺陷而被彻底突破。

近年来,各类安全事件的曝光让人们越来越关注软件的安全性问题。各类软件漏洞挖掘的高手也成为业界的宠儿,但随着软件复杂性的增加以及漏洞和漏洞利用模式的变化,仅仅依赖于少量有个人天赋的高手已经远远不能满足现实的需求。利用先进的技术方法来解决软件安全问题,一直是学术界、产业界共同关注的焦点问题,也是当前的一大难点问题。

2016年,美国国防部组织的DARPA CGC比赛(Cyber Grand Challenge)更是将软件漏洞的自动化发掘、分析、利用、防御技术研究推向高潮,DARPA组织该比赛的初衷之一也是为了吸引更多的社会资源关注、参与该问题的技术研究工作。这次比赛吸引了众多高校、科研机构和企业团队的关注。最终,来自卡耐基·梅隆大学的ForAllSecure团队获得第一。虽然CGC比赛中的场景设定与实际情况有很大差距,但这次比赛验证了自动化攻防的技术可能性,代表了未来的技术发展方向。随着未来软件技术的发展和广泛应用,软件安全问题将越来越突出,因此,发展新的软件安全技术是未来的主要发展方向。

我国是软件产业大国,也是软件应用大国。在软件安全方面面临的问〖1〗软件安全分析与应用题尤为突出。究其原因,一方面是由于我国大量的软件产品,尤其是操作系统、数据库等基础软件产品依赖于国外厂商,我们不得不面对软件厂商不可信的现实问题;但更重要的是我们目前在软件产品安全方面的审查能力仍很薄弱,缺乏有效的技术手段对软件产品的安全问题实施监管。针对软件安全问题,我国相关部门和机构做了大量的部署,取得了一系列的成果和突破。在软件安全检测、软件漏洞分析等方面形成了一系列成果,大量成果也已经成功转化,为提升我国网络空间安全保障能力发挥了重要作用。

但软件安全问题是典型的对抗性问题,面对我国软件产业的快速发展,当前软件安全技术和成果仍远无法满足现实的需求。高技术对抗需要高技术手段支撑,从2016年的DARPA CGC比赛可以看出,污点传播分析、符号执行等以前主要在学术研究工作中采用的方法和技术已逐步可支撑一系列软件安全分析实践工作,如何进一步推进相关方法和技术的实用化是当前学术界和工业界共同关注的焦点问题。

本书作者苏璞睿研究员及其团队十多年来一直从事软件安全研究工作,曾主持了国家863计划、国家自然科学基金、国家科技支撑计划等一系列国家重点任务的攻关工作,在软件安全方面取得了一系列技术突破,在动态污点传播分析、恶意软件分析与检测、软件漏洞分析与利用等方面有重大创新与积累,主持研制了恶意软件分析检测系统、软件漏洞分析系统等多项成果,在软件安全方面具有丰富的研究和实践经验。

本书由他和他的团队根据多年的研究积累和实践凝练而成,从基本概念、方法原理、重要工具系统和关键应用场景等不同层面对目前国内外的软件安全分析相关技术和方法进行了系统的总结和梳理。本书兼顾了学术研究前沿技术方法和相关技术方法在工程实践中的应用,既剖析了软件安全分析中常用的动态污点分析、符号执行等基础方法,也结合真实应用场景和实际案例,阐述了相关技术方法在软件漏洞分析与利用、恶意软件分析、协议逆向分析等多个具体问题中的应用。

本书是软件安全分析方面一本难得的理论与实践紧密结合的书籍,我愿意把它推荐给从事软件安全研究与实践的科研人员、研究生和技术人员。

2017年9月于北京

软件的应用已经渗透到社会的方方面面,承载着重要的社会价值。软件开发过程无法做到完美,软件问题与漏洞难以避免,软件也成为攻击者的重要目标。当前曝光的各类网络安全事件中,绝大部分都与软件安全问题相关,软件安全问题已成为关乎个人利益、社会稳定、国家安全的重要问题。

软件安全问题中的软件漏洞和恶意软件是两大经典问题,前者是由于软件设计开发过程中的缺陷带来的安全隐患,后者则是攻击者有意设计的具有破坏性的软件工具。软件自身越来越复杂,规模越来越庞大,软件漏洞模式、利用方式也越来越多样化,这就对软件漏洞的发现、分析与评估等工作带来了一系列的挑战;而恶意软件自身的技术也在不断发展,出现了各种自我保护技术、隐蔽通信手段等,这也对恶意软件的分析和处置提出了新的要求。无论是软件漏洞分析还是恶意软件分析,软件自身的复杂性已经超越一般技术人员的分析能力和理解能力,复杂软件的深度分析能力是软件漏洞分析和恶意软件分析共同面临的瓶颈问题。

如何提高对复杂软件的深度分析能力,并针对具体的应用场景,设计相关的分析、检测方法,一直是软件分析领域乃至信息安全领域关注的焦点问题。特别是考虑到很多软件系统无法获得源代码的现实,如何实现不依赖于源代码的软件深度分析是近年来的研究热点。

面向软件安全问题,本书总结了一系列软件分析基础性方法,并重点介绍了软件安全分析工作中的典型场景和相关技术手段。考虑到技术内容的完整性,书中也对当前常见的成熟工具(如反汇编工具、调试工具等)和相关基础知识(如Intel指令集、操作系统内核等)进行了简单介绍。

本书的写作主要由中国科学院软件研究所可信计算与信息保障实验室(TCA实验室)的信息对抗与网络保障团队共同完成,本书的撰写也是该团队对相关技术方法和研究进展的总结。该团队于2004年由冯登国研究员创建,后来由我组织。2004年底,团队开始关注基于硬件虚拟化的恶意软件分析;2005年底,组织开发了第一个基于开源系统QEMU的恶意软件分析系统,当时命名为WooKon(取音“悟空”);2010年,面向恶意软件检测需求,在WooKon系统的基础上推出了基于硬件虚拟化的APT(Advanced Persistent Threat)攻击检测引擎,并在多个部门和机构成功应用,2017年我们根据新的需求与新的形势又推出了金刚恶意软件智能分析系统;从2006年起,开始关注将动态污点分析应用于恶意软件分析和漏洞分析的相关研究,〖1〗软件安全分析与应用[3]〖3〗经过多年研发和逐步完善,2010年研制了第一套基于硬件虚拟化的动态污点分析系统——AOTA系统(ApplicationOriented Analysis System),并成功应用于漏洞利用自动生成研究;2013年构建了一个多样性漏洞利用自动生成系统——PolyAEG系统。

我们的工作也得到了一系列国家科技项目的支持。团队在最初建立的很长时间内没有得到相关项目的支持,在此要感谢时任信息安全国家重点实验室主任冯登国研究员的大力支持,保证了团队研究工作的持续发展。2006年团队的工作获得了第一个国家863计划项目“恶意代码机理分析与特征提取技术研究”,此后得到了国家自然科学基金、国家科技支撑计划、国家信息安全产业化专项等一系列项目的支持,也在相关项目的支持下完成了从基础方法、关键技术、原型系统到成果转化的科研过程。

软件分析理论博大精深,软件安全问题错综复杂,因作者能力和精力所限,难于对相关技术和方法进行全面、系统的总结。因此,本书主要对使用较多的程序切片、污点分析、模糊测试、符号执行等方法进行了介绍,并对恶意软件分析、协议逆向分析、软件漏洞分析、Android应用安全性分析等方法和技术进行了总结。

团队多位同事和同学参与了本书的写作或给予了支持和帮助。第1章黄桦烽提供了一系列案例素材;第2、3章由黄桦烽主要负责编写;第4章由闫佳博士主要负责编写;第5章由王衍豪博士主要负责编写,贾相堃博士负责修改校对;第6章由聂楚江博士主要负责编写;第7章由和亮博士主要负责编写;第8章主要由应凌云博士负责编写,聂眉宁博士协助提供素材;第9章主要由杨轶博士负责编写,闫佳博士协助修改校对;第10章由闫佳博士负责编写,闫佳博士协助修改校对;第11章由应凌云博士、谷雅聪博士、路晔绵博士及婧二霞共同完成。

本书的编写得到了国家自然科学基金项目“安全协议实现的逆向分析与安全评估方法研究”(NSFC: 61572483)、“面向应用商店的移动智能终端恶意软件检测关键技术研究”(NSFC: 61502468)、“虚拟化混淆代码逆向分析方法研究”(NSFC: 61502469)等项目的支持,在此表示感谢!

本书的编写得到了冯登国研究员的指导和帮助,冯老师不仅对书稿内容的组织、编写大纲等给予了指导,还审阅了全部书稿,提出了宝贵的修改意见。同时,本书最终得以出版,与冯老师长期对我们团队发展的支持是分不开的,在此对冯老师长期的支持和帮助表示衷心感谢!

多位专家、同行的真知灼见也对本书的形成提供了重要参考,在此一并表示感谢!另外,本书初稿曾作为中国科学院大学2016年春季课程讲义,课上多位同学也对讲义提出了宝贵的修改意见,在此一并表示感谢!

由于本书涉及内容较多,编写时间仓促,书中难免存在疏漏和不足之处,恳请广大读者提出宝贵的意见和建议,以便我们不断改进和完善本书的内容。

苏璞睿

于中国科学院软件研究所

2017年8月

目录

第1章绪论/1

1.1引言1

1.2典型安全问题3

1.2.1恶意软件3

1.2.2软件漏洞9

1.2.3软件后门11

1.3软件安全性分析的目标12

1.4主要方法与技术13

1.4.1反汇编与反编译14

1.4.2程序调试15

1.4.3程序切片17

1.4.4污点传播分析18

1.4.5符号执行19

1.4.6模糊测试20

1.5主要分析应用21

1.5.1恶意软件分析21

1.5.2网络协议逆向分析21

1.5.3软件漏洞分析与利用22

1.6本书的组织结构23

1.6.1内容范围23

1.6.2本书的组织23

1.7其他说明24

参考文献24

第2章基础知识/25

2.1处理器硬件架构基础25

2.1.1CPU结构介绍25

2.1.2保护模式28

2.1.3特权级29

2.1.4中断处理与异常处理30

〖1〗软件安全分析与应用[3]〖3〗2.1.5调试支持32

2.1.6虚拟化支持34

2.2反汇编及对抗技术35

2.2.1汇编语言35

2.2.2反汇编39

2.2.3代码混淆40

2.2.4反调试42

2.3Windows操作系统基础44

2.3.1PE文件结构44

2.3.2进程管理51

2.3.3线程管理52

2.3.4内存管理54

2.3.5对象与句柄管理57

2.3.6文件系统59

2.4小结59

参考文献60

第3章软件安全分析基础工具/61

3.1静态分析工具61

3.1.1IDA Pro61

3.1.2Udis8665

3.1.3Capstone67

3.1.4PEiD69

3.1.5010Editor70

3.2动态分析工具75

3.2.1Process Monitor75

3.2.2Wireshark78

3.2.3OllyDbg80

3.2.4WinDbg82

3.2.5Pin88

3.3虚拟化辅助分析平台89

3.3.1VMWare Workstation89

3.3.2VirtualBox93

3.3.3QEMU94

3.3.4Xen97

3.4小结97

参考文献98

第4章程序切片/99

4.1概述99

4.2程序切片初探100

4.2.1切片相关基础知识101

4.2.2切片的基本原理109

4.3静态程序切片111

4.3.1基于数据流方程的切片方法111

4.3.2基于图可达性算法的切片方法115

4.4动态程序切片116

4.4.1基于程序依赖图的动态切片方法117

4.4.2基于动态依赖图的动态切片方法120

4.5小结124

参考文献125

第5章符号执行/126

5.1符号执行基本模型126

5.1.1基本思想126

5.1.2程序语言定义127

5.1.3符号执行中的程序语义127

5.1.4符号执行树129

5.1.5约束求解130

5.1.6符号执行实例133

5.2动态符号执行技术136

5.2.1基本思想136

5.2.2动态符号执行实例137

5.2.3动态符号执行工具SAGE142

5.2.4动态符号执行技术中的关键问题150

5.3并行符号执行技术160

5.3.1基本思想160

5.3.2并行系统SCORE161

5.3.3并行系统Cloud9164

5.3.4并行系统SAGEN169

5.4选择符号执行技术174

5.4.1基本思想174

5.4.2选择符号执行实例175

5.4.3关键问题及解决方案177

5.5符号执行应用实例179

5.5.1KLEE179

5.5.2应用实例180

参考文献181

第6章模糊测试/183

6.1概述183

6.2基本原理与组成184

6.2.1基本原理184

6.2.2系统组成186

6.2.3工作模式188

6.3基础方法与技术190

6.3.1数据生成方法190

6.3.2环境控制技术194

6.3.3状态监控技术198

6.4模糊测试优化方法200

6.4.1灰盒模糊测试200

6.4.2白盒模糊测试201

6.4.3基于反馈的模糊测试202

6.5分布式模糊测试203

6.5.1分布式控制结构204

6.5.2分布式模糊测试策略206

6.5.3动态适应机制207

6.6典型工具与案例207

6.6.1Peach208

6.6.2Sulley211

参考文献213

第7章污点传播分析/214

7.1概述214

7.1.1发展简史214

7.1.2应用领域215

7.2基本原理217

7.3主要方法218

7.3.1污点源识别219

7.3.2污点内存映射220

7.3.3污点动态跟踪222

7.3.4传播规则设计225

7.3.5污点误用检测228

7.4典型系统实现229

7.4.1TaintCheck系统229

7.4.2TEMU系统231

7.4.3AOTA系统233

7.5典型实例分析235

7.5.1分析环境搭建235

7.5.2污点传播过程236

7.5.3污点回溯分析237

7.6总结239

参考文献239

第8章恶意代码检测与分析/241

8.1恶意代码分析基础241

8.1.1恶意代码分类241

8.1.2恶意代码分析的目的243

8.1.3典型分析流程244

8.1.4软件漏洞利用及分析245

8.2静态分析247

8.2.1杀毒软件扫描247

8.2.2文件类型确定247

8.2.3文件哈希计算248

8.2.4字符串信息提取251

8.2.5文件元数据提取252

8.2.6混淆代码识别254

8.2.7代码反汇编257

8.3动态分析259

8.3.1动态分析环境构建259

8.3.2动态行为分析262

8.3.3动态调试分析268

8.3.4反虚拟化分析对抗272

8.3.5反自动化分析对抗276

8.4实际案例分析278

8.5小结288

参考文献289

第9章软件漏洞挖掘与分析/290

9.1软件漏洞基础知识290

9.1.1概述290

9.1.2软件漏洞典型类型292

9.1.3软件漏洞利用基础知识297

9.1.4软件漏洞防护机制基础知识300

9.2软件漏洞机理分析301

9.2.1软件漏洞脆弱点分析302

9.2.2软件漏洞路径分析305

9.2.3软件漏洞内存布局分析309

9.2.4软件漏洞分析实例310

9.3软件漏洞利用312

9.3.1漏洞攻击链构造312

9.3.2漏洞攻击路径触发314

9.3.3保护机制绕过316

9.4小结317

参考文献318

第10章网络协议逆向分析/319

10.1网络协议逆向概述319

10.2协议消息格式逆向320

10.2.1字段划分322

10.2.2字段间关系的识别331

10.2.3字段功能语义恢复336

10.3协议状态机恢复341

10.3.1协议消息类型识别341

10.3.2状态机推断和化简344

10.4小结350

参考文献351

第11章移动智能终端应用软件安全性分析/352

11.1Android系统安全框架介绍352

11.1.1权限机制352

11.1.2沙箱隔离355

11.2Android软件典型安全问题355

11.2.1隐私窃取355

11.2.2应用重打包356

11.2.3组件安全问题356

11.3静态分析361

11.3.1权限分析361

11.3.2组件分析362

11.3.3代码分析366

11.3.4重打包应用检测381

11.4动态分析388

11.4.1数据流分析389

11.4.2数据流分析典型工具390

11.4.3动态行为分析392

11.4.4动态行为分析典型工具394

11.5实际案例分析401

11.5.1应用软件实现安全性分析401

11.5.2恶意应用分析404

11.6小结412

参考文献413

作者简介

编辑推荐

(1)是作者多年软件安全研究的梳理和总结。

(2)由易到难、由浅入深全面介绍了二进制程序分析所需的基础知识和基础分析工具,程序切片、符号执行、模糊测试、污点分析等软件分析基础方法,以及相关分析方法在恶意代码分析、软件漏洞挖掘分析、网络协议逆向分析、移动智能终端应用软件安全分析等方面的应用。

(3)不仅介绍了相关方法和原理,还分析了当前国际上相关的主流工具和系统,同时,也结合了大量的真实案例。

作者寄语

(1)是作者多年软件安全研究的梳理和总结。

(2)由易到难、由浅入深全面介绍了二进制程序分析所需的基础知识和基础分析工具,程序切片、符号执行、模糊测试、污点分析等软件分析基础方法,以及相关分析方法在恶意代码分析、软件漏洞挖掘分析、网络协议逆向分析、移动智能终端应用软件安全分析等方面的应用。

(3)不仅介绍了相关方法和原理,还分析了当前国际上相关的主流工具和系统,同时,也结合了大量的真实案例。

电子资料

www.luweidong.cn

下一个