狠狠撸

狠狠撸Share a Scribd company logo
自动化漏洞利用关键技术研究
之自动化生成ROP链
赛宁网安 刘跃
WHO AM I
刘跃:赛宁网安攻防实验室负责人
曾致力于二进制漏洞相关研究
目录
一、符号执行及其应用案例
二、自动化ROP实现
符号执行及其应用
一、符号执行是什么?
栗子:
pop rdi; ret
[1] Schwartz E J, Avgerinos T, Brumley D. All You Ever Wanted to Know about Dynamic Taint Analysis and Forward
Symbolic Execution (but Might Have Been Afraid to Ask) [C]// Security & Privacy. DBLP, 2010:317-331.
[2] Cadar C, Sen K. Symbolic execution for software testing: three decades later[M]. ACM, 2013》
[3] https://zhuanlan.zhihu.com/p/26927127
Symbolic Execution Instruction: pop rdi; ret | 5fc3
----output----
rip <- { | [0:64]->M64(rsp+8) | }
rsp <- { | [0:64]->(rsp+0x10) | }
rdi <- { | [0:64]->M64(rsp) | }
Examplehttps://github.com/enzet/symbolic-execution
成功的符号执行系列项目
Z3求解器(https://github.com/Z3Prover/z3)star:2667
微软出品:有人维护
CTF塞棍常用它解密码学、逆向题:如CSAW 2017 realism
z3str1/2/3 https://sites.google.com/site/z3strsolver/
In [1]: from z3 import *
In [2]: a, b = BitVecs('a b', 32)
In [3]: s = Solver()
In [4]: s.add((a + b) == 1337)
In [5]: s.check()
Out[5]: sat
In [6]: s.model()
Out[6]: [b = 0, a = 1337]
成功的符号执行系列项目
Angr(https://github.com/angr/angr)star:2093
UC Santa Barbara : Fish等
- 逆向
- 漏洞挖掘(AI)
- 漏洞利用
- https://docs.angr.io/docs/examples.html
成功的符号执行系列项目
(https://github.com/klee/klee)star:685
Stanford大学:Cristian Cadar等人
- 需要源码
- 历史悠久
- 如S2E、Cloud9等众多项目的核心
成功的符号执行系列项目
CMU系列:
BAP: https://github.com/BinaryAnalysisPlatform/bap/ star:530
Mayhem Unleashing MAYHEM on Binary Code,未开源
MergePoint Enhancing Symbolic Execution with Veritesting 未开源
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
Pwntools/binjitsu(https://github.com/Gallopsled/pwntools )star:3391
- 漏洞利用(Pwn)神器
- CTF-writeup: https://github.com/Gallopsled/pwntools-write-ups
- 自有ROP模块,支持32/64 x86。
- 文档:https://docs.pwntools.com/en/stable/
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
Google Summer of Code(简称GSoC)
- 2005-2017
- 开源组织、GSoC项目、Mentor、Student
- 质量高,还有回馈5000/3600刀
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
Google Summer of Code
- 前一年12月开始跟踪
- 申请( Proposal )
- 开始编码(Coding)
- 评估( Evaluation)期中/期末
* 注意一个开源组织,可能N个Idea,但Google一般只
会给1-2个位置(slots)
回顾ROP
$./checksec.sh --file /usr/sbin/smbd
RELRO STACK CANARY NX PIE FILE
Full RELRO Canary found NX enabled PIE enabled /usr/sbin/smbd
? 漏洞利用与其对抗技术
回顾ROP
1972
栈溢出
1997
ret2libc
2007
ROP
数据执行保护W ⊕ X:
? NX(Linux)
? DEP(Windows)
对抗技术:
? ret-to-libc
? ROP(Return-
Oriented
Programming)
? JOP等
? 数据执行保护
回顾ROP
? ROP链生成
1. 手工构造,见图
2. 自动查找Gadget:
ROPGadget,rop-tools
3. 自动组合Gadget:
? ROPC:设计目标即不
用于实际
? Q:商业化不易上手
? Pwntools的ROP模块
? Ropper
(https://github.co
m/sashs/Ropper)
回顾ROP
? ROP链生成
1. 手工构造,见图
2. 自动查找Gadget:
ROPGadget,rop-tools
3. 自动组合Gadget:
? ROPC:设计目标即不
用于实际
? Q:商业化不易上手
? Pwntools的ROP模块
? Ropper
(https://github.co
m/sashs/Ropper)
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 技术原理与关键难点
技术原理:
– 提取可用Gadget
– 利用符号执行技术对Gadget语义进行分析
– 将所有Gadget之间的寄存器传递关系,以DAG图的形式表示
– 对某个寄存器的赋值,可通过图遍历实现(esp ? eax)
– 对原始状态的计算,可通过符号执行反向求解(eax=1, esp=?)
关键点:
1.自动提取Gadget
2.自动分析Gadget
3.自动组合Gadget
4.多架构与多OS支持
5.便捷的用户接口
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 自动分析Gadget
1. 模拟器vs.符号执行
? 符号执行优点,精确、可求解。
2. 是否基于中间语言(IR)
? 不使用中间语言,性能好,精确度损失少
3. 如何分类处理
? 寄存器传递型、算术运算型、读内存、写内存、无操作、未定义
>>> pop rdi; ret
rdi <- { | [0:64]->M64(rsp) | }
rsp <- { | [0:64]->(rsp+0x10) | }
rip <- { | [0:64]->M64(rsp+8) | }
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 自动分析Gadget
1. 模拟器vs.符号执行
? 符号执行优点,精确、可求解。
2. 是否基于中间语言(IR)
? 不使用中间语言,性能好,精确度损失少
3. 如何分类处理
? 寄存器传递型、算术运算型、读内存、写内存、无操作、未定义
AMOCO
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 二进制分析平台
? BARF https://github.com/programa-stic/barf-project
? Insight https://insight.labri.fr/trac/wiki
? Amoco https://github.com/bdcht/amoco
? Jakstab https://github.com/jkinder/jakstab
? SEA https://github.com/neuromancer/SEA
? Mcsema https://github.com/trailofbits/mcsema
? Libbeauty https://github.com/jcdutton/libbeauty
? Angr http://angr.io/
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 自动分析Gadget
1. 模拟器vs.符号执行
? 符号执行优点,精确、可求解。
2. 是否基于中间语言(IR)
? 不使用中间语言,性能好,精确度损失少
3. 如何分类处理
? 寄存器传递型、算术运算型、读内存、写内存、无操作、未定义
Move Register : mov eax, edx ; ret
Arithmetic : add ebx, esi ; ret
Load Memory : pop rbp ; ret
Store Memory : mov dword ptr [rdx], rax; ret
Do nothing : nop
Undefined : 其它类型
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 自动组合Gadget
1. 描述汇编指令关系
? DAG-有向无环图
2. 确定指令执行顺序
? 拓扑排序
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 自动组合Gadget
1. 描述汇编指令关系
? DAG-有向无环图
2. 确定指令执行顺序
? 拓扑排序
设置{eax:0x1111, ebx:0x2222}
正确的组合 错误的组合
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 程序优化:
? 多进程并发执行优化
? DAG图生成优化
? 算法优化
? Gadget搜索
? 语义分析算法
? 求解算法
? setRegisters算法
? 多架构支持
? i386 -- 支持
? AMD64 -- 支持
? ARM -- 支持
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
? 自动化程度测试
1. 初级测试
? pop rdi; ret
2. 中级测试
? pop eax; ret
? mov ebx, eax; ret
3. 高级测试
? 对jmp和call类型的
Gadget的处理能力
4. 同源情况处理
? mov eax, [esp]; pop ebx;
ret
5. 栈迁移测试
? pop ebp; ret;
? leave; ret
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目
性能评估
整体效率评估
以Armpwn为例
? 编码量:少80%ROP部分代码
? 少了图中整个函数
? 手工分析耗时:30分钟左右
? 自动化后耗时:3-5秒左右
https://github.com/saelo/armpwn
基于笔飞苍迟辞辞濒蝉的自动化搁翱笔项目

More Related Content

自动化漏洞利用关键技术研究(Automatic Vulnerability Exploitation Technologies)

Editor's Notes

  • #2: 今天我的议题是自动化漏洞利用关键技术研究中的一小部分,如何自动化生成搁翱笔链,议题对大部分非二进制方向的同学,可能会相当枯燥。为什么不讲自动化漏洞利用,完全的漏洞利用过程的自动化,几乎是不可能的,只能把某些工作相对重复性较高、体力劳动工作,进行自动化,从而辅助人工更有效率的完成漏洞利用的过程。
  • #3: 简单自我介绍,我是刘跃,清华大学网络空间研究院硕士、前蓝莲花战队成员,目前是赛宁网安攻防实验室负责人,致力于二进制漏洞相关技术研究工作。
  • #5: 约束求解的解释:假如你是一个妹纸,你想在婚后要一个颜值逆天、聪明绝顶、又听话乖巧的小孩,那你需要找到一个什么的男朋友,来实现这个愿望。
  • #8: Angr的开发者,是来自加州大学圣巴拉分校的shellphish战队,开发者的主要成员之一,曾前蓝莲花战队的成员王若愚,曾在一个DEFCON赛事中,包揽了整个战队近乎一半的分数。 今年的XCTF2017决赛中,AI辅助人工进行漏洞挖掘。 Angr可直接分析二进制程序。
  • #11: 笔飞苍迟辞辞濒蝉做了很多工作,重点是颈辞封装、贰尝贵解析、汇编反汇编、蝉丑别濒濒肠辞诲别生成、以及其他的一些语法糖。
  • #12: 看到这些,一定会想,我也想申请GSoC,但总感觉有一些不足,比如: 自己的英文不够好,能看懂能和老外交流吗?(难道学会说话一定专八吗?) 我没什么公司的实习经验,他们会要我吗?(不要把GSoC和实习划等号) 我编程能力好像不够强啊,要是做不下来怎么办?(其实外国的申请学生也不一定个个牛逼,每年都有做不出来的学生,还有学生因为无法完成干脆直接消失掉,害得导师和社区到处找人。所以为了避免学生担心难度,每个项目都配备了在选定课题上最权威的开发者作为导师,其中很多不乏国外大学中的猛禽级教授) 我好像对这个软件都不熟悉,或者还不算精通,我担心我不能开发好这个功能(不是申请下来就立马开始编码,你有充足的时间去学习,而有些课题根本不需要太多的整体使用经验,例如Blender2011年由中国学生完成的课题是软件国际化模块开发) 进这些项目相关网站还要翻墙啊?还要学iRC啊?还要学写邮件啊?(翻墙都不会,你学编程是靠百*的啊?)
  • #13: 1.贡献代码,无论什么社区,都喜欢高质量的 PR 2.Review PR,给别人的 Review 点赞 3.提交 Bug 4.添补更新文档 5.在 IRC 里解决别人的问题 申请的重点是“实现”部分,基本上自己已经实现一个demo版了 开始编码,注意时间安排,以及与导师的沟通 注意事项与 Tips 只有学生才可以申请 GSoC。 一般来说 GSoC 主页需要科学上网才能访问。 时差问题是申请的时候需要注意的问题,这个需要格外注意,每年都有人错过申请。 奖金的发放是通过?Payoneer?发放的,如果是非美元账户,需要支付 4% 左右的换汇费用。 第一次入选 Mentoring organizations 的组织原则上只有 1 个或者 2 个 slots。
  • #14: 漏洞利用与其对抗技术,是在一个长期的攻防对抗过程中,不断演化的。我们首先来关注,如今主流的防护机制。 需要重要关注的是cancary/nx/pie三种编译相关的机制,和ASLR这一种系统支持的保护机制。