Punycode

作者:{YSYY}@ArkTeam

1. Punycode介绍

Punycode是用于将域名从地方语言所采用的Unicode字符转换为可用于DNS系统的ASCII字符的特殊编码。它将Unicode字符串唯一且可逆地转换为ASCII串(字母,数字和)。Punycode根据RFC 3492标准制定,用于编码国际化域名(IDNInternationalized Domain Names)。

2. 产生背景

早期的域名系统(DNSDomain Name System)只支持英文域名解析,在IDN推出以后,为了保证兼容以前的DNS,让 DNS服务器能看懂方言,所以,对IDN进行Punycode转码,转码后的域名以前缀xn作为开头,表示ASCII兼容编码。所有中文域名的解析也都需要转成Punycode码,然后由DNS解析Punycode码。

例如:

企鹅.com,用 Punycode 转换后为:xn--hoq754q. com

3. 钓鱼思路

IDN欺骗是网址欺骗的手法之一。它利用国际化网域名称(IDN)可以以Unicode字符命名网址的特性,透过同形异义字,鱼目混珠。Punycode可以防止IDN欺骗。在默认情况下,许多web浏览器使用Punycode编码来表示URL中的Unicode字符,以防止同形异义字钓鱼攻击。

20174ChromeFirefoxOpera浏览器经测试能够直接在地址栏中显示Unicode字符,这个漏洞给了钓鱼攻击者们可乘之机。即可注册Unicode域名对应的Punycode转码后的域名,在浏览器中输入网址后会直接显示Unicode字符。

例如:

攻击者注册一个名为:xn--80ak6aa92e.com ,输入到浏览器之后,浏览器会自动还原成apple.com


图1 Punycode钓鱼网址示例

4. 各浏览器情况

(1) 20174月情况

存在问题的浏览器有ChromeFirefoxOpera,但IEEdgeSafari未受影响。


图2 2017.5各种浏览器受影响情况

(2) 201711月情况

ChromeOpera已修复,在地址栏中以Punycode编码形式显示URLFirefox地址栏中默认以Unicode字符显示,但可手动配置成以Punycode编码形式显示。

1) 在地址栏中输入about:config,回车。

2) 在搜索栏中输入punycode

3) 浏览器设置将显示network.IDN_show_punycode参数,双击或者右键选择Toggle,将值改为True,即可配置成以punycode编码形式显示。


图3 2017.11 Firefox应对情况

发表评论

电子邮件地址不会被公开。 必填项已用*标注