Plenty of in-process vulnerabilities are blamed on various out of bound memory accesses. Previous prevention methods are mainly based on software checking associated with performance overhead, while traditional hardware protection mechanisms only work for inter-process memory accesses. In this paper we propose a novel hardware based in-process isolation system called PULP (Protection by User Level Partition). PULP modifies processor core by associating program counter and virtual memory address to achieve in-process data isolation. PULP partitions the program into two distinct parts, one is reliable, called primary functions, and the other is unreliable, called secondary functions, the accessible memory range of which can be configured via APIs. PULP automatically checks the memory bound when executing load/store operations in secondary functions. A RISC-V based FPGA prototype is implementated and functional test shows that PULP can effectively prevent in-process bug, including the Heartbleed and other buffer overflow vulnerabilities, etc. The total runtime overhead of PULP is negligible, as there is no extra runtime overhead besides configuring the API. We run SPEC2006 to evaluate the average performance, considering the LIBC functions as secondary functions. Experimental timing results show that, running bzip2, mcf, and libquantum, PULP bears low runtime overhead (less than 0.1%). Analysis also shows that PULP can be used effectively to prevent the newest "Spectre" bug which threats nearly all out-of-order processors.
翻译:大量程序内脆弱性被归咎于各种外部内存访问。 先前的预防方法主要基于与性能管理相关的软件检查, 而传统的硬件保护机制则主要基于与性能管理相关的软件检查, 而传统的硬件保护机制只能用于进程间内内内存访问。 在本文件中, 我们提议了一个新的基于进程隔离系统的硬件, 名为 PULP( 由用户级别分割保护) 。 PULP 通过将程序反控和虚拟内存地址连接到程序内数据隔离处, 来修改处理器核心。 PULP 将程序分成两个不同的部分, 一个是可靠的, 称为主要功能, 而另一个则是不可靠的, 称为次要功能, 其可访问的内存范围只能通过 API 配置。 在二级功能中执行负载/ 存储操作时, PULPP 自动检查内存留内存。 以 RIC- V 原型 和功能测试显示 PLP 有效防止程序内存有误差和其他缓冲溢漏性溢漏性。 PULP 的总运行时间间接间接管理, 因为除了 APIPIPIPS 外没有额外的运行额外的管理器外, 我们运行时, 正在显示平均运行时, MILBLS 。