利用事件循环轮次粒度的 JavaScript 签名改进网页内容拦截
密码学与安全
2020-05-26 v1
摘要
内容拦截是构建高性能、以用户为中心且尊重隐私的网页的重要组成部分。大多数内容拦截器基于 URL 构建信任标签。虽然这种方法很有用,但其存在众所周知的缺点。攻击者可以通过更改 URL 或域名、将恶意代码与良性代码捆绑在一起,或在页面中内联代码来逃避检测。现有方法的共同缺陷在于,它们是基于代码的交付机制而非其行为来评估代码。在这项工作中,我们通过一个系统来解决这个问题,该系统为已执行 JavaScript 的隐私和安全相关行为生成签名。我们的系统会考虑 JavaScript 事件循环每个轮次中的脚本行为。专注于事件循环轮次使我们能够构建对代码混淆、代码捆绑、URL 修改和其他常见规避手段具有鲁棒性的签名,并能处理 Web 应用程序的独特方面。这项工作对改进内容拦截做出了以下贡献:首先,通过插桩 Blink 和 V8 运行时,实现了一个新颖的系统来构建 JavaScript 代码的每事件循环轮次签名。其次,我们应用这些签名来衡量过滤列表规避情况,以 EasyList 和 EasyPrivacy 作为真实基准,寻找行为完全相同的其他代码。我们从被过滤列表拦截的 11,212 个唯一脚本中构建了约 200 万个隐私和安全行为签名,并发现了另外 3,589 个包含相同有害代码的唯一脚本,影响了所测量网站的 12.48%。第三,我们对常见的过滤列表规避技术进行了分类。最后,我们提出了防御措施:在可能的情况下添加过滤列表规则,并在其他情况下提出一个基于签名的系统。我们分享了签名生成系统的实现、将该系统应用于 Alexa 前 10 万网站的数据集,以及 586 条兼容 AdBlock Plus 的过滤列表规则,用于拦截那些被移至新 URL 的当前已拦截代码的实例。
引用
@article{arxiv.2005.11910,
title = {Improving Web Content Blocking With Event-Loop-Turn Granularity JavaScript Signatures},
author = {Quan Chen and Peter Snyder and Ben Livshits and Alexandros Kapravelos},
journal= {arXiv preprint arXiv:2005.11910},
year = {2020}
}