作者:来着 Elastic Aaron Jewitt
当你的 CISO 询问你的任何工作站上是否安装过特定的浏览器扩展时,你多快能得到正确答案?恶意浏览器扩展是一个重大威胁,许多组织无法管理或检测。这篇博文探讨了 Elastic Infosec 团队如何使用 osquery 和 Elastic Stack 创建所有浏览器扩展和检测规则的实时清单,以及如何在工作站有已知的受损浏览器扩展时通知团队。该解决方案完全使用 osquery、Elastic Defend 集成和 Elastic Stack 中的 SIEM 功能构建。
针对浏览器扩展的威胁行为者
威胁行为者越来越关注针对浏览器扩展程序来窃取信息或危害用户,甚至一些威胁行为者直接针对合法扩展程序的开发人员,目的是添加恶意代码。
有了足够的权限,浏览器扩展程序就可以查看或更改你使用浏览器访问的任何网站上的任何信息,并收集传递给网站的敏感信息,例如用户名、密码或银行帐户信息。扩展程序可以访问并窃取任何网站存储的身份验证令牌。他们甚至可以改变网站内容,通过社会工程手段诱使用户下载恶意软件到他们的工作站,比如改变链接的目的地。
业务挑战
管理企业中的浏览器扩展带来了一些复杂的挑战。
- 扩展程序是根据浏览器内的配置文件进行安装的。
- 工作站上的每个用户帐户可以在每个浏览器中拥有多个不同的配置文件,例如个人配置文件和工作配置文件。
- 通常,工作站会具有五个或更多不同的用户配置文件 — — 每个配置文件都有自己安装的一组扩展。
有一些选项,例如托管浏览器可以通过创建扩展的允许或阻止列表来控制公司配置文件的安装扩展,但这些解决方案不会管理这些工作站上的非公司配置文件。如果用户从个人资料登录工作系统,公司工作站上的个人浏览器扩展仍然会给你的公司带来风险。另一个风险情况是个人扩展程序可能会动态更改点击链接的目的地,导致用户将恶意文件下载到其工作系统中。
在 Kibana 中部署和管理 osquery
osquery 是一个开源代理,适用于几乎所有现代操作系统(OS)。它将每个操作系统视为一个关系数据库,其中包含表,你可以查询这些表来收集有关系统当前状态的信息。你可以查询模式中的 200 多个表以获取信息,例如正在运行的进程;已安装的浏览器扩展; Python 库;装载了docker容器;加载内核模块;打开网络连接;连接的 USB 设备;等等。
在 Elastic,我们使用自己的 XDR 功能保护所有工作站,其中包括将 Elastic Agent 部署到所有工作站以进行分布式保护和响应。 Elastic Security 的一大优势是能够使用 Kibana 中的 Osquery Manager 集成轻松地将 osquery 部署到你的端点并进行管理。 osquery 集成包含在基本许可证中 —— 在你的代理群中部署它无需额外的许可费用。
更多有关 osquery 的阅读,请参阅文章:
-
Security:osquery 介绍
-
Elasticsearch:使用 osquery 和 Elastic Stack 来监控你的端点
使用 osquery 和 Elastic 的优势
Elastic Defend 和其他端点检测和响应 (EDR) 代理可以从工作站传输实时进程、网络和文件日志。但是这些审计日志无法告诉你有关操作系统状态的所有信息,例如已安装的浏览器扩展。这就是 osquery 的用武之地。它让我们捕获工作站当前状态的快照,以便我们知道用户拥有哪些 Chrome 扩展程序。
只需在 Kibana 中单击几下,你就可以将 osquery 部署到所有工作站,并直接在 Elastic Stack 中管理和查看查询 - 使用 Kibana 管理 osquery 时不需要额外的基础设施。将 osquery 与 Elastic 结合使用的另一个优点是,所有查询的结果都会立即被纳入 Elasticsearch 索引中,并可用于各种用例。将结果导入到你的 Elastic Stack 中还可以为你提供查询的历史时间线,你可以使用该时间线查看系统在一段时间内硬件和软件发生的更改。
有关在 Elastic 中使用 osquery 的更多信息,请查看 osquery 文档指南。
在 Elastic 中使用 osquery
在 osquery 中,有两种方式运行查询 - 立即作为实时查询或作为 osquery 所称的查询包的定期调度的查询组的一部分。
实时查询 - Live query
实时查询将针对一个或多个主机运行单个查询。实时查询是在测试期间构建和优化查询或在调查期间寻找特定指标的好方法。在 Elastic 中选择运行实时查询的主机时,你可以单独选择主机、按队列策略选择所有主机或按操作系统选择。如果在运行实时查询时代理处于离线状态,则如果代理在接下来的 60 分钟内上线,它将保持排队状态;否则将被清除。 Elastic 版本的 osquery 的一个功能是保存的查询。此功能可以轻松地预先配置常用的复杂查询,然后其他团队成员可以使用这些查询。
查询包 - Query pack
查询包是计划以不同间隔运行的预配置查询的集合。包中的每个查询都可以指定它将在哪个操作系统平台上运行,因此单个包可以在具有多个操作系统的策略上安全地使用。查询包可以作为 .json 文件导出和导入,以便你在 Kibana 中快速添加包。 osqery 提供了一些示例包供你使用,或者你可以尝试我们用来清点浏览器扩展的 browser_monitoring 包。
使用 osquery 创建所有扩展的清单
Elastic Infosec 团队已将 browser_monitoring 包配置为我们所有工作站上每六小时运行一次,以创建所有浏览器扩展的清单。我们每六个小时运行一次查询,因为 Elastic 是一家全球分布的公司,我们无法预测用户的工作时间。
![](https://i-blog.csdnimg.cn/direct/91004693f39241edbade92d598133210.png)
由于多个用户配置文件带来的复杂性,收集浏览器扩展信息的查询需要 JOIN 运算符将 users 表连接到扩展表。 JOIN 运算符将使用两个表中都存在的公共字段将两个表组合在一起。在这种情况下,它是用户 ID uid 字段。
SELECT * FROM users JOIN chrome_extensions USING (uid)
还可以直接在 osquery UI 中查看包查询的结果,并通过链接在 Kibana Discover 或 Lens 中打开每个查询的结果。
![](https://i-blog.csdnimg.cn/direct/1152f9fdf9764e91a24d9cdbf69c5c35.png)
所有查询的结果都直接存储到 logs-osquery_manager.result* 索引模式中。可以使用 action.id 字段找到计划包查询的结果。对于打包结果,该字段遵循 pack_{pack_name}_{query_name} 的命名约定。我们正在使用一个名为 browser-monitoring 的包和一个名为 chrome_extensions 的查询。要查看此查询的结果,你可以查询action_id:“pack_browser-monitoring_chrome_extensions”。
在 Discover 中查看 osquery 的结果时,你将看到 osquery 模式表中的每个字段都使用 osquery.* 字段名进行索引。在查看有关 Chrome 扩展程序的信息时,我们最常用的字段是 osquery.identifier、osquery.name、osquery.permissions、osquery.profile 和 osquery.version。
![](https://i-blog.csdnimg.cn/direct/f4ceb468a7f846149985a23e8f0f2317.png)
以下是 chrome_extension 查询响应中可用字段的完整列表:
- osquery.identifier 是每个扩展的唯一标识符。通过此标识符,你可以在 Google Chrome 网上应用店中找到该扩展程序,或者使用 Secure Annex 或 crxaminer.tech 等服务查找该扩展程序的信誉分数。
- osquery.name 是 Chrome 网上应用店和浏览器中显示的扩展程序的名称。
- osquery.profile 是安装该扩展程序的 Google Chrome 配置文件。用户在单用户帐户中拥有多个不同的 Chrome 配置文件是很常见的。
- osquery.permissions 是授予扩展的权限。该字段可用于过滤被授予危险权限的扩展,例如查看或修改每个网站的请求的权限。密切关注任何具有权限的扩展,例如 https://*/* ,它授予扩展对你访问的每个 https 网站的访问权限。
- osquery.version 是扩展的安装版本。在某些情况下,扩展程序可能有一个你想要删除的受损版本。
- osquery.update_url 是扩展用来检查任何更新的 url。如果此值不是标准更新路径 https://clients2.google.com/service/update2/crx,则表示扩展已被 “sideloaded - 侧载” 或以标准网络商店以外的某种方式安装,应进行调查。
另一个非常重要的 osquery 表是 chrome_extension_content_scripts。该表包含有关扩展所使用的每个 javascript 文件的信息。如果发现主机上存在受到感染的扩展,则可以使用该表中的 osquery.path、osquery.match 和 osquery.script 字段来查找扩展运行的每个脚本的完整路径。利用这些信息,你可以使用 Elastic Defend 的响应操作功能下载这些文件进行离线分析。
创建不良扩展的检测规则
现在你已拥有所有浏览器扩展的实时清单,你可以构建检测。最直接的检测方法是针对已知的坏扩展进行检测。已知的不良扩展列表可能来自包含已知标识符和版本的威胁情报(threat intelligence)报告。在这个例子中,我们将使用最近报道的 Cyberhaven 扩展入侵活动的威胁情报。报告底部是指向 IOC 集合的链接,其中包含已知恶意扩展的名称、ID 和版本。
Name | ID | Version |
VPNCity | nnpnnpemnckcfdebeekibpiijlicmpom | 2.0.1 |
Parrot Talks | kkodiihpgodmdankclfibbiphjkfdenh | 1.16.2 |
Uvoice | oaikpkmjciadfpddlpjjdapglcihgdle | 1.0.12 |
Internxt VPN | dpggmcodlahmljkhlmpgpdcffdaoccni | 1.1.1 |
Bookmark Favicon Changer | acmfnomgphggonodopogfbmkneepfgnh | 4.00 |
Castorus | mnhffkhmpnefgklngfmlndmkimimbphc | 4.40 |
Wayin AI | cedgndijpacnfbdggppddacngjfdkaca | 0.0.11 |
Search Copilot AI Assistant for Chrome | bbdnohkpnbkdkmnkddobeafboooinpla | 1.0.1 |
VidHelper - Video Downloader | egmennebgadmncfjafcemlecimkepcle | 2.2.7 |
AI Assistant - ChatGPT and Gemini for Chrome | bibjgkidgpfbblifamdlkdlhgihmfohh | 0.1.3 |
TinaMind - The GPT-4o-powered AI Assistant! | befflofjcniongenjmbkgkoljhgliihe | 2.13.0 |
Bard AI chat | pkgciiiancapdlpcbppfkmeaieppikkk | 1.3.7 |
Reader Mode | llimhhconnjiflfimocjggfjdlmlhblm | 1.5.7 |
Primus (prev. PADO) | oeiomhmbaapihbilkfkhmlajkeegnjhe | 3.18.0 |
Tackker - online keylogger tool | ekpkdmohpdnebfedjjfklhpefgpgaaji | 1.3 |
AI Shop Buddy | epikoohpebngmakjinphfiagogjcnddm | 2.7.3 |
Sort by Oldest | miglaibdlgminlepgeifekifakochlka | 1.4.5 |
Rewards Search Automator | eanofdhdfbcalhflpbdipkjjkoimeeod | 1.4.9 |
Earny - Up to 20% Cash Back | ogbhbgkiojdollpjbhbamafmedkeockb | 1.8.1 |
ChatGPT Assistant - Smart Search | bgejafhieobnfpjlpcjjggoboebonfcg | 1.1.1 |
Keyboard History Recorder | igbodamhgjohafcenbcljfegbipdfjpk | 2.3 |
Email Hunter | mbindhfolmpijhodmgkloeeppmkhpmhc | 1.44 |
Visual Effects for Google Meet | hodiladlefdpcbemnbbcpclbmknkiaem | 3.1.3 |
Cyberhaven security extension V3 | pajkjnmeojmbapicmbpliphjmcekeaac | 24.10.4 |
GraphQL Network Inspector | ndlbedplllcgconngcnfmkadhokfaaln | 2.22.6 |
GPT 4 Summary with OpenAI | epdjhgbipjpbbhoccdeipghoihibnfja | 1.4 |
Vidnoz Flex - Video recorder & Video share | cplhlgabfijoiabgkigdafklbhhdkahj | 1.0.161 |
YesCaptcha assistant | jiofmdifioeejeilfkpegipdjiopiekl | 1.1.61 |
Proxy SwitchyOmega (V3) | hihblcmlaaademjlakdpicchbjnnnkbo | 3.0.2 |
ChatGPT App | lbneaaedflankmgmfbmaplggbmjjmbae | 1.3.8 |
Web Mirror | eaijffijbobmnonfhilihbejadplhddo | 2.4 |
Hi AI | hmiaoahjllhfgebflooeeefeiafpkfde | 1.0.0 |
使用此 IOC 列表,有两种不同的方法来构建检测。最简单的方法是使用这些 ID 和版本值来构建单个大型 Elasticsearch 查询,该查询查看 osquery 数据中任何这些扩展标识符和版本,并使用 OR 运算符链接在一起。例如:
action_id: pack_browser-monitoring_chrome_extensions AND ((osquery.identifier: "nnpnnpemnckcfdebeekibpiijlicmpom" AND osquery.version: "2.0.1")
OR(osquery.identifier: "kkodiihpgodmdankclfibbiphjkfdenh" AND osquery.version: "1.16.2")
OR(osquery.identifier: "oaikpkmjciadfpddlpjjdapglcihgdle" AND osquery.version: "1.0.12")
)
如果你使用我们的其中一种威胁情报集成(threat intelligence integrations)将威胁情报源提取到你的 Elastic Stack,则可以使用指标匹配规则类型(indicator match rule type)创建此规则的更动态版本。指标匹配规则比较两个不同索引模式中的字段,当这些字段匹配时会触发警报。如果你的威胁源支持 Google Chrome 扩展程序 ID 和版本,则可以创建一个指示器匹配规则,当已安装的 Chrome 扩展程序 ID 和版本与已知的恶意扩展程序匹配时,该规则会向你发出警报。
以下是指标匹配规则的示例配置。指标索引字段名称将根据所使用的威胁情报平台而改变。
![](https://i-blog.csdnimg.cn/direct/29d45abc32ea4d1fb900bf06d5cf38fa.png)
这种方法的优点是,每次发布或更新新的已知不良扩展列表时,不需要手动更新检测规则。一旦新的指标添加到你的威胁情报索引中,你将立即收到警报。
尝试一下
威胁行为者将继续使用 Chrome 扩展程序来窃取有价值的信息和目标系统。如果你无法查看工作站上安装的扩展程序,则无法保护用户免受此攻击媒介的侵害。使用 osquery 和 Elastic,你可以管理和降低企业的整体风险,并通过浏览器扩展的可见性和警报,而无需额外的许可费用。
你可以免费试用 Elastic Cloud 14 天,亲自尝试一下。
要查看浏览器扩展程序如何在实际攻击中使用的例子,请查看《超越恐惧:解构 Elastic Security Labs 的 BANSHEE 信息窃取程序》。
本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。
原文:How to detect malicious browser extensions using Elastic | Elastic Blog