Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

311 views

Published on

Discuss the key technologies in doing automatic vulnerability exploitation

Published in: Software
  • Be the first to comment

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

  1. 1. 自动化漏洞利用关键技术研究 之自动化生成ROP链 赛宁网安 刘跃
  2. 2. WHO AM I 刘跃:赛宁网安攻防实验室负责人 曾致力于二进制漏洞相关研究
  3. 3. 目录 一、符号执行及其应用案例 二、自动化ROP实现
  4. 4. 符号执行及其应用 一、符号执行是什么? 栗子: 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) | }
  5. 5. Examplehttps://github.com/enzet/symbolic-execution
  6. 6. 成功的符号执行系列项目 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]
  7. 7. 成功的符号执行系列项目 Angr(https://github.com/angr/angr)star:2093 UC Santa Barbara : Fish等 - 逆向 - 漏洞挖掘(AI) - 漏洞利用 - https://docs.angr.io/docs/examples.html
  8. 8. 成功的符号执行系列项目 (https://github.com/klee/klee)star:685 Stanford大学:Cristian Cadar等人 - 需要源码 - 历史悠久 - 如S2E、Cloud9等众多项目的核心
  9. 9. 成功的符号执行系列项目 CMU系列: BAP: https://github.com/BinaryAnalysisPlatform/bap/ star:530 Mayhem Unleashing MAYHEM on Binary Code,未开源 MergePoint Enhancing Symbolic Execution with Veritesting 未开源
  10. 10. 基于Pwntools的自动化ROP项目 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/
  11. 11. 基于Pwntools的自动化ROP项目 Google Summer of Code(简称GSoC) - 2005-2017 - 开源组织、GSoC项目、Mentor、Student - 质量高,还有回馈5000/3600刀
  12. 12. 基于Pwntools的自动化ROP项目 Google Summer of Code - 前一年12月开始跟踪 - 申请( Proposal ) - 开始编码(Coding) - 评估( Evaluation)期中/期末 * 注意一个开源组织,可能N个Idea,但Google一般只 会给1-2个位置(slots)
  13. 13. 回顾ROP $./checksec.sh --file /usr/sbin/smbd RELRO STACK CANARY NX PIE FILE Full RELRO Canary found NX enabled PIE enabled /usr/sbin/smbd  漏洞利用与其对抗技术
  14. 14. 回顾ROP 1972 栈溢出 1997 ret2libc 2007 ROP 数据执行保护W ⊕ X: • NX(Linux) • DEP(Windows) 对抗技术: • ret-to-libc • ROP(Return- Oriented Programming) • JOP等  数据执行保护
  15. 15. 回顾ROP  ROP链生成 1. 手工构造,见图 2. 自动查找Gadget: ROPGadget,rop-tools 3. 自动组合Gadget: • ROPC:设计目标即不 用于实际 • Q:商业化不易上手 • Pwntools的ROP模块 • Ropper (https://github.co m/sashs/Ropper)
  16. 16. 回顾ROP  ROP链生成 1. 手工构造,见图 2. 自动查找Gadget: ROPGadget,rop-tools 3. 自动组合Gadget: • ROPC:设计目标即不 用于实际 • Q:商业化不易上手 • Pwntools的ROP模块 • Ropper (https://github.co m/sashs/Ropper)
  17. 17. 基于Pwntools的自动化ROP项目  技术原理与关键难点 技术原理: – 提取可用Gadget – 利用符号执行技术对Gadget语义进行分析 – 将所有Gadget之间的寄存器传递关系,以DAG图的形式表示 – 对某个寄存器的赋值,可通过图遍历实现(esp  eax) – 对原始状态的计算,可通过符号执行反向求解(eax=1, esp=?) 关键点: 1.自动提取Gadget 2.自动分析Gadget 3.自动组合Gadget 4.多架构与多OS支持 5.便捷的用户接口
  18. 18. 基于Pwntools的自动化ROP项目  自动分析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) | }
  19. 19. 基于Pwntools的自动化ROP项目  自动分析Gadget 1. 模拟器vs.符号执行 • 符号执行优点,精确、可求解。 2. 是否基于中间语言(IR) • 不使用中间语言,性能好,精确度损失少 3. 如何分类处理 • 寄存器传递型、算术运算型、读内存、写内存、无操作、未定义 AMOCO
  20. 20. 基于Pwntools的自动化ROP项目  二进制分析平台 • 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/
  21. 21. 基于Pwntools的自动化ROP项目  自动分析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 : 其它类型
  22. 22. 基于Pwntools的自动化ROP项目  自动组合Gadget 1. 描述汇编指令关系 • DAG-有向无环图 2. 确定指令执行顺序 • 拓扑排序
  23. 23. 基于Pwntools的自动化ROP项目  自动组合Gadget 1. 描述汇编指令关系 • DAG-有向无环图 2. 确定指令执行顺序 • 拓扑排序 设置{eax:0x1111, ebx:0x2222} 正确的组合 错误的组合
  24. 24. 基于Pwntools的自动化ROP项目  程序优化: • 多进程并发执行优化 • DAG图生成优化 • 算法优化  Gadget搜索  语义分析算法  求解算法  setRegisters算法  多架构支持 • i386 -- 支持 • AMD64 -- 支持 • ARM -- 支持
  25. 25. 基于Pwntools的自动化ROP项目  自动化程度测试 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
  26. 26. 基于Pwntools的自动化ROP项目 性能评估 整体效率评估 以Armpwn为例 • 编码量:少80%ROP部分代码  少了图中整个函数 • 手工分析耗时:30分钟左右 • 自动化后耗时:3-5秒左右 https://github.com/saelo/armpwn
  27. 27. 基于Pwntools的自动化ROP项目

×