今天介绍的论文WEBRR: A Forensic System for Replaying and Investigating Web-Based Attacks in The Modern Web是USENIX Security 2024的录用论文。在这篇论文中,作者提出了一种基于Chromium构建的web行为记录与重放(record-and-replay,RR)取证审计系统WebRR
。
记录与重放是针对web客户端侧攻击(例如XSS)进行取证的重要手段。但现有的相关工具通常只能在操作系统层面(进程、套接字、文件等)记录信息,针对现代的Web应用(使用HTML/CSS渲染,大量依赖Javascript执行)往往很难进行相关的记录与重放,而本文介绍的WebRR
系统,不仅能够对高度动态化的网站提供记录与重放功能,而且只会带来平均3.44%的运行时开销,可谓好用又高效。
WebRR
的核心思想之一,是将浏览器中执行的JavaScript分割为“JavaScript执行单元”(JS execution unit,JEU),便于确定性记录JavaScript执行流程(确定执行分支)。当脚本标签被插入页面时,WebRR
在Blink中添加的脚本控制器(ScriptController)会记录这一过程,以此将不同的脚本分割为脚本单元。WebRR
同时记录了回调函数和事件,例如setTimeout
或者setInterval
在调用时会生成回调函数单元记录,当DOM中发生事件时,记录参与这一事件的所有相关信息,将其组合为事件单元。所有的记录都通过修改Blink实现,同时WebRR
阻止JavaScript直接访问其为对象定义的属性,因此具有防篡改功能。最后,在DOM每个节点插入时,WebRR
会记录节点的信息,用于重放时DOM状态的维持。
WebRR
的重放可以分为DOM重放、JavaScript重放、事件重放三个不同阶段。对于不同的标签页,重放过程是独立的。下图展示了WebRR
重放操作的设计:
在重放的精确性方面,WebRR
通过重放之前记录的JEU,让网页中的JavaScript按照记录时的分支执行,得到和记录时相同的运行结果。同时,对于记录到回调函数单元和事件单元,WebRR
会在Blink内部创建相应的对象,当相同的调用或事件发生时,重放记录的信息,得到相同的运行结果。
异步函数会对重放过程造成很大的困难,WebRR
通过实现重放分发器保证可靠的记录复现,结果如下图所示,对于异步函数的重放调度细节可以参考原文。
作者选取了下列针对web客户端的攻击方法,用于评估WebRR
的取证效果:
-
钓鱼攻击 (Phish.)
-
[凭据窃取攻击]
-
https://www.volexity.com/blog/2017/11/06/oceanlotus-blossoms-mass-digital-surveillance-and-exploitation-of-asean-nations-the-media-human-rights-and-civil-society/
-
依赖于 XSS 的键盘记录器攻击 (KeyLogger)
-
点击劫持攻击 (Click. Jack.)
-
Drive-by 攻击 (通过网页获取系统控制权限,DriveBy)
-
StealthyPush
-
两种利用 Service Worker 的攻击
-
StealthyPush
-
XXS-SW
作者在Windows、Linux和Android三个平台上利用WebRR
对相关的攻击进行记录重放,相关记录参数和重放结果如下表所示,WebRR
在三个平台上都能很好地记录和重放所有的攻击(WebRR
基于Chromium,能够在日常访问中跨平台使用)。
同时,作者从多方面对比了WebRR
和现有工具的差异,展示WebRR
能更好的胜任web攻击取证任务,而且运行时开销只有3.44%,且所记录的日志大小大概是每分钟17MB,完全可以在现代计算机上存储。
论文:https://www.usenix.org/conference/usenixsecurity24/presentation/allen
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2024-02-05 WebRR