物聯(lián)網(wǎng)設(shè)備之所以存在安全隱患,是因?yàn)槠浔┞读俗銐虻拿舾?a target="_blank">信息,從而被攻擊者利用來(lái)制造攻擊。這些敏感信息,從暴露位置來(lái)看,可分為兩類:一類是存儲(chǔ)在設(shè)備中的固件和印制在產(chǎn)品內(nèi)部的信息(如PCB絲印、芯片型號(hào))等;另一類是傳輸在網(wǎng)絡(luò)(不僅僅是以太網(wǎng)、Wi-Fi、藍(lán)牙等)中的信息。本文通過(guò)從本地信息、網(wǎng)絡(luò)信息這兩個(gè)角度介紹物聯(lián)網(wǎng)弱設(shè)備存在的安全隱患,進(jìn)而提出設(shè)備加固的方法。
一、簡(jiǎn)介
近年來(lái),隨著物聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,物聯(lián)網(wǎng)產(chǎn)品的數(shù)量也在呈爆發(fā)式增長(zhǎng)。Gartner預(yù)測(cè),兩年后,物聯(lián)網(wǎng)設(shè)備的裝機(jī)量將超過(guò)200億[1] ,這些物聯(lián)網(wǎng)設(shè)備所帶來(lái)的信息量將非常龐大。與此同時(shí),因物聯(lián)網(wǎng)設(shè)備導(dǎo)致的信息安全隱患也在逐年增加,甚至有些隱患已經(jīng)造成了不可挽回的損失,如2016年底的Mirai事件[2] ,就是因?yàn)榇罅康谋┞对诨ヂ?lián)網(wǎng)上的物聯(lián)網(wǎng)設(shè)備存在弱口令和未修復(fù)的漏洞。2018年3月27日,《綠盟科技2017物聯(lián)網(wǎng)安全年報(bào)》[3] 發(fā)布,其中對(duì)物聯(lián)網(wǎng)資產(chǎn)的暴露情況、物聯(lián)網(wǎng)設(shè)備的脆弱性和物聯(lián)網(wǎng)設(shè)備面臨的威脅風(fēng)險(xiǎn)進(jìn)行了分析,并給出了物聯(lián)網(wǎng)安全防護(hù)體系。
物聯(lián)網(wǎng)設(shè)備之所以存在安全隱患,是因?yàn)槠浔┞读俗銐虻拿舾行畔ⅲ瑥亩还粽呃脕?lái)制造攻擊。這些敏感信息,從暴露位置來(lái)看,可分為兩類:一類是存儲(chǔ)在設(shè)備中的固件和印制在產(chǎn)品內(nèi)部的信息(如PCB絲印、芯片型號(hào))等,在本文我們暫時(shí)稱其為本地信息;另一類是傳輸在網(wǎng)絡(luò)(不僅僅是以太網(wǎng)、Wi-Fi、藍(lán)牙等)中的信息。
目前看來(lái),不論是生產(chǎn)廠商還是用戶,對(duì)弱設(shè)備的安全問(wèn)題的關(guān)注并不是非常足夠。例如,在2017年9月的XPwn2017未來(lái)安全探索盛會(huì)[4] 上,某黑客逆向了某共享單車的單片機(jī)程序,從而挖掘出了漏洞。2017年10月,物聯(lián)網(wǎng)安全研究人員滲透進(jìn)LIFX智能燈泡的Zigbee網(wǎng)絡(luò)[5] ,并對(duì)設(shè)備的固件進(jìn)行逆向破解,從而得到了其Wi-Fi網(wǎng)絡(luò)密碼。
由此可見(jiàn),物聯(lián)網(wǎng)設(shè)備存在許多的安全隱患,而且,我們面臨一個(gè)挑戰(zhàn):如何消除這些安全隱患。本文就以弱設(shè)備為例,闡述如何對(duì)弱設(shè)備進(jìn)行加固,解決已經(jīng)出現(xiàn)的安全隱患。
后續(xù)小節(jié)中,筆者會(huì)先介紹物聯(lián)網(wǎng)弱設(shè)備存在的安全隱患,再介紹物聯(lián)網(wǎng)弱設(shè)備的加固方法與建議,最后再進(jìn)行簡(jiǎn)單地總結(jié)。
二、物聯(lián)網(wǎng)弱設(shè)備存在的隱患
一般,攻擊者會(huì)收集足夠的信息,以利用現(xiàn)有的漏洞或挖掘新的漏洞對(duì)設(shè)備發(fā)起攻擊行為。如果攻擊者拿不到可以利用的信息,設(shè)備的安全隱患也就不會(huì)存在。物聯(lián)網(wǎng)弱設(shè)備一般會(huì)暴露哪些信息呢?從信息的未知看,可以分為本地的信息和網(wǎng)絡(luò)中的信息兩類。接下來(lái),將從這兩方面介紹物聯(lián)網(wǎng)弱設(shè)備存在的安全隱患。
1. 本地信息
所謂本地信息,這里定義為可以通過(guò)購(gòu)買設(shè)備,觀察或者使用工具直接對(duì)產(chǎn)品接觸式操作獲取到的信息。一般包含PCB絲印、硬件接口、固件信息等。
(1) PCB絲印
PCB中文名稱為印制電路板。在設(shè)計(jì)和制作PCB的過(guò)程中,絲印為工程師的焊接、調(diào)試工作帶來(lái)了極大的便利。然而,在產(chǎn)品出廠后,它上面的PCB絲印信息對(duì)用戶沒(méi)有任何幫助,反而為攻擊者的成功破解提供了信息。
以圖 1所示的Wi-Fi智能插座[6] 為例,在PCB上,插座暴露了三類敏感信息:JTAG調(diào)試接口(紅色標(biāo)記的位置)、UART接口位置(紫色標(biāo)記的位置)和設(shè)置程序啟動(dòng)位置的BOOT(藍(lán)色標(biāo)記的位置)。JTAG和UART是芯片供應(yīng)商提供給工程師進(jìn)行讀取和下載程序的兩類接口。攻擊者也可以利用這兩類接口嘗試把固件讀取出來(lái)。其具體的讀取、下載方法,可參考《滲透低性能智能設(shè)備的關(guān)鍵技術(shù)-固件提取》[7] 。
圖 1 — 某智能插座PCB絲印信息
(2) 硬件接口和芯片信息
上節(jié)已經(jīng)提到了JTAG、UART接口信息。事實(shí)上,這兩類接口對(duì)攻擊者是最有幫助的,因?yàn)橹恍枰恍┕ぞ撸涂梢园言O(shè)備內(nèi)的固件信息讀取出來(lái),進(jìn)而分析出更多的信息。
圖 2 — 某智能設(shè)備PCB
以圖 2所示的PCB為例,我們很容易發(fā)現(xiàn)規(guī)則排列的6個(gè)焊盤(紅色方框標(biāo)記),結(jié)合芯片上的型號(hào)信息(JN516x),很容易在芯片手冊(cè)[8] 中查到該芯片的引腳圖和芯片的固件下載方式,如圖 3所示。
圖 3 — JN5169的芯片引腳圖
根據(jù)圖 3,結(jié)合萬(wàn)用表,可以測(cè)試出這6個(gè)焊盤和芯片的引腳是否直接相連(短路測(cè)試),如果是直接相連,就可以確定,該接口是用來(lái)下載程序的。事實(shí)上,芯片JN5169下載程序使用的接口,一共需要的也是6個(gè)。
攻擊者定位程序下載接口所需的信息,只是通過(guò)搜索設(shè)備拆解文章,或者把設(shè)備買回來(lái)拆解后即可獲取。攻擊者獲取這些信息的目的非常明確:拿到固件,從而分析出更多的信息或挖掘出網(wǎng)絡(luò)通信相關(guān)的漏洞。
(3) 固件信息
固件中幾乎包含了除了網(wǎng)絡(luò)信息中的全部信息,包括程序執(zhí)行流程,初始化參數(shù)等。如果雙方通信的內(nèi)容一開(kāi)始就是被加密的,那初始或默認(rèn)的加密參數(shù)(如密鑰、初始向量)等信息將被編碼到固件中。如Z-Stack協(xié)議棧中,Zigbee通信的默認(rèn)密鑰會(huì)被硬編碼,如圖 4和圖 5所示。如果再深入一些,在IAR編譯環(huán)境下生成多個(gè)固件,分析該密鑰出現(xiàn)的位置,就會(huì)發(fā)現(xiàn)密鑰出現(xiàn)的位置比較有規(guī)律。
圖 4 — Z-Stack中的默認(rèn)密鑰信息
圖 5 — 編譯Z-Stack得到的固件中,Zigbee通信使用的默認(rèn)密鑰
2. 網(wǎng)絡(luò)信息
網(wǎng)絡(luò)中包含兩類信息,一類是用于控制的信息,另一類是用于共享、存儲(chǔ)的信息。一般,如果網(wǎng)絡(luò)信息存在隱患,說(shuō)明前者會(huì)存在設(shè)備失控的隱患,或者后者存在隱私泄露的隱患。
一般,網(wǎng)絡(luò)中存在的攻擊有以下幾種:
重放:藍(lán)牙、Wi-Fi等協(xié)議,云管端通信的應(yīng)用層控制報(bào)文等。
明文:HTTP協(xié)議等不安全協(xié)議的應(yīng)用,導(dǎo)致敏感信息泄露、設(shè)備受控等。
Dos:拒絕服務(wù)攻擊,使設(shè)備不能正常提供網(wǎng)絡(luò)服務(wù)。
接下來(lái),筆者以低功耗藍(lán)牙協(xié)議棧為例,簡(jiǎn)單介紹控制信息和存儲(chǔ)/共享信息在網(wǎng)絡(luò)傳輸過(guò)程中存在的隱患。
低功耗藍(lán)牙協(xié)議棧和其他的協(xié)議棧一樣,也可以采用分層模型來(lái)理解。一般,制造低功耗藍(lán)牙芯片的廠商會(huì)在芯片手冊(cè)中介紹協(xié)議棧,并總結(jié)出類似的分層模型。此處引用Nordic[9] 總結(jié)的模型,如圖 6所示,大抵可分為3層,底層為Controller,中間層為Host,頂層為Profiles。
圖 6 — 低功耗藍(lán)牙協(xié)議棧分層模型
這里不對(duì)協(xié)議棧做深入的分析,但是,需要注意的是GATT部分。當(dāng)藍(lán)牙設(shè)備通信在GATT層時(shí),通信雙方可理解為Client和Server,當(dāng)二者建立連接后,可以相互對(duì)雙方的服務(wù)(以UUID標(biāo)識(shí))進(jìn)行讀寫。例如:
圖 7 — 協(xié)議棧中預(yù)定義的UUID
介紹兩個(gè)例子,分別代表控制信息被利用,用于共享、存儲(chǔ)的信息被非法獲取這兩種情況。一般情況下,如果往UUID為0x1802的服務(wù)中寫入值,會(huì)引起設(shè)備報(bào)警。如果低功耗藍(lán)牙設(shè)備(A,用戶實(shí)際使用的產(chǎn)品)沒(méi)有對(duì)攻擊者使用的藍(lán)牙設(shè)備(B,電腦、手機(jī)等雙模藍(lán)牙設(shè)備)進(jìn)行身份認(rèn)證,攻擊者在利用B攻擊A時(shí),非常容易寫入成功,即引起設(shè)備異常報(bào)警。同樣,也可以讀取A設(shè)備內(nèi)UUID為0x180D的服務(wù)中的數(shù)據(jù)來(lái)獲得用戶的心率(前提是信息沒(méi)有被加密)。事實(shí)上,某些廠商的手環(huán)類產(chǎn)品的通信過(guò)程是沒(méi)有經(jīng)過(guò)加密的,造成了設(shè)備可控或隱私信息泄露。
三、加固方法與建議
一般,漏洞挖掘過(guò)程會(huì)涉及代碼審計(jì)、黑盒測(cè)試、文檔研究等。本節(jié)的弱設(shè)備加固方法會(huì)最大限度地保證攻擊者無(wú)法對(duì)弱設(shè)備進(jìn)行代碼審計(jì),保證黑盒測(cè)試結(jié)果不會(huì)存在有價(jià)值的信息。所以,筆者提出防護(hù)方法的目的很明確:不讓攻擊者獲取到源碼、固件、端口等信息。禁止這些信息泄露的方法很直接,可以分兩步:信息讀保護(hù)設(shè)置和信息加密設(shè)置。這樣能保證:有信息不可讀(不可見(jiàn)),即使讀出來(lái),也極難解密。
1. 信息不可讀的方法
(1) 針對(duì)PCB:
一般,PCB上會(huì)有絲印、接口、芯片型號(hào)等信息,這些信息為攻擊者查找固件提取接口提供了便利。如圖 1所示,暴露的JTAG、UART、BOOT模式選擇接口能使攻擊者有目標(biāo)地提取出固件。
所以,建議開(kāi)發(fā)工程師把PCB絲印、芯片型號(hào)等信息清除,同時(shí),把下載固件的接口移除。但是,這并不能從根本上解決問(wèn)題,如果攻擊者熟悉主控芯片的封裝,通過(guò)測(cè)試總是可以匹配上的。
(2) 針對(duì)固件-MCU內(nèi)部:
弱設(shè)備由控制芯片和外圍模塊(如傳感器、聯(lián)網(wǎng)模塊等)組成,代碼在控制芯片中或聯(lián)網(wǎng)控制芯片上或聯(lián)網(wǎng)模塊中。可以做到固件不可讀。存儲(chǔ)設(shè)備有讀保護(hù)能力。可以通過(guò)設(shè)置一些讀保護(hù)選項(xiàng),使內(nèi)存里的內(nèi)容不可讀。
以常見(jiàn)的STM32f1系列的單片機(jī)為例。
可以通過(guò)設(shè)置RDP(Global Read-out Protection)寄存器的值來(lái)改變單片機(jī)內(nèi)部flash讀保護(hù)選項(xiàng)。當(dāng)啟用讀保護(hù)選項(xiàng)時(shí),單片機(jī)的固件是無(wú)法通過(guò)JTAG和UART接口讀出來(lái)的。也就是說(shuō),必須破壞芯片結(jié)構(gòu),才有可能把芯片內(nèi)部的程序讀出。
圖 8 — STM32f1系列單片機(jī)的RDP功能
類似的功能不僅僅出現(xiàn)在ST公司的芯片中,還有NXP的CRP(Code Read Protection)、TI 的FMPRE寄存器等。
實(shí)現(xiàn)這一安全能力,需要產(chǎn)品研發(fā)團(tuán)隊(duì)投入足夠的精力在MCU的讀保護(hù)策略的學(xué)習(xí)上,以保證代碼安全。
(3) 針對(duì)固件-MCU外:
對(duì)弱設(shè)備來(lái)說(shuō),目前市場(chǎng)上,MCU外的固件會(huì)存放在專門的ROM芯片中,如以SPI總線進(jìn)行通信的SOP8封裝的W25Q128系列,如圖 9所示。
圖 9 — SOP8封裝的Flash芯片
一般,之所以選用Flash芯片作為存儲(chǔ)固件的存儲(chǔ)器,是因?yàn)閮H僅一個(gè)MCU中集成的Flash容量,不足以保證協(xié)議棧的完整移植。
所以建議協(xié)議棧的代碼和產(chǎn)品業(yè)務(wù)相關(guān)的代碼分開(kāi),在MCU中運(yùn)行業(yè)務(wù)相關(guān)的代碼,并使用讀保護(hù)功能開(kāi)啟,這樣即可保證業(yè)務(wù)代碼不可讀。必要時(shí),可以對(duì)協(xié)議棧的代碼進(jìn)行部分加密保護(hù)和混淆,以防止攻擊者進(jìn)行逆向分析或漏洞挖掘。
2. 信息加密
比較安全的加密算法是RSA,而且,根據(jù)目前的MCU發(fā)展情況看,在MCU中實(shí)現(xiàn)RSA加密體制并不難。如IEEE 802.15.4無(wú)線芯片cc2538的內(nèi)部集成了ECC RSA-2048加速器,可以提高單片機(jī)在RSA密碼體制下的工作效率;ST公司提供了加密的庫(kù)函數(shù)(Cryptographic Library)。從當(dāng)前芯片的性能看,在弱設(shè)備上做RSA加密已經(jīng)不是一個(gè)難題了。
(1) 協(xié)議棧
以lwip協(xié)議棧為例,在協(xié)議棧的官方文檔中,找不到關(guān)于加密傳輸?shù)膬?nèi)容,所以,有必要對(duì)該協(xié)議進(jìn)行二次加密功能的集成,如圖 10所示。
比較理想的是利用RSA和AES混合加密方法:利用RSA來(lái)加密傳輸AES密鑰,再基于AES加密實(shí)現(xiàn)數(shù)據(jù)傳輸。因?yàn)椋O(shè)備端保存的公鑰是沒(méi)有解密能力的,僅僅根據(jù)密文和公鑰解密出AES密鑰非常困難,攻擊者得不到解密密鑰,那就沒(méi)辦法對(duì)信息解密,從而保證了信息傳輸?shù)陌踩?/p>
圖 10 — lwip協(xié)議棧的特性
(2) 應(yīng)用層通信
應(yīng)用層加固的方法有三個(gè):加密應(yīng)用層傳輸?shù)臄?shù)據(jù)、關(guān)閉不必要的端口開(kāi)放、黑白名單策略。
加密應(yīng)用層傳輸?shù)臄?shù)據(jù)可以解決2.2 節(jié)中提到的藍(lán)牙數(shù)據(jù)包被解密的導(dǎo)致的一系列問(wèn)題。安卓手機(jī)可以對(duì)藍(lán)牙通信過(guò)程以日志的形式進(jìn)行抓包保存,保存后,可以使用wireshark等工具軟件打開(kāi)該日志文件進(jìn)行分析,而此時(shí)的數(shù)據(jù)包是經(jīng)過(guò)藍(lán)牙協(xié)議棧解密的。如果在產(chǎn)品開(kāi)發(fā)過(guò)程中,消息傳輸?shù)膬?nèi)容是明文的,會(huì)導(dǎo)致信息(gatt的描述信息和值等)泄露的問(wèn)題出現(xiàn)。此時(shí),加密(依然是采用RSA和AES加密混合方式)是一個(gè)比較好的方式,有助于防止黑客進(jìn)行加密重放。
作為弱設(shè)備,要盡可能的關(guān)閉不必要端口,筆者建議不開(kāi)啟端口。弱設(shè)備和云端的交互過(guò)程中作為客戶端角色存在即可。良好的黑白名單機(jī)制可以保證設(shè)備的通信對(duì)象合法。這里對(duì)這兩種方法不再深入介紹。
四、總結(jié)
本文通過(guò)從本地信息、網(wǎng)絡(luò)信息這兩個(gè)角度介紹物聯(lián)網(wǎng)弱設(shè)備存在的安全隱患,進(jìn)而提出設(shè)備加固的方法。總的來(lái)說(shuō),弱設(shè)備防護(hù)的思路比較簡(jiǎn)單,就是消除冗余的信息。只要生產(chǎn)廠商的產(chǎn)品設(shè)計(jì)方案和研發(fā)流程都比較規(guī)范,產(chǎn)品存在的安全隱患會(huì)比較少,甚至沒(méi)有。
評(píng)論
查看更多