Giter Site home page Giter Site logo

Comments (2)

xiaozzz avatar xiaozzz commented on July 16, 2024

本文首先和已经应用于工业上的CFI进行比较,CFI有粗粒度和细粒度两种,说明程序员需要在安全性和性能上做出trade off,但是本文所说的CPI提供了两者都很好的保障。

本文的threat model:

  1. 攻击者可以读写数据,读代码
  2. 攻击可不可以修改程序代码,影响程序加载

首先介绍技术CPS(Practical Protection)
内存分成了两部分,一部分是安全内存用来存放代码指针相关,包含一个safe heap和多个safe stack给各个线程;另一部分是普通内存,包含普通heap,多个普通stack和只读的代码。这两部分用硬件保证了隔离,只有需要操作代码指针的指令才能处理安全内存。
在CPS模式下,敏感指针被认为是代码指针,攻击者无法更改代码指针。

然后是本文的CPI(Guaranteed protection)
内存的组织结构和CPS是一样的,也分成安全内存和常规内存,但是安全内存保护的是敏感指针和元数据。
在CPI模式下,敏感指针被认为是代码指针和被用来处理敏感指针的指针,并保护这些敏感指针。保护的对象从所有的敏感指针扩展成内存bug产生的控制流攻击。对于敏感指针的保护,由CPS的隔离增加到了CPI的隔离+运行时检查。因此CPI对安全保障性能比CPS更高。对于普通数据的处理,由于指令级别的区域隔离,CPS和CPI都很快。

最后,CPI对于未修改的C/C++代码的overhead为8.4%-10.5%,CPS的overhead为0.5%-1.9%。

from rop-intro-and-foreland.

xiaozzz avatar xiaozzz commented on July 16, 2024

首先说明下CPI保护的敏感指针,只有敏感指针才会该改变控制流,为了降低开销,CPI保护的仅仅是这一部分指针。为了判断敏感指针,作者制定了敏感类型,所有敏感类型的指针都是敏感指针。敏感包含了指向函数指针,指向敏感类型指针,指向组合类型指针,泛型指针(void *)。这里符合Make it fast, rather than general or powerful.原则,原本的保护方式是保护所有指针,确实能保证程序流正确性,却需要116%的开销,而CPI和CPS仅仅保护敏感指针,大大降低了开销。

然后是CPI在x86-32和x86-64上的不同隔离实现。在x86-32上,使用硬件段保护,使用独立的段寄存器处理安全区域,保证了隔离性。在x86-64上,CPI基于以下事实,存储在常规区域的地址指针不会指向安全区域,选择其中一个寄存器存放安全区域的基地址就足够了。作者认为48位的地址空间足够使安全区域地址随机,以免被暴力破解,因为大多数错误的猜测会使程序崩溃,经常性的崩溃很容易被检测到程序被攻击了。这里符合Handle normal and worst cases separately原则,将常规区域和安全区域隔离。常规区域作为normal case,不需要额外开销;而安全区域作为worst case,只占了所有程序中很小一部分,需要单独做额外操作并且在运行时做检查,将其隔离既保证了速度又保证了安全性。

CPI对于安全栈做了特殊处理。因为安全栈会被经常调用,例如每个函数调用都会用到安全栈,为了降低开销和复杂性,安全栈特殊处理就很必要。这里基于了一个事实,大多数对栈上对象的安全性都可以在静态检查时检查出来,不需要动态运行时额外overhead。因此只有少部分需要创建额外栈上帧,保护了不被攻击。这里也符合Handle normal and worst cases separately原则,安全栈的特殊处理分离了能被静态检查出来的和不确定的只能动态检查的对象,只对动态检查的对象有额外开销。同时符合Use static analysis原则,静态能检查出的不需要运行时高开销,降低了整体开销。

TBD

from rop-intro-and-foreland.

Related Issues (4)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.