Group of Software Security In Progress

Detecting Filter List Evasion With Event-Loop-Turn Granularity JavaScript Signature

作者: Quan Chen^1^, Peter Snyder^2^, RBen Livshits^2^, Alexandros Kapravelos^1^

单位: ^1^ North Carolina State University(北卡罗莱纳州立大学), ^2^Brave Software

会议: IEEE S&P 2021

链接: Detecting Filter List Evasion With Event-Loop-Turn Granularity JavaScript Signature

内容过滤器一般使用源的URLs来对恶意资源进行辨识,然而攻击者可以通过改变URLs或域、将代码与良性代码捆绑或内联页面代码来避免被检测。在本篇论文中,作者通过构建一个系统,该系统可以为JS代码生成与隐私和安全行为的签名,来对恶意资源进行标识。

Background

目前,内容拦截器一般都是基于URLs或者资源的域名,这非常容易被攻击者绕过:如改变恶意代码的URLs(不断变化URLs或直接将恶意脚本拷贝在页面上)、内联代码(使用script),与良性代码捆绑(combined.min.js)等。 作者认为产生问题的根本原因在于,拦截工具混淆了想要阻止的内容(code)和阻止的方式(URL),而攻击者也正是利用了这点——url容易更改,但是业务逻辑难以更改,展开了攻击。

Methodology

在本篇论文中,作者构建了一个系统,该系统能够为JS代码中与隐私和安全有关的行为做签名。

难点

  1. 如何及时捕获JS代码的运行时行为?如img标签可以设置src属性,script中innerHTML函数对页面的修改。
  2. 如何定位带来变化的原始代码?web编程模型,以及JS优化,使得定位带来变化的原始代码较难。
  3. 如何定位需要被签名的JS代码?

生成签名

  1. JavaScript Behavior Attribution 作者使用了扩展的PageGraph技术,PageGraph能够将“对页面修改/渲染的脚本->页面的变化”表示为一个有向图,这张图能够准确地将DOM修改和对Web API访问归为负责的JS代码单元。在PageGraph中,节点表示网站环境中的元素(例如,DOM节点、JavaScript单元、获取的资源等),边表示页面元素之间的交互(例如script->node,img->网络资源)。

img

  1. Enumerating Deterministic Script Behaviors 选取会以确定性顺序发生的事件(DOM修改和JavaScript api的调用),排除每次执行时不会顺序发生的事件(网络请求和响应,计时器事件,跨窗口的动作)。 img

  2. Extracting Event-Loop Signatures 使用PageGraph和确定性行为的枚举,确定每个JS单元在每个event loop的行为。为了提高效率,作者只对涉及到隐私与安全的行为(存储事件、网络事件)进行签名。 img img

算法如下: - 提取图中代表影响隐私和安全行为的边 - 将导致这些边出现的代码标记出来,如果这些边不再出现,则停止 - 提取出与这些边和节点相关的最大子图 - 重复第三步直到没有边加入

最后,删除掉非确定性行为的边,并为子图计算hash值。

隐私行为的ground truth

作者使用了EasyList和EasyPrivacy作为破坏隐私行为的ground truth。

确定Privacy-Harming签名

作者爬取了Alexa 100K的网站,将提取event-loop签名算法和ground truth结合在一起,生成损害隐私的JS行为签名。

RESULTS

  1. 88,035个域成功响应,并生成了87,941张PageGraph。 img

  2. 作者发现了3,091个脚本,它们会损害用户隐私,但是因为URLs绕过成功绕过了检查。 img

  3. 10973/87941个域名包含至少一个已知的对隐私或安全有害的行为,这些行为没有因为过滤列表规避而被屏蔽。 img

  4. 域名跟踪脚本往往占据出现在Alexa排名中间的网站里,某个网站的跟踪脚本往往出现在排名在这个网站之前和之后的网站中。

EVASION TAXONOMY

作者对绕过的方法进行了讨论。

img

  • Moving:将代码复制到一个新的域,但保持代码路径不变
  • Inlining:script src=… 基于url的隐私工具没有机会阻止脚本的执行;由于不会被缓存,因此网站加载的速度也会变慢
  • Combining:难以阻止。
  • Included Library Finally:难以阻止。