你真的以为你看到的 PDF 文件名是真的?——Unicode RLO 钓鱼手法拆解

一个文件名叫「2026年度安全审计报告.pdf」,双击之后终端就被控制了。Unicode RLO 攻击利用一个不可见字符欺骗用户视觉,这不是技术漏洞,是人认知的漏洞。

你真的以为你看到的 PDF 文件名是真的?——Unicode RLO 钓鱼手法拆解

一个文件名叫”2026年度安全审计报告.pdf”,双击之后,你的终端就被控制了。它从来就不是一个 PDF——只是文件名里藏了一个你看不见的控制字符,把真正的扩展名推到了你视野之外。

Unicode RLO 钓鱼攻击原理:视觉上显示为PDF文件,实际为可执行文件,中间由不可见的U+202E控制字符连接

安全培训可能忽略的一种”看得见的假文件”

企业安全培训通常会教员工一个基本规则:不要打开来源不明的可执行文件(.exe、.scr、.vbs)。这个规则本身没有问题,问题在于攻击者现在已经不需要你主动运行一个 .exe 了——他们只需要让你相信你看到的文件是 .pdf。

能做到这件事的关键,是一个名为 Right-to-Left Override(RLO) 的 Unicode 控制字符,MITRE ATT&CK 将其编号为 T1036.002(Masquerading: Right-to-Left Override)。它不是一种新的攻击手法,威胁组织如 BlackTech、BRONZE BUTLER、Ke3chang 都曾在实际攻击中使用过它,但直到今天,大多数企业员工甚至部分安全运维人员对它的认知仍然停留在”听说过”的层面。

一个字符如何骗过一双眼睛

U+202E 是 Unicode 标准中定义的一个不可见控制字符,正式名称叫 RIGHT-TO-LEFT OVERRIDE。它做的事情非常直接:改变其之后所有字符的显示方向,从从左到右变成从右到左。

这句话说起来抽象,放在文件名里就很具体了:

一个真实的 Windows 可执行文件名为 March 25 [U+202E]xcod.scr。当 Windows 资源管理器渲染这个名字时,U+202E 之后的所有字符被反转显示。xcod.scr 从右向左读变成了 rcs.docx。用户在屏幕上看到的文件名是 March 25 rcs.docx——一份看起来完全正常的 Word 文档。

但系统知道它的真实身份。文件属性 → 文件类型 那一栏清楚地写着”屏幕保护程序”(.scr 本质上是可执行文件),而不是”Microsoft Word 文档”。攻击者赌的就是用户不会去看属性。

这个手法的精妙之处在于:它没有利用任何系统漏洞,没有触发任何常规杀毒引擎的行为检测。它攻击的不是操作系统,是人的视觉认知。

三重伪装:文件名、图标、诱饵

在实际的攻击场景中,攻击者不会只依赖文件名反转。一套完整的 RLO 钓鱼攻击通常会叠加三层欺骗:

第一层:文件名。 利用 U+202E 让文件的视觉扩展名显示为 .pdf、.docx 或 .xlsx,而真实扩展名是 .scr、.exe 或 .js。

第二层:图标。 攻击者可以给可执行文件指定一个 PDF 阅读器或 Word 的图标。用户在资源管理器里看到的,就是一个带着 Acrobat 图标的”PDF 文件”。

第三层:诱饵文档。 当用户双击这个”PDF 文件”时,恶意程序先执行后台的驻留和回连操作,然后正常打开一份真实的 PDF 或 Word 文档。用户看到内容正常,最后一层怀疑也被打消了。

这三层叠加起来的效果是:用户看到的、双击的和读到的,全都是”这是一份正常文档”的信号——只有系统知道它执行的是一个程序。

从两个方向防御

对这类攻击,防御需要在技术检测和人员意识两个方向同时进行。

技术检测:从文件入口到行为链路

入口侧:检测 Unicode 控制字符。 网关、邮件网关或文件服务器在接收文件时,可以对文件名进行 Unicode 双向文本控制字符的扫描。下面这个正则表达式覆盖常见的左右标记、嵌入、覆盖和隔离字符:

[u200Eu200Fu202A-u202Eu2066-u2069]

命中该模式的文件名应标记为异常,进入隔离或人工复核流程。统一做整段 Unicode 双向文本规范化比只匹配 U+202E 更完整。

终端侧:关联行为链检测。 文件名检测有一个固有弱点——攻击者可以随时更换文件名和图标。更稳定的检测方式是把多个行为事件串起来看。一个典型的 RLO 钓鱼执行链路会留下这样的痕迹:

  1. 资源管理器从下载目录、用户目录或临时目录启动了一个未知程序
  2. 该程序随后拉起浏览器或文档阅读器
  3. 阅读器打开了一个诱饵文档
  4. 主机随后建立异常外连
  5. 临时目录、启动项或计划任务出现新增内容

这个链条中的任何一个环节单独看都可能正常——用户每天打开文档、浏览网页、建立网络连接。但把这五个事件放在一个时间窗口内关联起来,可信度就完全不一样了。

人员意识:三个位置,一个原则

对终端用户来说,记住以下三个检查位置,大部分 RLO 钓鱼攻击就会失效:

位置一:文件属性 → 文件类型。 无论文件名显示为什么,属性面板里写的”文件类型”是操作系统对文件的真实判断。名称像 PDF,类型却是”屏幕保护程序”或”应用程序”——立即停止打开,核验来源。

位置二:数字签名。 检查签名主体、有效状态和文件来源。注意:”有签名”不等于”可信”,但”无签名”或”签名无效”是明显的危险信号。

位置三:系统安全提示。 Windows 对来自互联网的可执行文件会有”文件来自互联网”和”发布者未知”的安全提示。这些提示不是可有可无的弹窗,是最后一道防线。

一个核心原则值得写进所有安全培训材料:视觉扩展名不是安全边界。 用户看到的文件图标、文件名称和打开的文档内容,三者可能都不指向同一个执行对象。

如果文件已经被打开了

发现 RLO 钓鱼文件后的处理工作不能停留在删除原文件。攻击载荷可能已经完成了驻留。需要检查的包括:进程树中是否有异常子进程、临时目录是否新增内容、网络连接是否有异常外连、启动项和计划任务是否被修改。只有确认这些位置都干净,才算完成了一次完整的处置。


DELine 的建议是: Unicode RLO 攻击之所以值得企业认真对待,不是因为它技术多么复杂——恰恰相反,它在技术上非常简单。它的杀伤力来自一个更根本的问题:大多数企业的安全防线在设计时只考虑了”系统如何判断文件”,没有充分考虑”人如何判断文件”。人看到文件名的过程,本质上也是一个需要被保护的攻击面。

把技术检测规则写进网关和终端策略,把检查方法写进员工安全意识培训,两条腿走路,这种”看一眼就能骗过去”的攻击才不会在企业内部找到落脚点。

如果您的企业需要终端安全策略审计、员工安全意识培训体系建设或安全设备选型与联动方案设计,DELine 可以提供从评估到落地的全流程服务。欢迎通过 www.de-line.net联系页面 与我们沟通。