防骗小课堂-警惕!IDNs网络钓鱼欺诈

网络钓鱼,通常是指通过大量发送声称来自于银行或者其它知名机构的欺骗性垃圾邮件,意图引诱收件人提交用户名、密码等隐私信息的一种攻击方式。随着互联网日新月异的发展,钓鱼攻击的形式多种多样,比如谎称用户游戏中奖,然后给一个足以以假乱真的领奖页面,一旦登录填入用户名密码,账号将面临被盗的风险;又或者谎称“淘宝订单出问题,需要退款”,提供一个模仿“淘宝”的登录页面让用户操作,一旦用户毫无防备地填入信息,很大可能遭受金钱损失。

在一次次钓鱼和反钓鱼的争斗中,普通用户或多或少学习了一定的识别钓鱼网站的技巧,其中很重要的一个技巧,就是仔细检查访问的URL。通常情况下,除非遇到的是DNS劫持(从域名转换成IP,需要一次完整的DNS查询过程,如果劫持了用户的DNS,会导致域名解析到错误的IP,从而引导用户访问错误的站点,实现欺骗用户的目的),钓鱼网站的URL和真实URL并不一样,比如www.baidu.com.abcdefg.com。虽然在宽度有限的移动端浏览器地址栏中,用户很容易因为疏忽导致被欺骗,但是如果仔细辨别,还是能够发现的。然而,就像中文中的“己”和“已”,西文字符中,同样存在这样的近似字形。通过构造同形异义的域名来实行钓鱼攻击,哪怕是反钓鱼经验丰富的用户,都可能阴沟里翻船,何况普通用户。

来看这样一个例子:

 

/image/2020/03/05/1583379310421161/1.png

/image/2020/03/05/1583379330992486/2.png

第一个图是苹果官网,第二个图是仿冒的一个苹果官网,可以看到,仅仅凭借检查地址栏,用户肉眼很难看出区别。试想,如果第二个域名用来建设一个外观上同苹果一模一样的站点,用户将防不胜防。

要探究产生这个问题的原因和解决方案,不妨简单讨论一下域名演变的历史。最早的时候,如何标识一个网络地址,使用的是点分十进制,也就是所谓IP地址。因为IP不具备语义,不方便记忆,从而诞生了DNS,即域名系统(有兴趣的朋友可以参阅RFC1034和RFC1035),根据协议,域名的合法字符为“a-z”、“A-Z”、“0-9”、“-”和“.”等64个字符。如果仅仅是上述字符,完全不可能遇到上述的同形异义字问题,然而2003年,IETF通过互联网正式公布了与IDNs(Internationalized Domain Names,国际化域名)相关三个标准(RFC3490、RFC3491、RFC3492),可以将八位的国际化统一编码Unicode和ASCII字符之间进行编码转换,能够构成域名的字符集不再局限于ASCII,引入了与英文形状相似的其他语系的字符,从而使得同形异义字的欺骗成为可能;另一方面,某些现代浏览器(如Google Chrome)虽然有一定的防IDNs欺骗机制,然而如果域名的一个完整label使用的字符属于同一个字符集,将不会地址栏在显示Punycode,更有甚者,还会对Punycode自动解码(为了向下兼容旧有的标准,在实际处理中,Unicode字符转换成了Punycode,如上面“https://www.apple.com”例子,同形异义字的Punycode编码是“https://www.xn--80ak6aa92e.com”,如果直接看到的是Punycode编码结果,上当的可能性会小得多)。

那么,要如何防范呢?首先,如果看到的URL,直接就是这种以“xn--”开头的,就要引起警觉,符合这种格式的,大概率就是国际化域名,不要盲目相信地址栏显示的内容;其次,如果看到的是诸如“https://www.аррӏе.com”形式的域名,可以复制域名到浏览器打开,然后再复制地址栏的内容粘贴出来,能够自动解码显示的浏览器一般也是可以自动编码的,一进一出,显示的就是正常的Punycode内容了。另一方面,对于信息类APP开发者而言,可以针对http开头的信息做正则校验,不符合ASCII字符编码的,拒绝识别为URL,不可点击,一定程度上,也能遏制这种类别的欺诈信息传播。

 

[打印文章] [添加收藏]
下一篇:防骗小课堂-海报(1)[ 09-27 ]