[论文解读] A Proof Carrying Code Framework for Inlined Reference Monitors in Java Bytecode
本文提出了一种证明携带代码(PCC)框架,用于在Java字节码中认证内联引用监控器,从而在不修改可信计算基(TCB)的情况下实现对监控器内联的信任。该框架使用JML风格的注解表示一个“幽灵”监控器,通过验证条件将其与内联监控器进行比较,确保通过高效、多项式时间的检查实现策略合规性,并在加载时支持轻量级证明验证。
We propose a light-weight approach for certification of monitor inlining for sequential Java bytecode using proof-carrying code. The goal is to enable the use of monitoring for quality assurance at development time, while minimizing the need for post-shipping code rewrites as well as changes to the end-host TCB. Standard automaton-based security policies express constraints on allowed API call/return sequences. Proofs are represented as JML-style program annotations. This is adequate in our case as all proofs generated in our framework are recognized in time polynomial in the size of the program. Policy adherence is proved by comparing the transitions of an inlined monitor with those of a trusted "ghost" monitor represented using JML-style annotations. At time of receiving a program with proof annotations, it is sufficient for the receiver to plug in its own trusted ghost monitor and check the resulting verification conditions, to verify that inlining has been performed correctly, of the correct policy. We have proved correctness of the approach at the Java bytecode level and formalized the proof of soundness in Coq. An implementation, including an application loader running on a mobile device, is available, and we conclude by giving benchmarks for two sample applications.
研究动机与目标
- 在不信任内联器或修改可信计算基(TCB)的前提下,实现第三方对Java应用程序中监控器内联的验证。
- 在移动和嵌入式Java环境(如J2ME)中支持依赖历史的访问控制策略,超越静态沙箱机制。
- 通过内联监控器和嵌入证明来最小化运行时开销和代码膨胀,同时通过形式化验证确保正确性。
- 设计一种轻量、可扩展的认证机制,能够以最小改动适配新的JVM版本。
提出的方法
- 将预期的安全策略表示为ConSpec中的契约,使用JML风格注解将其编译为一个‘幽灵’监控器,该监控器通过模拟状态转换而无需执行。
- 将监控逻辑编织到客户端代码中,作为内联的字节码片段,同时保留控制流和与安全相关的函数调用。
- 通过在与安全相关的函数调用处断言监控器不变量来生成证明对象,仅对内联代码片段使用最弱前置条件(WP),而非整个程序。
- 对非内联指令使用语法检查——具体为检查对一个最终的、静态的安全状态类的putstatic操作——以在不进行完整WP计算的情况下验证不变量。
- 通过轻量级VC检查器,在加载时通过比较内联监控器与幽灵监控器的行为来验证证明的正确性,使用验证条件(VC)进行检查。
- 在Coq中形式化证明该方法的正确性,并使用CUP/JFlex和ASM实现字节码操作的原型系统。
实验结果
研究问题
- RQ1证明携带代码能否有效应用于认证Java字节码中的监控器内联,确保内联监控器强制执行预期的安全策略?
- RQ2如何使证明生成与检查足够高效,以适用于移动和嵌入式环境,尤其是面对复杂策略时?
- RQ3该框架能否支持向后兼容性,使得PCC感知的代码可在非PCC主机上无需修改直接运行?
- RQ4该方法在真实世界应用中能多大程度上实现可扩展性,同时保持最小的性能和代码大小开销?
- RQ5如何扩展该框架以支持多线程执行,同时在并发访问下保持证明的有效性?
主要发现
- 该框架成功通过多项式时间验证条件认证了监控器内联,实现了加载时的高效证明检查。
- 证明体积小——MobileJam为20.6 KB,Snake为2.6 KB,适合移动设备部署。
- 在移动设备上,证明识别时间分别为98ms和117ms,表明运行时开销极低。
- 该方法实现了正确性,如在Coq中证明的那样,确保任何被接受的证明都保证策略合规。
- 通过依赖对静态字段更新的语法检查,避免了对大多数指令进行昂贵的最弱前置条件计算。
- 该框架支持向后兼容性:PCC感知的代码可在非PCC主机上无需修改直接运行。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。