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