買比特幣 買比特幣
Ctrl+D 買比特幣
ads

COD:Unicode 視覺欺騙攻擊深度解析_CODE

Author:

Time:1900/1/1 0:00:00

一、前言

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)。

NFT借貸協議UnUniFi Protocol完成150萬美元種子輪融資:12月1日消息,基于Cosmos的NFT借貸協議UnUniFi Protocol完成150萬美元種子輪融資,gumi Cryptos Capital領投,Coincheck、Hyperithm、MZ Web3fund、Arriba Studio和gumi group參投,所籌資金將用于進行持續開發并進一步實現可擴展性,此外四季度計劃將推出具有NFT抵押能力的NFTFi服務,并發布用于自動DeFi收益的鏈間收益聚合器,同時啟用Cosmos IBC功能。[2022/12/1 21:14:41]

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 編碼顯示。

元宇宙初創公司Union Avatars完成120萬歐元新一輪融資:10月5日消息,元宇宙初創公司Union Avatars宣布完成120萬歐元新一輪融資,Inverady Y FI Group領投,一些天使投資人參投。Union Avatars由Cai Felip和Jordi Conejero于2020 年創立,旨在將現實世界和元宇宙數字世界連接起來,并且將扮演元宇宙通行證的虛擬化身整合到區塊鏈中,團隊計劃利用這筆新資金加速產品開發、國際擴張和人才培養。(list123)[2022/10/5 18:39:55]

渲染支持不足,直接導致每一個字符的字形含義往往超出我們的預期,這種不確定性使得視覺欺騙隨時都可能發生。那么字形到底是什么,它和字型、字符、字體有什么關系,包括 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 或 ɑ,漢字中的“強/強”、“戶/戶/戸”。

美國律師:Polkadot面臨美國SEC審查的可能性高于Uniswap、狗狗幣和Cardano:美國律師事務所Hogan & Hogan合伙人Jeremy Hogan分享他對幾種數字資產未來可能面臨美國SEC證券訴訟的看法,根據 1-10 的“危險等級”(其中 10 是可能性最大)分析了可能性。

根據Hogan的說法,由于ADA最初是通過ICO發行,因此Cardano可能會面臨美國SEC的壓力。盡管他認為這一事實“有問題”,但他似乎覺得Cardano相當安全,因為參加ICO的絕大多數人都是日本公民,而不是美國人。

Hogan駁斥了美國SEC將追查Dogecoin(DOGE)的說法,指出Memecoin是通過挖礦發行,沒有經過ICO或代幣銷售。不過,該律師表示,鑒于Web3基金會此前曾參與多個ICO,Polkadot可能會面臨監管機構的更多審查,危險等級是“5/10”。

Hogan稱,Uniswap項目的危險等級為“4/10”,因為Uniswap Labs沒有進行ICO,也沒有從2020年9月向Uniswap用戶空投UNI代幣中獲利。(CryptoGlobe)[2021/7/12 0:45:18]

在復雜的腳本(如阿拉伯語和南亞語腳本)中,字符可能會根據周圍的字符更改形狀。

(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 在處理 ???? 這個字符序列時,即可導致系統崩潰。

UNI突破9.2美元關口 日內漲幅為8.35%:火幣全球站數據顯示,UNI短線上漲,突破9.2美元關口,現報9.219美元,日內漲幅達到8.35%,行情波動較大,請做好風險控制。[2021/1/18 16:26:48]

表情符號(英文:Emoji)是象形文字(圖形符號),通常以彩色卡通形式呈現并在文本中內聯使用。它們代表面部,天氣,車輛和建筑物,食物和飲料,動物和植物,或代表情感,感覺或活動的圖標。Emoji 已經無處不在,它正在成為跨越不同文化的所有人通用的語言。但不同人對 Emoji 的使用理解以及各個操作系統碎片化的支持,也使得帶來了一些問題。比如:短期內你也不會看到步槍的表情符號,U+1F946。Unicode 組織包括蘋果和微軟都反對加入步槍符號。手槍和其他武器的 Emojis 已經使人們陷入了法律的困擾。之前一家法國法院裁定手槍表情符號可能構成死亡威脅,將一名把槍的表情發給前女友的男子判處三個月監禁。

在瀏覽器地址欄中直接渲染 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] 解決了某些兼容性的問題。

FinNexus決定終止Uniswap流動性挖礦繼而轉向Sushiswap:1月15日,鏈上期權協議FinNexus官方宣布,根據臨時治理規則,FinNexus團隊已決定終止Uniswap流動性挖礦,并將開始專注于在Sushiswap上開啟流動性挖礦計劃。與此同時,當前社區正在對新Sushiswap挖礦計劃每日獎勵設置進行投票。具體獎勵設置有三種選擇:1000 cFNX/天3000 cFNX/天和5000 cFNX/天。[2021/1/15 16:14:15]

在 IDNA 中使用 PunyCode 算法來實現非 ASCII 域名到 ASCII 域名的轉換。PunyCode 算法可以將任何一個非 ASCII 的 Unicode 字符串唯一映射為一個僅使用英文字母、數字和連字符的字符串,編碼的域名在前面都加上了 xn-- 來表明這是一個 PunyCode 編碼。

國際化域名(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星球日報

Tags:UNIODECODCODEUniPlayCODEX幣Concretecodes

幣安app下載
SEC:律師觀點:合并后的以太坊是證券嗎?_SecretSky.finance

作者:Inal Tomaev從創建的那一刻起,關于 ETH 性質的爭論就不能被簡單歸結。在最近協議向“權益證明”(PoS)交易驗證機制完成過渡時,爭議只會更甚.

1900/1/1 0:00:00
CRYPTO:鏈上游戲的未來:可定制性、身份和社交層等_LONDON

加密游戲仍處于起步階段。區塊鏈可擴展性和基礎設施的最新進展現允許完全在鏈上構建新的游戲類型,這為加密經濟以及更廣泛的去中心化生態系統的集成開辟了道路.

1900/1/1 0:00:00
CRYPT:Crypto營銷策略正在失效 從這三方面去審視會發現新思路_Crypto Crash Gaming

作者:北辰 Crypto/Web3/幣圈/區塊鏈(不管具體怎么稱呼,總之你知道我說的是哪個領域),營銷幾乎占據了成功的絕對因素,甚至還能再極端一點——項目的視覺設計才是第一生產力.

1900/1/1 0:00:00
GRE:金色觀察 | 包含加密投資 國會股票交易禁令正準備在美國眾議院發布_GREATAPE

眾議院民主黨高級官員準備推出承諾已久的立法,以限制國會議員、政府高級官員和最高法院法官的股票所有權和交易.

1900/1/1 0:00:00
DEF:DeFi 理論:貸款與借款_DEFY價格

銀行會怎樣? 親愛的讀者: 我們的上一份報告提出了一個涵蓋 5 個深度主題的觀點,指出在未來幾年內 DeFi 產品和服務的廣泛采用。本周我們將把重點放在 DeFi 借/貸這一部分.

1900/1/1 0:00:00
WEB3:云九資本牛鳳軒:我們仍處在Web3.0爆發的前夜_web3.0幣龍頭

截至今年七月底,以太坊域名服務獨立地址數已突破50萬,Web3正收獲越來越大的用戶群體。從2017年開始,Web3基礎設施逐漸完備,呈現出從“泥濘小路”到“柏油公路”的變化.

1900/1/1 0:00:00
ads