开源生态的信任基石正在被恶意攻击者蚕食。近期曝光的27个恶意npm包,撕开了一条隐蔽且致命的攻击链——攻击者将npm仓库与CDN网络打造成“钓鱼托管双引擎”,通过反爬虫、鼠标轨迹识别等技术过滤安全检测,专盯企业销售、商务人群实施精准攻击,甚至能绕过主流多因素认证(MFA)机制完成账户接管。这场围绕开源供应链与可信基础设施的攻防战,正呈现出“滥用信任、精准猎杀、绕过防御”三大新特征,给企业信息安全带来严峻挑战。
一、 攻击链条深度拆解:从npm包投放到MFA绕过的全流程
这轮攻击并非传统的恶意代码执行模式,而是精准利用开源生态与CDN的“信任背书”,构建了一套自动化、高隐蔽的钓鱼攻击流水线,核心链路可分为五步:
- 恶意npm包批量生成与上架
攻击者构建的恶意包命名极具迷惑性,多采用redirect-[随机6位字符]的格式,包内不含任何可执行的恶意载荷,仅封装一段轻量级JS重定向脚本与静态钓鱼页面模板。这种“无执行代码”的设计,能轻松绕过npm的基础安全审计与自动化扫描工具的检测,实现批量快速上架。
值得注意的是,恶意包的版本号也被精心设计,采用0.0.x的测试版号,进一步降低安全人员的警惕性。 - CDN托管实现“信任跳板”与高存活
攻击者将恶意npm包对接UNPKG、jsDelivr等主流npm CDN服务。这些CDN的主域名往往被企业加入安全白名单——出于开源开发需求,企业通常会放行CDN域名以加载合法开源组件。
这就形成了“域级信任,路径失控”的致命缺口:CDN主域名合法,但指向恶意npm包的路径却不受管控。更棘手的是,CDN的边缘缓存机制让恶意资源“杀不死”:即便npm平台下架恶意包,缓存节点上的钓鱼页面仍能存活72小时以上;攻击者还会通过“包版本+资源哈希”生成动态路径,对抗安全团队的批量拦截规则。 - 精准诱饵投递:瞄准商务人群的痛点
攻击的目标群体高度聚焦——企业销售、商务、采购人员。攻击者通过邮件、企业微信、网盘等渠道,发送伪装成“客户采购单”“合同草案”“报价函”的HTML附件。这些附件内嵌了指向CDN恶意JS的加载脚本,打开附件后,JS会在浏览器后台静默运行,触发后续校验流程。
相较于传统钓鱼链接,HTML附件的隐蔽性更强,能绕过多数邮件网关的链接检测规则。 - 客户端智能校验:反爬虫+沙箱逃逸,只留真人目标
这是攻击最核心的技术壁垒。恶意JS内置三重校验机制,专门过滤自动化分析工具,只对真人用户触发钓鱼跳转:- 反爬虫校验:嵌入蜜罐表单字段,爬虫或自动化工具会读取并提交所有字段,而真人用户仅填写可见字段,通过字段提交差异识别非目标;
- 鼠标轨迹识别:监测用户鼠标移动轨迹的随机性、点击间隔,拒绝机械的脚本操作轨迹;
- 浏览器环境检测:校验浏览器指纹、JS运行环境,识别安全沙箱、虚拟机等分析环境,一旦检测到则终止执行,避免钓鱼页面被逆向分析。
经过三重过滤后,只有真实的企业人员访问时,才会跳转至伪造的登录页面。
- AitM攻击绕过MFA:窃取会话而非密码
这是攻击的终极杀招。传统钓鱼只能获取账号密码,面对MFA往往束手无策,而攻击者引入了中间人攻击(AitM)工具(如Evilginx):- 当目标人员在伪造页面输入账号密码后,AitM工具会实时转发请求至真实的企业系统(如邮箱、CRM平台);
- 当真实系统触发MFA验证时,钓鱼页面会同步弹出MFA输入框,诱导用户输入验证码;
- 验证通过后,AitM工具不会窃取密码或验证码,而是直接劫持已认证的会话Cookie或会话令牌。
凭借劫持的会话凭证,攻击者无需再次验证,就能直接登录目标账户,完成数据窃取或权限提升。
二、 攻击的三大新趋势:为何传统防御手段全面失效?
这轮恶意npm包攻击,折射出供应链钓鱼攻击的三个关键进化方向,也是其能绕过传统防御的核心原因:
- 从“代码攻击”转向“基础设施滥用”
攻击者不再依赖漏洞利用或恶意代码执行,而是瞄准开源生态的“托管-分发”基础设施。npm作为开源包仓库,CDN作为可信分发网络,两者的合法身份成为攻击的“保护伞”。传统的终端杀毒、代码审计工具,对这种“无恶意代码、纯资源重定向”的攻击模式几乎无效。 - 从“广谱撒网”转向“精准猎杀”
攻击目标从普通网民转向企业高价值人群,诱饵内容贴合商务场景,校验机制过滤无关人员,实现“一击必中”。相较于传统钓鱼的低成功率,这类精准攻击的转化率提升10倍以上,且攻击行为更隐蔽,不易被批量发现。 - 从“绕过终端防御”转向“绕过身份认证”
MFA曾被视为账户安全的“最后一道防线”,但AitM工具的普及,让MFA的防护效果大打折扣。攻击者不再纠结于破解验证环节,而是直接劫持已认证的会话,从“攻破密码”升级为“劫持身份”,这对企业身份安全体系提出了全新挑战。
三、 可落地的防御体系:从企业到开发者的全维度防护
面对这类新型供应链钓鱼攻击,单一的防御手段已无法奏效,需要构建“基础设施管控+终端防护+身份加固+人员意识”的四层防御体系。
(一) 企业侧防御:堵住信任缺口,切断攻击链路
- CDN访问精细化管控:从“域名白名单”升级为“路径白名单”
核心是打破对CDN域名的“无条件信任”。企业网络防火墙、代理服务器需配置细粒度规则:- 针对UNPKG、jsDelivr等npm CDN,禁止通配符放行主域名,仅放行企业明确使用的开源包路径(格式如
https://cdn.jsdelivr.net/npm/[合法包名]@[固定版本]/); - 拦截所有
redirect-*等可疑包名的访问请求,定期更新恶意包名黑名单; - 部署CDN资源审计工具,监控企业内部访问的CDN资源路径,发现异常路径及时告警。
- 针对UNPKG、jsDelivr等npm CDN,禁止通配符放行主域名,仅放行企业明确使用的开源包路径(格式如
- 邮件与终端防护:拦截隐蔽的钓鱼载体
- 邮件网关升级规则,对HTML附件进行JS代码静态分析,拦截包含“CDN重定向”“自动表单填充”等特征的附件;
- 终端EDR工具开启“浏览器脚本监控”,检测从CDN加载的JS是否存在鼠标轨迹检测、蜜罐字段等恶意特征,一旦发现立即阻断执行;
- 禁用终端浏览器自动运行本地HTML文件的功能,强制用户通过文本编辑器打开HTML附件,而非直接双击运行。
- 身份安全加固:让MFA真正成为“最后一道防线”
- 淘汰基于短信、验证码的弱MFA,全面部署FIDO2/WebAuthn等硬件密钥认证,这类认证方式无法被AitM工具劫持;
- 启用会话管理机制,限制单一账户的并发登录数,设置会话超时时间,一旦检测到异常登录行为(如异地登录、陌生设备登录),立即强制登出所有会话;
- 部署身份认证代理,对所有登录请求进行二次校验,校验通过后才允许访问核心业务系统(如CRM、财务系统)。
- 安全意识培训:瞄准商务人群的精准教育
- 针对销售、商务等目标人群,开展专项钓鱼演练,模拟“合同附件+CDN钓鱼”的攻击场景,提升人员识别能力;
- 明确培训要点:遇到预填邮箱的登录页面,务必手动输入官方网址核对;收到陌生的HTML合同附件,切勿直接双击打开,先通过文本编辑器查看源码;
(二) 开发者侧防护:守住开源供应链的第一道关口
- 包管理安全:拒绝“盲装”可疑包
- 安装npm包前,先通过
npm view [包名]查看包的发布者、版本历史、下载量,拒绝下载发布时间短、下载量低、命名可疑的包; - 启用
npm audit命令定期扫描项目依赖,及时发现并移除恶意包; - 配置npm镜像源的安全策略,仅同步经过安全审计的开源包,避免从公网直接拉取未知包。
- 安装npm包前,先通过
- 账户安全:启用双重认证保护npm账户
- 为个人和企业npm账户启用2FA认证,防止账户被劫持后上传恶意包;
- 限制企业npm账户的权限,仅授权核心开发者拥有包的发布权限,定期审计账户操作日志。
四、 未来前瞻:供应链钓鱼攻击的对抗方向
随着开源生态与企业业务的深度绑定,围绕npm、PyPI等开源仓库的攻击将持续升级。未来的攻防对抗,将聚焦三个核心方向:
- 开源仓库的动态信任评估:传统的“黑白名单”模式已失效,需要构建基于包行为、发布者信誉、版本变更的动态信任评分体系,对可疑包实现自动拦截;
- CDN资源的内容溯源:推动CDN服务商建立资源溯源机制,验证所分发的开源包是否与官方仓库的哈希值一致,防止恶意包被缓存分发;
- 零信任身份架构的落地:零信任的“永不信任,始终验证”理念,将成为对抗会话劫持的核心方案。通过持续验证用户身份、设备状态、访问行为,即便会话凭证被劫持,攻击者也无法突破权限边界。
开源生态的便利与风险,从来都是一枚硬币的两面。这27个恶意npm包的曝光,再次敲响警钟:企业的安全防线,不能只停留在终端与网络,更要延伸到开源供应链的每一个环节;而开发者的安全意识,也将成为抵御供应链攻击的第一道,也是最重要的一道屏障。