一种几乎无法被检测到的Punycode钓鱼攻击,Chrome、Firefox和Opera等浏览器都中招
发布日期:
2017-04-20
来源:
freebuf
转载地址:
http://www.freebuf.com/news/132240.html

国内的安全专家最近发现一种新的钓鱼攻击,“几乎无法检测”,即便平时十分谨慎的用户也可能无法逃过欺骗。黑客可利用Chrome、Firefox和Opera浏览器中的已知漏洞,将虚假的域名伪装成苹果、谷歌或者亚马逊网站,以窃取用户的登录凭证、金融凭证或其他敏感信息。
        防钓鱼的最佳方式是什么?一般来讲,我们会在页面加载出来后检查地址栏,看看地址是否由有效的HTTPS连接提供。对吧?
        那么,在继续深入之前,我们来看看这个页面。页面是由发现这一攻击的中国安全研究员Xudong Zheng创建的,点击去看看

如果你的浏览器显示的地址是“apple.com”,并有SSL安全认证的,但是页面内容却来自另一个服务器(如上图所示),那么你的浏览器就易遭受“同形异义字攻击”。
        Wordfence的安全专家们也创建了另一个PoC网站,展示了同一个漏洞;这个网站仿冒的是“epic.com”的域。用Chrome、Firefox来访问,看看是不是很神奇?

        同形异义字攻击自2001年以来就已为人所知,但是浏览器厂商修复该问题的过程却很艰难。这种欺骗攻击就是网址看起来是合法的,但实际上不是,因为其中的一个字符或者多个字符已经被Unicode字符代替了。
        许多Unicode字符,代表的是国际化的域名中的希腊、斯拉夫、亚美尼亚字母,看起来跟拉丁字母一样,但是计算机却会把他们处理成完全不一样网的网址。
        比如说,斯拉夫字母“а” (U+0430)和拉丁字母“a”(U+0041)会被浏览器处理成不同的字符,但是在地址栏当中都显示为“a”。
        Punycode钓鱼攻击
        在默认情况下,许多web浏览器使用“Punycode”编码来表示URL中的Unicode字符,以防止同形异义字钓鱼攻击。Punycode是浏览器使用的特殊编码,目的是将Unicode字符转义成字符数目有限的ASCII 码字符集(A-Z,0-9),由国际化域名(IDN)系统支持。
        比如说,中文域名“短.co”用Punycode来表示就是“xn--s7y.co”。
根据Zheng的博客,这个漏洞所依赖的基础是:浏览器只将单一语言采用的Unicode编码转换为Ponycode URL (比如汉语或者日语),但是如果一个域名当中包含来自多个语言的字符,浏览器就无法分辨了。
        研究人员利用这个漏洞注册了xn--80ak6aa92e.com域名,绕过了保护,并在所有存在上述漏洞的浏览器中显示为“apple.com”,包括Chrome、Firefox和Opera,不过IE、Edge、Safari、Brave、Vivaldi并不存在该漏洞。
        此处的xn前缀是一个“ASCII兼容编码”前缀,意味着浏览器采用Punycode编码来代表Unicode字符,因为Zheng用到了斯拉夫语的“а” (U+0430)而非ASCII的“a”(U+0041),浏览器的防御措施也就失效了。
        Zheng已于一月份向受影响的浏览器厂商报告了该问题,包括Google和Mozilla。Mozilla目前还在商讨解决方案,Google已经在Chrome Canary 59中修复了这一漏洞,而且会在本月晚些时候发布Chrome Stable 58时,给出永久的修复方案。
        与此同时,建议可能受此钓鱼攻击影响的用户暂时关闭浏览器中的Punycode支持,来分辨钓鱼域名,缓解此攻击。
        Firefox用户缓解方案
        Firefox用户可根据以下步骤,手动开启缓解方法:
        1. 在浏览器地址栏中输入about:config,并按回车键。
        2. 在搜索栏中输入Punycode。
        3. 浏览器设置将显示network.IDN_show_punycode参数,双击或者右键选择Toggle,将值改为“True”。
        Chrome和Opera中并没有类似的设置,来手动关闭Punycode URL转义,所以Chrome用户请耐心等待几周,等待Stable 58发布。
        同时也建议用户在手动输入重要网站URL,包括Gmail、Facebook、Twitter、Yahoo及银行网站,不要点击某些网站或者邮件当中的上述网站链接,避免遭遇此钓鱼攻击。