一、前言
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模型進行對抗攻擊。他們通過一些不可察覺的編碼注入——比如一個不可見字符、同形符、重新排序或刪除的操作字符,可以顯著降低一些模型的性能,大多數模型都可能在功能上失靈。
ZSC智能鏈已支持BNB、HT、OKB、UNI、SUSHI等多種平臺幣鏈上交互:4月28日消息,Zenith smart chain(ZSC)已經成功打通平臺幣,現已支持多種平臺幣進行鏈上交互。屆時,BNB、HT、OKB、UNI、SUSHI等平臺幣將深度參與ZSC生態,支持DEX、借貸、流動性挖礦等多種鏈上應用場景。
ZT (中國) CEO李曉成認為此舉將有利于ZSC生態的進一步完善,促進區塊鏈技術項目的生態發展,打造多元化區塊鏈生態,豐富區塊鏈應用場景。[2021/4/28 21:06:52]
2022年Trezor這款知名的硬件錢包出現了大量的網絡釣魚網站,釣魚鏈接https://suite.tr?zor.com。這個釣魚鏈接和真實Trezor官方網站trezor.io極為相似。
雖然基于客戶端的尤其是瀏覽器端的抵御視覺欺騙的防御措施一直在完善,但并沒有辦法完全封堵住這種攻擊。第一,視覺欺騙是一種很難被完全消亡的攻擊,因為在足夠小的尺寸情況下人自身的生理視覺體系也是無法分辨的;第二,Unicode字符集非常龐大,并且在不斷的增加;第三,需要標準組織、瀏覽器開發商、域名注冊商等多方共同協作去完成。
本文主要研究當下Unicode中因字形渲染、混合腳本、PunyCode、雙向文本、組合字符引起的視覺欺騙問題,結合作者發現的不同類型的Unicode視覺欺騙漏洞,分享漏洞挖掘過程方法并給出一些防御的思路。
二、字形渲染帶來的安全風險
當字體或渲染引擎對字符或字符序列的支持不足時,就使得本應該在視覺上可以區分的字符或字符序列出現新的問題--視覺混淆。尤其是這些字符被做為關鍵的信息出現時,比如在瀏覽器重要的安全指示器地址欄中,這種視覺欺騙的危害就會顯而易見。瀏覽器廠商對于地址欄上的IDN欺騙問題,一直在做積極的防御,通常是在瀏覽器里維護一個重要域名列表,如果一個域名和列表中的域名同形異議,則將其轉化為Punycode編碼顯示。
渲染支持不足,直接導致每一個字符的字形含義往往超出我們的預期,這種不確定性使得視覺欺騙隨時都可能發生。那么字形到底是什么,它和字型、字符、字體有什么關系,包括Unicode中越來越火的Emoji表情它是字符嗎?其中一些基本的名詞概念非專業人士經常混淆,我們先簡要了解下。
Shen ZhouUnion特邀嘉賓Anthony:構建基于實體商業的數字經濟生態是化解當前市場窘境的最佳答案:據官方消息,2020年12月10日由神州交易所所舉辦的神州交易所“CNU公鏈上線發布會”杭州站正式啟動。
作為此次會議的主題“CNU公鏈上線發布會”,Shen ZhouUnion特邀嘉賓Anthony表示,區塊鏈4.0時代開創者,未來將會在Shenzhou Union底層交易所技術平臺上實現普及性區塊鏈去中心化商業落地應用,互聯網文明和實體商業有機結合是數字經濟的時代特色,充分發揮節點經濟和數字經濟雙重定位,讓實體商業與數字市場實現真正融合,構建基于實體商業的數字經濟生態,通過技術、資金、資源等多元扶持,打造區塊鏈項目新標桿,是化解當前市場窘境的最佳答案,也是Shenzhou Union的初衷所在。[2020/12/10 14:49:53]
字體指的是一組字符的設計,通常包括字母、一組數字和一組標點符號。也常包括表意字符以及制圖符號。每個字體都是字形的集合,比如宋體、黑體等。有些字體技術非常強大,比如TrueType/OpenType,它們可以根據分辨率、系統平臺、語言等來選擇顯示最佳的形狀。但是,它也可以用于安全攻擊,因為它足夠強大,可以在打印時將屏幕上的“$100.00”外觀更改為“$200.00”。?此外,層疊樣式表可以更改為不同的字體,用于打印與屏幕顯示,這可以使用更多可混淆字體。這些問題并非特定于Unicode。為了降低此類漏洞利用的風險,程序員和用戶應該只允許可信任的字體。
字型是指印刷行業中某一整套具有同樣樣式和尺碼的字形,例如一整套用于內文的宋體5號字、一整套用于標題的10號字就叫一套字型。電腦早期用點陣字,仍然有字型概念,同樣一套風格如中易宋體,一套字型是指一整套15×16像素或一整套24×24像素的字。矢量字型出現后,同一套風格字型已不用制作不同像素字型,只需制作一套即可隨意縮放,“字型”與“字體”之間的界限開始模楜。一般的英語使用者同樣分不清“字型”與“字體”的分別。
字形,又稱字圖或書形,是指字的形體。中華人民共和國國家標準GB/T16964《信息技術·字型信息交換》中定義字形為“一個可以辨認的抽象的圖形符號,它不依賴于任何特定的設計”。在語言學中,字是語意的最基本單位,即語素;字形是指為了表達這個意義的具體表達。同一字可以有不同的字形,而不影響其表達的意思,例如拉丁字母第一個字母可以寫作a或ɑ,漢字中的“強/強”、“戶/戶/戸”。
Uniswap上線ABIT交易平臺:據官方消息,UNI(Uniswap)已于今日正式上線ABIT交易平臺,開設交易對UNI/USDT。
Uniswap Protocol自發布以來逐漸成為Decentralized Finance生態的核心基礎設施,是當前占據以太坊智能合約流量最大的項目之一。Uniswap于昨日正式發布其官方通證UNI,當前已在多家交易所同期上線。
ABIT是創立于澳大利亞的交易平臺,致力于為全球用戶提供安全、穩定、高效的數字資產交易服務。[2020/9/17]
在復雜的腳本中,字符可能會根據周圍的字符更改形狀。
字形可以隨周圍環境所改變
3個arabicletterheh(U+0647)組合在一起
多個字符可以產生一個字形
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在處理????這個字符序列時,即可導致系統崩潰。
OKEx首席執行官:Uniswap很難取代目前的主流交易所:OKEx首席執行官Jay Hao在談及Uniswap時表示:首先,Uniswap的交易深度不足,無法支持大額交易。交易深度是衡量一家交易所優劣的重要指標之一,反映的是市場在承受大額交易時價格不出現大幅波動的能力。其次,Uniswap無法獨立定價,必須依附于主流交易所。Uniswap舍棄了訂單薄模式,即舍棄了“價格優先”的交易原則,無法捕捉到市場的最新交易價格。為此,Uniswap不得不引入套利機制:一旦Uniswap上的價格與市場公允價格不同,就會出現套利空間,并將價格拉回正軌。這注定了Uniswap永遠無法成為主流交易所,否則套利機制將失靈,交易無法保證按正常市場價格執行。
Jay Hao,其對Uniswap的數學美感不惜吝嗇之詞,卻也不得不遺憾地說,Uniswap很難取代目前的主流交易所。[2020/8/5]
表情符號是象形文字,通常以彩色卡通形式呈現并在文本中內聯使用。它們代表面部,天氣,車輛和建筑物,食物和飲料,動物和植物,或代表情感,感覺或活動的圖標。Emoji已經無處不在,它正在成為跨越不同文化的所有人通用的語言。但不同人對Emoji的使用理解以及各個操作系統碎片化的支持,也使得帶來了一些問題。比如:短期內你也不會看到步槍的表情符號,U+1F946。Unicode組織包括蘋果和微軟都反對加入步槍符號。手槍和其他武器的Emojis已經使人們陷入了法律的困擾。之前一家法國法院裁定手槍表情符號可能構成死亡威脅,將一名把槍的表情發給前女友的男子判處三個月監禁。
在瀏覽器地址欄中直接渲染U+1F512這個編碼也是相當危險的。因為它和HTTPS安全小鎖外觀上非常相似。攻擊者可以對其進行安全小鎖的偽造。U+1F512編碼曾在Chrome/Firefox瀏覽器中出現過這樣的安全問題。
三、混合腳本帶來的安全風險
混合腳本是有很多合法的用途的,例如Ωmega。但視覺上容易混淆的字符通常不會放在一個腳本中。在視覺上容易混淆的字符為欺騙提供了許多機會,例如下面這兩個域名,希臘小寫字母Omicron和拉丁文o外觀是非常相似的。
動態 | BHD Community 發起的支援武漢活動現已收到1562枚BHD募捐:據BHD Community消息,截止2020年1月30日,BHD Community已收到1562枚BHD的捐贈,價值約78000元,捐款地址:39F8GoUqZDWFh5YHNgEk3UzvBvvbF5DuiA,后續將會換成同等價值的USDT捐贈區塊鏈公益組織,為武漢疫情作出貢獻!疫情不滅,捐款不停,武漢加油![2020/1/30]
很久之前,域名只允許包含拉丁字母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被認為是有效的注冊。
在這五條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
NFTFi是去中心化金融和NFTs的交集。這個新領域為收藏家們解鎖了一系列操作行動:以你的NFT為抵押進行貸款。以3個月分期付款的方式支付NFT。租用某個NFT一段時間以獲得社會影響力.
1900/1/1 0:00:00作者:小牛 DEX賽道整體處于供大于求的狀態,DEX提供的交易和流動性挖礦功能已能基本滿足用戶的需求.
1900/1/1 0:00:00本文來自?Medium?,原文作者:MohamedFouda,由Odaily星球日報譯者Katie辜編譯。 在過去的一年里,一些備受矚目的Dapp已經推出了自己的應用鏈,或宣布了未來的相關計劃.
1900/1/1 0:00:00目前許多主流敘事認為,以區塊鏈技術為基礎構建的Web3產品,能夠通過發行代幣賦予用戶以真正的資產所有權.
1900/1/1 0:00:00早期投資必須思考未來,我們最常聽到的一句話是未來已來,但到底未來是什么?未來會如何?確實難以判斷預測.
1900/1/1 0:00:00頭條 ▌莫斯科交易所正準備成為一個加密貨幣交易所金色財經報道,在社交媒體上稱,俄羅斯最大的證券交易所莫斯科交易所正準備成為一個加密貨幣交易所.
1900/1/1 0:00:00