MENU

浏览器安全:域名欺骗钓鱼攻击

April 20, 2017 • Security

URL 的“可视化”问题——字形欺骗钓鱼攻击

顾名思义,攻击者会通过改变大小写或使用特殊字符的方式注册一个同要假冒的网站相似的域名,并且大多数浏览器也是以无衬线字体显示URL的,从而造成大多数用户缺少判断一个域名真假的能力。

例如:

paypaI.com - paypal.com
paypal-user.com - paypal.com
taoba0.com - taobao.com
tma1l.com - tmall.com
....

各字体、浏览器下的显示区别:

EvQRJ3Y.png

fqUbyq7.png

攻击案例:《 Would you fall for www.paypa1.com?

国际化域名字形欺骗攻击

国际化域名字形欺骗攻击( IDN Homograph Attacks - Wikipedia )是通过利用视觉相似性或某些字符(unicode、Punycode、ASCII)和符号、字母外形等特性进行欺骗受害者的视觉判断的攻击方法。

例如:

Oo
аa

me2I3an.jpg

不同字形的英文O:

Bru63qv.png

攻击案例: https://www.xudongz.com/blog/2017/idn-phishing/

3MvMJjZ.png

jInqA3e.png

Chrome会在用户输入URL时同时显示punycode以提示用户域名里有Unicode字符,随让大多数注册商都不允许杂混英文的国际域名注册,但还是不能防止由形近字符组成的域名。

使用西里尔字母 A/a(U+0410/U+0430)来钓鱼伪造支付宝域名:

memEBbM.png

自纠错与Unicode字符分解映射

浏览器自身对用户输入会有一定的纠正逻辑,例如输入少个斜线的域名"http:/www.rinige.com",浏览器会自动纠正成"http://www.rinige.com"。同理输入"http://www.rinige。com",浏览器也会把句号转换成句点。

相对于.pw后缀的域名,Unicode中也有个形近字符"pW"。"pW"在chrome中并不会转换成punycode,而是会在其标准化函数中将该Unicode字符按照映射分解成两个ASCII字符"pw",然后重点向到http://xxx.pw

rqIviem.png

分解映射(DM,Decomposition Mapping)可以参考: http://scripts.sil.org/cms/scripts/page.php?item_id=IWS-Chapter04b#a9054ead 中的7.5小节。Unicode字符和DM的关系可以查询Unicode表,也可以写用Python写个小程序去遍历获得。在Python中引用unicodedata库并使用unicodedata.decomposition(unichr)方法来完成分解。

遍历所有Unicode字符就能得到所有能够分解的字符,例如"pW"的例子:分解0x33BA(pW)之后得到字符0070和0057,这就是p和W的ASCII码。

UzqeUrA.png

#!/usr/bin/python

import unicodedata;

print(unicodedata.decomposition(unichr(0x33BA)));

执行

python test.py
<square> 0070 0057

登录信息钓鱼攻击

利用URL中的登录信息的部分,使用 http://www.rinige.cm@evil.com/ 的形式来将evil.com伪装成www.rinige.com来钓鱼。

参考

Archives QR Code
QR Code for this page
Tipping QR Code