简单的漏洞越来越少,需要改进目前的方法 :

通过符号执行,得出执行路径,然后在进行fuzzy是较为有效的方法之一

1)为待测单元自动地生成可到达的测试数据,即提高测试目标的覆盖率

2)根据特定的漏洞模式和路径条件,缩小 Fuzzing 测试范围,减少Fuzzing盲目性

符号执行(symbolic execution)是一种代码执行空间遍历技术。枚举了程序所有可能的路径,穷尽所有执行空间,给定漏洞特征,理论上可以检测所有符合特征的安全漏洞

#

过程内符号执行从 CFG 的入口点开始。将所涉及到的变量符号化(使用符号表示变量值),依次解析程序中的语句和指令,翻译为符号表达式。每个变量的值都由符号化的变量和常数构造表达式来表示,并在每一个结点记录变量的符号运算表达式。符号执行过程中遇到流程控制语句,则将条件判断语句对变量值的要求附加到路径条件中,使用约束求解器判定哪条分支可行,并根据预先设计的路径调度策略实现对该过程所有路径的遍历分析,最后输出每条可执行路径的分析结果

静态分析和动态符号执行的最大区别在于静态分析并不真正执行被测试程序

静态符号执行的核心思想是探索执行树(execution tree)上所有的控制路径(control path),前提是所有可能的输入值都被考虑到

可行路径的数量随着路径长度的增长呈现指数增长的趋势。因此,要把所有可行路径都探索完是几乎不可能的

Int x,y

If(x=hash(y))abort;

任意x对y赋值,求出hash(y),得到满足条件的解

例如y=5,hash(y)=2,求出,2,5满足条件

If(hash(x)=hash(y),动态也不行了,具体执行

Concretization,完了又回到符号执行

(conclic symbolic execution)

混合符号执行介绍

混合符号执行的核心思想是在程序真实运行过程中,运行时判断哪些代码需要经过符号执行,哪些代码可以直接运行。这样一来符号执行就充分利用了程序的运行时信息,提高了分析的精确性

如何知道哪些是符号值?

静态对变量符号化,需要源码(具体实现没研究)Klee需要源码,然后转换成中间代码IR(.BC文件)S2e可执行文件

源码插桩,二进制文件插桩

具体事例介绍

#include

#include

#include "s2e.h"

int main(void)

{

char str[3];

// printf("Enter two characters: ");

// if(!fgets(str, sizeof(str), stdin))

// return 1;

s2e_enable_forking();

s2e_make_symbolic(str, 2, "str");

if(str[0] == '\n' || str[1] == '\n') {

printf("Not enough characters\n");

} else ……

s2e_disable_forking();

}

if (size)

fb_info_size += PADDING;

p = kzalloc(fb_info_size + size, GFP_KERNEL);

char tmp_info[] = “drivers/video/fbsysfs.c”;

s2e_message(info);

u32 tmp_l = fb_info_size;

u32 tmp_r = size;

s2e_detect_int(&tmp_l, &tmp_r, 4, UADD);

控制权交给s2e

if (!p)

return NULL;

通过内联汇编向二进制代码中插入一条 x86 指令集中没有定义的指令,当 Linux 内核在 S2E 上执行到这里时,会识别这条指令并将控制权交给 S2E,S2E 会根据其中一个固定字节的值来选择我们编写的整数溢出检测插件,函数的参数会通过 RAX 等寄存器传入 S2E 以供使用

X86(bin)->ucode(IR) ->instrument->x86

1. 首先判断传入的左右操作数中是否有符号化数据,如果没有,直接返回,因为我们只关心符号值所影响到的数据。

2. 根据传入的整数溢出错误类型重构表达式,即整数溢出发生的验证条件

3. 将重构的表达式加入到当前路径下的约束表达式中,通过约束求解器进行求解 。

4. 如果存在可行解,则输出可行解并报告当前路径下存在整数溢出漏洞。

if(x==0xdeadbeef){

2. return 100/(x-0xdeadbeaf);

3. }

4. else

5. return 100;

当x为0xdeadbeaf时,代码会发生除0异常。在32bit空间上随机生成x的方式仅有1/232的概率触发除0异常。

void klee_div_zero_check(long long z) {

if (z == 0)

klee_report_error(__FILE__, __LINE__, "divide by zero", "div.err");

二进制符号执行介绍:

过于依赖程序源代码,可扩展性受限,运行平台苛刻,无法评估第三方模块、库函数的安全影响

二进制分析缺乏大量信息,没有程序变量的概念,处理的对象是内存单元和寄存器

低级指令系统也十分复杂

程序的执行轨迹包含的指令数目庞大

符号执行android,Android的fuzz测试技术之符号执行浅谈-android学习之旅(82)相关推荐

  1. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  2. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...

  3. android fps 垂直同步,浅谈Android流畅度

    原标题:浅谈Android流畅度 哈哈 讲个故事 白 1 流畅度 关于流畅度谷歌官方给出的解释为:running at a consistent 60 frames per second, witho ...

  4. android 存储空间监控,浅谈 Android 内存监控(中)

    前言 在上篇 浅谈 Android 内存监控(上) 中,我们聊了 LeakCanary,微信的 Matirx 和美团的 Probe,它们各自有不同的应用场景,例如,在开发测试环境,我们会偏向用 Lea ...

  5. 浅谈Android中的MVP与动态代理的结合

    浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...

  6. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...

  7. 浅谈Android Architecture Components

    浅谈Android Architecture Components 浅谈Android Architecture Components 简介 Android Architecture Componen ...

  8. 浅谈Android SDK开发

    目录 浅谈Android SDK开发 SDK开发的原则 SDK设计 功能与职责边界设计 接口设计 兼容性设计 发布输出设计 SDK文档设计 SDK项目架构 组件化.模块化 统一资源管理 第三方依赖管理 ...

  9. 浅谈Android引用计数(2)

    在浅谈Android引用计数(1)中讲了LightRefBase实现对象计数管理的原理,这篇文章将要分析重量级的引用基类:RefBase的实现和它的作用. 下面是RefBase和相关类的类图: 图中可 ...

最新文章

  1. 格式化_icecream_python
  2. 拿来就能用! CTO 创业技术栈指南!
  3. 从另一个分支在Git中创建一个分支
  4. python推荐系统-基于Python的推荐系统的设计与实现
  5. python实现pdf转word详解_手把手|20行Python代码教你批量将PDF文件转为Word格式(包教包会)...
  6. mysql数据库垂直切分_mysql数据库的水平拆分与垂直拆分
  7. 节省50%部署时间的5大KS8服务
  8. 即将改变软件开发的5个Java9新特性
  9. 非洲做生意进货渠道_WikiFundi如何帮助非洲人民为维基百科做贡献
  10. html5与其他语言的优势,浅谈:html5和html的区别
  11. SpringBoot2注解配置定时任务和异步执行任务
  12. C4D四视图切换及基本操作
  13. python建模_python建模实例详解
  14. 双路服务器芯片组的发展
  15. eureka client无法启动,java.lang.IllegalStateException: Failed to introspect Class
  16. 计算机网络五要素,网络安全五个基本要素是什么
  17. 怎样清除手机上的微信小程序的缓存?
  18. 这个弹丸小国,靠移民收割不少国人
  19. 网络配置之不走寻常路
  20. 读书笔记:软件工程(8) - 软件过程模型:喷泉模型、其他模型

热门文章

  1. Android VelocityTracker 滑动速度追踪
  2. Can't open /var/run/atd.pid to signal atd. No atd running?
  3. 文洛型塑料薄膜温室技术方案
  4. 无人驾驶系统ISO 26262和ISO 21448开发流程的融合
  5. 星际交流-全排列python题解
  6. java中的冰雹数,java实现第七届蓝桥杯打印数字
  7. gz文件解压 linux,linux下.tar.gz和.gz文件解压详解
  8. SR-TE Policy(思科)----PCEP实验
  9. 【通信工程】信息类,电子类,电气工程,自动化,计算机,软件工程,机电,等相关专业 全套学习指导
  10. 2021年高压电工考试题库及高压电工答案解析