软件安全分析与应用第9章软件漏洞挖掘与分析读书笔记。

  • 软件漏洞挖掘与分析
    • 基础知识
      • 典型漏洞类型
        • 溢出(堆、栈、整数)
        • 重用(use after free)
        • web漏洞(sql、xss)
      • 漏洞利用
      • 漏洞防护
    • 软件漏洞机理分析
      • 脆弱点分析
      • 路径分析
      • 内存分布分析
      • 分析实例
    • 软件漏洞利用
      • 攻击链构造
      • 攻击路径出发
      • 保护机制绕过

基础

利用漏洞可以进行:

  • 执行代码
  • 信息窃取
  • 权限提升
  • 拒绝服务
  • 认证绕过

典型漏洞类型

  • 栈溢出
  • 堆溢出
  • 重用(use after free)
  • 整数溢出
  • 其他(sql、xss)

漏洞利用技术

内存喷射技术的代表技术是堆喷射技术(heap spray),主要用于攻击IE、Firefox浏览器等常用软件。传统堆喷射技术的关键在于,在内存中申请大量的具有固定大小的对象,在其中填入相同内容,每一个对象中间都含有若干NOP指令序列和攻击代码,这样使得进程的地址空间被大量的注入代码所占据。在程序的控制流被劫持时,大量的包含攻击代码的碎片能够提高EIP转移达到目标的概率,碎片中的NOP指令形成指令缓冲区,使得EIP转移目标仅需要在一定的误差范围内,即可引发攻击代码的执行。

  • NOP:空指令
  • EIP:寄存器,存储cpu要读取的地址

ROP(Return-Oriented Programming),是指攻击者从已有的库或者可执行文件中提取指令片段,构建攻击代码。

基于内存地址信息泄漏构造利用,由于DEP和ASLR的同时使用,使得攻击者即使能够找到ROP代码片段,也很难在内存中关联起来。对此有两种方法解决:

  • 寻找未随机化的模块
  • 针对全部模块都被随机化的情况,利用程序在运行时泄漏的信息来构造 ROP

漏洞防护

针对软件漏洞的形成机理和利用方法,研究人员也提出了与之对应的防护方法,主要包括针对栈溢出的 Stack Cookie,针对堆溢出的 SAFE 堆释放操作,针对控制流劫持攻击的数据区执行保护(Data Execution Protection, DEP)和地址随机化(Address Space Layout Randomization, ASLR)等机制。
Stack Cookie在堆栈中保存一个cookie值,如果堆栈溢出该数据被覆盖则停止执行。
DEP面对的主要目标是缓冲区溢出,缓冲区溢出攻击需要在数据段写可执行的攻击代码,然后劫持控制流转移到攻击代码。具体实现方法是将数据段代码标记为不可执行代码。
ASLR也是针对缓冲区溢出的保护措施,通过堆、栈、动态库等布局的随机化,增加攻击者的攻击难度。主要对以下4类地址进行随机化:

  • 堆地址
  • 栈基址
  • PE文件映像基址
  • 进程环境块

机理分析

路径分析

  • 基于污点传播的路径指令序列提取
  • 基于符号执行的路径条件提取

内存布局分析

  • 输入数据直接映射
  • 输入数据可逆计算后映射

使用经过修改的污点传播算法可以进行数据映射的分析.

漏洞利用

漏洞利用有:

  • 攻击链构建
  • 攻击路径触发
  • 保护机制绕过

攻击链构建

攻击链构建的目标是在内存中找到能够放置控制流转移代码的空间,在放入控制流代码转移后,使得被劫持的控制流能够顺利转移到 ShellCode.
常见的跳板指令有:

  • call/jmp register
  • calljmp [register+offset]
  • 连续指令序列

攻击路径触发

攻击路径触发是漏洞利用中较为重要的一环,最终利用的生成是通过重构输入的方式实现的,其目标是通过构造输入数据,使程序能够执行到控制流劫持点。

保护机制绕过

操作系统使用了数据执行保护、堆栈 cookie、ASLR 等技术对可能发生的漏洞攻击进行保护。所以攻击者需要对此类保护机制进行绕过,常用的方法有:

  • pop+jmp 间接控制 EIP
  • 调用 API 关闭 DEP
  • JIT Spraying