現(xiàn)在的街面上很多掃碼的禮品的活動(dòng),可是碼是能隨便掃的嗎?此處的風(fēng)險(xiǎn)巨大,你可曾了解過?
昨天于旸在 GeekPwn 演講中展示了它的危險(xiǎn)性。如果你沒有聽說過于旸,也許對(duì)他另一個(gè)名字更熟悉——「TK 教主」——來自他用的 ID「Tombkeeper」,這是一個(gè)在安全行業(yè)如雷貫耳的名字。去年他加入騰訊,組建了玄武實(shí)驗(yàn)室,開展多項(xiàng)面向未來的安全技術(shù)研究。
他們研究條碼后發(fā)現(xiàn),利用一張印有條碼的紙就能攻破一臺(tái)計(jì)算機(jī)。
(于旸,騰訊玄武實(shí)驗(yàn)室負(fù)責(zé)人,他在 GeekPwn 大會(huì)上展示了條碼的危險(xiǎn)性。)
下面的內(nèi)容在于旸演講的基礎(chǔ)上編輯而成。
條碼:一種機(jī)器可讀的數(shù)據(jù)表示形式
條碼的歷史非常長,早在上世紀(jì) 40 年代末就有人想到條碼這個(gè)主意并開始實(shí)驗(yàn)。它的原理很簡單:使用某種協(xié)議將信息編成圖像,用條碼閱讀器或手機(jī)獲取圖像,將圖像交給芯片,把圖像解碼轉(zhuǎn)換成信息,最后傳輸?shù)诫娔X。
它的應(yīng)用無處不在:超市收銀時(shí)掃描包裝袋上的條碼獲取價(jià)格;醫(yī)院掃描病歷上的條碼讀取病人信息;商家掃描微信支付條碼收款……
這些條碼大多是一維碼,另一種條碼是隨著微信普及而重獲新生的二維碼(它還有個(gè)名字叫 QR Code)。條碼使用的協(xié)議非常多,有一種協(xié)議叫 Code 128, 這是一個(gè)非常有野心的協(xié)議,它支持全部 ASCII 字符。ASCII 是二進(jìn)制對(duì)應(yīng)的字符,現(xiàn)代計(jì)算機(jī)使用這套字符編寫代碼。它對(duì)于計(jì)算機(jī)編程而言相當(dāng)于拉丁字母之于各種西方語言??傊盟芫帉懘a控制計(jì)算機(jī)。
市面上的大部分條碼閱讀器都支持這種協(xié)議,這意味著黑客可以編寫一段程序,轉(zhuǎn)化成條碼,通過條碼閱讀器傳輸?shù)接?jì)算機(jī)上。
這些代碼怎么才能管用?絕大多數(shù)情況下,條碼閱讀器通過 USB 接口接入計(jì)算機(jī),對(duì)計(jì)算機(jī)而言這就是一個(gè)輸入設(shè)備,計(jì)算機(jī)只捕捉它們發(fā)過來的信號(hào),從哪兒發(fā)過來對(duì)電腦來說是一樣,如果它發(fā)送通常由鍵盤發(fā)送過來的信號(hào),計(jì)算機(jī)也會(huì)一樣執(zhí)行。
如果你將鍵盤種的熱鍵,比如 CTRL+2, CTRL+O 等編成條碼,通過條碼掃描器輸入計(jì)算機(jī),便能直接控制計(jì)算機(jī)。Code 128 協(xié)議不支持 Win+R 這種熱鍵,但最大的條碼閱讀器廠商 Symbol 公司還有一種特有的技術(shù)叫 ADF,它支持 Win+。這樣控制的內(nèi)容就更廣了,能直接調(diào)出計(jì)算機(jī)的命令窗口。
以前的攻擊方式
以前有過一個(gè)研究,將條碼作為一筆輸入源看待,能通過條碼觸發(fā)計(jì)算機(jī)內(nèi)存的溢出,或觸發(fā)格式化字符串,還能 SQL 注入等。
還有一種更簡單的攻擊方式,大部分應(yīng)用場景下,條碼種的數(shù)字都是按照序號(hào)排列的,比如你去商店買個(gè)東西,商家給你一個(gè)條碼