Unicode字符转换与IDN安全:揭秘Babel Hacking攻击技术

本文深入探讨Unicode字符转换和国际化域名(IDN)中的安全漏洞,包括视觉欺骗攻击和字符规范化导致的缓冲区溢出及XSS攻击,为开发者和测试人员提供防御思路。

Babel Hacking

BlueHat
/ 作者:bluehat /
2009年10月13日 /
3 分钟阅读

大家好!还记得Mad Libs吗?或者Scrabble游戏中,你试图编造听起来合理的单词,却被朋友揭穿?玩这些游戏能带来无穷的文字乐趣。在软件和互联网中,文字、字母和文本就是一切。无论你是在云端、代码深处,还是消费内容——书面语言都是核心信息。

Unicode提供了一套标准,用于在单一框架内表示世界上大多数语言和文字。这真的很棒——能够捕捉过去、现在和未来的世界文字。还有什么字符集能编码从ASCII(拉丁文)到古代Phaistos Disc符号(如这个PLUMED HEAD:🪶)的一切?

Unicode已成为在所有计算平台上表示和编码字符的事实标准。它是大多数现代操作系统、编程语言和应用程序的核心。但类似于网络协议栈,大多数软件开发人员不想处理细节。知道你的字符串被当作Unicode处理就足够了,这样你就可以构建软件,而无需解决字符集转码、规范化等复杂细节。

然而,有一些攻击和应对措施应该被了解。在我的BlueHat演讲中,我打算涵盖两大类——一类是关于视觉感知攻击,另一类是关于字符转换。在云端,URL统治一切。好吧,URI已经取代了URL,而有了Unicode,我们应该讨论IRI(国际化资源标识符)。但无论如何,随着国际化域名(IDN)的发展,IRI和URI一样重要。我真正关心的是域名,即IDN。早在2002年,我们就看到了早期的视觉欺骗攻击,2005年Eric Johanson的Paypal欺骗再次出现。自那时起,时代已经改变,浏览器厂商和注册商对IDN更加智能。

然而,攻击向量不断出现。我计划演示其中一些,并描述IDN的当前格局,特别是与即将标准化的IDN修订相关的内容。这些修订被称为IDNA 2008,带来了重要的变化,既有好的也有危险的。一方面,我们从排除式模型转向包含式模型,以允许字符。另一方面,在某些边缘情况下,一个域名可能在新旧IDN标准下解析到两个不同的IP地址。你的云服务会被欺骗吗?

接下来,我们将更仔细地看看字符转换如何被用来利用软件。有些字符确实有分裂的人格,就像杰基尔博士和海德先生一样,无论你的产品是解析文本并希望防止缓冲区溢出,还是Web应用程序希望防御XSS攻击,都会受到影响。通过微妙的操作,攻击者可以发送在规范化时扩展高达18倍的字符串。为了逃避XSS过滤器,攻击者可以注入诸如U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE之类的字符,这些小写时会变为U+0069 LATIN SMALL LETTER I。

在其他情况下,处理特殊Unicode字符(如BOM)也可能打开漏洞。因为许多分配的字符具有特殊含义和属性,它们在预期范围之外的使用可能需要更密切的关注。

我很高兴在我的演讲“字符转换:发现隐藏漏洞”中与你和Blue Hat观众讨论这些问题,该演讲面向开发人员和测试人员。我希望开发人员看到一些问题,也希望测试人员看到一些新的输入和测试用例。

  • Chris Weber
    联合创始人,Casaba Security
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计