一、前言
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模型進行對抗攻擊。他們通過一些不可察覺的編碼注入——比如一個不可見字符、同形符、重新排序或刪除的操作字符,可以顯著降低一些模型的性能,大多數模型都可能在功能上失靈。
某巨鯨4小時前向幣安存入257萬枚USDT并提取約46.8萬枚UNI:金色財經報道,據Lookonchain監測,4小時前,某巨鯨地址向幣安存入了257萬枚USDT,并提取了467,825枚UNI(約合248萬美元),購買價格可能約為5.487美元。[2023/6/26 22:00:13]
2022年Trezor這款知名的硬件錢包出現了大量的網絡釣魚網站,釣魚鏈接https://suite.tr?zor.com。這個釣魚鏈接和真實Trezor官方網站trezor.io極為相似。
雖然基于客戶端的尤其是瀏覽器端的抵御視覺欺騙的防御措施一直在完善,但并沒有辦法完全封堵住這種攻擊。第一,視覺欺騙是一種很難被完全消亡的攻擊,因為在足夠小的尺寸情況下人自身的生理視覺體系也是無法分辨的;第二,Unicode字符集非常龐大,并且在不斷的增加;第三,需要標準組織、瀏覽器開發商、域名注冊商等多方共同協作去完成。
本文主要研究當下Unicode中因字形渲染、混合腳本、PunyCode、雙向文本、組合字符引起的視覺欺騙問題,結合作者發現的不同類型的Unicode視覺欺騙漏洞,分享漏洞挖掘過程方法并給出一些防御的思路。
二、字形渲染帶來的安全風險
當字體或渲染引擎對字符或字符序列的支持不足時,就使得本應該在視覺上可以區分的字符或字符序列出現新的問題--視覺混淆。尤其是這些字符被做為關鍵的信息出現時,比如在瀏覽器重要的安全指示器地址欄中,這種視覺欺騙的危害就會顯而易見。瀏覽器廠商對于地址欄上的IDN欺騙問題,一直在做積極的防御,通常是在瀏覽器里維護一個重要域名列表,如果一個域名和列表中的域名同形異議,則將其轉化為Punycode編碼顯示。
渲染支持不足,直接導致每一個字符的字形含義往往超出我們的預期,這種不確定性使得視覺欺騙隨時都可能發生。那么字形到底是什么,它和字型、字符、字體有什么關系,包括Unicode中越來越火的Emoji表情它是字符嗎?其中一些基本的名詞概念非專業人士經常混淆,我們先簡要了解下。
Uniswap V3推出模擬V2的全范圍流動性功能:8月4日消息,Uniswap V3推出模擬V2的全范圍流動性(Full Range功能,用戶可一鍵提供從0到無窮大的全范圍流動性。注,V3版本較V2推出集中流動性設計,流動性提供者僅在自定義的價格區間內參與做市。[2021/8/4 1:33:11]
字體指的是一組字符的設計,通常包括字母、一組數字和一組標點符號。也常包括表意字符以及制圖符號。每個字體都是字形的集合,比如宋體、黑體等。有些字體技術非常強大,比如TrueType/OpenType,它們可以根據分辨率、系統平臺、語言等來選擇顯示最佳的形狀。但是,它也可以用于安全攻擊,因為它足夠強大,可以在打印時將屏幕上的“$100.00”外觀更改為“$200.00”。?此外,層疊樣式表可以更改為不同的字體,用于打印與屏幕顯示,這可以使用更多可混淆字體。這些問題并非特定于Unicode。為了降低此類漏洞利用的風險,程序員和用戶應該只允許可信任的字體。
字型是指印刷行業中某一整套具有同樣樣式和尺碼的字形,例如一整套用于內文的宋體5號字、一整套用于標題的10號字就叫一套字型。電腦早期用點陣字,仍然有字型概念,同樣一套風格如中易宋體,一套字型是指一整套15×16像素或一整套24×24像素的字。矢量字型出現后,同一套風格字型已不用制作不同像素字型,只需制作一套即可隨意縮放,“字型”與“字體”之間的界限開始模楜。一般的英語使用者同樣分不清“字型”與“字體”的分別。
字形,又稱字圖或書形,是指字的形體。中華人民共和國國家標準GB/T16964《信息技術·字型信息交換》中定義字形為“一個可以辨認的抽象的圖形符號,它不依賴于任何特定的設計”。在語言學中,字是語意的最基本單位,即語素;字形是指為了表達這個意義的具體表達。同一字可以有不同的字形,而不影響其表達的意思,例如拉丁字母第一個字母可以寫作a或ɑ,漢字中的“強/強”、“戶/戶/戸”。
在復雜的腳本中,字符可能會根據周圍的字符更改形狀。
字形可以隨周圍環境所改變
3個arabicletterheh(U+0647)組合在一起
多個字符可以產生一個字形
Synthetix與dHEDGE共同激勵Uniswap的sUSD/DHT流動性:3月11日消息,合成資產協議Synthetix宣布為Uniswap上的sUSD/DHT資金池進行流動性獎勵,將每周空投3000個SNX,持續10周。資產管理協議dHEDGE同時也宣布將提供每周1.5萬DHT流動性激勵。[2021/3/11 18:37:13]
f=latinsmallletterf(U+0066)
i=latinsmallletteri(U+0069)
我們來看一個和視覺有關的,當多個不同字符組合后可能視覺外觀是相同的。例如字符U+0BB6SHA和U+0BB8SA通常非常不同。但這兩個組合的字符序列,視覺感官上完全相同。底層的二進制是不同的。
其實多字符組合不僅僅是視覺欺騙,有時這種多字符組合也可以導致系統內存崩潰。CVE-2018-4124這個漏洞可導致macOSHighSierra10.13.3在處理惡意制作的字符串時致堆損壞。????的原始序列是U+0C1CU+0C4DU+0C1EU+200CU+0C3E,這是一個泰盧固語字符序列:輔音ja(?)、virama(?)、輔音nya(?)、零-width非連接符和元音aa(?)。當macOS在處理????這個字符序列時,即可導致系統崩潰。
表情符號是象形文字,通常以彩色卡通形式呈現并在文本中內聯使用。它們代表面部,天氣,車輛和建筑物,食物和飲料,動物和植物,或代表情感,感覺或活動的圖標。Emoji已經無處不在,它正在成為跨越不同文化的所有人通用的語言。但不同人對Emoji的使用理解以及各個操作系統碎片化的支持,也使得帶來了一些問題。比如:短期內你也不會看到步槍的表情符號,U+1F946。Unicode組織包括蘋果和微軟都反對加入步槍符號。手槍和其他武器的Emojis已經使人們陷入了法律的困擾。之前一家法國法院裁定手槍表情符號可能構成死亡威脅,將一名把槍的表情發給前女友的男子判處三個月監禁。
最近30分鐘合約市場爆倉884萬美元 UNI爆倉117萬美元:據合約帝行情統計報告顯示:最近30分鐘合約市場全網總計爆倉884萬美元,其中UNI爆倉117萬美元,EOS爆倉103萬美元,SUSHI爆倉74.84萬美元。[2020/10/2]
在瀏覽器地址欄中直接渲染U+1F512這個編碼也是相當危險的。因為它和HTTPS安全小鎖外觀上非常相似。攻擊者可以對其進行安全小鎖的偽造。U+1F512編碼曾在Chrome/Firefox瀏覽器中出現過這樣的安全問題。
三、混合腳本帶來的安全風險
混合腳本是有很多合法的用途的,例如Ωmega。但視覺上容易混淆的字符通常不會放在一個腳本中。在視覺上容易混淆的字符為欺騙提供了許多機會,例如下面這兩個域名,希臘小寫字母Omicron和拉丁文o外觀是非常相似的。
很久之前,域名只允許包含拉丁字母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也開始逐漸推廣和普及,這加速了全球化進展的同時,也帶來了一些安全風險,這點在后面我們會談到。
動態 | 日本公司UNIMEDIA推出支持多方構建區塊鏈網絡的平臺:9月15日消息,日本公司UNIMEDIA推出了一個支持多個參與方共同構建區塊鏈網絡的平臺Bdisp-Engine。[2019/9/15]
在前文中我們已經了解到,Unicode15.0中的字符總量149,186個,腳本數161個。這些腳本中大部分都可以被用于域名注冊,并且數量還在增加中。以頂級域名COM為例,Verisign制定了IDN注冊的策略,規定了允許和禁止的代碼點。并制定了IETF標準、對特定語言的限制、對腳本混淆的限制、ICANN受限Unicode代碼、特殊字符這五條驗證規則,遵循這五條規則的IDN被認為是有效的注冊。
在這五條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
來源:老雅痞 區塊鏈技術怎樣與實體經濟更好的結合一直是我們研究的一個方向,目前看來,餐廳這條路是很多人首選的嘗試。具體怎么玩,讓我們看看最近剛拿到融資的Blackbird是怎么做的.
1900/1/1 0:00:00原文作者:1kx研究員Mikey0x 原文編譯: 0x214 ,BlockBeats 在過去的幾個月里,DeFi借貸賽道產生了重大變化,1kx研究員Mikey0x對此場域重新進行梳理.
1900/1/1 0:00:00DeFi數據 1.DeFi代幣總市值:443.35億美元 DeFi總市值數據來源:coingecko2.過去24小時去中心化交易所的交易量34.
1900/1/1 0:00:00原文標題:《FansaretheNewCreators》?? 原文作者:Lijin 原文編譯:Shaun@DAOrayaki.
1900/1/1 0:00:00作者:LewisLiao,ZonffPartners當我們在談Web3數據的時候,在談些什么?想要弄清楚這個問題,首先我們要弄清楚,在Web2中數據是什么樣的.
1900/1/1 0:00:00傳統互聯網中,一個人的身份象征往往是通過其現實世界中的名聲、行為等形成。而Web3中,身份的象征則是通過加密錢包中的資產、交易行為、收藏的NFT等來展示.
1900/1/1 0:00:00