[INFO] 什么是 IDN 同形异义字攻击?

国际化域名 (IDN) 同形攻击(也称同形字欺骗/Script Spoofing)是一种钓鱼手段。攻击者利用 Unicode 中不同文字系统(如西里尔字母、希腊字母和拉丁字母)中形状相同或相似、但底层编码不同的字符,构造出视觉上极具迷惑性的假域名。

_案例_:将常规域名 example.com 中的拉丁字母 a,替换为西里尔字母 а(exаmple.com)。用户在视觉上根本无法区分,一旦点击就会被引向完全不同的恶意系统。

🔍 核心对比:同形攻击 vs. 错拼抢注 (Typosquatting)

这两种攻击都依靠“长得像”来欺骗用户,但诱发机制完全不同:

  • 错拼抢注:依赖用户的物理输入失误(如手滑把 bank 打成 bnnk)。
  • 同形攻击:依赖用户的视觉认知盲区。受害者通常是直接点击超链接,毕竟极少有用户会在打字时,意外切到俄语输入法打出一个西里尔字母。
  • _特殊重叠区_:键盘上相近且视觉难以区分的字符(如 l/I、i/j、0/O),往往同时成为这两种攻击的温床。

🛡️ 为什么“拉丁伪装字符”被封杀,而“中文域名”畅通无阻?

技术大前提:所有非 ASCII 字符最终都会被编码为 Punycode(如 xn--...)供 DNS 解析。DNS 技术本身并不排斥任何 Punycode,现在的限制完全是 ICANN 和注册商为了从源头掐断欺诈而设立的行政与业务壁垒。

具体防御机制如下:

1. 严格的“混用脚本限制” (Mixed-Script Restriction)

  • 单一脚本原则:大多数域名注册局(如 Verisign)要求一个域名标签内,不允许混合来自不同语言系统的字符。
  • 共有脚本豁免:拉丁字母 (A-Z) 和数字 (0-9) 被视为“共有脚本”,可以与单一语言结合(如中文+数字 你好123.com 是合法的)。
  • 直接拦截:跨越字形的混用(如拉丁文 + 西里尔文 googIe.com)属于高危混合,会被系统直接拒绝注册。

2. LGR 框架与视觉相似性算法 (Confusables Blocking)

  • LGR 规则与黑名单:ICANN 为各主流语言制定了标签生成规则 (LGR),并维护着一份 Unicode Confusables 列表。如果某个非拉丁字符在视觉上与标准拉丁字母几乎一致(如西里尔的 а),会被列为“保留”或“禁止注册”。
  • 中文的天然屏障:中文字符(方块字)属于“非同形脚本”,其几何结构与拉丁字母差异极大。因为不存在视觉误导全球用户的可能,中文在 LGR 框架下被视为高度安全的 IDN 字符。

3. 繁简变体的语言学保护 (TC/SC Variant Mapping)

  • 正当的变体管理:基于 RFC 4713 等协议,当注册一个中文域名(如 测试.com)时,注册局的 Variant Management 政策会自动锁定或关联其繁体对照版本(測試.com),防止他人利用相似性抢注。
  • 伪装字无此待遇:西里尔字母与拉丁字母之间没有任何“语言学上的等价关联”,纯属“长得像”。注册局判定这种注册毫无正当业务需求,从严治理。

4. 浏览器端的 Punycode 回退机制 (Fallback Penalty)

  • 客户端的最后防线:即便黑客通过边缘注册商拿到了“混血伪装域名”,现代浏览器(Chrome / Firefox)也会进行二重拦截检测。
  • 强制现原形:浏览器会检测字符集分布比例(如检测到一堆拉丁字母中突兀地夹杂着外语符号)。一旦判定为高风险,浏览器将拒绝渲染美观的 Unicode(如 аррӏе.com),而是强制在地址栏显示难看的原码 xn--80ak6aa92e.com。这直接清零了域名的伪装价值。

[WARNING] 补充:Web3 域名的“法外之地”

这套严密的防御体系仅适用于受 ICANN 监管的传统 DNS 体系。在不受中心化监管的 Web3 域名(如 .eth, .sol)领域,同形异义字攻击依然是非常猖獗且致命的钓鱼手段。


Would you like me to 帮你把这篇笔记再扩展出一个专门针对 Web3 域名同形攻击防范的子章节,还是你想直接进入下一个笔记的整理?


本文归档于个人知识库 · 领域:CS & AI · 模块:04 Project_CS_AI/General