研究人员发现,仅需两个特定字符即可利用 Chromium 内核浏览器的显示逻辑缺陷,实施域名抢注与钓鱼攻击。通过混用外观相似的 Unicode 字符,攻击者能让浏览器将虚假网址渲染为与真实热门网站几乎无异的形态,从而误导用户。

尽管利用拼写错误模仿知名域名的手段(如 macrosoft[.]com)已存在多年,但随着浏览器对非 ASCII 兼容字符及同形异义字(homoglyphs)支持的扩展,新的攻击面随之出现。Have I Been Squatted 的研究员 Ian Muscat 和 Leanne Briffa 指出,部分特殊字符仍能可靠地绕过现有安全机制。这些字符允许骗子在底层使用 Punycode 编码运行恶意网站,但在前端视觉上却完美复刻目标域名。
此次研究涉及的关键字符包括:常见于哈萨克语、蒙古语等西里尔字母语言中的「ө」,以及用于豪萨语等语言的带钩拉丁字母「ƙ」。这两个字符在视觉上分别近似于 e/o、i 和 k。基于此,研究人员注册了 20 个高仿域名,例如:
- aррӏө[.]com
- sрасөх[.]com
- oƙta[.]com
- niƙe[.]com
上述 URL 对应的 Punycode 形式如下,这也是浏览器本应显示的版本:
- xn--80a6aa68c8d.com
- xn--80a5aeq0fr0c.com
- xn--ota-f6a.com
- xn--nie-g6a.com
访问由 Have I Been Squatted 注册的这些域名是安全的,它们会跳转至演示页面,详细解析如何绕过浏览器保护。测试表明,这些案例成功突破了基于 Chromium 的浏览器核心安全防线。
绕过原理分析
Chromium 浏览器主要依赖两层防御机制来识别此类欺骗行为。
第一层防御:SafeToDisplayAsUnicode 检查
该函数执行七项顺序检查,旨在识别常见的视觉混淆手段。自 2017 年 Xudong Zheng 展示纯西里尔字符域名 аррӏе.com 后,各大厂商引入了这一机制。其核心逻辑依赖于一份硬编码列表,包含已知用于替代拉丁字母的西里尔字符。该机制具有“全有或全无”的特性:只有当域名中每一个字符都在列表中时,才会触发拦截;若缺少任何一个,检查即被绕过。
截至 Chrome 154(9 月 22 日发布至稳定通道),像 ө、ї 和 ү 这样的字符并未出现在该硬编码列表中,因此被称为“破坏者”。未能通过这七项检查意味着浏览器判定以 Unicode 形式显示是不安全的,转而显示 Punycode,从而暴露其与真实域名的差异。然而,由于新字符不在列表中,这一防线失效。
第二层防御:相似域名比对
Chromium 通过 GetSimilarTopDomain() 函数将域名与流行网站列表进行比对。该过程首先将域名转换为“骨架”(skeleton),去除变音符号(例如 ó 变为 o),然后与近 8,500 个硬编码的流行网站骨架进行匹配。若匹配成功,则强制显示 Punycode。
然而,带钩拉丁字母 K(ƙ)的处理存在漏洞。它没有传统意义上的变音符号,而是作为带有附加组合标记的拉丁字母 k 加入骨架。这导致骨架形成类似 [o k ‘ t a . c o r n] 的结构(此处 m 映射为 rn),无法与原始域名匹配。同样,对于 аррӏө.com,西里尔字母 ө 在骨架中保留了其组合标记,导致不匹配,从而绕过了安全检查。





