0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于 Unicode 所有開發(fā)者都應(yīng)該知道的前五件事 并用來防止欺詐

Linux愛好者 ? 2018-02-02 11:41 ? 次閱讀

2017年11月 BBC 報(bào)道了一個(gè)假冒 WhatsApp 的新聞。假應(yīng)用似乎與官方應(yīng)用屬于同一個(gè)開發(fā)者名下。原來這些騙子通過在開發(fā)者名字中加入 Unicode 的非打印空格(nonprintable space),繞開驗(yàn)證。在 Google Play 維護(hù)人員發(fā)現(xiàn)之前,下載假應(yīng)用超過 100 萬人。

Unicode 是極其有價(jià)值的標(biāo)準(zhǔn),使得電腦、智能手機(jī)和手表,在全球范圍內(nèi)以同樣的方式顯示同樣的消息。不幸的是,它的復(fù)雜性使其成為了騙子和惡作劇者的金礦。如果像 Google 這樣的巨頭都不能抵御 Unicode 造成的基本問題,那對(duì)小一點(diǎn)的公司來說,這可能就像是必輸?shù)膽?zhàn)役了。然而,大多數(shù)這些問題都是圍繞著幾個(gè)漏洞利用的。以下是關(guān)于 Unicode 所有開發(fā)者都應(yīng)該知道的前五件事,并用來防止欺詐。

1. 很多 Unicode 代碼點(diǎn)是不可見的

Unicode 中有一些零寬度代碼點(diǎn),例如零寬度連接器(U+200D)和零寬度非連接器(U+200C),它們都暗示了連字符工具。零寬度代碼點(diǎn)對(duì)屏幕顯示沒有可見的影響,但是它們?nèi)詴?huì)影響字符串比較。這也是假 WhatApp 應(yīng)用的騙子能這么長時(shí)間不被發(fā)現(xiàn)的原因。這些字符大多數(shù)都在一般標(biāo)點(diǎn)符號(hào)區(qū)(從 U+2000 到 U+206F)。一般來說,沒有理由允許任何人在標(biāo)識(shí)符中使用這個(gè)區(qū)的代碼點(diǎn),所以它們是最不易過濾的。但是該區(qū)域外也有部分其他不可見的特別代碼,比如蒙古文元音分隔符(U+180E)。

一般來說,用 Unicode 對(duì)唯一性約束做簡單的字符串比較,這很危險(xiǎn)的。有一個(gè)可能的解決方法,限制允許用作標(biāo)識(shí)符及其他任何能被騙子濫用的數(shù)據(jù)的字符集。不幸的是,這并非該問題的徹底解決方法。

2. 很多代碼點(diǎn)看起來很相似

Unicode 努力覆蓋全世界書寫語言中的所有符號(hào),必然有很多看起來相似的字符。人類甚至無法把它們區(qū)分開來,但是電腦能毫不費(fèi)力地識(shí)別出差別。對(duì)這個(gè)問題的一種令人驚訝的濫用是擬態(tài)(Mimic)。擬態(tài)是一項(xiàng)有趣的應(yīng)用,將軟件開發(fā)所使用的常見符號(hào),例如冒號(hào)和分號(hào),替換成相似的 Unicode 字符。這能在代碼編譯工具中制造混亂,留下一臉懵逼的開發(fā)者。

關(guān)于 Unicode 所有開發(fā)者都應(yīng)該知道的前五件事 并用來防止欺詐

相似符號(hào)帶來的問題,遠(yuǎn)不止是簡單的惡作劇。花哨的叫法是 homomorphic attacks(同態(tài)攻擊)。利用這些漏洞,會(huì)導(dǎo)致嚴(yán)重的安全問題。在 2017 年 4 月,一位安全研究員通過混合不同字符集中的字母,成功地注冊(cè)了一個(gè)看起來與 apple.com 非常相似的域名,甚至為它拿到了 SSL 證書。各大瀏覽器都愉快地顯示了 SSL 掛鎖,將該域名列為安全域名。

與混合可見字符和不可見字符相似,沒有道理允許標(biāo)識(shí)符,尤其是域名,使用混合字符集名。大多數(shù)瀏覽器已經(jīng)采取了行動(dòng),將混合字符集域名顯示為十六進(jìn)制的 unicode 值以對(duì)其進(jìn)行處罰,這樣用戶就不會(huì)輕易地被迷惑。如果你向用戶顯示標(biāo)識(shí)符,比如說在搜索結(jié)果中,考慮類似的方法來避免混淆。但是,這也不是完美的解決方法。某些域名可以輕易地用一個(gè)非拉丁字符集中的單單一個(gè)區(qū)來構(gòu)建,比如 ap.com 或者 chase.com。

Unicode 協(xié)會(huì)出版了一張易混淆字符表,可能作為自動(dòng)檢查潛在詐騙的好參考。另一方面,如果你想找一個(gè)快速創(chuàng)造疑惑的方法,看看Shapecatcher吧。它是一個(gè)奇妙工具,列舉了視覺上像圖畫的 Unicode 符號(hào)。

3. 規(guī)范化并不那么規(guī)范

規(guī)范化對(duì)像用戶名這樣的標(biāo)識(shí)符來說非常重要,幫助人們用不同的方法輸入值,但是用一致的方法來處理。規(guī)范標(biāo)識(shí)符的一個(gè)常見方法是把所有字符都轉(zhuǎn)變成小寫,確保 JamesBond 和 jamesbond 是一樣的。

因?yàn)橛腥绱硕嗟南嗨谱址徒徊婕?,不同的語言或者 unicode 處理庫,可能應(yīng)用不同的規(guī)范化策略。如果在若干地方進(jìn)行了規(guī)范化,會(huì)潛在地帶來安全風(fēng)險(xiǎn)。簡單來說,不要假設(shè)小寫轉(zhuǎn)換在應(yīng)用軟件中的不同部分是一樣的。來自 Spotify 的 Mikael Goldmann 在他們的一名用戶發(fā)現(xiàn)了一個(gè)盜用賬戶的方法后,于 2013 年針對(duì)這個(gè)問題寫了一份事件分析。攻擊者可以注冊(cè)其他人用戶名的變體,比如 BIGBIRD,會(huì)轉(zhuǎn)換成標(biāo)準(zhǔn)的賬戶名 bigbird。該應(yīng)用軟件的不同層對(duì)單詞的規(guī)范化不同,使得人們能夠注冊(cè)模仿賬號(hào),而重置目標(biāo)賬戶的密碼。

4. 屏幕顯示長度和內(nèi)存大小無關(guān)

使用基礎(chǔ)拉丁字符集和大多數(shù)歐洲字符集時(shí),一段文本在屏幕或者紙上所占的空間大致與符號(hào)數(shù)成比例,大致與文本的內(nèi)存大小成比例。這也是 EM 和 EN 成為流行長度單位的原因。但使用 Unicode 時(shí),像這樣任何種類的假設(shè)都會(huì)變得危險(xiǎn)。有像 Bismallah Ar-Rahman Ar-Raheem (U+FDFD)這樣可愛的字符,單單一個(gè)字符就比大多數(shù)英文單詞都要長,能夠輕易地超過網(wǎng)頁上假定的視覺外框。這意味著基于字符串字符長度的任何種類的自動(dòng)換行,或者文本中斷算法都能輕易被愚弄。大多數(shù)終端程序要求固定寬度的字體,所以在這些程序中顯示的話,你會(huì)看到右引號(hào)完全標(biāo)在了錯(cuò)誤的位置上。

關(guān)于 Unicode 所有開發(fā)者都應(yīng)該知道的前五件事 并用來防止欺詐

該問題一種濫用是 zalgo 文本生成器,它在一段文本周圍加上垃圾,讓這些東西占據(jù)了更多的垂直空間。

當(dāng)然了,整個(gè)不可見代碼點(diǎn)的問題導(dǎo)致屏幕長度和內(nèi)存大小無關(guān)。所以與輸入?yún)^(qū)恰好合適的東西可能長到能摧毀一個(gè)數(shù)據(jù)庫區(qū)。過濾不可見字符來規(guī)避問題還不夠,因?yàn)檫€有很多不占用它們自己空間的其他例子。

混合占據(jù)前一個(gè)字母上的空間的拉丁字符(比如U+036B 和 U+036C),這樣你能在一行文本行中寫多行文本(Nu036BOu036C 產(chǎn)生 N?O?)。吟誦標(biāo)記是用來示意吟唱希伯來圣經(jīng)經(jīng)文的語調(diào)的。這些吟誦標(biāo)記能夠在同樣的視覺空間中無限堆疊,意味著他們能被輕易地濫用,將大量信息編寫進(jìn)屏幕上的一個(gè)字符空間。Martin Kleppe 用吟誦標(biāo)記為瀏覽器編碼了Conway’s Game of Life 的實(shí)現(xiàn)??纯丛擁撁娴脑创a吧,你會(huì)感到震驚的。

5. Unicode 遠(yuǎn)不止是被動(dòng)數(shù)據(jù)

有些代碼點(diǎn)是用來影響輸出字符的顯示方式的,意味著用戶不僅可以復(fù)制粘貼數(shù)據(jù),也能鍵入處理指令。一個(gè)常見惡作劇是,使用右到左覆蓋(U+202E)來轉(zhuǎn)變文本方向。例如,用谷歌地圖搜索 Ninjas。該查詢字符串實(shí)際上轉(zhuǎn)換了搜索單詞的方向,盡管頁面上的搜索區(qū)域顯示著“ninjas”,但是實(shí)際上搜索的是“sajnin”。

這種漏洞利用非常流行,XKCD漫畫網(wǎng)站上有一張相應(yīng)漫畫。

混合數(shù)據(jù)和處理指令——可有效執(zhí)行的代碼——不是個(gè)好主意,尤其是如果用戶可以直接鍵入。這對(duì)任何在頁面顯示中包括的用戶鍵入來說都是大問題。大多數(shù)網(wǎng)頁開發(fā)者知道通過移除 HTML 標(biāo)簽來清理用戶鍵入,但是也需要注意鍵入中的 Unicode 控制字符。這是個(gè)應(yīng)對(duì)任何臟話或者內(nèi)容過濾器的簡單方法——只要把單詞倒轉(zhuǎn)過來,在開始加上右到左覆蓋。

右到左(Right-to-left)hack 可能無法嵌入惡意代碼,但是如果你不小心的話,它能擾亂內(nèi)容或者翻轉(zhuǎn)整個(gè)頁面。抵御這個(gè)問題,常見方法是把用戶提供的內(nèi)容放進(jìn)一個(gè)輸入?yún)^(qū)域或者文本區(qū)域,這樣處理指令不會(huì)影響頁面。

處理指令對(duì)顯示的另一個(gè)特別問題是字型變換選取器。為了避免為每種顏色的 emoji 創(chuàng)造單獨(dú)的代碼,Unicode 允許使用字型變換選取器來混合基本符號(hào)和顏色。白旗,字型變換選取器和彩虹正常會(huì)產(chǎn)生彩虹顏色的旗。但是并不是所有變換都可行。在 2017 年1 月,iOS unicode 處理中的一個(gè) bug 允許惡作劇者,僅僅發(fā)送一條特制信息就遠(yuǎn)程導(dǎo)致 iPhone 癱瘓。該信息包括白旗,字型變換選取器和一個(gè)零。iOS CoreText 陷入了恐慌模式,想要挑出正確的變換,導(dǎo)致了 OS 的癱瘓。這個(gè)惡作劇在直接信息,群聊甚至分享聯(lián)系人名片中都奏效。這個(gè)問題也影響了 iPad,甚至部分 MacBook。該惡作劇針對(duì)的目標(biāo)人群,面對(duì)系統(tǒng)崩潰,無能為力。

相似的 bug 每幾年就發(fā)生一次。在 2013 年,出現(xiàn)了一個(gè)阿拉伯字符處理 bug,它能使 OSX 和 iOS 崩潰。所有這些 bug 都深深埋藏在 OS 文本處理模塊里,所以典型客戶端應(yīng)用開發(fā)者根本無法躲開它們。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207895
  • Unicode
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    12534

原文標(biāo)題:這種 Unicode 符號(hào),讓百萬人中招下了假應(yīng)用……

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    2016關(guān)于物聯(lián)網(wǎng)應(yīng)該知道的7件事

    物聯(lián)網(wǎng)在實(shí)際應(yīng)用上的開展需要各行各業(yè)的參與,并且需要國家政府的主導(dǎo)以及相關(guān)法規(guī)政策上的扶助,物聯(lián)網(wǎng)的開展具有規(guī)模性、廣泛參與性、管理性、技術(shù)性、物的屬性等等特征,關(guān)于物聯(lián)網(wǎng)2016我們應(yīng)該知道的7
    發(fā)表于 08-10 17:21 ?957次閱讀

    [原創(chuàng)]每天做好一件事

    你,假如你每天都能做好一件事,每天你就會(huì)有一粒種子的收獲和快樂??墒牵?dāng)你想把所有的事情都擠到一起來做,反而連一粒種子也收獲不到了。" [此貼子已經(jīng)被summao于2010-5-31 14:04:26編輯過]
    發(fā)表于 05-31 11:55

    什么叫做“每天6件事”,如何落實(shí)“每天6件事

    這六件事每天完成六件事,會(huì)有驚人的發(fā)現(xiàn)。放下這本書,寫下明天最優(yōu)先做的六件事。如此實(shí)行三周,若你真的想成功,你的生活將不復(fù)以往。七、只要二十一天只要求三星期,這三個(gè)星期你每晚寫下明天最重要的
    發(fā)表于 04-21 13:40

    調(diào)節(jié) PID 都應(yīng)該學(xué)習(xí)labview哪方面的內(nèi)容

    本人想做個(gè)上位機(jī) 可之前沒接觸過LABVIEW我要實(shí)現(xiàn)的功能就是顯示期望 與實(shí)際數(shù)據(jù)的曲線用來調(diào)節(jié) PID都應(yīng)該學(xué)習(xí)labview哪方面的內(nèi)容啊求指導(dǎo){:23:}
    發(fā)表于 09-22 14:38

    15 年代碼經(jīng)驗(yàn),總結(jié)出提升 10 倍效率的三件事!

    。最重要的是,知道工作的目的和什么會(huì)使工作成功是很關(guān)鍵的。水平差的開發(fā)者會(huì)在一個(gè)項(xiàng)目的錯(cuò)誤方向上花幾個(gè)小時(shí)而不問任何問題。他們就是我所說的 負(fù)10倍效率的開發(fā)人員,因?yàn)樗麄円?b class='flag-5'>事無成,浪
    發(fā)表于 10-14 17:35

    嵌入式驅(qū)動(dòng)開發(fā)者設(shè)計(jì)都應(yīng)該了解的5個(gè)知識(shí)

    (DMA)。Bit bang模式:當(dāng)微控制器沒有內(nèi)外設(shè)去執(zhí)行功能的時(shí)候,或者當(dāng)所有的內(nèi)外設(shè)都已經(jīng)被使用了,而此時(shí)又有一個(gè)新的請(qǐng)求,那么開發(fā)者應(yīng)該選擇Bit bang設(shè)計(jì)模式。Bit bang模式
    發(fā)表于 12-06 19:22

    每一個(gè)嵌入式驅(qū)動(dòng)開發(fā)者設(shè)計(jì)都應(yīng)該了解的5個(gè)竅門

    和直接存儲(chǔ)器訪問(DMA)。Bit bang模式:當(dāng)微控制器沒有內(nèi)外設(shè)去執(zhí)行功能的時(shí)候,或者當(dāng)所有的內(nèi)外設(shè)都已經(jīng)被使用了,而此時(shí)又有一個(gè)新的請(qǐng)求,那么開發(fā)者應(yīng)該選擇Bit bang設(shè)計(jì)模式。Bit
    發(fā)表于 12-18 11:03

    移動(dòng)開發(fā)者應(yīng)該知道的 8 個(gè)盈利技巧

    如果你是一個(gè)移動(dòng)開發(fā)者,擁有不少的手機(jī)應(yīng)用程序,肯定特別想知道廣告是否可以通過應(yīng)用幫你賺錢。下面為移動(dòng)開發(fā)者們揭曉 8 個(gè)你不得不知的盈利技巧,把手機(jī)應(yīng)用程序兌換成赤
    發(fā)表于 08-01 08:24 ?560次閱讀

    更新iOS 10之前應(yīng)該知道的六件事

    不敢下載。我們都有過這種情況。蘋果手機(jī)的新操作系統(tǒng)提供了很多新體驗(yàn),也有很多舊功能得到了改進(jìn)。以下是升級(jí)時(shí)應(yīng)牢記的六件事。
    發(fā)表于 01-06 15:49 ?618次閱讀

    整理了所有數(shù)據(jù)專家都應(yīng)該會(huì)的七款Python工具

    我咨詢了我們真正的數(shù)據(jù)專家,收集整理了他們認(rèn)為所有數(shù)據(jù)專家都應(yīng)該會(huì)的七款 Python 工具。The Galvanize Data Science 和 GalvanizeU 課程注重讓學(xué)生們花大
    的頭像 發(fā)表于 01-15 10:21 ?4166次閱讀

    硬件工程師都應(yīng)該掌握防反接電路,你都Get到了嗎?

    硬件工程師都應(yīng)該掌握的防反接電路,你都Get到了嗎?
    的頭像 發(fā)表于 02-03 15:05 ?4412次閱讀

    GitHub重向伊朗開發(fā)者打開大門

    」的其中之一。 ? 當(dāng)時(shí),這件事情在 twitter和 reddit上面掀起了軒然大波。 ? 當(dāng)時(shí),Github的工作人員表示: ? 「所有開發(fā)人員都應(yīng)該免費(fèi)使用GitHub,不管他們
    的頭像 發(fā)表于 01-12 11:25 ?1831次閱讀

    關(guān)于MIMO技術(shù)您應(yīng)該知道的10件事

    關(guān)于MIMO技術(shù)您應(yīng)該知道的10件事
    發(fā)表于 06-16 09:32 ?17次下載

    為ADAS構(gòu)建時(shí)需要考慮的6件事說明

    為ADAS構(gòu)建時(shí)需要考慮的6件事說明。
    發(fā)表于 09-22 17:06 ?1次下載

    關(guān)于隔離器件,你需要知道的三件事

    關(guān)于隔離器件,你需要知道的三件事
    發(fā)表于 10-28 12:00 ?0次下載
    <b class='flag-5'>關(guān)于</b>隔離器件,你需要<b class='flag-5'>知道</b>的三<b class='flag-5'>件事</b>