一、前言
2022年9月13日,Unicode15.0正式版发布。在Unicode15.0中增加了4,489个字符,总共字符数量达到了149,186个。这些新增内容包括2个新脚本,总共脚本数量达到161个,以及20个新的表情符号字符。同时,几个重要的Unicode规范也随着15.0版本进行了更新,这其中就包括Unicode安全机制这个规范,它意在减少因Unicode字符视觉带来的同形异意攻击。
同形异意攻击是非常古老的一种视觉攻击方式。在机械打字机时代,很多打字机为了简化设计和降低制造及维护成本,键盘上没有单独的1和0。打字员会使用小写字母L和大写字母i来代替数字1,使用大写字母O来代替数字0。当这些相同的打字员在70年代和80年代初转变为计算机键盘操作员时,他们的旧键盘习惯在他们的新职业中继续存在,并成为极大混乱的源泉。这应该是视觉混淆、同形异意攻击集中爆发的一个时期。
在此之后,打字机被文字处理器所代替,信息化时代逐步到来,字符编码也开始由ASCII字符集逐渐扩充到Unicode字符集。我们开始使用浏览器或其他应用客户端来呈现文本,那些在某些语境中不适合使用同形字书写URL、公式、源代码、ID等等,其相似的外观继续使得用户可能在视觉上无法区分。
Unicode视觉取决于视觉上可以混淆的字符串:两个Unicode字符串外观上非常相似,在通常的屏幕分辨率下,它们以小尺寸的普通字体出现,很容易让人们误认为是另一个。视觉混淆没有明显的规则:当尺寸足够小时,许多字符都看起来像其他字符。“屏幕分辨率下的小尺寸”是指大多数脚本使用9-12像素的字体。易混淆性还取决于字体的风格:对于传统的希伯来字体,许多字符只能通过细微的差别来区分,而这些细微差别可能在小尺寸时丢失。在某些情况下,字符序列也可用于:例如,“rn”在许多sans-serif字体中与“m”在视觉上混淆。
近些年来,因Unicode编码发生了很多恶意攻击事件,人为或编译器或AI都可能因Unicode产生错误的判断和解析。例如2021年有研究人员在谷歌等商业系统中使用Unicode的这些特殊字符对NLP模型进行对抗攻击。他们通过一些不可察觉的编码注入——比如一个不可见字符、同形符、重新排序或删除的操作字符,可以显著降低一些模型的性能,大多数模型都可能在功能上失灵。
2022年Trezor这款知名的硬件钱包出现了大量的网络钓鱼网站,钓鱼链接https://suite.tr?zor.com。这个钓鱼链接和真实Trezor官方网站trezor.io极为相似。
去中心化云存储服务提供商Unigrid获GEM提供2500万美元投资承诺:金色财经报道,去中心化云存储服务提供商Unigrid宣布获得GEM提供的2500万美元投资承诺,此外Unigrid还与WeSendit达成合作,将使用后者提供的匿名数据传输和去中心化存储解决方案的文件传输服务。Unigrid旨在成为区块链领域里的亚马逊AWS或谷歌云,利用区块链在保证信息永久性方面的变革力量和节点技术和,为用户提供更低的成本交付和安全存储数据,继而重塑云存储行业。[2023/6/13 21:32:48]
虽然基于客户端的尤其是浏览器端的抵御视觉的防御措施一直在完善,但并没有办法完全封堵住这种攻击。第一,视觉是一种很难被完全消亡的攻击,因为在足够小的尺寸情况下人自身的生理视觉体系也是无法分辨的;第二,Unicode字符集非常庞大,并且在不断的增加;第三,需要标准组织、浏览器开发商、域名注册商等多方共同协作去完成。
本文主要研究当下Unicode中因字形渲染、混合脚本、PunyCode、双向文本、组合字符引起的视觉问题,结合作者发现的不同类型的Unicode视觉漏洞,分享漏洞挖掘过程方法并给出一些防御的思路。
二、字形渲染带来的安全风险
当字体或渲染引擎对字符或字符序列的支持不足时,就使得本应该在视觉上可以区分的字符或字符序列出现新的问题--视觉混淆。尤其是这些字符被做为关键的信息出现时,比如在浏览器重要的安全指示器地址栏中,这种视觉的危害就会显而易见。浏览器厂商对于地址栏上的IDN问题,一直在做积极的防御,通常是在浏览器里维护一个重要域名列表,如果一个域名和列表中的域名同形异议,则将其转化为Punycode编码显示。
渲染支持不足,直接导致每一个字符的字形含义往往超出我们的预期,这种不确定性使得视觉随时都可能发生。那么字形到底是什么,它和字型、字符、字体有什么关系,包括Unicode中越来越火的Emoji表情它是字符吗?其中一些基本的名词概念非专业人士经常混淆,我们先简要了解下。
字体指的是一组字符的设计,通常包括字母、一组数字和一组标点符号。也常包括表意字符以及制图符号。每个字体都是字形的集合,比如宋体、黑体等。有些字体技术非常强大,比如TrueType/OpenType,它们可以根据分辨率、系统平台、语言等来选择显示最佳的形状。但是,它也可以用于安全攻击,因为它足够强大,可以在打印时将屏幕上的“$100.00”外观更改为“$200.00”。?此外,层叠样式表可以更改为不同的字体,用于打印与屏幕显示,这可以使用更多可混淆字体。这些问题并非特定于Unicode。为了降低此类漏洞利用的风险,程序员和用户应该只允许可信任的字体。
推出1个月以来,Uniswap的NFT交易聚合器总交易量接近370万美元:1月4日消息,根据/img/20230515171719662682/5.jpg "/>
在复杂的脚本中,字符可能会根据周围的字符更改形状。
字形可以随周围环境所改变
3个arabicletterheh(U+0647)组合在一起
多个字符可以产生一个字形
f=latinsmallletterf(U+0066)
i=latinsmallletteri(U+0069)
我们来看一个和视觉有关的,当多个不同字符组合后可能视觉外观是相同的。例如字符U+0BB6SHA和U+0BB8SA通常非常不同。但这两个组合的字符序列,视觉感官上完全相同。底层的二进制是不同的。
以太坊扩容方案Arbitrum Rollup推出Uniswap V2端口:11月6日,以太坊扩容方案Arbitrum Rollup的开发团队 Offchain Labs宣布推出在Arbitrum Rollup上Uniswap V2端口,这意味着可以在Arbitrum Rollup的以太坊扩容测试网上运行的 Uniswap V2。官方表示,此举可将交易费成本降低55倍。[2020/11/6 11:48:28]
其实多字符组合不仅仅是视觉,有时这种多字符组合也可以导致系统内存崩溃。CVE-2018-4124这个漏洞可导致macOSHighSierra10.13.3在处理恶意制作的字符串时致堆损坏。????的原始序列是U+0C1CU+0C4DU+0C1EU+200CU+0C3E,这是一个泰卢固语字符序列:辅音ja(?)、virama(?)、辅音nya(?)、零-width非连接符和元音aa(?)。当macOS在处理????这个字符序列时,即可导致系统崩溃。
表情符号是象形文字,通常以彩色卡通形式呈现并在文本中内联使用。它们代表面部,天气,车辆和建筑物,食物和饮料,动物和植物,或代表情感,感觉或活动的图标。Emoji已经无处不在,它正在成为跨越不同文化的所有人通用的语言。但不同人对Emoji的使用理解以及各个操作系统碎片化的支持,也使得带来了一些问题。比如:短期内你也不会看到步的表情符号,U+1F946。Unicode组织包括苹果和微软都反对加入步符号。手和其他武器的Emojis已经使人们陷入了法律的困扰。之前一家法国法院裁定手表情符号可能构成死亡威胁,将一名把的表情发给前女友的男子判处三个月监禁。
在浏览器地址栏中直接渲染U+1F512这个编码也是相当危险的。因为它和HTTPS安全小锁外观上非常相似。攻击者可以对其进行安全小锁的伪造。U+1F512编码曾在Chrome/Firefox浏览器中出现过这样的安全问题。
三、混合脚本带来的安全风险
混合脚本是有很多合法的用途的,例如Ωmega。但视觉上容易混淆的字符通常不会放在一个脚本中。在视觉上容易混淆的字符为提供了许多机会,例如下面这两个域名,希腊小写字母Omicron和拉丁文o外观是非常相似的。
数据:Uniswap第一季度的业务量较上季度增长超225%:5月17日消息,非托管的自动做市商交易协议Uniswap表示,与2019年第四季度相比,其第一季度的业务量增长了225%以上。数据显示,Uniswap在3月份创下1.914亿美元的历史新高,而4月份成交量则下降了约60%(7730万美元)。根据现有数据,5月的协议总额将达到1亿美元左右。(The Block)[2020/5/18]
很久之前,域名只允许包含拉丁字母A-Z,数字和一些其他字符。之后大家发现,仅仅支持ASCII码的域名可能是有问题的,因为世界上还有很多非拉丁文语系的国家和地区,他们也渴望在域名中使用自己的语言符号。后来经过多次提案讨论,在2003年发布了国际化域名的规范,它允许大多数的Unicode在域名中使用,普遍将这个规范称为IDNA2003。之后在2010年批准发布了对IDNA2003的修订版,称这个修订版为IDNA2008。但IDNA2003和IDNA2008并没有有效的解决国际化域名中的某些问题。随后,Unicode联盟发布了解决了某些兼容性的问题。
在IDNA中使用PunyCode算法来实现非ASCII域名到ASCII域名的转换。PunyCode算法可以将任何一个非ASCII的Unicode字符串唯一映射为一个仅使用英文字母、数字和连字符的字符串,编码的域名在前面都加上了xn--来表明这是一个PunyCode编码。
国际化域名是在Unicode中定义的任何字符集或脚本中注册的二级或三级域名或Web地址。直到2009年底之前,顶级域名仅限于拉丁字母a-z,之后随着Web全球化发展,IDNTLDs也开始逐渐推广和普及,这加速了全球化进展的同时,也带来了一些安全风险,这点在后面我们会谈到。
在前文中我们已经了解到,Unicode15.0中的字符总量149,186个,脚本数161个。这些脚本中大部分都可以被用于域名注册,并且数量还在增加中。以顶级域名COM为例,Verisign制定了IDN注册的策略,规定了允许和禁止的代码点。并制定了IETF标准、对特定语言的限制、对脚本混淆的限制、ICANN受限Unicode代码、特殊字符这五条验证规则,遵循这五条规则的IDN被认为是有效的注册。
薛蛮子携EOSUnion社区成员畅聊EOS生态:据金色财经合作媒体IMEOS消息,5月27号上午,薛蛮子携EOSUnion社区成员和多名百万级柚子大佬,齐聚一堂,在泰国苏梅岛蛮子别墅畅聊EOS生态,为EOSUnion举办的首届EOS创意大赛出谋划策,并希望EOS的杀手级应用孵化于EOSUnion社区。据了解,EOSUnion举办的EOS创意大赛是所有节点候选人当中唯一一家,也是第一家举办EOS创意和技术相关的大赛,旨在普及EOS技术和知识,孵化基于EOS的Dapp,为EOS生态做出贡献。薛老作为EOSUnion的天使投资人和首席顾问,对EOSUnion社区和EOS大赛对EOS生态所作出的努力表示肯定,并寄语大家再接再厉,鼓励EOS爱好者和开发者踊跃参与大赛,好的项目可以直接获得大额奖金,以及薛老和EOSUnion千万级的投资资源。[2018/5/27]
在这五条IDN注册规则中,我们会重点关注“脚本混淆的限制”这条规则,因为这对发现IDN上的视觉问题有帮助意义。
Verisign不允许使用混合的Unicode脚本进行注册。如果IDN中包含两个或多个Unicode脚本代码,将拒绝注册。例如拉丁文脚本中的字符不能和任何西里尔字符在同一个IDN中使用。IDN中的所有代码必须来自同一个Unicode脚本。这样做是为了避免混淆的代码出现在同一个IDN中。
下表列出了允许使用的Unicode脚本。
列举我之前发现的一个漏洞,SpoofAllDomainsContaining‘d’inAppleProducts。我在研究中发现,在苹果产品中编码latinsmallletterdum(U+A771)渲染的字形和latinsmallletterd(U+0064)极为相似。从Unicode中(U+A771)的字形标准可以发现,d后面应该还有一个小撇,但是在苹果产品中把这个完全忽略掉了。
接下来,我去注册了一个真实的域名,使这个IDNSpoof可以正常运行。我们知道在Verisign制定的IDN注册的规则中,不允许使用混合的Unicode脚本进行注册。如果IDN中包含两个或多个Unicode脚本代码,将拒绝注册。而也是属于Latin,应该是符合域名注册商规则的。于是域名成功注册成功了。
我又注册了一个SSL证书,使这个IDNSpoof看的会更加真实完美。效果如下,Safari并没有将这个域名转化为punycode显示,所以我们成功了。
到这里我们确定了整个流程是完全可行的,那么攻击者可以伪造域名中有d的所有域名。在Ggoogle统计的Top10k域名中,大约有超过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
…………
watchOS4.3.2??https://support.apple.com/zh-cn/HT208935
iOS11.4.1??https://support.apple.com/zh-cn/HT208938
tvOS11.4.1?https://support.apple.com/zh-cn/HT208936
macOSHighSierra10.13.5??https://support.apple.com/zh-cn/HT208937
四、双向文本带来的安全风险
某些字符具有固有的从右到左的书写方向。当这些字符与从左到右显示的其他脚本或符号集的字符混合时,生成的文本称为双向。文档的内存表示与双向文本的显示外观之间的关系由UAX#9:Unicode双向算法管理。
由于某些字符具有弱或中性的方向性,而不是强左向右或从右到左,因此Unicode双向算法使用一组精确的规则来确定最终的视觉呈现。然而,任意文本序列的呈现,可能导致文本序列无法清晰地被阅读,或者可能在视觉上混淆。
在一个URL中,经常会遇到多种方向性的字符同时存在的情况。虽然Unicode双向算法使用一组精确的规则来确定最终的视觉呈现,但是多种方向性的文本序列在呈现时,还是可能导致文本序列无法清晰地被阅读,或者可能在视觉上混淆。
Chrome之前出过这样一个漏洞,在Chrome里访问:
在地址栏中实际渲染为:
CVE-2018-4205是我之前发现的一个漏洞,利用了RTL和空白符导致了URL地址栏。下面就以这个漏洞为例进行讲解。
构造POC-1
访问http://www.apple.com.xn--ggbla3j.xn--ngbc5azd/。可以看到
Chrome/Firefox/Safari三个浏览器地址栏,显示都是一样的。Edge显示punycode。
构造POC-2
在四个浏览器中访问POC-2,我们此时已经发现了问题。在Safari中出现了RTL和空白字符。
构造POC-3
TheBlock总共分析并统计了8个类别的101个YCombinator加密校友项目。原文标题:《一文速览101个YCombinator孵化的Crypto项目》撰文:EdvinasRupkus,Theblock研究分析师 编译:隔夜的.
1900/1/1 0:00:00Merge顺利成功,对显卡矿工们是一把落下的「达摩克利斯之剑」,而对去中心算力市场而言,却是一把开启广阔市场的金钥匙.
1900/1/1 0:00:00早期投资必须思考未来,我们最常听到的一句话是未来已来,但到底未来是什么?未来会如何?确实难以判断预测.
1900/1/1 0:00:00Taqtile是一家位于西雅图的增强现实初创公司,其业务主要是和企业客户合作进行软件化的工作培训。2022年9月19日,Taqtile宣布成功筹集500万美元,这笔资金将促进其整体招聘和营销工作.
1900/1/1 0:00:00DeFi数据 1.DeFi代币总市值:463.4亿美元 DeFi总市值数据来源:coingecko2.过去24小时去中心化交易所的交易量39.9亿美元 过去24小时去中心化交易所的交易量数据来源:coingecko3.
1900/1/1 0:00:00虽然黄仁勋嘴里口口声声喊着“元宇宙”的主意,但内心却满是英伟达的生意。日前,英伟达在GTC大会上正式发布了采用AdaLovelace架构的RTX40系列GPU,首发型号共包括RTX4090、RTX408016G和RTX408012G三.
1900/1/1 0:00:00