编辑推荐
(1)是作者多年软件安全研究的梳理和总结。
(2)由易到难、由浅入深全面介绍了二进制程序分析所需的基础知识和基础分析工具,程序切片、符号执行、模糊测试、污点分析等软件分析基础方法,以及相关分析方法在恶意代码分析、软件漏洞挖掘分析、网络协议逆向分析、移动智能终端应用软件安全分析等方面的应用。
(3)不仅介绍了相关方法和原理,还分析了当前国际上相关的主流工具和系统,同时,也结合了大量的真实案例。
内容简介
本书作者根据其多年的软件安全研究成果,对软件安全分析方法进行了梳理和总结。全书由易到难、由浅入深地全面介绍了二进制程序分析所需的基础知识和基础分析工具,程序切片、符号执行、模糊测试、污点分析等软件分析基础方法,以及相关分析方法在恶意代码分析、软件漏洞挖掘分析、网络协议逆向分析、移动智能终端应用软件安全分析等方面的应用。本书不仅介绍了相关方法和原理,还分析了当前国际上相关的主流工具和系统,可供读者学习和参考;同时,在安全分析应用方面,也结合了大量的真实案例,有助于读者进一步深刻理解相关方法与技术的原理和价值。
本书不仅可作为网络空间安全专业本科生、研究生相关课程的教材,也可供对软件安全感兴趣的广大学者以及从事软件漏洞和恶意代码分析工作的专业人员参考。
目录
目录
第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
精彩书摘
第5章符 号 执 行符号执行技术在1976年由Jame C.King提出[1]。20世纪70年代,关于软件正确性测试的研究工作都基于一个原则: 选择合适的测试用例对程序运行状态进行测试,如果对于提供的输入都能产生正常的结果输出,则认为程序是可靠的。其中的方法可分为两大类。一类是以模糊测试为代表的随机性测试,虽然模糊测试等随机测试方法至今仍活跃在软件安全测试的一线,但其具有的盲目性和随机性使其无法提供完整可靠的测试结果。另一类是以模型检测为代表的形式化证明方法,通过归纳法来证明程序是否具有期望的性质,证明过程的复杂性使其在面对大规模程序的时候几乎不可用。正是在这样的背景下,James C.King提出了符号执行方法,可以将其看成是上述两类传统方法的折中。King希望在无法获取程序特性说明等信息的情况下,仍旧能够对其进行快速全面的自动化安全性检测。本章将对符号执行的基本方法进行介绍。
5.1符号执行基本模型〖*4/5〗5.1.1基本思想符号执行的基本思想是: 使用符号变量代替具体值作为程序或函数的参数,并模拟执行程序中的指令,各指令的操作都基于符号变量进行,其中操作数的值由符号和常量组成的表达式来表示。
对于任意程序,其执行流程是由指令序列的执行语义控制的,执行语义包括: 变量定义语句对数据对象的描述,声明语句对程序数据对象的修改,条件语句对程序执行流程的控制。当程序的输入参数确定时,其指令序列被固定下来,因此程序执行语义和控制流也就得到确定。如果不用具体数值,而是用符号值作为程序的输入参数,则指令序列的操作对象就从具体数值变为了符号值,程序的执行语义和控制流程也变成了和符号变量相关的符号表达式。读者可以将符号执行视为程序具体执行的自然扩展,符号变量使得程序执行语义变得不确定,这也使得符号执行技术在理想情况下可以遍历程序执行树的所有路径。也可以将程序的一次具体执行视为符号执行的一个实例,当需要对某条程序路径进行遍历分析时,只需根据符号执行方法对该路径的分析结果,就可以引导控制流遍历该路径的程序输入。
King[1]在提出符号执行技术的同时,也为其限定了理想的使用场景:
(1) 理想模型中程序只处理有符号整数,在实际测试中这种情况不会出现。〖1〗软件安全分析与应用第5章符号执行[3]〖3〗(2) 理想模型中假定程序“执行树”的规模是有限的,在实际测试中,由于程序中存在的循环等原因,很多程序的“符号执行树”可能是无穷大的。
(3) 理想模型中符号执行技术可以处理程序内所有if条件语句中的约束表达式,在实际测试中,约束表达式中通常会出现符号执行引擎无法处理的操作和变量类型。
5.1.2程序语言定义
基于符号执行技术的理想场景对程序语言做如下定义。
(1) 程序变量类型: 程序中只包括有符号整数类型。
(2) 程序语句类型:
�r 简单的声明语句,例如,a=3。
�r if条件语句(包括then和else),例如if(a<0),假定程序内所有if条件语句中的表达式都可以化简为{arith.expr.}≥0的形式,例如-a-1≥0。
�r 无条件跳转语句,例如goto语句。
�r 变量操作语句,例如读操作(read)。变量处理操作符中只包含基本的整数运算操作,例如加、减、乘(+、-、*)。
前言/序言
序
网络空间安全已是世界各国关注的重要战略问题,各国政府、学术界、产业界都投入了大量的资源来改善网络空间安全状况,发展网络空间安全防护手段。为适应网络技术和应用的快速发展,各种新的安全技术、安全产品、安全方案层出不穷。当前网络系统中,从不同层次、不同角度实现的安全产品已广泛应用,但从近年来曝光的各类安全事件来看,各种攻击手段仍然防不胜防。究其原因,软件漏洞及其利用是攻击成功的关键,也是系统防御的难点。
“千丈之堤,以蝼蚁之穴溃;百尺之室,以突隙之烟焚。”纵然我们有完美的安全模型和设计方案,但在这些方案的实现中,开发人员的疏忽或个别技术的缺陷都可能引入软件漏洞,让整个方案失效,甚至直接威胁整个系统的安全。2010年,震网蠕虫利用7个软件漏洞成功突破了伊朗核电站的物理隔离网络,造成严重破坏;2011年,攻击者利用漏洞成功渗透进入了著名的安全公司RSA公司的内部网络,并窃取了大量敏感信息;2015年,以擅长攻击著称的黑客团队Hacking Team的内部网络遭受攻击,大量的漏洞利用代码、内部研讨资料等敏感数据泄露。这些案例都给我们敲响了警钟,无论多么安全的防护方案都有可能因为“小小的”软件缺陷而被彻底突破。
近年来,各类安全事件的曝光让人们越来越关注软件的安全性问题。各类软件漏洞挖掘的高手也成为业界的宠儿,但随着软件复杂性的增加以及漏洞和漏洞利用模式的变化,仅仅依赖于少量有个人天赋的高手已经远远不能满足现实的需求。利用先进的技术方法来解决软件安全问题,一直是学术界、产业界共同关注的焦点问题,也是当前的一大难点问题。
2016年,美国国防部组织的DARPA CGC比赛(Cyber Grand Challenge)更是将软件漏洞的自动化发掘、分析、利用、防御技术研究推向高潮,DARPA组织该比赛的初衷之一也是为了吸引更多的社会资源关注、参与该问题的技术研究工作。这次比赛吸引了众多高校、科研机构和企业团队的关注。最终,来自卡耐基·梅隆大学的ForAllSecure团队获得第一。虽然CGC比赛中的场景设定与实际情况有很大差距,但这次比赛验证了自动化攻防的技术可能性,代表了未来的技术发展方向。随着未来软件技术的发展和广泛应用,软件安全问题将越来越突出,因此,发展新的软件安全技术是未来的主要发展方向。
我国是软件产业大国,也是软件应用大国。在软件安全方面面临的问〖1〗软件安全分析与应用题尤为突出。究其原因,一方面是由于我国大量的软件产品,尤其是操作系统、数据库等基础软件产品依赖于国外厂商,我们不得不面对软件厂商不可信的现实问题;但更重要的是我们目前在软件产品安全方面的审查能力仍很薄弱,缺乏有效的技术手段对软件产品的安全问题实施监管。针对软件安全问题,我国相关部门和机构做了大量的部署,取得了一系列的成果和突破。在软件安全检测、软件漏洞分析等方面形成了一系列成果,大量成果也已经成功转化,为提升我国网络空间安全保障能力发挥了重要作用。
但软件安全问题是典型的对抗性问题,面对我国软件产业的快速发展,当前软件安全技术和成果仍远无法满足现实的需求。高技术对抗需要高技术手段支撑,从2016年的DARPA CGC比赛可以看出,污点传播分析、符号执行等以前主要在学术研究工作中采用的方法和技术已逐步可支撑一系列软件安全分析实践工作,如何进一步推进相关方法和技术的实用化是当前学术界和工业界共同关注的焦点问题。
本书作者苏璞睿研究员及其团队十多年来一直从事软件安全研究工作,曾主持了国家863计划、国家自然科学基金、国家科技支撑计划等一系列国家重点任务的攻关工作,在软件安全方面取得了一系列技术突破,在动态污点传播分析、恶意软件分析与检测、软件漏洞分析与利用等方面有重大创新与积累,主持研制了恶意软件分析检测系统、软件漏洞分析系统等多项成果,在软件安全方面具有丰富的研究和实践经验。
本书由他和他的团队根据多年的研究积累和实践凝练而成,从基本概念、方法原理、重要工具系统和关键应用场景等不同层面对目前国内外的软件安全分析相关技术和方法进行了系统的总结和梳理。本书兼顾了学术研究前沿技术方法和相关技术方法在工程实践中的应用,既剖析了软件安全分析中常用的动态污点分析、符号执行等基础方法,也结合真实应用场景和实际案例,阐述了相关技术方法在软件漏洞分析与利用、恶意软件分析、协议逆向分析等多个具体问题中的应用。
本书是软件安全分析方面一本难得的理论与实践紧密结合的书籍,我愿意把它推荐给从事软件安全研究与实践的科研人员、研究生和技术人员。
2017年9月于北京
前言
软件的应用已经渗透到社会的方方面面,承载着重要的社会价值。软件开发过程无法做到完美,软件问题与漏洞难以避免,软件也成为攻击者的重要目标。当前曝光的各类网络安全事件中,绝大部分都与软件安全问题相关,软件安全问题已成为关乎个人利益、社会稳定、国家安全的重要问题。
软件安全问题中的软件漏洞和恶意软件是两大经典问题,前者是由于软件设计开发过程中的缺陷带来的安全隐患,后者则是攻击者有意设计的具有破坏性的软件工具。软件自身越来越复杂,规模越来越庞大,软件漏洞模式、利用方式也越来越多样化,这就对软件漏洞的发现、分析与评估等工作带来了一系列的挑战;而恶意软件自身的技术也在不断发展,出现了各种自我保护技术、隐蔽通信手段等,这也对恶意软件的分析和处置提出了新的要求。无论是软件漏洞分析还是恶意软件分析,软件自身的复杂性已经超越一般技术人员的分析能力和理解能力,复杂软件的深度分析能力是软件漏洞分析和恶意软件分析共同面临的瓶颈问题。
如何提高对复杂软件的深度分析能力,并针对具体的应用场景,设计相关的分析、检测方法,一直是软件分析领域乃至信息安全领域关注的焦点问题。特别是考虑到很多软件系统无法获得源代码的现实,如何实现不依赖于源代码的软件深度分析是近年来的研究热点。
面向软件安全问题,本书总结了一系列软件分析基础性方法,并重点介绍了软件安全分析工作中的典型场景和相关技术手段。考虑到技术内容的完整性,书中也对当前常见的成熟工具
软件安全分析与应用/高等学校网络空间安全专业规划教材 下载 mobi epub pdf txt 电子书 格式