一、前语

2022 年 9 月 13 日,Unicode 15.0 正式版发布。在 Unicode 15.0 中添加了 4,489 个字符,一共字符数量到达了 149,186 个。这些新增内容包括 2 个新脚本,一共脚本数量到达 161 个,以及 20 个新的表情符号字符。一起,几个重要的 Unicode 规范也随着 15.0 版别进行了更新,这其间就包括 Unicode 安全机制(UTS#39)这个规范,它意在削减因 Unicode 字符视觉诈骗带来的同形异意进犯(Homoglyph Attack)。

同形异意进犯(Homoglyph Attack)是十分古老的一种视觉诈骗进犯方式。在机械打字机时代,许多打字机为了简化规划和下降制造及保护本钱,键盘上没有独自的 1 和 0。打字员会运用小写字母 L 和大写字母 i 来替代数字 1,运用大写字母 O 来替代数字 0。当这些相同的打字员在 70 年代和 80 年代初转变为计算机键盘操作员时,他们的旧键盘习惯在他们的新职业中持续存在,并成为极大紊乱的源泉。这应该是视觉混杂、同形异意进犯集中爆发的一个时期。

Unicode 视觉欺骗攻击深度解析

在此之后,打字机被文字处理器所替代,信息化时代逐渐到来,字符编码也开端由 ASCII 字符集逐渐扩充到 Unicode 字符集。咱们开端运用浏览器或其他应用客户端来出现文本,那些在某些语境中不适合运用同形字书写 URL、公式、源代码、ID 等等,其类似的外观持续使得用户或许在视觉上无法区别。

Unicode 视觉诈骗取决于视觉上能够混杂的字符串:两个 Unicode 字符串外观上十分类似,在一般的屏幕分辨率下,它们以小尺度的一般字体出现,很简单让人们误认为是另一个。视觉混杂没有明显的规矩:当尺度满足小时,许多字符都看起来像其他字符。“屏幕分辨率下的小尺度”是指大多数脚本运用 9-12 像素的字体。易混杂性还取决于字体的风格:关于传统的希伯来字体,许多字符只能经过细微的差别来区别,而这些细微差别或许在小尺度时丢失。在某些状况下,字符序列也可用于诈骗:例如,“rn”(“r”后跟“n”)在许多 sans-serif 字体中与“m”在视觉上混杂。

近些年来,因 Unicode 编码诈骗发生了许多歹意进犯事情,人为或编译器或 AI 都或许因 Unicode 诈骗发生过错的判断和解析。例如 2021 年有研讨人员在谷歌等商业系统中运用 Unicode 的这些特别字符对 NLP 模型进行对抗进犯。他们经过一些不可察觉的编码注入——比方一个不可见字符、同形符、重新排序或删去的操作字符,能够显著下降一些模型的性能,大多数模型都或许在功能上失灵(https://arxiv.org/abs/2106.09898)。

Unicode 视觉欺骗攻击深度解析

2022 年 Trezor 这款知名的硬件钱包出现了很多的网络垂钓网站,垂钓链接https://suite.trẹzor.com。这个垂钓链接和实在 Trezor 官方网站 trezor.io 极为类似。(此案例来源于《区块链黑暗森林自救手册》:https://github.com/slowmist/Blockchain-dark-forest-selfguard-handbook/blob/main/README_CN.md)

Unicode 视觉欺骗攻击深度解析

尽管根据客户端的尤其是浏览器端的抵御视觉诈骗的防护措施一向在完善,但并没有办法彻底封堵住这种进犯。榜首,视觉诈骗是一种很难被彻底消亡的进犯,由于在满足小的尺度状况下人本身的生理视觉系统也是无法分辨的;第二,Unicode 字符集十分庞大,而且在不断的添加;第三,需要规范安排、浏览器开发商、域名注册商等多方共同协作去完成。

本文首要研讨当下 Unicode 中因字形烘托、混合脚本、PunyCode、双向文本、组合字符引起的视觉诈骗问题,结合作者发现的不同类型的 Unicode 视觉诈骗缝隙,分享缝隙挖掘过程办法并给出一些防护的思路。

Unicode 视觉欺骗攻击深度解析

二、字形烘托带来的安全风险

当字体或烘托引擎对字符或字符序列的支撑缺乏时,就使得本应该在视觉上能够区别的字符或字符序列出现新的问题--视觉混杂。尤其是这些字符被做为要害的信息出现时,比方在浏览器重要的安全指示器地址栏中,这种视觉诈骗的损害就会显而易见。浏览器厂商关于地址栏上的 IDN 诈骗问题,一向在做积极的防护,一般是在浏览器里保护一个重要域名列表,假如一个域名和列表中的域名同形贰言,则将其转化为 Punycode 编码显现。

烘托支撑缺乏,直接导致每一个字符的字形含义往往超出咱们的预期,这种不确认性使得视觉诈骗随时都或许发生。那么字形到底是什么,它和字型、字符、字体有什么关系,包括 Unicode 中越来越火的 Emoji 表情它是字符吗?其间一些根本的名词概念非专业人士经常混杂,咱们先扼要了解下。

Unicode 视觉欺骗攻击深度解析

字体(英语:Typeface)指的是一组字符的规划,一般包括字母、一组数字和一组标点符号。也常包括表意字符以及制图符号。每个字体都是字形的调集,比方宋体、黑体等。 有些字体技能十分强壮,比方 TrueType/OpenType,它们能够根据分辨率、系统平台、语言等来挑选显现最佳的形状。可是,它也能够用于安全进犯,由于它满足强壮,能够在打印时将屏幕上的“$ 100.00”外观更改为“$ 200.00”。此外,层叠样式表(CSS)能够更改为不同的字体,用于打印与屏幕显现,这能够运用更多可混杂字体。这些问题并非特定于 Unicode。为了下降此类缝隙利用的风险,程序员和用户应该只答应可信任的字体。

字型(英语:font;传统英式英语:fount)是指印刷行业中某一整套具有相相同式和尺码的字形,例如一整套用于内文的宋体 5 号字、一整套用于标题的 10 号字就叫一套字型。电脑早期用点阵字,依然有字型概念,相同一套风格如中易宋体,一套字型是指一整套 15×16 像素或一整套 24×24 像素的字。矢量字型出现后,同一套风格字型已不必制造不同像素字型,只需制造一套即可随意缩放,“字型”与“字体”之间的界限开端模楜。一般的英语运用者相同分不清“字型”(Font)与“字体”(Typeface)的别离。

字形(英语:glyph),又称字图或书形,是指字的形体。中华人民共和国国家规范 GB/T 16964《信息技能·字型信息交换》中界说字形为“一个能够辨认的抽象的图形符号,它不依赖于任何特定的规划”。在语言学中,字(character)是语意的最根本单位,即语素;字形是指为了表达这个含义的详细表达。同一字能够有不同的字形,而不影响其表达的意思,例如拉丁字母榜首个字母能够写作 a 或 ɑ,汉字中的“強/强”、“戶/户/戸”。

Unicode 视觉欺骗攻击深度解析

在杂乱的脚本(如阿拉伯语和南亚语脚本)中,字符或许会根据周围的字符更改形状。

(1)字形能够随周围环境所改变

3 个 arabic letter heh (U+0647) 组合在一起

Unicode 视觉欺骗攻击深度解析

(2)多个字符能够发生一个字形

f = latin small letter f (U+0066)

i = latin small letter i (U+0069)

Unicode 视觉欺骗攻击深度解析

咱们来看一个和视觉有关的,当多个不同字符组合后或许视觉外观是相同的。例如字符 U + 0BB6 SHA 和 U + 0BB8 SA 一般十分不同。但这两个组合的字符序列,视觉感官上彻底相同。底层的二进制是不同的。

Unicode 视觉欺骗攻击深度解析

其实多字符组合不只是是视觉诈骗,有时这种多字符组合也能够导致系统内存溃散。CVE-2018-4124 这个缝隙可导致 macOS High Sierra 10.13.3 在处理歹意制造的字符串时致堆损坏。జ్ఞా 的原始序列是 U+0C1C U+0C4D U+0C1E U+200C U+0C3E,这是一个泰卢固语字符序列:子音 ja (జ)、virama (్)、子音 nya (ఞ)、零-width 非连接符和元音 aa (ా)。当 macOS 在处理 జ్ఞా 这个字符序列时,即可导致系统溃散。

Unicode 视觉欺骗攻击深度解析

表情符号(英文:Emoji)是象形文字(图形符号),一般以彩色卡通形式出现并在文本中内联运用。它们代表面部,气候,车辆和建筑物,食物和饮料,动物和植物,或代表情感,感觉或活动的图标。Emoji 已经无处不在,它正在成为跨越不同文化的所有人通用的语言。但不同人对 Emoji 的运用了解以及各个操作系统碎片化的支撑,也使得带来了一些问题。比方:短期内你也不会看到步枪的表情符号,U+1F946。Unicode 安排包括苹果和微软都反对参加步枪符号。手枪和其他兵器的 Emojis 已经使人们陷入了法律的困扰。之前一家法国法院裁决手枪表情符号或许构成死亡威胁,将一名把枪的表情发给前女友的男子判处三个月拘禁。

Unicode 视觉欺骗攻击深度解析

在浏览器地址栏中直接烘托 U+1F512 这个编码也是相当风险的。由于它和 HTTPS 安全小锁外观上十分类似。进犯者能够对其进行安全小锁的假造。U+1F512 编码曾在 Chrome/Firefox 浏览器中出现过这样的安全问题。

Unicode 视觉欺骗攻击深度解析

三、混合脚本带来的安全风险

混合脚本是有许多合法的用处的,例如 Ωmega。但视觉上简单混杂的字符一般不会放在一个脚本中。在视觉上简单混杂的字符为诈骗提供了许多时机,例如下面这两个域名,希腊小写字母 Omicron 和拉丁文 o 外观是十分类似的。

Unicode 视觉欺骗攻击深度解析

好久之前,域名只答应包括拉丁字母 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 编码。

Unicode 视觉欺骗攻击深度解析

国际化域名(IDN)是在 Unicode 中界说的任何字符集或脚本中注册的二级或三级域名或 Web 地址。直到 2009 年底之前,顶级域名仅限于拉丁字母 a-z,之后随着 Web 全球化发展,IDN TLDs 也开端逐渐推广和普及,这加速了全球化进展的一起,也带来了一些安全风险,这点在后面咱们会谈到。

Unicode 视觉欺骗攻击深度解析

Unicode 视觉欺骗攻击深度解析

在前文中咱们已经了解到,Unicode 15.0 中的字符总量 149,186 个,脚本数 161 个。这些脚本中大部分都能够被用于域名注册,而且数量还在添加中。以顶级域名(TLD)COM 为例,Verisign 制定了 IDN 注册的策略,规矩了答应和制止的代码点。并制定了 IETF 规范、对特定语言的约束、对脚本混杂的约束、ICANN 受限 Unicode 代码、特别字符这五条验证规矩,遵从这五条规矩的 IDN 被认为是有用的注册。

在这五条 IDN 注册规矩中,咱们会重点重视“脚本混杂的约束”这条规矩,由于这对发现 IDN 上的视觉诈骗问题有协助含义。

对脚本混杂的约束

Verisign 不答应运用混合的 Unicode 脚本进行注册。假如 IDN 中包括两个或多个 Unicode 脚本代码,将回绝注册。例如拉丁文脚本中的字符不能和任何西里尔字符在同一个 IDN 中运用。IDN 中的所有代码有必要来自同一个 Unicode 脚本。这样做是为了避免混杂的代码出现在同一个 IDN 中。

下表列出了答应运用的 Unicode 脚本。

Unicode 视觉欺骗攻击深度解析

列举我之前发现的一个缝隙,[CVE-2018-4277] Spoof All Domains Containing ‘d’ in Apple Products 。我在研讨中发现,在苹果产品中编码 latin small letter dum (U+A771) 烘托的字形和 latin small letter d (U+0064) 极为类似。从 Unicode 中 (U+A771) 的字形规范能够发现(http://www.unicode.org/charts/PDF/UA720.pdf),d 后面应该还有一个小撇,可是在苹果产品中把这个彻底忽略掉了。

Unicode 视觉欺骗攻击深度解析

Unicode 视觉欺骗攻击深度解析

接下来,我去注册了一个实在的域名,使这个 IDN Spoof 能够正常运行。咱们知道在 Verisign 制定的 IDN 注册的规矩中,不答应运用混合的 Unicode 脚本进行注册。假如 IDN 中包括两个或多个 Unicode 脚本代码,将回绝注册。而(U+A771)也是归于 Latin,应该是符合域名注册商规矩的。于是域名成功注册成功了。

Unicode 视觉欺骗攻击深度解析

Unicode 视觉欺骗攻击深度解析

我又注册了一个 SSL 证书,使这个 IDN Spoof 看的会更加实在完美。作用如下,Safari 并没有将这个域名转化为 punycode 显现,所以咱们成功了。

Unicode 视觉欺骗攻击深度解析

到这儿咱们确认了整个诈骗流程是彻底可行的,那么进犯者能够假造域名中有 d 的所有域名。在 Ggoogle 统计的 Top 10k 域名中,大约有超过 25% 的网站域名中有d这个字符。这些网站的域名都能够被假造。

https://chromium.googlesource.com/chromium/src/+/master/components/url_formatter/top_domains/alexa_domains.list

•linkedin.com

•baidu.com

•jd.com

•adobe.com

•wordpress.com

•dropbox.com

•godaddy.com

•reddit.com

…………

苹果修正的补丁

Unicode 视觉欺骗攻击深度解析

受影响产品

watchOS 4.3.2https://support.apple.com/zh-cn/HT208935

iOS 11.4.1https://support.apple.com/zh-cn/HT208938

tvOS 11.4.1https://support.apple.com/zh-cn/HT208936

macOS High Sierra 10.13.5https://support.apple.com/zh-cn/HT208937

四、双向文本带来的安全风险

某些字符(例如阿拉伯语和希伯来语脚本中运用的字符)具有固有的从右到左的书写方向。当这些字符与从左到右显现的其他脚本或符号集的字符混合时,生成的文本称为双向(缩写为 bidi)。文档的内存表明(逻辑次序)与双向文本的显现外观(可视次序)之间的关系由 UAX#9:Unicode 双向算法 [UAX9] 办理。

由于某些字符具有弱或中性的方向性,而不是强左向右或从右到左,因此 Unicode 双向算法运用一组准确的规矩来确认终究的视觉出现。然而,恣意文本序列的出现,或许导致文本序列无法明晰地被阅读,或许或许在视觉上混杂。

在一个 URL 中,经常会遇到多种方向性(弱性、中性、强性)的字符一起存在的状况。尽管 Unicode 双向算法运用一组准确的规矩来确认终究的视觉出现,可是多种方向性的文本序列在出现时,还是或许导致文本序列无法明晰地被阅读,或许或许在视觉上混杂。

Unicode 视觉欺骗攻击深度解析

Chrome 之前出过这样一个缝隙,在 Chrome 里拜访:

Unicode 视觉欺骗攻击深度解析

在地址栏中实际烘托为:

Unicode 视觉欺骗攻击深度解析

CVE-2018-4205 是我之前发现的一个缝隙,利用了 RTL 和空白符导致了 URL 地址栏诈骗。下面就以这个缝隙为例进行讲解。

(1)结构 POC-1

Unicode 视觉欺骗攻击深度解析

拜访 http://www.apple.com.xn--ggbla3j.xn--ngbc5azd/。能够看到

Chrome/Firefox/Safari三个浏览器地址栏,显现都是一样的。Edge 显现 punycode。

Unicode 视觉欺骗攻击深度解析

(2)结构 POC-2

Unicode 视觉欺骗攻击深度解析

在四个浏览器中拜访 POC-2,咱们此刻已经发现了问题。在 Safari 中出现了 RTL 和空白字符。

Unicode 视觉欺骗攻击深度解析

(3)结构 POC-3

Unicode 视觉欺骗攻击深度解析

此时快讯

【2022-09-23 15:02】【Wsj.eth以16 ETH价格成交】金色财经报道,据以太坊域名服务交易数据显示,wsj.eth已经以16 ETH的价格成交,约合 20,985.44 美元。据悉,买家是一个“0xC10c7a”开头的新钱包地址,目前尚无法确定该买家是否是《华尔街日报》。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注