0x01前言

老是收到钓鱼邮件,钓鱼网站,所以最近进行了一些学习,了解到一个有意思的东西——同形异义词。

0x02背景

自从 ICANN 二十多年前在域名(称为国际化域名或简称 IDN)中引入Unicode 以来,一系列全新的安全问题也随之浮出水面,同时还可能使用不同的字母和Unicode 字符注册域名。例如存在汉字,俄语等不同语言注册的域名,也由此产生出一些安全问题。

在不同的语言中可能有很多相似的字母,例如英文中的a和俄语中а,两者用肉眼很难分辨但是在浏览器尽心解析时却不同,也由此我们可以来伪造一些类似的域名进行钓鱼攻击,例如构造出了https://www.apple.com(拉丁文)和https://аррӏе.com/(西里尔语)两者几乎无法做出区分。

DNS 系统并不能理解 Unicode,因此需要一种适应 ascii 专用系统的策略。 因此,发明 Punycode  是为了将包含 Unicode 符号的域名翻译成 ASCII 码,这样 DNS 服务器就可以正常工作了。对于防范这种攻击,chrome会将其翻译为Punycode,但是火狐等浏览器并不会对其进行解析,也因此我在这里进行了一下复现。

0x03正文

首先我使用这个工具https://github.com/loganmeetsworld/homographs-talk ha-finder能进行相似域名的搜索,前100万个域名,配好ruby环境并将相关库装配成功后,开始跑,发现了很多相关可以利用的域名,这里我选择了china.com的域名,是一个军事迷的论坛,因为写的比较简陋比较容易进行克隆,然后在godday上氪了个金买了个伪造域名сһіпа.com(好贵啊花了我80多大洋),然后利用cloudflare将域名解析到服务器上,这里我们伪造他的登录界面链接是https://passport.china.com/

这里我利用https://github.com/trustedsec/social-engineer-toolkit setoolkit这个社工工具,来进行钓鱼网站的制作具体命令不在这里赘述,制造好后,将cf的二级域名passport解析到我们的vps上

成功跑起来,然后我们访问我们伪造的网站进行一下测试,输入账号test和密码test123,后台成功抓住,

 

如果想要让钓鱼网站更加真实还可以配置ssl证书,这里就不弄了(太麻烦了)。然后我们看下chrome里面我的伪造域名会变成什么样子。

看到域名被重新编码。

0x04总结

可混淆的同形异义词是一类针对互联网用户的攻击,自 Unicode 域名出现以来已经存在了近20年。 同形异义词在计算机安全中的风险已经为人所知,并且已经得到了比较广泛的关注度,但是我们仍然不时地看到与同形异义词相关的攻击重新出现。

尽管这类攻击已经存在了一段时间,但人们很少关注这类攻击,因为它们通常被视为危害不大,而且通常属于社会工程学的范畴——这并不总是应用程序的威胁模型的一部分,人们经常假定用户们可以自行判断安全风险,但事实上,我认为在设计应用程序时可以做得更好来避免这类攻击。

最后,应用程序安全团队应该加强他们的程序的安全性,积极防止此类攻击的发生(就像谷歌设计 Chrome 浏览器那样注重细节) ,而不是指责注册商、依靠用户自己做到不上当或者等待 ICANN 拿出一个完美的解决方案来解决问题。