《COIN Attack (ASPLOS‘20)》笔记

源码分析请见这里

COIN Attack使用的安全策略

堆信息泄露检查

Pattern

  • 私密数据和非私密数据放在同一个数据结构,被无意地一并带出Enclave。
  • 循环退出条件由Enclave外部数据控制,循环中参数传到OCALL。(如违背程序预期多执行n轮循环将私密数据带出Enclave)

安检策略

  1. 查找循环条件包含无约束符号变量的无限循环
  2. 检查循环条件是否符号化
  3. 分析循环中包含的OCALL
  4. 识别OCALL参数中的内存指针
  5. 若指针指向Enclave堆且指针在循环中可被修改,则认为存在堆信息泄露

漏洞案例
在这里插入图片描述

栈信息泄露

Pattern

  • Enclave栈内存被越界(通常通过memcpy)拷贝(越界读)到Enclave堆。堆内存后续经常通过Enclave接口被带出,从而导致栈信息泄露。

安检策略

  1. memcpy的长度是否符号化的(攻击者控制的)
  2. memcpy源地址是否指向栈
  3. memcpy目的地址是否指向堆

漏洞案例
在这里插入图片描述

Ineffectual condition

Pattern

  • 如果攻击者能控制判断条件,那么这就是个无效条件。

安检策略

  1. 条件判断所有等式两边均为符号变量或一边为符号变量且另一边为常数。
  2. 条件判断后紧跟(不超过五条指令)直接控制转移指令。

漏洞案例
在这里插入图片描述

Use-after-free

Pattern

  • 已释放内存被使用。在多线程调用ECALL情况下更容易触发。

安检策略

  1. 多线程下,每个线程Free内存后需要相较其它线程延迟10个指令执行,实现Memory-reuse Delay。
  2. 检查内存解引用目标地址,若其未分配或已释放,则认为存在UAF

漏洞案例
在这里插入图片描述

Double-free

Pattern

  • 同一块内存被连续多次释放

安检策略

  1. 拦截free函数检查被释放的内存(无法在堆表中查阅到有效记录)再次被释放。

漏洞案例
在这里插入图片描述

栈溢出

安检策略

  1. 利用编译器对程序代码插桩__stack_chk_fail(若Stack Canary被破坏,会触发__stack_chk_fail
  2. 通过计算路径约束基于符号执行触发__stack_chk_fail,则存在栈溢出

漏洞案例
在这里插入图片描述

堆溢出

安检策略

  1. 堆分配时存储堆对象边界信息
  2. 拦截内存写操作/函数(memcpy、memset)
  3. 根据堆对象边界信息,检查内存写操作是否越界(比较length)

漏洞案例
在这里插入图片描述

Null指针解引用

安检策略

  1. 使用符号引擎查询内存访问地址(如memcpy目标地址)是否为Null。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值