Skip to main content
QUICK REVIEW

[论文解读] Information Flow Control in WebKit's JavaScript Bytecode

Abhishek Bichhawat, Vineet Rajani|arXiv (Cornell University)|Jan 17, 2014
Security and Verification in Computing被引用 6
一句话总结

本文提出了一种针对 WebKit JavaScript 字节码的动态信息流控制(IFC)机制,通过追踪显式和隐式数据流,实现对不受信任代码的安全执行。该机制通过字节码级别插桩、形式化语义以及基于后支配分析和新型宽松升级检查的宽松污染传播机制,在平均 45% 的性能开销下实现了适度的性能损耗。

ABSTRACT

Websites today routinely combine JavaScript from multiple sources, both trusted and untrusted. Hence, JavaScript security is of paramount importance. A specific interesting problem is information flow control (IFC) for JavaScript. In this paper, we develop, formalize and implement a dynamic IFC mechanism for the JavaScript engine of a production Web browser (specifically, Safari's WebKit engine). Our IFC mechanism works at the level of JavaScript bytecode and hence leverages years of industrial effort on optimizing both the source to bytecode compiler and the bytecode interpreter. We track both explicit and implicit flows and observe only moderate overhead. Working with bytecode results in new challenges including the extensive use of unstructured control flow in bytecode (which complicates lowering of program context taints), unstructured exceptions (which complicate the matter further) and the need to make IFC analysis permissive. We explain how we address these challenges, formally model the JavaScript bytecode semantics and our instrumentation, prove the standard property of termination-insensitive non-interference, and present experimental results on an optimized prototype.

研究动机与目标

  • 为解决现代 Web 应用中第三方 JavaScript 代码带来的安全风险,特别是因信息流导致的机密性泄露问题。
  • 在真实世界的 JavaScript 引擎(WebKit)中实现一种实用、可投入生产的 IFC 解决方案,而非在自定义解释器或抽象语言中实现。
  • 克服字节码级别 IFC 的挑战,包括非结构化控制流、异常处理以及对宽松性的需求,且无需代码注解。
  • 形式化建模 WebKit 字节码语义,并证明经插桩系统的终止无关非干扰性。
  • 在真实世界基准测试中评估性能开销,并证明其在 Safari 等浏览器中部署的可行性。

提出的方法

  • 对 WebKit JavaScript 字节码解释器进行插桩,以在运行时动态追踪污染,同时保留原有优化机制。
  • 基于实际解释器代码(构建版本 r122160)的形式化定义 WebKit 147 条字节码指令集的语法与语义。
  • 通过运行时内过程静态分析即时后支配节点,限制过度污染,即使在非结构化控制流下也能提升宽松性。
  • 将后支配分析技术扩展以处理异常、break 和 continue 语句,且无需额外注解。
  • 实现一种针对字节码的宽松升级检查变体,以减少污染传播中的误报。
  • 通过稀疏标记优化污染追踪:仅在堆写入时传播污染,直到读取带有不同标签的堆值为止。

实验结果

研究问题

  • RQ1能否在生产级 JavaScript 引擎(如 WebKit)的字节码级别有效且高效地实现动态 IFC?
  • RQ2如何使 IFC 足够宽松,以处理包含非结构化控制流(如 break、continue、异常)的真实世界 JavaScript 代码,且无需代码注解?
  • RQ3字节码级别 IFC 在真实工作负载中会带来多大的性能开销?能否通过优化显著降低该开销?
  • RQ4是否能够形式化建模生产级字节码解释器并证明其非干扰安全性?
  • RQ5在启用 JIT 编译的情况下,WebKit 中 IFC 的性能与未插桩解释器相比如何?

主要发现

  • 在 SunSpider 基准测试套件中,原型在优化 IFC 下平均开销为 45%,在基础 IFC 下为 121%,标准差表明性能稳定。
  • 在微基准测试中,优化 IFC 变体通过仅在堆写入时传播污染,直到读取带标签的堆值为止,显著降低了污染追踪开销。
  • 在真实网站上的开销始终低于 42%,平均约为 29%,与网络和渲染时间相比可忽略不计。
  • 在宏基准测试中,JIT 优化配置的性能劣于基线,表明在此上下文中,JIT 对插桩代码的优化效果较差。
  • JSBench 评估显示,基础 IFC 和优化 IFC 的平均开销均约为 38%,标准差分别为 4.09% 和 5.04%。
  • 对 WebKit 字节码及其插桩形式化模型的证明表明,系统满足终止无关非干扰性,确保了在动态污染追踪下的机密性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。