0x01 Punycode钓鱼攻击
1.1什么是网络钓鱼?
网络钓鱼(Phishing,与钓鱼的英语fishing发音相近,又名钓鱼法或钓鱼式攻击)是通过大量发送声称来自于银行或其他知名机构的欺骗性垃圾邮件,意图引诱收信人给出敏感信息(如用户名、口令、帐号 ID 、 ATM PIN 码或信用卡详细信息)的一种攻击方式。
攻击者利用欺骗性的电子邮件和伪造的 Web 站点来进行网络诈骗活动,受骗者往往会泄露自己的私人资料,如信用卡号、银行卡账户、身份证号等内容。诈骗者通常会将自己伪装成网络银行、在线零售商和信用卡公司等可信的品牌,骗取用户的私人信息。
PS:来自百度百科的回答
例如常见的电子邮件欺骗,又称钓鱼邮件攻击,是电子邮件使用过程中面临的主要威胁。
如何一眼看穿电子邮件诈骗呢?其实,只要细心就能发现。
·紧迫感 — 电子邮件声称如果不回复密码或不点击链接,会有什么严重后果。
·拼写错误 — 邮件中有明显或故意拼写错误,这是为了避开垃圾邮件过滤器的安全检查。
·发送和回复地址不同 — 电子邮件声称来自“A.com”,但回复地址却是“B.com”。
·产品或服务不一致 — 牛头不对马嘴,腾讯QQ公司发邮件说你的陌陌账号存在风险。
·字符相似性混淆 — boss@a.com 和 b0ss@a.com ,你发现了有什么不同吗?
1.2钓鱼可能产生的危害有哪些?
例如:
文件通过PNG隐写技术将真正的模块隐藏在自身携带的图片资源中,在运行时从图片中动态提取出恶意模块,然后直接在内存(PE)中加载执行。
1.3钓鱼四步走
·看天
根据不同国家或地区,看看当前国情和时事,发现哪些目标和人群适合钓鱼攻击,进行定点钓鱼。
·选竿
选择特定的目标人群。
·做饵
制作具有诱惑性的文件、图片(隐写术)、木马、执行文件等等钓鱼工具(免杀)。
·上大鱼
最后,就是等待傻鱼的上钩咯。
0x02 Punycode钓鱼攻击介绍
钓鱼攻击,“几乎无法检测”,即便平时十分谨慎的用户也可能无法逃过欺骗。
在某些钓鱼场景中,黑客可利用Chrome、Firefox和Opera浏览器中的已知漏洞,将虚假的域名伪装成苹果、谷歌或者亚马逊网站,以窃取用户的登录凭证、金融凭证或其他敏感信息。
2.1同形异义字攻击
同形异义字攻击自2001年以来就已为人所知,但是浏览器厂商修复该问题的过程却很艰难。这种欺骗攻击就是网址看起来是合法的,但实际上不是,因为其中的一个字符或者多个字符已经被Unicode字符代替了。
许多Unicode字符,代表的是国际化的域名中的希腊、斯拉夫、亚美尼亚字母,看起来跟拉丁字母一样,但是计算机却会把他们处理成完全不一样网的网址。
比如说,斯拉夫字母“а” (U+0430)和拉丁字母“a”(U+0041)会被浏览器处理成不同的字符,但是在地址栏当中都显示为“a”。
备注:
早期的DNS(Domain Name System)是只支持英文域名解析。域名的编码字符集是ASCII码。在IDNs(国际化域名international domain names)推出后,为了保证兼容以前的DNS,所以,对IDNs进行punycode转码,转码后的punycode就由26个英文字母+10个数字,还有‘-’组成。
ASCII码:ASCII码是基于拉丁字母的一套电脑编程系统,主要用于显示现代英语和其他西欧语言。它被设计为用1个字节来表示一个字符,所以ASCII码表最多只能表示2**8=256个字符。实际上ASCII码表中只有128个字符,剩余的128个字符是预留扩展用的。
Unicode:随着世界互联网的形成和发展,各国的人们开始有了互相交流的需要。但是这个时候就存在一个问题,每个国家所使用的字符编码表都是不同的。这个时候,人们希望有一个世界统一的字符编码表来存放所有国家所使用的文字和符号,这就是Unicode。Unicode又被称为 统一码、万国码、单一码,它是为了解决传统的字符编码方案的局限性而产生的,它为每种语言中的每个字符设定了统一并且为之一的二进制编码。Unicode规定所有的字符和符号最少由2个字节(16位)来表示,所以Unicode码可以表示的最少字符个数为2**16=65536。
IDN:国际化域名(英语:Internationalized Domain Name,缩写:IDN)又称特殊字符域名,是指部分或完全使用特殊的文字或字母组成的互联网域名,包括法语、阿拉伯语、中文、斯拉夫语、泰米尔语、希伯来语或拉丁字母等非英文字母,这些文字经多字节万国码编译而成。IDN的域名是使用unicode字符集。
计算与知名网址的相似度
此时这个待检测域名被映射成一个它所有可能的相似域名集合,这时候将top2w的知名网址域名集合与这个相似域名集合做一个交集,如果该域名集合是由IDN域名衍生而来的,则只要这个域名集合与知名网站集合有交集则认定这个域名有高度伪造嫌疑,因为常常使用IDN域名的情况通常是有伪造嫌疑的。
如果该域名集合不是由IDN域名衍生而来的,则判断与知名网站域名交集个数是否为1(这里的意义在于伪造的域名具有极强的针对性)而且判断这两个域名之间的编辑距离是否为1。
因为部分知名网站中的域名本身就十分相似,如果这个‘恶意’域名与多个知名网站域名相似,则反映出针对性不强,且更容易误报。
再者,根据统计,90%的域名伪造行为编辑距离都等于1,也就是说,大部分伪造域名只会替换其中的一个字符(毕竟字符替换多了,人就更容易察觉其中的不同)。
2.2那么Chrome、Firefox和Opera浏览器的漏洞又是来自哪里?
经测试Chrome、Firefox和Opera能够直接在地址栏中显示Unicode字符,我们即可注册Unicode域名对应的Punycode转码后的域名,在浏览器中输入网址后会直接显示Unicode字符。
一般来讲,我们在打开某一个陌生的页面后,会查看浏览器加载出来后检查地址栏,看看地址是否由有效的HTTPS连接提供或域名是不是就是真的域名(例如:www.baidu.com)。对吧?
本次,我们主要要讲的是利用Punycode转码后的域名,伪造欺骗。页面是由发现这一攻击的中国安全研究员Xudong Zheng创建的,点击去看看。
www.xn--80ak6aa92e.com
那么,我们来分析哈,我们本来是想要访问浏览器后,能直接被浏览器解析为:www.apple.com 的。
先看看www.xn—80ak6aa92e.com解析成中文域名后,是什么样的,如下:
https://www.chromedownloads.net/chrome64win-canary/list_5_2.html
如果有安装谷歌,请先卸载掉当前版本(我这里是最新版本),再安装 56.0.2906.0_chrome64_canary_windows_installer.exe (离线安装版),此时,我们在谷歌浏览器旧版本(56)里访问www.xn—80ak6aa92e.com之后,谷歌浏览器旧版本(56)会自动还原成www.apple.com,在该版本浏览器中,我们的浏览器是容易遭受“同形异义字攻击”的。
因为56.0.2906.0_chrome64_canary_windows_installer.exe的浏览器只将单一语言采用的Unicode编码转换为Ponycode URL (比如汉语或者日语),但是如果一个域名当中包含来自多个语言的字符,浏览器就无法分辨了。
那么,我们用最新版的谷歌浏览器(本博主最新版谷歌浏览器为: 83.0.4103.61(正式版本))再次访问www.xn—80ak6aa92e.com试试呢?看看结果如何
从上图,我们可以看出浏览器并没有将URL域名转发为www.apple.com ,可见在新版本中已修复该漏洞。
Google已经在Chrome Canary 59中修复了这一漏洞,而且发布Chrome Stable 58时,会给出永久的修复方案。
与此同时,建议可能受此钓鱼攻击影响的用户暂时关闭浏览器中的Punycode支持,来分辨钓鱼域名,缓解此攻击。
Punycode的攻击方式存在两个明显的优势,导致常被攻击者选取用来攻击:
Masquarading:从肉眼上很难区分正常域名和punycode伪装的域名,进行网络钓鱼的成功率很高。
Evasion:从安全防护的角度而言,通常会因为避免大范围误报而把含关键词的域名列为白名单,所以可以有效的绕过安全防护产品的威胁情报检测等功能。
2.3如何防御Punycode钓鱼攻击呢?
用户在点击任何通过短信或IM应用程序共享的链接之前应保持警惕,即使它们来自于一位可信的联系人。IDN格式显示由浏览器设计控制,最终用户在控制如何显示URL有局限性。主要和最有效的方法是利用密码管理器在输入密码之前检查URL,这可有效降低用户向同形异义网址钓鱼网站输入凭证的机会。辅助检查将有效检测URL以查看是否有任何明显的字符切换。
低版本的用户禁用浏览器的punycode支持
其它浏览器貌似旧版本也有,感兴趣的可自行搜索。
参考链接:
https://mp.weixin.qq.com/s/yaN1WkAPRaYlLuekvo8zHg
https://www.anquanke.com/post/id/189066#h2-1
https://www.anquanke.com/post/id/147104
https://prsdigg.com/articles/8ed62523c167e2f3df779242e486d58089e87e381c3d40d09f14e4df0cdc1385