Dota2被漏洞攻击

Dota2被漏洞攻击

概述

Dota2被攻击利用的漏洞是google V8的漏洞,V8 是 Google 的开源高性能 JavaScript 和 WebAssembly 引擎,用 C++ 编写。它用于 Chrome 和 Node.js 等。它实现ECMAScriptWebAssembly,并在 Windows 7 或更高版本、macOS 10.12+ 以及使用 x64、IA-32、ARM 或 MIPS 处理器的 Linux 系统上运行。V8 也可以独立运行,也可以嵌入到任何 C++ 应用程序中。

所以当我们想到V8漏洞时,会想到的可能与复杂的浏览器0day利用链有关。虽然浏览器可能是 V8 漏洞利用的最多的目标,但我们不应该忘记,这个开源 JavaScript 引擎还嵌入到浏览器以外的无数项目中。如果跨安全边界使用 JavaScript 引擎来执行潜在的不受信任的代码,就可能会出现安全问题。

其中一个问题影响了广受欢迎的Dota 2游戏。Dota 2使用的是2018年12 月编译的过时版本v8.dll。过时也表示,该版本容易受到一系列 CVE 的攻击,其中许多甚至是已公开EXP的已知漏洞。我们发现其中一个漏洞CVE-2021-38003在游戏中的四种自定义游戏模式中都可以触发。由于 V8 在 Dota 2中没有沙箱,因此该漏洞本身允许攻击其他 Dota 玩家,并远程执行代码

我们向 Dota 2 开发商Valve披露了我们发现的漏洞点。作为回应,Valve 于 1 月 12 日推送了 Dota 的更新,对老旧且存在漏洞的 V8 版本进行了升级。此更新立即生效,因为Dota必须保持最新状态才能让玩家参与在线游戏。Valve 还采取了额外的行动,取消了有问题的自定义游戏模式,通知受影响的玩家,并引入新的缓解措施来减少游戏的攻击面。

Dota2被漏洞攻击

1 月 12 日更新的Dota变更日志

背景
Dota 2 是一款 MOBA 游戏,最初于 2013 年 7 月 9 日发布。尽管已有近 10 年历史(如果算上最初的 Dota 1,可能有 20 年),但它仍然吸引着每月约 1500 万活跃玩家的庞大玩家群。与其他流行游戏一样,Dota 2是一个复杂的软件,由多个独立的组件组装而成。我们测试的目标组件是一个全景框架。这是 Valve 自己设计的一个框架,可以使用众所周知的 HTML、CSS 和 JavaScript 网络三元组进行用户界面开发。这里的 JavaScript 部分是有问题的,因为它是由存在漏洞的 V8 版本执行的。因此,恶意 JavaScript 可以利用 V8 漏洞并获得对受害者计算机的控制权。对于未经修改的游戏来说,这不会是一个问题,因为默认情况下,只有合法的 Valve 编写的脚本才会被执行。然而,Dota 对玩家社区的定制非常开放,这为攻击者试图向毫无戒心的受害者偷偷加载恶意 JavaScript 片段打开了大门。
Dota 2的定制可以采取多种形式:有定制的可穿戴游戏内物品、播音员包、加载屏幕、聊天表情符号等等。至关重要的是,还有自定义社区开发的游戏模式。这些本质上是全新的游戏,利用 Dota 强大的游戏引擎,任何有一点编程经验的人都可以实现他们的游戏想法。自定义游戏模式在 Dota 中发挥着重要作用,Valve 深知通过开发自定义游戏模式让玩家表达创造力的好处。毕竟,Dota 本身最初是《魔兽争霸 III:冰封王座》的游戏模式。这可能就是为什么可以在游戏中单击一下即可安装游戏模式的原因。因此,有数千种游戏模式可供选择,其中一些模式非常受欢迎。例如,《DOTA自走棋》的玩家数量超过1000万。
游戏模式必须在Steam 商店上发布后才能供普通玩家玩。发布过程包括由 Valve 执行的验证。虽然这可能会消除一些恶意游戏模式,但没有任何验证过程是完美的。正如我们稍后将展示的,至少有四种恶意游戏模式成功绕过验证。我们认为验证过程的存在主要是出于审核原因,以防止发布不当内容。在游戏模式中隐藏后门的方法有很多种,在验证过程中尝试检测所有后门将非常耗时。
自定义游戏模式的主要游戏逻辑是用Lua编码的。这是在游戏服务器上执行的,游戏服务器可以是主机玩家的机器,也可以是 Valve 拥有的专用服务器。对于客户端脚本编写,可以使用 Panorama 框架中的 JavaScript。这主要用于控制用户界面元素,例如记分板或任务状态栏。JavaScript 由 V8 引擎执行,并且完全支持许多高级功能,包括 WebAssembly 执行。此外,还有一个Dota 特定的 API可以提供额外的功能。特别有趣的是该$.AsyncWebRequest功能,它与eval,可能被用来在游戏模式中添加后门,以便它可以执行从互联网上下载的任意附加 JavaScript 代码。也许正是这种担忧导致该$.AsyncWebRequest功能被弃用并最终被完全删除。然而,有一些方法可以解决这个问题。例如,Web 请求可以由服务器端 Lua 代码发出,并使用游戏事件消息 API 将响应传递到客户端 JavaScript。
在野攻击发现
我们发现 Steam 商店上发布了四种恶意自定义游戏模式,全部由同一作者开发。第一个游戏模式(id 1556548695)特别有趣,因为从缺乏附加的实际有效payload来看,攻击者似乎只在该模式下测试了漏洞。有趣的是,攻击者还使用这种游戏模式来测试各种其他技术,留下注释掉的代码或未使用的函数。这为我们提供了了解攻击者思维过程的。

Dota2被漏洞攻击

攻击者测试漏洞的自定义游戏模式的 Steam 页面
从上面的截图可以看出,是攻击者对该游戏模式的安全测试,为其命名,test addon plz ignore甚至利用描述来敦促其他玩家不要下载该游戏模式。虽然这看起来像是善意的表达,但我们很快就会证明,在其他三种恶意游戏模式中,同一攻击者采取了完全相反的方法,并试图使恶意代码尽可能隐蔽。
此自定义游戏模式中的 JavaScript 漏洞可以在里面找到overthrow_scoreboard.vjs_c。这曾经是一个实现记分板功能的合法 JavaScript 文件,但攻击者用CVE-2021-38003 的漏洞替换了其内容。该漏洞最初是由 Google 研究人员 Clément Lecigne 和 Samuel Groß发现的零日漏洞,当时它被用于攻击完全修补的三星手机的漏洞利用链中。
此 CVE现在有公开的PoC和文章。然而,这些功能在攻击者上次更新游戏模式的 2022 年 3 月时不可用。这意味着他们必须自己开发大部分漏洞(即使当时有公开的 PoC,攻击者仍然需要掌握一些技术技能才能将其向后移植到 Dota 使用的过时的 V8 版本)。即便如此,该漏洞的核心还是在CVE 的Chromium 错误跟踪器条目中提供了。有一段代码可以触发该漏洞,从而泄露据称无法访问的TheHole 对象然后使用这个泄漏的对象来破坏地图的大小。攻击者获取此片段并将其粘贴到他们的漏洞中,在这个损坏的地图上构建了漏洞的其余部分。
Dota2被漏洞攻击
触发 CVE-2021-38003 泄漏对象的漏洞利用核心TheHole。请注意yay!最后的 – 这只是一种快乐的表达,它对于漏洞利用来说并不需要发挥作用。
有趣的是,该漏洞利用包含大量注释掉的代码和调试打印。这进一步表明攻击者必须付出大量努力来将该漏洞武器化。攻击者开发的攻击部分首先使用损坏的映射来损坏数组的长度,从而实现相对的读/写原语。然后,它破坏ArrayBuffer后备存储指针以获得任意读/写原语。没有任何addrof功能,因为通过将目标对象放置在距损坏数组的已知偏移处,然后使用相对读取原始地址,地址会泄漏。最后,在任意读/写到位后,该漏洞利用了众所周知的 WebAssembly 技巧执行自定义 shellcode。我们已经在本地针对 Dota 测试了整个漏洞,并确认其有效。
Dota2被漏洞攻击
从漏洞利用中获取的 JavaScript 片段。请注意调试打印、注释和注释掉的代码。
除了这个 JavaScript 漏洞之外,自定义游戏模式还包含另一个有趣的文件,其名称evil.lua。这是攻击者测试服务器端 Lua 执行能力的地方。请参阅下面的 Lua 代码片段,其中攻击者特别测试了以下内容:
  • 记录

  • 动态编译额外的Lua代码(loadstring)

  • 确定 Lua 解释器的确切版本

  • 执行任意系统命令 ( whoami)

  • 协同程序创建

  • 网络连接(HTTP GET 请求)

Dota2被漏洞攻击
摘自 的 Lua 片段evil.lua
不幸的是,我们无法访问此特定游戏模式的完整更新历史记录。因此,以前版本中的一些攻击的代码可能不再出现在我们分析的版本中。我们至少可以从变更日志中看到,该游戏模式有九次更新,全部发生在 2018 年 11 月或 2022 年 3 月。由于被利用的 JavaScript 漏洞直到 2021 年才被发现,因此我们假设该游戏模式最初是在作为合法游戏,恶意功能仅在 2022 年 3 月的更新中添加。
后门
在发现第一个恶意游戏模式后,我们当然想知道是否还有更多此类漏洞。由于攻击者没有向 Valve 报告该漏洞,我们发现他们很可能怀有恶意并试图更大规模地利用该漏洞。因此,我们开发了一个脚本,用于下载 Steam 商店上发布的所有自定义游戏模式的所有 JavaScript 文件。这产生了千兆字节的 JavaScript,我们可以查询可疑的代码模式。
没过多久,又发现了另外三种恶意游戏模式,而且都是同一作者(他也恰好是之前分析的test addon plz ignore游戏模式的作者)。这些游戏模式被命名为Overdog no annoying heroes(id 2776998052)、Custom Hero Brawl(id 2780728794)和Overthrow RTZ Edition X10 XP(id 2780559339)。有趣的是,同一作者还发布了第五种游戏模式,名为Brawl in Petah Tiqwa(id 1590547173),其中不包含任何恶意代码(令我们大吃一惊)。

Dota2被漏洞攻击

带有后门的自定义游戏模式的 Steam 展示页面
这三种新游戏模式中的恶意代码更加隐蔽。evil.lua源代码中没有直接可见的命名文件或任何 JavaScript 漏洞。相反,只有一个简单的后门,仅包含大约二十行代码。该后门可以执行通过 HTTP 下载的任意 JavaScript,使攻击者不仅能够隐藏漏洞利用代码,还能够自行更新,而无需更新整个自定义游戏模式(并经历有风险的游戏模式)验证过程)。
后门以 JavaScript 代码ClientReady向服务器发送自定义事件开始。这是向服务器发出信号,表明有一个新的受害者游戏客户端正在等待接收 JavaScript 有效负载。服务器上的 Lua 代码注册了该ClientReady事件的侦听器。当它收到此事件时,它会向其 C&C 服务器发出 HTTP GET 请求以获取 JavaScript 负载。此有效负载应出现在响应正文中,并在名为 的自定义事件中转发到客户端 JavaScript test。
Dota2被漏洞攻击
后门的Lua部分,在游戏服务器上执行。
当客户端 JavaScript 收到此test事件时,它会解开有效负载,动态地从中创建一个新函数,并立即执行它。从较高的层面来看,这显然只是一个简单的下载器,能够执行从 C&C 服务器下载的任意 JavaScript。客户端 JavaScript 和服务器端 Lua 代码的配合是必要的,因为 JavaScript 不再被允许直接访问互联网。
Dota2被漏洞攻击
后门的 JavaScript 部分,在游戏客户端上执行。
当我们发现这个后门时,C&C 服务器不再响应。即便如此,我们仍然可以自信地假设该后门旨在下载 CVE-2021-38003 的 JavaScript 漏洞。这是因为所有三种后门游戏模式都是由同一作者在其第一个恶意游戏模式中引入 JavaScript 漏洞后 10 天内更新的。然而,我们仍然不确定该漏洞是否附加了任何恶意 shellcode。毕竟,使用ngrok进行 C&C 有点不合常规,可能表明攻击者只测试了后门功能。无论如何,我们可以说这次攻击的规模并不是很大。据 Valve 称,不到 200 名玩家受到影响。
后续
在发现四种恶意游戏模式后,我们试图寻找更多攻击者信息,但未找到更多信息。因此,尚不清楚攻击者的最终意图是什么。然而,我们认为它们并不完全是纯粹的研究意图,主要有两个原因。首先,攻击者没有向 Valve 报告该漏洞。其次,攻击者试图将漏洞隐藏在隐秘的后门中,因为这样的攻击者可以说利用此漏洞造成更大的影响。
例如,恶意攻击者可能会尝试接管流行的自定义游戏模式。许多游戏模式都被最初的开发者所忽视,因此攻击者可以尝试一些简单的事情,例如承诺修复错误并继续免费开发。经过一定数量的合法更新后,攻击者可能会尝试潜入 JavaScript 后门。由于游戏模式会在后台自动更新,毫无戒心的受害者玩家不会有很多机会来保护自己。
或者,攻击者可以寻找其他方法来利用该漏洞,而无需涉及任何自定义游戏模式。例如,攻击者可能会尝试寻找单独的 XSS 漏洞与 V8 漏洞相链接。此类 XSS 漏洞可能允许攻击者在远程受害者的 Panorama 实例中执行任意 JavaScript。然后,V8 漏洞可用于突破 Panorama 框架。请注意,Panorama 在游戏的主菜单中也大量使用,因此根据 XSS 漏洞的性质,其影响范围可能与每月 1500 万玩家一样大。
在我们结束之前,我们要感谢 Valve 迅速处理我们的报告。我们希望他们今后继续更新V8,尽可能缩小补丁差距。Valve 还与我们分享了一些有关额外缓解措施的计划,我们将非常高兴看到这些计划付诸实践。由于潜在的影响,我们还建议对流行的自定义游戏的未来更新进行非常仔细的审查。
我们还可以欣赏 Valve 决定在 Steam 上发布自定义游戏模式的决定,尽管这可能会让他们肩上承担更多责任。最终,这对整体玩家的安全来说是一个积极的结果,因为 Valve 可以审核已发布的游戏模式并消除恶意游戏模式。许多其他游戏没有对自定义游戏的集成支持,因此玩家只能从随机的第三方网站下载模组,而这些网站通常会捆绑恶意软件。
 IoC信息
SHA-256
姓名
cca585b896017bd87038fd34a7f50a1e0f64b6d6767bcde66ea3f98d6dd4bfd0
overthrow_scoreboard.vjs_c
4fad709e74345c39a85ce5a2c7f3b71d755240d27dd46688fa3993298056cf39
evil.lua
3c00f15d233a3dd851d68ecb8c7de38b1abf59787643a2159c9d6a7454f9c3b7
overthrow_scoreboard.vjs_c
880a0722a5f47d950170c5f66550e1cdef60e4e84c0ce1014e2d6d7ad1b15c14
addon_game_mode.lua
85635bd92cc59354f48f8c39c6db7a5f93cabfb543e0bcc3ec9e600f228f2569
overthrow_scoreboard.vjs_c
44c79f185576e1ec7d0d7909eb7d4815cbf8348f37f62c0debd0d5056fb1100b
addon_game_mode.lua
4d3c6986b924108911709b95cb4c379720c323e6f7b3a069b866b76e0e3ec6b5
overthrow_scoreboard.vjs_c
4bb1d6dcb1e12c3e5997b8dc7fa3db45d44bade39cfcceab56f90134ca2d09f3
addon_game_mode.lua

原文始发于微信公众号(军机故阁):Dota2被漏洞攻击

版权声明:admin 发表于 2023年7月27日 下午7:46。
转载请注明:Dota2被漏洞攻击 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...