Designing and implementing secure software is inarguably more important than ever. However, despite years of research into privilege separating programs, it remains difficult to actually do so and such efforts can take years of labor-intensive engineering to reach fruition. At the same time, new intra-process isolation primitives make strong data isolation and privilege separation more attractive from a performance perspective. Yet, substituting intra-process security boundaries for time-tested process boundaries opens the door to subtle but devastating privilege leaks. In this work, we present Polytope, a language extension to C++ that aims to make efficient privilege separation accessible to a wider audience of developers. Polytope defines a policy language encoded as C++11 attributes that separate code and data into distinct program partitions. A modified Clang front-end embeds source-level policy as metadata nodes in the LLVM IR. An LLVM pass interprets embedded policy and instruments an IR with code to enforce the source-level policy using Intel MPK. A run-time support library manages partitions, protection keys, dynamic memory operations, and indirect call target privileges. An evaluation demonstrates that Polytope provides equivalent protection to prior systems with a low annotation burden and comparable performance overhead. Polytope also renders privilege leaks that contradict intended policy impossible to express.
翻译:设计和实施安全软件比以往任何时候更加重要。 然而,尽管对特权分离程序进行了多年的研究,但实际上仍然很难做到,而且这种努力可能需要多年的劳动密集型工程才能取得成果。 同时,新的工艺内孤立原始使得强大的数据隔离和特权分离从性能角度更加吸引。然而,用经过时间测试的过程界限取代工艺内安全界限,打开了隐蔽但破坏性的特权泄漏的大门。在这项工作中,我们介绍了“聚合”这一C+++的扩展语言,目的是让更多的开发者能够接触到高效的特权分离。多功能将一种政策语言编码为C++11属性,将不同的代码和数据分别纳入不同的程序分区。经过修改的克隆前端将源级政策嵌入LLLVM IR的元节点。LLLVM通路解释了内嵌入的政策和工具,而IR有使用 Intel MPK执行源一级政策的代码。一个运行时支持图书馆管理分区、保护键、动态记忆操作和间接调用目标特权。一项评估表明,聚合式的顶端政策也提供了类似于前系统。