一、前言
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 年代初轉變為計算機鍵盤操作員時,他們的舊鍵盤習慣在他們的新職業中繼續存在,并成為極大混亂的源泉。這應該是視覺混淆、同形異意攻擊集中爆發的一個時期。
在此之后,打字機被文字處理器所代替,信息化時代逐步到來,字符編碼也開始由 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)。
Uniswap Bridge評估委員會已制定初步評估框架,最終報告擬于4月底或5月初提交:3月21日消息,由 Uniswap 基金會成立的 Uniswap Bridge 評估委員會已經制定初步評估框架,詳細考察了跨鏈橋的安全性、彈性、可靠性和可持續性,一旦對應小組的工作完成,該框架將開源供其他人使用。
此外,團隊確定了需要加強的領域,與 Wormhole 團隊一起實施了 BNB Chain 部署實例的多項增強功能,Bridge Network 前聯合創始人 Kimberly 加入團隊協助工作,并將增加 2 至 3 名工程師,最終報告目前計劃于 4 月底或 5 月初提交。
此前報道,Uniswap 基金會于 3 月 3 日宣布成立 Uniswap Bridge 評估委員會并啟動評估流程。[2023/3/21 13:17:46]
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 中因字形渲染、混合腳本、PunyCode、雙向文本、組合字符引起的視覺欺騙問題,結合作者發現的不同類型的 Unicode 視覺欺騙漏洞,分享漏洞挖掘過程方法并給出一些防御的思路。
二、字形渲染帶來的安全風險
當字體或渲染引擎對字符或字符序列的支持不足時,就使得本應該在視覺上可以區分的字符或字符序列出現新的問題--視覺混淆。尤其是這些字符被做為關鍵的信息出現時,比如在瀏覽器重要的安全指示器地址欄中,這種視覺欺騙的危害就會顯而易見。瀏覽器廠商對于地址欄上的 IDN 欺騙問題,一直在做積極的防御,通常是在瀏覽器里維護一個重要域名列表,如果一個域名和列表中的域名同形異議,則將其轉化為 Punycode 編碼顯示。
摩根大通關閉Uniswap創始人的銀行賬戶:1月24日消息,Uniswap 創始人 Hayden Adams 今日凌晨發推稱,摩根大通在沒有事先通知的情況下關閉了他的銀行賬戶。“我認識很多與我經歷過類似事情的個人和公司,僅僅是因為他們從事加密貨幣行業,”Adams 指出。商品期貨交易委員會 (CFTC) 前成員布萊恩·昆騰茲 (Brian Quintenz) 回復稱:“美聯儲或 OCC 銀行調查人員可能是在監管指示下采取了這一行動。如果審查員告訴銀行某個客戶風險太大,而銀行終止了這種關系,則銀行在合同上不得告知該客戶原因。”[2022/1/24 9:09:21]
渲染支持不足,直接導致每一個字符的字形含義往往超出我們的預期,這種不確定性使得視覺欺騙隨時都可能發生。那么字形到底是什么,它和字型、字符、字體有什么關系,包括 Unicode 中越來越火的 Emoji 表情它是字符嗎?其中一些基本的名詞概念非專業人士經常混淆,我們先簡要了解下。
字體(英語: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 或 ɑ,漢字中的“強/強”、“戶/戶/戸”。
應用研究機構 Other Internet 從 Uniswap 贈款計劃獲得 100 萬美元贈款:11月25日消息,應用研究機構 Other Internet 從 Uniswap 贈款計劃(Uniswap Grants Program,UGP)獲得 100 萬美元贈款,將用于在明年擴展其研究計劃并在 Uniswap 生態系統中進行新的治理實驗。
注,Other Internet 已于今年夏天完成對 Uniswap 鏈下治理和 Discord 社區的分析。[2021/11/25 7:10:00]
在復雜的腳本(如阿拉伯語和南亞語腳本)中,字符可能會根據周圍的字符更改形狀。
(1)字形可以隨周圍環境所改變
3 個 arabic letter heh (U+0647) 組合在一起
(2)多個字符可以產生一個字形
f = latin small letter f (U+0066)
i = latin small letter i (U+0069)
我們來看一個和視覺有關的,當多個不同字符組合后可能視覺外觀是相同的。例如字符 U + 0BB6 SHA 和 U + 0BB8 SA 通常非常不同。但這兩個組合的字符序列,視覺感官上完全相同。底層的二進制是不同的。
其實多字符組合不僅僅是視覺欺騙,有時這種多字符組合也可以導致系統內存崩潰。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 在處理 ???? 這個字符序列時,即可導致系統崩潰。
表情符號(英文:Emoji)是象形文字(圖形符號),通常以彩色卡通形式呈現并在文本中內聯使用。它們代表面部,天氣,車輛和建筑物,食物和飲料,動物和植物,或代表情感,感覺或活動的圖標。Emoji 已經無處不在,它正在成為跨越不同文化的所有人通用的語言。但不同人對 Emoji 的使用理解以及各個操作系統碎片化的支持,也使得帶來了一些問題。比如:短期內你也不會看到步槍的表情符號,U+1F946。Unicode 組織包括蘋果和微軟都反對加入步槍符號。手槍和其他武器的 Emojis 已經使人們陷入了法律的困擾。之前一家法國法院裁定手槍表情符號可能構成死亡威脅,將一名把槍的表情發給前女友的男子判處三個月監禁。
BitMax交易所將上線UNION(UNN):BitMax交易所將于12月31日22:00(北京時間)上線UNION(UNN),并開放UNN/USDT交易,充提現已開放。
2020年12月31日22:00-2021年1月7日8:00(北京時間)期間,BitMax平臺將聯合UNION團隊開啟限時上線活動,交易打卡瓜分13,000USDT等值獎勵(700,000UNN)。更多詳情請至BTMX.io官網查詢。[2020/12/31 16:08:58]
在瀏覽器地址欄中直接渲染 U+1F512 這個編碼也是相當危險的。因為它和 HTTPS 安全小鎖外觀上非常相似。攻擊者可以對其進行安全小鎖的偽造。U+1F512 編碼曾在 Chrome/Firefox 瀏覽器中出現過這樣的安全問題。
三、混合腳本帶來的安全風險
混合腳本是有很多合法的用途的,例如 Ωmega。但視覺上容易混淆的字符通常不會放在一個腳本中。在視覺上容易混淆的字符為欺騙提供了許多機會,例如下面這兩個域名,希臘小寫字母 Omicron 和拉丁文 o 外觀是非常相似的。
很久之前,域名只允許包含拉丁字母 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 編碼。
OM 將于8月18日上線Uniswap,Bithumb?Global以及虎符交易所:據MANTRA DAO官方披露,跨鏈DeFi項目MANTRA DAO即將進入中國市場。據悉MANTRA DAO已經獲得包括 Waterdrip, LD Capital, Plutus VC, 以及 Kenetic Capital等眾多資本青睞,同時也與共識實驗室、NOVA等業內優質資方達成了戰略合作。同時,MANTRA DAO的代幣OM 將于8月18日全球首發Uniswap,Bithumb?Global以及HOO(虎符)交易所。
Bithumb Global 將于2020年8月18日09:00(UTC+8)開啟充值,2020年8月18日10:15(UTC+8)開啟提幣并開啟 OM / USDT 交易對。
虎符將于2020年8月17日17:00(UTC+8)開啟充值,2020年8月18日17:00(UTC+8)開啟交易,2020年8月19日15:00(UTC+8)開啟提幣并開啟OM / USDT 以及 OM / BTC 交易對。
MANTRA DAO是一種基于去中心化社區自治(DAO)并專注于跨鏈資產的配資,質押和借貸的新金融理念,來打造的易用和安全的DeFi產品,MANTRA DAO打通傳統金融和去中心化的區塊鏈體系,由OM代幣聯系在一起,將金融控制權回歸于用戶,為用戶提供經濟激勵、治理投票和其他權益。[2020/8/17]
國際化域名(IDN)是在 Unicode 中定義的任何字符集或腳本中注冊的二級或三級域名或 Web 地址。直到 2009 年底之前,頂級域名僅限于拉丁字母 a-z,之后隨著 Web 全球化發展,IDN TLDs 也開始逐漸推廣和普及,這加速了全球化進展的同時,也帶來了一些安全風險,這點在后面我們會談到。
在前文中我們已經了解到,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 腳本。
列舉我之前發現的一個漏洞,[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 后面應該還有一個小撇,但是在蘋果產品中把這個完全忽略掉了。
接下來,我去注冊了一個真實的域名,使這個 IDN Spoof 可以正常運行。我們知道在 Verisign 制定的 IDN 注冊的規則中,不允許使用混合的 Unicode 腳本進行注冊。如果 IDN 中包含兩個或多個 Unicode 腳本代碼,將拒絕注冊。而(U+A771)也是屬于 Latin,應該是符合域名注冊商規則的。于是域名成功注冊成功了。
我又注冊了一個 SSL 證書,使這個 IDN Spoof 看的會更加真實完美。效果如下,Safari 并沒有將這個域名轉化為 punycode 顯示,所以我們成功了。
到這里我們確定了整個欺騙流程是完全可行的,那么攻擊者可以偽造域名中有 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
…………
[蘋果修復的補丁]
[受影響產品]
watchOS 4.3.2 https://support.apple.com/zh-cn/HT208935
iOS 11.4.1 https://support.apple.com/zh-cn/HT208938
tvOS 11.4.1 https://support.apple.com/zh-cn/HT208936
macOS High Sierra 10.13.5 https://support.apple.com/zh-cn/HT208937
四、雙向文本帶來的安全風險
某些字符(例如阿拉伯語和希伯來語腳本中使用的字符)具有固有的從右到左的書寫方向。當這些字符與從左到右顯示的其他腳本或符號集的字符混合時,生成的文本稱為雙向(縮寫為 bidi)。文檔的內存表示(邏輯順序)與雙向文本的顯示外觀(可視順序)之間的關系由 UAX#9:Unicode 雙向算法 [UAX9] 管理。
由于某些字符具有弱或中性的方向性,而不是強左向右或從右到左,因此 Unicode 雙向算法使用一組精確的規則來確定最終的視覺呈現。然而,任意文本序列的呈現,可能導致文本序列無法清晰地被閱讀,或者可能在視覺上混淆。
在一個 URL 中,經常會遇到多種方向性(弱性、中性、強性)的字符同時存在的情況。雖然 Unicode 雙向算法使用一組精確的規則來確定最終的視覺呈現,但是多種方向性的文本序列在呈現時,還是可能導致文本序列無法清晰地被閱讀,或者可能在視覺上混淆。
Chrome 之前出過這樣一個漏洞,在 Chrome 里訪問:
在地址欄中實際渲染為:
CVE-2018-4205 是我之前發現的一個漏洞,利用了 RTL 和空白符導致了 URL 地址欄欺騙。下面就以這個漏洞為例進行講解。
(1)構造 POC-1
訪問 http://www.apple.com.xn--ggbla3j.xn--ngbc5azd/。可以看到
Chrome/Firefox/Safari三個瀏覽器地址欄,顯示都是一樣的。Edge 顯示 punycode。
(2)構造 POC-2
在四個瀏覽器中訪問 POC-2,我們此時已經發現了問題。在 Safari 中出現了 RTL 和空白字符。
(3)構造 POC-3
慢霧科技
個人專欄
閱讀更多
財經法學
成都鏈安
金色早8點
Bress
鏈捕手
PANews
Odaily星球日報
DeFi研究員Ignas表示,代幣經濟學的從0到1的創新非常困難,但偶爾出現的極具創新性的代幣,會改變行業的發展軌跡。新代幣經濟學的獨創性將推動行業向前發展,并有能力啟動一個新的牛市.
1900/1/1 0:00:00在熊市中,總是有黑馬出現,挑動市場情緒,讓投資者眼饞不已。DigiDaigaku就是這樣的NFT黑馬.
1900/1/1 0:00:00最近Cosmos算的上是風生水起,不僅生態在一天天壯大,表現也是比BTC和ETH硬的多,Delphi Lab最近發表的那篇《Find a Home for labs》.
1900/1/1 0:00:00作為PC端互聯網的巨頭,百度無疑占據了龐大的市場,但隨著互聯網的迭代,百度錯過了移動互聯網的發展機會,在BAT中成為末位.
1900/1/1 0:00:00原文作者: ?Jonathan W., Vincent H., and Yi Sun創作者:Skyhigh Feng審核者:DAoctor.
1900/1/1 0:00:00金色財經報道 區塊鏈9月23日訊 Layer 1區塊鏈公司Zilliqa宣布推出Web3 Console游戲機.
1900/1/1 0:00:00