物聯(lián)網(wǎng)安全:二維碼的安全與隱私機(jī)制
微信公眾號(hào):計(jì)算機(jī)與網(wǎng)絡(luò)安全
ID:Computer-network
二維碼的應(yīng)用發(fā)展得比較早。早在20世紀(jì)80年代開(kāi)始,日本和韓國(guó)就有快餐店和便利店在宣傳單和優(yōu)惠券上使用二維碼,后來(lái)又逐步發(fā)展到將二維碼作為電影和表演的入場(chǎng)券,觀眾只需在特定設(shè)備上掃碼即可進(jìn)入。目前通過(guò)掃描加密二維碼進(jìn)行登記、付費(fèi)等的相關(guān)應(yīng)用已經(jīng)非常普遍了。
2008年北京奧運(yùn)會(huì)以后,二維碼在我國(guó)開(kāi)始普及,電影票、登機(jī)牌、火車(chē)票等都開(kāi)始出現(xiàn)二維碼。特別是隨著支付寶和微信支付的普及,掃碼付款已經(jīng)成為日常生活的一部分。
二維碼的安全保護(hù)一直是一個(gè)研究熱點(diǎn)。由于二維碼的數(shù)據(jù)內(nèi)容與制作來(lái)源難以監(jiān)管,編碼、譯碼過(guò)程完全開(kāi)放,識(shí)讀軟件質(zhì)量參差不齊,因此在缺乏統(tǒng)一管理規(guī)范的前提下,易造成二維碼信息泄露和信息涂改等安全威脅。
針對(duì)二維碼的攻擊方式呈現(xiàn)出了多樣性的特點(diǎn),主要包括以下4類(lèi)。
(1)誘導(dǎo)登錄惡意網(wǎng)站:攻擊者只需將偽造、詐騙或釣魚(yú)等惡意網(wǎng)站的網(wǎng)址鏈接制作成二維碼圖形,即可在誘導(dǎo)用戶掃碼登錄其網(wǎng)站后,獲取用戶輸入的個(gè)人敏感信息、金融賬號(hào)等。
(2)木馬植入:攻擊者將自動(dòng)下載惡意軟件的命令編入二維碼,當(dāng)用戶在缺少防護(hù)措施的情況下掃描該類(lèi)二維碼時(shí),用戶系統(tǒng)就會(huì)被悄悄植入木馬、蠕蟲(chóng)或隱匿軟件,攻擊者在后臺(tái)就可以肆意破壞用戶文件、偷竊用戶信息,甚至遠(yuǎn)程控制用戶、群發(fā)收費(fèi)短信等。
(3)信息劫持:很多商家都提供掃碼支付等在線支付手段,因此網(wǎng)絡(luò)支付平臺(tái)會(huì)根據(jù)用戶訂單生成二維碼,以方便用戶掃描支付。若攻擊者劫持了商家與用戶之間的通信信息,并惡意修改訂單,那么將對(duì)用戶和商家造成直接的經(jīng)濟(jì)損失。
(4)網(wǎng)頁(yè)(Web)攻擊:隨著手機(jī)瀏覽器功能的日趨成熟,用戶能夠通過(guò)手機(jī)輸入網(wǎng)站域名或提交Web表單。攻擊者利用Web頁(yè)面的漏洞,將非法SQL語(yǔ)句編入二維碼,當(dāng)用戶使用手機(jī)掃描二維碼登錄Web頁(yè)面時(shí),惡意SQL語(yǔ)句就會(huì)自動(dòng)執(zhí)行(SQL注入)。若數(shù)據(jù)庫(kù)防范機(jī)制脆弱,則會(huì)造成數(shù)據(jù)庫(kù)被侵入,進(jìn)而導(dǎo)致更嚴(yán)重的危害。
除了基于密碼的安全二維碼方法外,還有基于信息隱藏的二維碼保護(hù)算法。該算法通過(guò)在二維碼中嵌入一些秘密信息,改變二維碼的形態(tài),從而使攻擊者無(wú)法獲知其內(nèi)容。嵌入的信息可以被正常提取以無(wú)損地恢復(fù)二維碼。
基于信息隱藏的二維碼保護(hù)算法將二維碼圖像分成若干小塊,將每個(gè)小塊掃描成一維序列后嵌入1 bit信息。二維碼圖像是一種二值圖像,連續(xù)像素具有同種顏色的概率很高。因此,針對(duì)每一行,不再直接對(duì)每個(gè)位置具有的像素進(jìn)行編碼,而是對(duì)顏色變化的位置和從該位置開(kāi)始的連續(xù)同種顏色的個(gè)數(shù)進(jìn)行編碼。圖1所示的編碼結(jié)果為:
圖1 掃描后像素的編碼過(guò)程
算法的具體步驟如下。
第1步:將二維碼邊緣部分進(jìn)行填充,使得二維碼圖像的像素長(zhǎng)寬都為3的倍數(shù),把二維碼分成互不重疊的3×3小塊。
第2步:將每個(gè)3×3小塊按照?qǐng)D2所示從b1到b9的一順序掃描成維序列,并對(duì)該序列進(jìn)行行程編碼,每個(gè)小塊編碼為
圖2 像素值掃描順序
第3步:選出第一個(gè)行程最長(zhǎng)的編碼,將行程為奇數(shù)的表示為嵌入1,行程為偶數(shù)的表示為嵌入0。如果行程奇偶性與嵌入信息不符,則將行程值加1。
第4步:根據(jù)該圖像塊是否被修改過(guò),對(duì)1 像素進(jìn)行奇偶校驗(yàn),1 像素為偶數(shù)表示該塊未被修改過(guò),1像素為奇數(shù)表示該塊被修改過(guò),如須修改,則改變b9像素的值。
第5步:重復(fù)上述過(guò)程,直到所有分塊均被修改。
上述過(guò)程中,由于行程值為9的行程編碼修改后將越界,故其不作為嵌入塊。同時(shí),最長(zhǎng)行程包含b9像素值的編碼,由于其長(zhǎng)度可能會(huì)發(fā)生變化,故其也不作為嵌入塊。