软件安全分析与应用:程序切片
软件安全分析与应用第4章程序切片读书笔记。
程序切片
概述
相关知识
基本原理
静态切片
基于数据流
基于图可达性
动态切片
基于程序依赖图
基于动态依赖图
概述
程序切片是指从程序中提取出满足一定约束条件的代码片段。
相关知识
控制流
数据流
代码块
可达性
活性分析
程序依赖图
基本原理
静态程序切片主要有两种方法,即为基于数据流方程的方法和基于程序依赖图可达性的切片方法。
动态切片是一种仅关注在给定某个输入条件下对程序中某点的变量有影响的语句,动态切片的发现来源于程序动态调试的需要。
软件安全分析与应用:软件安全分析基础工具
软件安全分析与应用第3章软件安全分析基础工具读书笔记。
软件安全分析基础工具
静态分析工具
IDA Pro
Udis86
Capstone
PEiD
010Editor
动态分析工具
Process Monitor
Wireshark
OllyDbg
WinDbg
Pin
虚拟化辅助分析平台
VMWare Workstation
VirtualBox
QEMU
Xen
静态分析工具
静态分析是指在不运行软件程序的情况下,利用分析工具,采用语法分析、词法分析、控制流与数据流分析等技术手段对软件程序进行扫描。
IDA Pro
IDA Pro 是一款交互式的反汇编工具,简称 IDA。支持 Windows、Linux、Mac OS等主流操作系统,支持 Interl x86/x64、ARM、MIPS等数十种指令集的反汇编。
IDA 的常用功能有:
反汇编,使用递归下降算法进行代码扫描,结果可以使用控制流图和地址顺序排列
反编译,将对应汇编代码反编译成 C/C++ 代码
导入表与导出表解析,导入表记录了程序调用的但执行代码不再程序中而在程序中,而在动态库文件(dl ...
软件安全分析与应用:绪论与基础知识
软件安全分析与应用第1章第2章绪论与基础知识读书笔记。
基础知识
处理器硬件架构基础
CPU结构介绍
保护模式
特权级
中断处理与异常处理
调试支持
虚拟化支持
反汇编及对抗技术
汇编语言
反汇编
代码混淆
反调试
Windows操作系统基础
PE文件结构
进程管理
线程管理
内存管理
对象与句柄管理
文件系统
处理器硬件架构基础
保护模式
IA-32架构的 CPU 有两种工作模式:实模式和保护模式,工作模式受到 CR0 和 PE 标志位控制。
CPU 刚开始初始化后工作在实模式下,PE 标志位值为0,使用20位地址,寻址空间1MB;当操作系统启动时,将 CPU 的 PE 标志位置1,开启保护模式,使用32为地址,内存寻址空间拓展到4GB。
实模式不支持多线程,不能实现权限分级;保护模式下引入内存的分页和分段管理机制,实现了内存分页和权限分级,并支持多线程、多任务。
特权级
CPU 支持 Ring0, Ring1, Ring2, Ring3 共 4 个权限级别, windows 只使用了 Ring0 和 Ring3 两个。
为了进行代码段和数据段间的特权 ...
软件漏洞分析技术:运行系统漏洞分析
软件漏洞分析技术第15章运行系统漏洞分析读书笔记。
运行系统漏洞分析
基本原理
方法实现
信息手机
配置管理漏洞检测
通信协议漏洞检测
授权认证漏洞检测
数据验证漏洞检测
数据安全性检测
实例分析
典型工具
Nmap
Nessus
微软基线安全分析器
WVS
基本原理
运行系统的特点:
运行系统是处于实际运行状态的系统
运行系统是多种软件的有机整体,各个软件之间具有一定的运行逻辑关系
运行系统的部署环境复杂多样,可能由不同子网范围内的不同操作系统的多台机器共同构成
方法实现
信息收集主要手段有:
网络拓扑探测
操作系统探测
应用软件探测
基于爬虫的信息收集
公用资源搜索
配置管理漏洞检测具体步骤有:
分析运行系统的业务特性
测试运行系统各配置是否符合第一步建立的运行系统安全配置要求
分析人员将检查过程中发现的不符合安全配置要求的地方记录下来,形成配置安全测试评估报告
通信协议漏洞检测检测方法有:
形式化方法,通过数学方法说明软件系统属性
攻击验证方法
授权认证漏洞检测中授权测试方法:
路径遍历测试
绕过授权测试
提权测试
授权认证漏洞检测中 ...
软件漏洞分析技术:软件架构安全分析
软件漏洞分析技术第14章软件架构安全分析。
软件架构安全分析
基本原理
方法实现
形式化分析
工程化分析
实例分析
典型工具
威胁建模工具
软件架构分析工具
基本原理
软件架构是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致第描述组件之间的通讯。
方法实现
现在软件架构安全分析可以分为两类:
形式化分析,分析结果精确、可量化,自动化程度高,但实用性差
工程化分析,实用性强,但自动化程度化
常见的工程化分析技术:
场景分析法
错误用例分析法
威胁建模法
实例分析
工程化分析实例,基于 Web 应用程序的威胁建模基本步骤:
确定安全目标
创建 Web 应用程序概述
分解应用
确定威胁
确定漏洞
典型工具
威胁建模工具:
图表
分析模型
描述环境
生成报告
软件架构分析工具有 IBM 软件架构师工具包。
软件漏洞分析技术:智能灰盒测试
软件漏洞分析技术第13章智能灰盒测试读书笔记。
智能灰盒测试
基本原理
方法实现
动态符号执行
路径控制与定向遍历
路径约束求解
漏洞触发数据生成
实例分析
典型工具
Dart
Smart fuzzing
BitBlaze
基本原理
二进制漏洞分析中应用最普遍的方法是模糊测试(fuzzing),但是存在着明显的缺陷,测试用例的生成存在盲目性。
该盲目性产生与两个方面:
没有结合系统具体代码实现(没有系统的先验知识)
测试用例独立
针对这些问题,测试方法转向智能模糊测试(smart fuzzing),通过先验知识提高测试用例的有效率。具体的方法有:
符号执行,增加覆盖率
路径控制,去除冗余无效用例
…
智能灰盒测试基本步骤:
静态分析,将二进制程序反汇编然后转化成为中间语言表示
符号执行收集路径条件
利用约束求解工具,求解能够执行的路径
针对此类路径生成测试用例
方法实现
动态符号执行获取程序可能的执行路径。
路径控制与定向遍历增强漏洞分析的针对性,采用模式匹配等静态分析的方法,识别出漏洞相关路径,并重点对漏洞相关路径进行遍历,提高漏洞分析的准确率。 ...
软件漏洞分析技术:基于二进制代码对比的漏洞分析
软件漏洞分析技术第12章基于二进制代码对比的漏洞分析。
基于二进制代码对比的漏洞分析
基本原理
方法实现
文本
图同构
结构化
软件补丁
实例分析
典型工具
Bindiff
Eye Binary Diffing Suite
基本原理
补丁对比技术是一种通过对比打补丁前后的目标代码,分析发现两个版本的程序之间差异的技术。
二进制代码对比最终目的是寻找打补丁前后程序的差异。有以下几种方法:
基于文本的对比,输出结果范围大,漏洞定位精度差,误报率高
基于图同构的对比,指令级和函数级图同构对比,受编译器优化影响大
基于结构化对比,受编译器影响大,存在局部影响全局的问题
综合对比技术
实例分析
以CNNVD-201112-203为例,进行实例分析流程如下:
漏洞信息搜集
搭建测试环境
补丁对比(获取汇编代码差异,明确分析对象到具体的目标函数和子函数)
静态分析(定位发生问题的代码)
动态调试(验证猜想)
典型工具
Bindiff是针对二进制文件差异型对比工具,协助安全人员迅速找到反汇编代码的差异之处和相似之处。
Eye Binary Diffing Suite ...
软件漏洞分析技术:基于模式的漏洞分析
软件漏洞分析技术第11章基于模式的漏洞分析。
基于模式的漏洞分析
基本原理
方法实现
反汇编分析
逆向中间表示
漏洞模式建模
漏洞模式检测
实例分析
典型工具
BinNavi
BAP
基本原理
基于模式的漏洞分析基本步骤:
建立漏洞模式
对二进制程序进行反汇编,获得汇编代码
将汇编代码转化为中间表示
中间表示的漏洞模式匹配
二进制文件结构,根据平台不同有不同的文件格式:
Windows 下的 PE(portable executable)
UNIX 下的 ELF(Executable and Linkable Format)
iOS 与 Mac OS 的 Mach-O(Mach object)
方法实现
由于x86指令集非常复杂,难以建立漏洞模式,所以需要对汇编代码进一步抽象,转化为中间表示建立漏洞模式。
反汇编的基本算法:
确定反汇编代码区域
确定指令的起始地址
读取初始地址的值,执行一次表查找,对应二进制操作码的值和汇编语言助记符
获取指令与操作数,等价转化成汇编语言
下一条指令,并重复3-5
当前最主要的反汇编策略:
线性扫描策略,不能区分 ...
软件漏洞分析技术:动态污点分析
软件漏洞分析技术第10章动态污点分析读书笔记。
动态污点分析
基本原理
方法实现
实例分析
典型工具
TaintCheck
Argos
TaintDroid
基本原理
动态污点分析在程序运行的基础上,对数据流或者控制流进行监控,从而实现对数据在内存中的显式传播、数据误用等操作进行跟踪和检测。
根据流,动态污点分析可以归类为:
基于数据流的
基于控制流的
根据范围,动态污点分析可以归类为:
用户进程级
全系统级
动态污点分析的基本步骤有:
污点数据标记
污点动态跟踪
污点误用检查
优点是低误报和高可信。
缺点是:
漏报率高
平台相关性高
资源消耗大
实现
动态代码插桩:在被分析的程序的控制流中,插入用户定义的代码,从而对程序的行为进行监控的方法。
根据时机的不同,可以被分为:
源代码插桩
编译时插桩
链接时插桩
运行时插桩
污点敏感点,即 Sink 点,是污点数据有可能被误用的指令或者系统调用。主要可以分为:
跳转地址
格式化字符串
系统调用参数
典型工具
TaintCheck:基于开源的x86模拟器Valgrind设计实现,先将机器指令翻译成为 ...
软件漏洞分析技术:模糊测试
软件漏洞分析技术第9章模糊测试读书笔记。
模糊测试
基本原理
方法实现
输入数据关联分析
测试用例构建
测试异常分析
框架
实例分析
典型工具
Peach
Sulley
概念
模糊测试是当前最流行的黑盒测试方法,基本步骤有:
向待测程序提供大量特殊构造的数据作为输入
监视程序的运行过程中产生的异常并且记录导致异常的输入
人工进一步定位漏洞位置
方法实现
了解程序对于数据的结构化要求,有针对性地通过变异或者生成的方式构建测试用例。
对于复杂的数据格式,使用数据块模型进行描述。
常用的测试用例构造算法有:
随机
强制性测试
预先生成测试用例
遗传算法
错误注入与模糊式启发
测试异常分析
在模糊测试过程中,首先通过分类过滤并获取程序的某些运行时信息(尤其是异常发生时的),对记录下来的信息进行重点分析。
具体的监控方法有:
系统调试接口
异常即时过滤
异常影响分析与漏洞危害判定
典型工具
Peach:代码可以重用,并且能够在使用过程中变得更加智能。
Sulley:该工具的特点有使用简单且极富弹性,日志记录丰富且可以重现测试用例,代码可重用性高,基于路径的分 ...