User:Wangzhuo

From Trusted Cloud Group
Jump to: navigation, search

Contents

Zhuo Wang (王卓)

Wangzhuo-01.jpg

Contact ME

  • 程序分析组
  • 2008级硕士
  • Email: horreaper@163.com
  • MSN: horreaper@163.com
  • QQ: 1018894701
  • 工作去处:Intel BiTs Team

毕业论文工作

题目:基于符号执行的二进制代码动态污点分析

摘要

随着计算机在社会应用的日益增多,计算机安全逐渐成为关注的焦点。人们提出了许多技术来发掘软件的漏洞,污点分析和符号执行是其中两种有效的方法。污点分析是一种数据流分析方法,它将来自于可疑渠道的信息标记为“被污染”,并通过分析每条指令确定哪些数据被可疑数据影响,将这些数据也标记为“被污染”,最后通过一定的检测规则查找软件漏洞。符号执行是采用符号对变量进行表示,并用符号代替实际的数值进行程序执行的方法。 目前存在的污点分析工具存在三个问题,其一是存在检测盲点,即无法检测仅仅改变了程序的某些数据,而并没有改变控制流的漏洞;其二是无法进行位分析,即无法判断输入数据的哪些字节触发了系统漏洞;其三是路径覆盖率低,仅能对一条路径进行分析,而不能指导生成可以测试其他路径的测试用例。 本文根据目前污点分析技术存在的问题,提出了采用第三种污染状态“受控污染”来丰富检测手段的方案,并通过对漏洞特征的总结,提出了六种漏洞检测规则,解决了检测盲区的问题,并且可以发现潜在的漏洞。针对污点分析固有的无法进行位分析和路径覆盖率低的缺点,本文提出了借助符号执行的完善方法:为每个内存字节分配符号,并记录内存地址与符号之前的对应关系以便进行字节级的数据跟踪;记录每次执行的路径条件,根据路径条件指导可以选择其他路径的测试用例生成。 为了验证所提出的针对污点分析的完善技术是否有效,本文提出了基于上文原理的动态污点分析工具DsVD(Dynamic Software Vulnerability Detector)和它的符号执行扩展版本DsVD-SE(Dynamic Software Vulnerability Detector – Symbolic Execution)。DsVD采用三种污染状态及新归纳的六条检测规则来发掘漏洞。DsVD-SE采用了符号化的内存污点管理模型,从而可以进行细粒度的分析,具体确定是输入的哪些字节触发了软件的漏洞,同时可以记录路径信息,指导测试用例生成。为了保证DsVD和DsVD-SE的运行效率,本文采用了两种优化方法,无关API过滤和基本块处理,来减少系统开销。 实验表明,DsVD和DsVD-SE可以有效的检测软件漏洞,通过对五款现实存在的软件的检测,我们共发现63个漏洞。受益于两种优化方法,加载DsVD后目标软件运行时间仅增多3.1倍,相对于其他工具,如LIFT3.6倍,TaintCheck约20倍,DsVD具有最小的系统开销。DsVD-SE的系统开销为17.34倍,慢于LIFT而优于Taintcheck。

个人材料

参考文献

My Lectures

Pixy: A Static Analysis Tool for Detecting Web Application Lecture 9.9.09
DySy: Dynamic Symbolic Execution for Invariant Inference Lecture 10.21.09

Technical Reports

DsVD 指令分析架构说明
DsVD 寄存器管理模块说明
缓冲区溢出例子及我们的检测方法
借助代码相似度检查方法评价反编译质量

Research History

Jan,13

  • 目前的工作:
  • 1.阅读反编译相关论文,寻找相似文章,方便确定文章结构
  • 2.准备周四的演示
  • 3.准备presentation
  • 完成情况:
  • 1.最近几年反编译方向的相近论文比较少,SAS07中有一篇可以关注下,其中它自定义了一个参数做为研究对象,方便将结果数字化,值得借鉴。
  • 2.明天的演示主要有两点:一是目前的结果(检测溢出),二是反编译的成果,目前仍在准备材料
  • 下周工作
  • 周四讲解我们的成果及演示。
  • 开始撰写论文。

DEC,30,2009

  • 目前的工作:
  • 1.写一个缓冲区溢出的例子,并用它来测试系统是否可以发现这个脆弱点
  • 2.在测试中发现我们系统目前存在的问题,并进行修改
  • 完成情况:
  • 例子已经写好,这个例子通过堆栈溢出覆盖了函数的返回值,从而成功调用“攻击函数”,原理与CVE-2007-5191类似。详情点击缓冲区溢出例子及检测方法
  • 本周发现的问题:
  • 1.从前我们认为在源操作数为立即数的情况下是不会传播污点的,但最近发现mov指令的立即数类型源操作数可能代表地址,因此可以传播污点。这个问题已经改正。
  • 2.内存管理模块存在一定问题,举例来说,先后调用以下三个函数,显示的结果有错。黄实秋目前负责这个问题
memRecorder.markTaintedBlock(0x00415804,6);
memRecorder.markTaintedBlock(0x0012ff5c,4);
memRecorder.markTaintedMemory(0x12ff2c);
  • 目前我们系统的污点传播框架没有太大的问题。通过对例子的跟踪调试,发现在手动标记正确的污点的情况下,可以发现例子中的脆弱点。我们有理由认为在内存管理模块修正之后,可以自动发现这个例子包含的脆弱点。
  • 下周计划:
  • 寻找其他可供测试的例子,主要方向是cwe中的脆弱点。
  • 修改在测试中发现的问题。
截止时间 内容
Dec.16.2009 1.修改脆弱点检测规则文档。

2.在wiki页面添加获取正确寄存器的值的技术报告。
3.暂时绕开确定污染源模块,测试传播框架。

Dec.9.2009 1.代码实现漏洞检测规则

2.完成漏洞检测规则文档
3.研究一些API的二进制代码,找出可供利用的规则

Dec.2.2009 1.准备论文讲座

2.在漏洞数据库(cwe,cve)中寻找可用的漏洞检测规则
3.寻找在汇编指令级别发现未检查申请内存返回值的漏洞

Nov.25.2009 1.实现一些简单的脆弱点检测规则(jmp、call或者return到一个被污染的地址)

2.测试并继续完善污点传播框架
3.在与我们工具相近的论文中寻找一些可用的脆弱点检测规则

Nov.4.2009 1.修改论文,完成architecture和optimization部分

2.测试并修改污点传播框架

Nov.4.2009 1.解决无法获得正确mcontext的问题

2.找到dynamorio中movsb和movsw的区别
3.整合现有系统并进行测试

Oct.21.2009 1.完成串搬移类指令(movs,rep movs,movsd)分析

2.测试已有的指令分析框架和程序,发现一些问题,进行修改和研究
3.整合现有系统各部分

Oct.14.2009 1.完成指令分析框架
2.完成部分具体指令分析程序
3.分析部分指令的污点传播模式
Sep.9.2009 1.完成并投出论文.
2.完成操作系统大作业
Aug.26.2009 1.测试Spec2006数据.
2.继续完成和修改论文
July.15.2009 1.了解各种管理污染点的方法
2.阅读污染点传播相关论文
3.学习了解DynamoRIO
July.8.2009 1.熟悉PE文件加载过程(目前完成参数传递和函数调用)
2.阅读污染点传播相关论文
3.学习了解DynamoRIO
4.准备静态分析讲座
Personal tools
Namespaces
Variants
Actions
Navigation
Upload file
Toolbox