浏览器劫持技术剖析:三种手法与防御认知
阅读时间:4分钟 (约1197字)
如果你正在寻找关于浏览器劫持工作原理的技术信息,可能只能找到一些通用的移除指南。让我们来改变这一状况。
在过去的几周里,我分析了大量的浏览器劫持程序,部分原因与TamperedChef/BaoLoader攻击活动有关。它们为实现浏览器劫持可能采用的各种操作方式引起了我的兴趣。但如果你搜索有关浏览器劫定如何工作的技术信息,除了针对受感染系统的通用移除说明外,似乎没有太多内容。这可能是一个知识缺口。我在这里记录几种技术。尽管本文绝非全面的概述,但它深入介绍了三种完全不同的浏览器劫持方法,对于任何分析此类威胁或为其创建检测规则的人都应该有所帮助。我还提出了一种新的恶意软件类型——BRAT(浏览器远程访问工具);更多内容见案例二。
案例一:当恶意软件与你的偏好不同时
实现浏览器劫持最直接的方法似乎是直接更改浏览器的偏好设置文件。例如,在Firefox中,这是 prefs.js 文件,它位于配置文件夹中。在Windows (10/11) 上,其路径为:%APPDATA%\Mozilla\Firefox\Profiles\<profilename>\prefs.js。在Chrome中,有两个名为Preferences和Secure Preferences的JSON文件,通常位于(Windows 10/11):%LOCALAPPDATA%\Google\Chrome\User Data\Default\。
Secure Preferences文件之所以如此命名,是因为它旨在通过使用基于哈希的消息认证码(HMAC SHA256)来防止浏览器劫持。简而言之,只有使用密钥才能计算HMAC哈希值,这使得此类哈希值可用于认证。Chrome中的Secure Preferences在每个设置的旁边,都在一个名为protection.macs的字段中保存着HMAC哈希值。如果有人更改了设置但未在protection.macs中提供有效的哈希值,该条目将变为无效。如果浏览器重新启动,无效的设置将被恢复到一个已知的良好副本。
Chrome Secure Preferences 的唯一问题在于,其HMAC密钥并非秘密。相反,浏览器从系统上的各种信息中派生该密钥,其中包括:
- 通过
LookUpAccountName、ConvertSidToStringSid获取的机器SID - 通过
GetSystemDirectory、GetVolumeInformation获取的系统驱动器序列号
具体过程可在Chromium源代码的pref_hash_store_impl.cc中找到,而Adlice在“How to Bypass Secure Preferences”中描述了Chromium自定义HMAC的工作方式。像AppSuite这样的恶意软件有一个专门的本地库(名为UtilityAddon.node[1]),目的正是从系统中获取这些值。对于分析人员来说,此类DLL和上述API调用可能是他们正在处理浏览器劫持程序的信号。
案例二:“机器里的幽灵”是一个BRAT
第二种方法让我有些意外。当我在DnSpy中打开一个PDF编辑器[2]时,发现了以下代码片段:
这些函数模拟了一系列按键和组合键,这些是浏览器中使用的快捷键。dly()函数在每一步之间休眠。例如,tstSrcBef()按下列键:
Escape- 使用
Ctrl + L聚焦地址栏 Escape- 将剪贴板字符串设置为变量
tst的值 Enter- 使用
Ctrl + A全选 - 使用
Ctrl + C复制 - 使用
Ctrl + L聚焦地址栏 Backspace- 使用
Ctrl + V粘贴
此函数提取当前地址栏内容并将其替换为另一个,例如,劫持者可能用它来将一个搜索引擎替换为另一个。同一样本中的其他函数则用于在标签页之间导航和聚焦、通过 Shift + F10 和方向键打开并点击上下文菜单项,或者打开页面内的链接。
在我动态测试该样本时,其效果与“常规”浏览器劫持相同:机器中的“幽灵”会打开包含不需要网站的标签页,我的搜索请求由一个奇怪的搜索引擎响应。
但这种按键方式还允许浏览器劫持程序自动点击广告,更重要的是,可以下载并运行任意的附加软件,或在在线支付期间交换剪贴板和表单内容。此劫持程序的具体行为取决于服务器命令。与RAT不同,此恶意软件并不控制整个计算机,它更像是一个BRAT——浏览器远程访问工具。
案例三:用正确的参数,“不”意味着“可能”
我发现第三个案例[3]是在帮助互联网上的一位用户时,他联系我清理他的系统。这种类型的浏览器劫持程序伴随着诸如My Bimbo Dream之类的NSFW游戏的破解版而来。它由作为计划任务运行的VBS和PowerShell脚本组成。其中一个相关文件,名为temp_cleanup.ico[4],实际上是一个.reg文件,用于操作注册表。该文件以一个无害的注册表项开头,后面跟着大约200个空行——可能希望没人会滚动那么远——然后才是以下两个条目:
此恶意软件通过策略设置禁用Google Chrome更新;我稍后会解释其原因。它还白名单了一个特定的浏览器扩展。
其中一个名为configuration.ps1[5]的PowerShell脚本监控WMI事件以监听chrome.exe和edge.exe进程的启动。
一旦劫持程序检测到进程启动,它就会终止浏览器并立即使用其自己的扩展程序重新启动它。扩展本身会向浏览器注入广告,相当乏味。更有趣的部分是此恶意软件如何实现加载扩展。出于安全原因,Chromium的命令行开关 --load-extension 已于2025年4月被移除。然而,它并未被完全移除。相反,它仍然存在于Chromium的代码中,但默认处于停用状态,这是一项安全功能。这意味着,如果我们禁用此安全功能,就可以再次使用该命令行开关。或者让我用一句话来表达,这可能让你脑子打结:禁用DisableLoadExtensionCommandLineSwitch 会激活 --load-extension 开关。
而这正是此恶意软件所做的。
Chromium开发者表示,此变通方法是临时的,因此恶意软件无法依赖该开关在未来的Chromium浏览器版本中继续有效。现在我们也明白了为什么此恶意软件要禁用Chrome更新。没有浏览器更新,--load-extension 的变通方法将在已感染的系统上保持可用,从而延长浏览器劫持程序的存在时间。
参考文献
- https://gridinsoft.com/browser-hijacker
- https://source.chromium.org/chromium/chromium/src/+/main:rlz/lib/machine_id.cc
- https://stackoverflow.com/questions/10633357/how-to-unpack-resources-pak-from-google-chrome
- https://superuser.com/questions/1020479/how-to-migrate-google-chrome-profile-extensions-cookies-etc-to-another-wind/1265894#1265894
- https://www.adlice.com/google-chrome-secure-preferences/
- https://www.gdatasoftware.com/blog/2025/08/38257-appsuite-pdf-editor-backdoor-analysis
样本
- [1] 案例一:AppSuites的UtilityAddon.node: 6022fd372dca7d6d366d9df894e8313b7f0bd821035dd9fa7c860b14e8c414f2
- [2] 案例二 模拟按键的BRAT: 6ae8c50e3b800a6a0bff787e1e24dbc84fb8f5138e5516ebbdc17f980b471512
- [3] 案例三 使用Chromium参数启动扩展: a1c49a02d19bb93e45a0ec6c331bba7e615c6f05ae43d0dfd36cf4d8e2534c6a
- [4] %TEMP%\temp_cleanup.ico: 1d9bebfec33fa5a5381f0d1fcc3a57e83a2f693a2e0d688cdb86abfa7484a28d
- [5] LOCALAPPDATA\DiagnosticNET\configuration.ps1: 847a629e3f3c4068c26201ed5e727cda98b3ac3d832061feae0708ff8007d4fb