Unicode欺骗攻击

参考 https://www.ccvalue.cn/article/1403910.html
https://www.wenwenya.com/anquan/474965.html
https://www.51cto.com/article/692172.html

同形异意攻击(Homoglyph Attack)

同形异意攻击(Homoglyph Attack)是非常古老的一种视觉欺骗攻击方式。在机械打字机时代,很多打字机为了简化设计和降低制造及维护成本,键盘上没有单独的 1 和 0。打字员会使用小写字母 L 和大写字母 i 来代替数字 1,使用大写字母 O 来代替数字 0。
在此之后,打字机被文字处理器所代替,信息化时代逐步到来,字符编码也开始由 ASCII 字符集逐渐扩充到 Unicode 字符集。

Unicode 视觉欺骗

Unicode 视觉欺骗取决于视觉上可以混淆的字符串:两个 Unicode 字符串外观上非常相似,在通常的屏幕分辨率下,它们以小尺寸的普通字体出现,很容易让人们误认为是另一个。

字形渲染

  • 字符
    当字体或渲染引擎对字符或字符序列的支持不足时,就使得本应该在视觉上可以区分的字符或字符序列出现新的问题–视觉混淆。浏览器厂商对于地址栏上的 IDN 欺骗问题,一直在做积极的防御,通常是在浏览器里维护一个重要域名列表,如果一个域名和列表中的域名同形异议,则将其转化为 Punycode 编码显示。
    当多个不同字符组合后可能视觉外观是相同的。例如字符 U + 0BB6 SHA 和 U + 0BB8 SA 通常非常不同。但这两个组合的字符序列,视觉感官上完全相同。底层的二进制是不同的。

    第一步 两者是可以肉眼区分的,但是金国第二、三、四步处理后,合成了中间肉眼看起来一毛一样的字符,但是它们底层是不一样的,也就是类似于真假美猴王的故事
    多字符组合不仅仅是视觉欺骗,有时这种多字符组合也可以导致系统内存崩溃(CVE-2018-4124)
  • 表情符号
    Emoji 是象形文字(图形符号),通常以彩色卡通形式呈现并在文本中内联使用。它们代表面部,天气,车辆和建筑物,食物和饮料,动物和植物,或代表情感,感觉或活动的图标。
    在浏览器地址栏中直接渲染 U+1F512 这个编码也是相当危险的。因为它和 HTTPS 安全小锁外观上非常相似。攻击者可以对其进行安全小锁的伪造。

混合脚本 & PunyCode

希腊小写字母 Omicron 和拉丁文 o 外观是非常相似的。

  • 域名
    域名由两组或两组以上的 ASCII 或各国语言字符构成,各组字符间由点号分隔开,最右边的字符组称为顶级域名或一级域名、倒数第二组称为二级域名、倒数第三组称为三级域名、以此类推。顶级域名又分为三类:一是国家和地区顶级域名(country code top-level domains,简称 ccTLDs [1] ),200 多个国家都按照 ISO3166 国家代码分配了顶级域名,例如中国是.cn,日本是.jp 等;二是通用顶级域名(generic top-level domains,简称 gTLDs),例如表示工商企业的.com,表示网络提供商的 .net,表示非盈利组织的 .org 等。三是新顶级域名(New gTLD)如通用的.xyz、代表 “高端” 的.top、代表 “红色” 的.red、代表 “人” 的.ren 等一千多种。
    很久之前,域名只允许包含拉丁字母 A-Z,数字和一些其他字符(ASCII 字符集)。之后大家发现,仅仅支持 ASCII 码的域名可能是有问题的,因为世界上还有很多非拉丁文语系的国家和地区,他们也渴望在域名中使用自己的语言符号。后来经过多次提案讨论,在 2003 年发布了国际化域名的规范 [rfc3490],它允许大多数的 Unicode 在域名中使用,普遍将这个规范称为 IDNA2003。之后在 2010 年批准发布了对 IDNA2003 的修订版 [rfc5895],称这个修订版为 IDNA2008。但 IDNA2003 和 IDNA2008 并没有有效的解决国际化域名中的某些问题。随后,Unicode 联盟发布了 [UTS-46] 解决了某些兼容性的问题。
    在 IDNA 中使用 PunyCode 算法来实现非 ASCII 域名到 ASCII 域名的转换。PunyCode 算法可以将任何一个非 ASCII 的 Unicode 字符串唯一映射为一个仅使用英文字母、数字和连字符的字符串,编码的域名在前面都加上了 xn-- 来表明这是一个 PunyCode 编码。
  • [CVE-2018-4277]
    在苹果产品中编码 latin small letter dum (U+A771) 渲染的字形和 latin small letter d (U+0064) 极为相似
    从 Unicode 中 (U+A771) 的字形标准可以发现 d 后面应该还有一个小撇,但是在苹果产品中把这个完全忽略掉了。

    可以发现该作者发现的漏洞在 Safari 中都是显示 d
    该作者成功注册了真实的域名和 SSL 证书
    SSL 证书就是遵守 SSL 协议,由受信任的数字证书颁发机构 CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。
    到这里该作者确定了整个欺骗流程是完全可行的,那么攻击者可以伪造域名中有 d 的所有域名。在 Ggoogle 统计的 Top 10k 域名中,大约有超过 25% 的网站域名中有 d 这个字符。这些网站的域名都可以被伪造。

双向文本

阿拉伯和希伯来语是从右往左阅读的,这在一些场景下可能造成问题。例如一个名为 txt.exe ,加入 Unicode 的控制字符后,在用户界面看起来是 exe.txt ,这样就有可能导致用户的误判。

在一个 URL 中,经常会遇到多种方向性(弱性、中性、强性)的字符同时存在的情况。虽然 Unicode 双向算法使用一组精确的规则来确定最终的视觉呈现,但是多种方向性的文本序列在呈现时,还是可能导致文本序列无法清晰地被阅读,或者可能在视觉上混淆。(多个方向阅读的文本同时存在,造成无法正确安全处理)

  • CVE-2018-4205

组合字符

在拉丁文字中,最常见的组合字符为附加符号(包含重音号)。例如组合字符序列(Combining character sequence):ḱṷṓn(U + 006B U + 0301 U + 0075 U + 032D U + 006F U + 0304 U + 0301 U + 006E)
如果组合字符序列的域名不被浏览器解析为 punycode 编码,就有可能产生视觉欺骗。例如 google.com 域名中的字符 + 组合字符后,如果也不被使用 punycode 编码,视觉上就可能发生欺骗。googlè.comgoogle.com ,用户很难分清楚,并且在分辨率很高的显示器中,需要 “鹰睛” 去识别。

访问量 访客