当前位置: 首页 > news >正文

隐形Unicode技巧:新型JavaScript混淆方法被用于针对美国PAC附属机构的网络钓鱼攻击

一种创新的JavaScript混淆技术正被积极滥用,该技术利用不可见的Unicode字符将恶意代码伪装成空白,从而在网络钓鱼攻击中有效规避检测。该攻击主要针对美国政治行动委员会(PAC)附属机构。

网络威胁实验室(Juniper Threat Labs)于2025年1月初发现此次攻击。攻击者展现出高度复杂性,包括使用受害者非公开的个性化信息、反调试机制,以及层层包装的跟踪链接。

攻击背景与技术起源

这种混淆技术最早由JavaScript开发者于2024年10月在公开研究中披露。短短几个月内,它便被武器化并投入实际攻击,这凸显了安全研究成果被快速利用的风险。

攻击的核心在于“让JS有效负载隐形”。具体方法是:将JavaScript负载中的每个ASCII字符转换为8位二进制表示,然后用两种不可见的韩文Unicode填充字符替换二进制值(0和1):

  • 韩文半宽填充字符(U+FFA0)代表0;
  • 韩文全宽填充字符(U+3164)代表1。

混淆后的代码作为JavaScript对象的一个属性存储。由于这些韩文填充字符在大多数编辑器和浏览器中渲染为空白,整个有效负载看起来就像一段空白代码。

隐藏在空白中的恶意代码示例(实际攻击脚本中,底部大片“空白”即为不可见字符序列):

(此处图片展示典型攻击脚本截图,空白区域隐藏着二进制编码的有效负载)

如何解码与执行隐藏负载

攻击者使用一个简短的引导脚本(bootstrap script)来恢复和执行隐藏代码。该脚本借助JavaScript Proxy的get()陷阱实现:当代码尝试访问隐藏属性时,Proxy会自动将不可见的韩文填充字符转换回二进制,再重建原始JavaScript代码。

为进一步增强隐蔽性,攻击者还对韩文字符序列进行Base64编码,并加入反调试检查(如调试器断点和定时延迟检测)。如果检测到分析环境,脚本会立即中止攻击并重定向到正常网站。

Phish & Chips: Serving Up Tycoon 2FA's Secrets | eSentire

Base64编码的韩文填充字符序列示例(常见于此类攻击的额外隐藏层):

(此处图片展示Base64编码后的字符序列)

攻击的个性化与规避能力

Juniper分析师指出,此次攻击高度个性化:钓鱼邮件包含受害者非公开信息,初始JavaScript会尝试触发调试器断点,检测到延迟后自动中止并跳转至良性页面。这种“条件执行”机制大大降低了被分析的风险。

此外,整个过程实现简单——只需基本编码知识即可完成,且有效负载可无缝注入合法脚本中,不会轻易引起安全扫描器的怀疑。空白外观显著减少了静态检测的命中率。

Inside Tycoon2FA: How a leading AiTM phishing kit operated at scale | Microsoft Security Blog

与Tycoon 2FA工具包的关联及未来影响

研究发现,攻击中使用的两个域名此前与Tycoon 2FA网络钓鱼工具包有关。这表明该隐形混淆技术可能很快被更广泛的攻击者采用,尤其是在AiTM(Adversary-in-the-Middle)钓鱼场景中。

Tycoon 2FA: an in-depth analysis of the latest version of the AiTM phishing kit

防御建议
  • 增强扫描器:更新安全工具以检测特定韩文填充字符(U+FFA0、U+3164),即使它们表现为空白。
  • 动态分析:优先使用行为检测和沙箱环境,而非仅依赖静态签名。
  • 代码审查:在审查JavaScript时,使用Unicode可视化工具检查隐藏字符。
  • 用户教育:警惕个性化钓鱼邮件,尤其涉及敏感政治或财务信息的场景。

这种“隐形代码”攻击展示了网络威胁演进的速度——从概念演示到真实武器化仅需数月。安全团队需持续关注Unicode相关混淆技术的发展,以有效应对未来变种。

http://www.cnnetsun.cn/news/2020512.html

相关文章:

  • 别只用来抓包了!Burp Suite的Filter、Comparer和Decoder模块,帮你高效分析漏洞与调试API
  • Codex智能编程:告别重复造轮子
  • 杰理之一拖八工具烧录介绍【篇】
  • 从Ext4迁移到Btrfs实战:我的个人服务器数据无损转换全记录与避坑指南
  • OpencvSharp 算子学习教案之 - Cv2.Erode
  • 从GDC论文到UE5蓝图:手把手实现‘惯性化’动画过渡,让你的角色动作更物理
  • QtDataVisualization实战:用C++快速打造一个可交互的3D图表演示器(附完整源码)
  • GLM-4.1V-9B-Base应用场景:在线教育题图自动解析与知识点标注
  • 从收音机到5G:三极管频率特性模型演变史,以及它为什么今天依然重要
  • 手把手复现:用Python和OpenCV一步步理解Marr视觉计算理论的“要素图”
  • 别再手动仿真了!手把手教你配置Vivado 2018.3与ModelSim SE的联合仿真环境
  • 网络‘活地图’实战:用PyHPEcw7库+D3.js打造可点击的拓扑仪表盘
  • 首文双拼的衍生版:首嵋双拼
  • Halcon灰度投影实战:用‘简单’模式搞定二维码定位,告别Blob分析的烦恼
  • 高校大学生论文查重工具全面测评
  • 英雄联盟智能工具包:League Akari 终极使用指南与实战技巧
  • 别再被CORS报错搞懵了!手把手教你用Nginx反向代理5分钟搞定前端跨域
  • DJI Osmo Nano 4/5评测:小巧便携功能强,成冒险家与vlogger新宠!
  • Nebula 1.10 版本发布:支持 IPv6 覆盖网络,解锁多项新特性!
  • 别再手动轮询了!STM32 HAL库串口DMA空闲中断接收不定长数据,一个函数就搞定
  • RK3568开发板实战:如何将定制好的Ubuntu系统打包成可烧写的rootfs镜像
  • Debian 11上Qt程序中文输入失效?手把手教你编译fcitx5-qt插件(Qt6/Qt5通用)
  • 给芯片设计新人的保姆级面积估算指南:从IO、Standard Cell到Macro Block怎么算?
  • 别再只用RGB图做分割了!手把手教你用Python融合深度图(RGB-D)提升分割精度
  • 使用Nemotron构建文档处理RAG管道
  • Docker 27资源监控增强配置:3分钟定位CPU爆表、内存泄漏与网络抖动的7个隐藏参数
  • Docker 27监控能力跃迁实录(27项增强配置权威白皮书)
  • 从PyTorch到海光DCU:手把手教你用MIGraphX部署ResNet50推理服务(附完整C++/Python代码)
  • 手把手带你用Python实现TimSort算法(附完整代码与调试技巧)
  • 从ELMo到BERT:手把手教你理解NLP预训练模型的进化史(附代码示例)