如何使用 Elastic 检测恶意浏览器扩展

article/2025/7/23 12:21:16

作者:Aaron Jewitt

当你的 CISO 问你某个特定浏览器扩展是否曾经被安装在任何工作站上时,你能多快给出正确的答案?恶意浏览器扩展是一个重大威胁,许多组织却无法管理或检测它们。本文介绍了 Elastic 信息安全团队如何使用 osquery 和 Elastic Stack 创建所有浏览器扩展的实时清单和检测规则,并在某个工作站存在已知恶意浏览器扩展时通知团队。这个解决方案完全基于 osquery、Elastic Defend 集成和 Elastic Stack 中的 SIEM 功能构建。

针对浏览器扩展的威胁行为者

越来越多的威胁行为者将目标对准浏览器扩展,用于窃取信息或攻击用户 —— 有些甚至直接攻击合法扩展的开发者,试图在扩展中加入恶意代码。

如果拥有足够的权限,浏览器扩展可以查看或修改你访问的任何网站上的信息,并收集传递给网站的敏感信息,例如用户名、密码或银行账户信息。扩展还可以访问并窃取网站的认证令牌,甚至可以修改网页内容,通过社会工程手法引诱用户下载恶意软件,比如更改链接的跳转地址等。

企业面临的挑战

在企业中管理浏览器扩展面临复杂挑战。

  • 扩展是按浏览器中的用户配置文件安装的。
  • 每个工作站的每个用户账户都可能在每个浏览器中拥有多个不同的配置文件,比如一个个人配置文件和一个工作配置文件。
  • 在一台工作站上看到五个或更多不同用户配置文件的情况很常见 —— 每个配置文件都有自己的一组扩展。

虽然可以使用受管浏览器来为公司配置文件设置扩展的允许或阻止列表,但这些方案无法管理工作站上的非公司配置文件。如果用户从个人配置文件登录工作系统,那些个人扩展仍然会对公司构成风险。另一个风险场景是,个人扩展可能动态更改点击链接的跳转地址,从而诱导用户在工作系统上下载恶意文件。

在 Kibana 中部署和管理 osquery

osquery 是一个开源代理,适用于几乎所有现代操作系统(OS)。它将每个操作系统视为关系型数据库,可以通过查询表格来获取系统当前状态的信息。你可以查询 schema 中 200 多个表,例如运行中的进程、已安装的浏览器扩展、Python 库、加载的 docker 容器、加载的内核模块、开放的网络连接、已连接的 USB 设备等。

在 Elastic,我们用自家的 XDR 功能保护所有工作站,包括将 Elastic Agent 部署到所有工作站以实现分布式防护与响应。Elastic Security 的一个重要功能是可以通过 Kibana 中的 Osquery Manager 集成,轻松地在终端上部署和管理 osquery。osquery 集成包含在 Basic 许可证中 —— 在代理集群中部署不需要额外的许可费用。

将 osquery 与 Elastic 结合使用的优势

Elastic Defend 和其他终端检测与响应(EDR)代理可以实时流式传输工作站上的进程、网络和文件日志。但这些审计日志无法提供操作系统的所有状态信息,比如已安装的浏览器扩展。而这正是 osquery 发挥作用的地方。它可以帮助我们获取工作站当前状态的快照,比如用户安装了哪些 Chrome 扩展。

在 Kibana 中点击几下即可将 osquery 部署到所有工作站,并在 Elastic Stack 中直接管理和查看你的查询 —— 使用 Kibana 管理 osquery 不需要额外基础设施。另一个优势是所有查询结果会立即被写入 Elasticsearch 索引,可用于各种使用场景。将结果写入 Elastic Stack 还能为你提供查询的历史时间线,用来查看系统的硬件和软件更改发生的时间。

更多关于在 Elastic 中使用 osquery 的信息,请查看 osquery 文档指南。

在 Elastic 中使用 osquery

在 osquery 中有两种运行查询的方式 —— 立即作为实时查询执行,或作为定期执行的查询组运行,后者被称为 query pack。

实时查询(Live query)

实时查询会针对一个或多个主机运行单个查询。实时查询非常适合在测试过程中构建和优化查询,或在调查中搜索特定指标。在 Elastic 中运行实时查询时,可以按主机单独选择、选择某个 fleet 策略下的所有主机,或按操作系统选择主机。如果某个代理在运行查询时处于离线状态,只要该代理在接下来的 60 分钟内上线,查询仍会执行;否则查询会被清除。Elastic 版本的 osquery 还提供了 “已保存查询” 功能,使得预配置复杂但常用的查询变得容易,这样其他团队成员也可以重复使用这些查询。

查询包(Query pack)

查询包是一组预配置查询,会按设定的时间间隔定期执行。每个查询可以指定在哪个操作系统平台上运行,因此一个查询包可以安全地用于包含多个操作系统的策略中。查询包可以导出或导入为 .json 文件,方便你在 Kibana 中快速添加。osquery 提供了一些示例查询包用于入门,也可以试用我们用来清点浏览器扩展的 browser_monitoring 查询包。

使用 osquery 创建所有扩展的清单

Elastic 信息安全团队配置了 browser_monitoring 查询包,在所有工作站上每六小时运行一次,以创建所有浏览器扩展的清单。我们之所以每六小时运行一次查询,是因为 Elastic 是一家全球分布的公司,无法预测用户的具体工作时间。

browser_monitoring 查询包

由于多个用户配置文件带来的复杂性,收集浏览器扩展信息的查询需要使用 JOIN 操作符,将 users 表与扩展表连接在一起。 JOIN 操作符会使用两个表中共同存在的字段将它们合并。在这个例子中,是用户 ID 的 uid 字段。

SELECT * FROM users JOIN chrome_extensions USING (uid)

查询包的结果也可以直接在 osquery UI 中查看,并带有链接,可在 Kibana Discover 或 Lens 中打开每个查询的结果。

browser_monitoring 结果视图

所有查询结果都会直接存储在 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 schema 表中的每个字段都用 osquery.* 字段名进行索引。查看 Chrome 扩展信息时,我们最常用的字段有 osquery.identifierosquery.nameosquery.permissionsosquery.profileosquery.version

示例查询结果

以下是 chrome_extension 查询响应中可用字段的完整列表:

  • osquery.identifier 是每个扩展的唯一标识符。通过这个标识符,你可以在 Google Chrome Web Store 查找该扩展,或使用 Secure Annex 或 crxaminer.tech 等服务查询扩展的信誉评分。

  • osquery.name 是扩展在 Chrome Web Store 和浏览器中显示的名称。

  • osquery.profile 是安装该扩展的 Google Chrome 配置文件。用户在单个账户中拥有多个不同的 Chrome 配置文件非常常见。

  • osquery.permissions 是授予扩展的权限。这个字段可以用来筛选拥有危险权限的扩展,例如访问或修改所有网站请求的权限。特别要注意那些拥有类似 https://*/* 权限的扩展,这意味着扩展可以访问你访问的所有 https 网站。

  • osquery.version 是扩展的安装版本。有些情况下,某个扩展可能存在一个被攻击的版本,需要将其移除。

  • osquery.update_url 是扩展检查更新时使用的 URL。如果该值不是标准更新路径 https://clients2.google.com/service/update2/crx,说明该扩展是“旁加载”的,或者通过非标准的方式安装,应当进行调查。

另一个非常重要的 osquery 表是 chrome_extension_content_scripts。该表包含扩展使用的每个 JavaScript 文件的信息。如果发现某台主机上有被攻击的扩展,可以使用该表中的 osquery.pathosquery.matchosquery.script 字段,找到扩展运行的每个脚本的完整路径。利用这些信息,你可以通过 Elastic Defend 的响应操作功能下载这些文件进行离线分析。

创建恶意扩展的检测规则

现在你已经有了所有浏览器扩展的实时清单,可以开始构建检测规则。最直接的检测是针对已知的恶意扩展。已知恶意扩展列表通常来自威胁情报报告,包含已知的标识符和版本。这个例子中,我们将使用最近报道的 Cyberhaven 扩展被攻击活动的威胁情报。报告底部有一个包含已知恶意扩展名称、ID 和版本的 IOC 集合链接。

NameIDVersion
VPNCitynnpnnpemnckcfdebeekibpiijlicmpom2.0.1
Parrot Talkskkodiihpgodmdankclfibbiphjkfdenh1.16.2
Uvoiceoaikpkmjciadfpddlpjjdapglcihgdle1.0.12
Internxt VPNdpggmcodlahmljkhlmpgpdcffdaoccni1.1.1
Bookmark Favicon Changeracmfnomgphggonodopogfbmkneepfgnh4.00
Castorusmnhffkhmpnefgklngfmlndmkimimbphc4.40
Wayin AIcedgndijpacnfbdggppddacngjfdkaca0.0.11
Search Copilot AI Assistant for Chromebbdnohkpnbkdkmnkddobeafboooinpla1.0.1
VidHelper - Video Downloaderegmennebgadmncfjafcemlecimkepcle2.2.7
AI Assistant - ChatGPT and Gemini for Chromebibjgkidgpfbblifamdlkdlhgihmfohh0.1.3
TinaMind - The GPT-4o-powered AI Assistant!befflofjcniongenjmbkgkoljhgliihe2.13.0
Bard AI chatpkgciiiancapdlpcbppfkmeaieppikkk1.3.7
Reader Modellimhhconnjiflfimocjggfjdlmlhblm1.5.7
Primus (prev. PADO)oeiomhmbaapihbilkfkhmlajkeegnjhe3.18.0
Tackker - online keylogger toolekpkdmohpdnebfedjjfklhpefgpgaaji1.3
AI Shop Buddyepikoohpebngmakjinphfiagogjcnddm2.7.3
Sort by Oldestmiglaibdlgminlepgeifekifakochlka1.4.5
Rewards Search Automatoreanofdhdfbcalhflpbdipkjjkoimeeod1.4.9
Earny - Up to 20% Cash Backogbhbgkiojdollpjbhbamafmedkeockb1.8.1
ChatGPT Assistant - Smart Searchbgejafhieobnfpjlpcjjggoboebonfcg1.1.1
Keyboard History Recorderigbodamhgjohafcenbcljfegbipdfjpk2.3
Email Huntermbindhfolmpijhodmgkloeeppmkhpmhc1.44
Visual Effects for Google Meethodiladlefdpcbemnbbcpclbmknkiaem3.1.3
Cyberhaven security extension V3pajkjnmeojmbapicmbpliphjmcekeaac24.10.4
GraphQL Network Inspectorndlbedplllcgconngcnfmkadhokfaaln2.22.6
GPT 4 Summary with OpenAIepdjhgbipjpbbhoccdeipghoihibnfja1.4
Vidnoz Flex - Video recorder & Video sharecplhlgabfijoiabgkigdafklbhhdkahj1.0.161
YesCaptcha assistantjiofmdifioeejeilfkpegipdjiopiekl1.1.61
Proxy SwitchyOmega (V3)hihblcmlaaademjlakdpicchbjnnnkbo3.0.2
ChatGPT Applbneaaedflankmgmfbmaplggbmjjmbae1.3.8
Web Mirroreaijffijbobmnonfhilihbejadplhddo2.4
Hi AIhmiaoahjllhfgebflooeeefeiafpkfde1.0.0

使用这份 IOC 列表,有两种不同的方法来构建检测。最简单的方法是用这些 ID 和版本值,构建一个包含多个条件的 Elasticsearch 查询,使用 OR 操作符连接,针对 osquery 数据中任意一个扩展标识符和版本进行匹配。例如:

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 和版本与已知恶意扩展匹配时触发告警。

以下是一个指标匹配规则的示例配置。指标索引字段名称会根据所使用的威胁情报平台有所不同。

指标匹配规则示例配置

这种方法的优点是每当新的已知恶意扩展列表发布或更新时,无需手动更新检测规则。一旦新的指标被添加到你的威胁情报索引中,你会立即收到告警。

试试看

威胁行为者会继续利用 Chrome 扩展来窃取有价值的信息和攻击系统。如果你无法看到工作站上安装的扩展,就无法保护用户免受这种攻击。借助 osquery 和 Elastic,你可以通过对浏览器扩展的可见性和告警管理,降低企业整体风险,且无需额外许可费用。

使用 Elastic Cloud的 14 天免费试用,自己试试看吧。

关于浏览器扩展如何在现实攻击中被利用的示例,请查看 Elastic Security Labs 的文章《Beyond the wail: deconstructing the BANSHEE infostealer》。

本文中描述的任何功能或特性的发布及时间安排均由 Elastic 全权决定。当前不可用的任何功能或特性,可能不会按时或根本不会交付。

原文:How to detect malicious browser extensions using Elastic | Elastic Blog


http://www.hkcw.cn/article/FatatITVLv.shtml

相关文章

[网页五子棋][匹配模式]创建房间类、房间管理器、验证匹配功能,匹配模式小结

文章目录 创建房间类创建房间类实现房间管理器 实现匹配器(3)验证匹配功能问题:匹配按钮不改变验证多开 小结 创建房间类 LOL,通过匹配的方式,自动给你加入到一个房间,也可手动创建游戏房间 这一局游戏,进行的“场所…

LangChain【3】之进阶内容

文章目录 说明一 LangChain Chat Model1.1 少量示例提示(Few-Shot Prompting)1.2 Few-Shot示例代码1.3 示例选择器(Eample selectors)1.4 ExampleSelector 类型1.5 ExampleSelector案例代码1.6 LangServe工具1.7 LangServe安装1.8 langchain项目结构1.9 …

LangChain-自定义Tool和Agent结合DeepSeek应用实例

除了调用LangChain内置工具外,也可以自定义工具 实例1: 自定义多个工具 from langchain.agents import initialize_agent, AgentType from langchain_community.agent_toolkits.load_tools import load_tools from langchain_core.tools import tool, …

探索JS数组新方法:

js数组新方法:Array.with()、Array.toSorted()、Array.toReversed() 和 Array.toSpliced() 在Javascript中数组作为引用类型,如果我们想在不修改原始数组的情况下执行splice, sort,reverse等方法,那么我们必须首先创建原始数组的副本&#x…

电子书阅读器:基于UDP的网络日志调试系统

目录 为什么要引入网络编程进行远程打印? 框架与管理 debug层结构 stdout.c netprint.c(重头戏) 明确两个问题:udp和server端的选择 核心机制 实现细节 debug_manager.c netprint_client.c 为什么要引入网络编程进行远程…

《HelloGitHub》第 110 期

兴趣是最好的老师,HelloGitHub 让你对开源感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…

⼤模型驱动的DeepInsight Copilot在蚂蚁的技术实践

本文整理自潘兰天(蚂蚁数据智能团队数据分析平台技术专家)在DA数智大会2025上海站的演讲实录。 本文围绕AI技术在数据分析领域的应用及DeepInsight Copilot产品展开。DeepInsight是一款蚂蚁长期深耕数据分析领域的BI产品,本文首先介绍了DeepInsight Copi…

小黑大语言模型应用探索:langchain智能体构造源码demo搭建1(初步流程)

导入工具包 rom langchain_core.tools import BaseTool from typing import Sequence, Optional, List from langchain_core.prompts import BasePromptTemplate import re from langchain_core.tools import tool from langchain_core.prompts.chat import (ChatPromptTempla…

在大型中实施访问控制 语言模型

大家读完觉得有帮助记得关注!!! 抽象 在企业设置中,组织数据是隔离的、孤立的 并受到精心设计的访问控制框架的精心保护。 如果 LLM 对 siloed data serve 请求进行微调,用于下游任务, 来自具有不同访问权限…

边缘计算网关在管网压力远程调控中的通信协议配置

一、项目背景 在现代城市供水系统中,恒压供水是确保居民用水稳定的关键。传统的恒压供水系统通常依赖人工巡检和本地监控,这种方式存在实时性差、效率低、故障响应慢等问题。随着物联网技术的发展,某大型城市供水企业为了实现对供水系统的实…

51. N-Queens

目录 题目描述 方法一、回溯每次判断是否合法 方法二、回溯哈希 方法三、回溯位运算 题目描述 51. N-Queens 方法一、回溯每次判断是否合法 class Solution {vector<vector<string>> res;vector<string> chessboard; public:vector<vector<strin…

西蒙诺维奇-炮弹导体粗糙度模型揭秘

这篇论文的作者&#xff0c;“导体表面粗糙度建模&#xff1a;从”雪球“到”炮弹“&#xff0c;[1] 认为仅凭数据表不可能对传输线进行准确建模&#xff0c;并且似乎暗示&#xff0c;因为我事先测量了数据&#xff0c;所以我神奇地”调整“了 Rz 参数&#xff0c;以获得与 EDI…

VRRP 原理与配置:让你的网络永不掉线!

VRRP 原理与配置&#xff1a;让你的网络永不掉线&#xff01; 一. VRRP 是什么&#xff0c;为什么需要它&#xff1f;二. VRRP 的核心概念三. VRRP 的工作原理四. 华为设备 VRRP 配置步骤 &#xff08;主备模式&#xff09;4.1 拓扑示例4.2 &#x1f6e0; 配置步骤 五. VRRP 配…

【深度剖析】义齿定制行业数字化转型模式创新研究(上篇3:数字化转型动机分析)

数字化转型正在重塑义齿行业的生态格局,但也面临技术融合与模式变革的深层挑战。当前,义齿定制行业正处于从传统手工制造向全流程数字化制造转型的关键阶段。3D扫描、CAD/CAM(计算机辅助设计与制造)、3D打印等技术的广泛应用,显著提升了义齿制作的精度和效率。传统石膏模型…

RustDesk 搭建自建服务器并设置服务自启动

目录 0. 介绍 1. 事前准备 1.1 有公网 ip 的云服务器一台 1.2 服务端部署包 1.3 客户端安装包 2. 部署 2.1 服务器环境准备 2.2 上传服务端部署包 2.3 运行 pm2 3. 客户端使用 3.1 安装 3.2 配置 3.2.1 解锁网络设置 3.2.2 ID / 中级服务器 3.3 启动效果 > …

Python训练营打卡Day40(2025.5.30)

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout # 先继续之前的代码 import torch import …

《智慧医疗分级评价方法及标准(2025版)》征求意见函全面解读:人工智能医疗应用的评价体系与指南方向

引言 智慧医疗作为医疗行业数字化转型的重要方向,正在通过人工智能等先进技术重塑医疗服务模式和流程。随着人工智能技术在医疗领域的广泛应用,建立科学、规范的评价体系对于推动智慧医疗健康发展具有重要意义。近期,国家卫生健康委发布了《智慧医疗分级评价方法及标准(20…

碰一碰发视频系统--基于H5场景开发

#碰一碰发视频# 旨在构建一个基于移动网页&#xff08;H5&#xff09;的视频“碰传”交互系统&#xff0c;提供类似华为/苹果设备 NFC 轻碰分享的便捷体验。其核心技术依赖于移动端可用的近场通信&#xff08;NFC 或 H5 相关 API&#xff09;和可靠的媒体数据传输方案。实现细节…

京东热点缓存探测系统JDhotkey架构剖析

热点探测使用场景 MySQL 中被频繁访问的数据 &#xff0c;如热门商品的主键 IdRedis 缓存中被密集访问的 Key&#xff0c;如热门商品的详情需要 get goods$Id恶意攻击或机器人爬虫的请求信息&#xff0c;如特定标识的 userId、机器 IP频繁被访问的接口地址&#xff0c;如获取用…

6年“豹变”,vivo S30系列引领手机进入场景“体验定义”时代

出品 | 何玺 排版 | 叶媛 5月29日晚&#xff0c;备受用户期待的vivo S30系列如约而至。 相比前几代S系列产品&#xff0c;S30系列变化显著&#xff0c;堪称“豹变”。首先&#xff0c;其产品打造思路发生了质变&#xff0c;产品体验更好&#xff0c;综合竞争力更为强。其次&a…