物聯網安全研究之二:IoT系統攻擊面定義分析
在前文中,我們了解了IoT技術的基本架構,本文我將來說說IoT安全,在此過程中,我們會嘗試定義一種新方法來理解IoT安全,同時也會創建一個結構化流程來方便認知IoT相關的攻擊研究和滲透測試。
依據前文我們定義的IoT體系結構,現在我們可以非常清晰地分離出物聯網系統的各種組件,并嘗試為每種組件定義攻擊面,各種組件的攻擊面組合將形成一個整體的物聯網生態系統攻擊面。
我之所以把它稱為物聯網生態系統而不是物聯網產品,是因為它確實是一個由不同組件組成的生態系統,它們相互通信并解決特定的現實問題。 我們先來詳細討論每種組件的攻擊面,如果我們把通信作為一種攻擊面的話,總體攻擊面可分為以下四類:
移動端
云端
通信層面
設備層面
OWASP在IoT安全方面也做了很多工作,他們也給IoT架構定義了攻擊面,值得認真研讀一番(點此查看),你可以綜合不同觀點形成自己的看法。
移動端攻擊面
移動端是IoT用戶了解物理設備狀態的一個重要接口,移動App與IoT系統之間的命令發送和數據讀取,是與IoT通信的窗口。以下IoT系統移動端可能面臨的一些攻擊面:
存儲介質
認證方式
加密手段
通信方式
原生移動端系統漏洞
云端攻擊面
IoT系統不只包括硬件,云端服務對IoT服務來說同樣重要,它是產品線的各種實例匯聚,而實例中又包含了所有終端用戶使用者的相關數據,同時云端服務還具備一定的命令執行權限,攻擊者一旦成功滲透,就能對相關部署設備形成管理控制,危害甚大??傮w來說,云端服務攻擊面主要體現在所提供服務的接口上:
存儲介質
認證方式
加密手段
通信方式
APIs接口
原生Web端和云端架構漏洞
硬件設備攻擊面
接下來就是IoT技術的關鍵角色-硬件設備,它是物理世界的接口體現也是虛擬數字世界的通信媒介。相關的數據轉換會首先經過硬件設備,由于它本身存儲了用戶相關的敏感信息(例如家庭統計數據、身體統計信息、個人信息等),所以這種用戶隱私存儲機制也存在一些爭議。而在未來,不同硬件設備還能使用用戶的電子錢包或綁定賬戶實現商品購買或遠程維護等服務。其存在的攻擊面可能有:
存儲介質
認證方式
加密手段
通信方式
感應接口
外設接口
硬件接口
人機交互接口
通信方式攻擊面
盡管通信攻擊不是一種有形的攻擊,其理想的有形攻擊面將是通信接口和負責通信的各個驅動器和固件,但這只是其中的一部份,因為無數通信協議會共同在有線和無線介質上作用于物聯網生態系統。以下是通信方式可能存在的攻擊面:
認證方式
加密手段
偏離協議標準
協議實現異常
硬件接口允許通信交互,然后實際的數據通信分組是由上層的軟件實現定義的,因此,通信攻擊面的問題我們就只討論一些協議,雖然各種協議缺陷可能導致對移動設備、硬件設備或云端服務的端點攻擊,但為了理解清晰,我們仍將其作為單獨的攻擊面來討論,我會列出各種物聯網產品中使用的一些通用協議。如下:
WEB
Web或HTTP(S)技術是常用的通信協議,由于Web端的攻擊面非常廣泛,但好在攻擊面、漏洞和緩解技術很多都已經標準化了。網上有很多攻擊描述和防護的詳細資源??梢詤⒖糘WASP的Web Top 10、測試指南和各種開源工具。
其它
除了WEB端外還存在其它很多特定通用或高效的協議,為了簡潔起見,我只列出一些通用協議供參考學習,經驗告訴我們,所有協議都存在實施缺陷、協議設計缺陷和配置缺陷,這些缺陷則需要在深入的滲透測試中進行分析驗證。
CoAP – https://en.wikipedia.org/wiki/Constrained_Application_Protocol
MQTT – https://en.wikipedia.org/wiki/MQTT
AMQP – https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
WebSocket – https://en.wikipedia.org/wiki/WebSocket
CANbus – https://en.wikipedia.org/wiki/CAN_bus
Modbus – https://en.wikipedia.org/wiki/Modbus
Profibus – https://en.wikipedia.org/wiki/Profibus
DNP3 – https://en.wikipedia.org/wiki/DNP3
BACNet – https://en.wikipedia.org/wiki/BACnet
HL7 – https://en.wikipedia.org/wiki/Health_Level_7
XMPP – https://en.wikipedia.org/wiki/XMPP
UPnP – https://en.wikipedia.org/wiki/Universal_Plug_and_Play
DNS
SSH
以上這些為你提供了有關物聯網生態系統攻擊面的一些全局概述,現在我們就嘗試來對硬件設備定義一種詳細的攻擊面,以便我們知曉標準的物聯網滲透測試攻擊目標,這也有利于物聯網安全架構師為物聯網產品創建威脅模型。但請注意,我就不具體定義移動端和云端的攻擊面了,因為可在互聯網上找到大量的類似相關資源,該博客系列旨在為安全研究人員建立一個物聯網安全研究的入門通道,所以我們只重點討論硬件設備這種當前在IoT安全中未成型的知識。
具體定義硬件設備攻擊面
以下就是根據我個人理解來定義的一些硬件相關的分離和結構化的IoT攻擊面:
存儲介質
涉及硬件設備使用的各種內部、外部、 持久性和易失性存儲。它們包含:
SD卡:SD卡是一種典型的數據和配置存儲介質,它們也可用來存儲固件更新,利用SD卡可形成有意思的攻擊面,后期我會在博客中作具體技術分析。
USB載體:某些IoT產品會使用USB載體代替SD卡,來存儲和讀寫某些下載好或預先配置好的的數據。USB載體和SD卡的攻擊手段相似。
非易失性內存:大量的感應讀寫數據、啟動引導、固件、密碼憑據等信息都利用這種內存進行存儲,當測試硬件電路板時,存儲在芯片上的數據至關重要。我們可以對存儲器和微控制器之間的通信執行運行分析,以判斷不同操作中存儲/讀取的不同數據類型。例如通過一個邏輯分析儀去嗅探總線通信,進而發現觸發特定操作的各種讀寫數據。該種內存有不同類型的芯片:
EPROM(可擦除可編程只讀存儲器)
EEPROM(帶電可擦除可編程只讀存儲器)
FLASH – (非易失性閃存,具備快速高效特點)
以下為一個I2C串行EEPROM:
易失性內存:這種內存也就是我們會想起的RAM(隨機存取存儲器), 它廣泛應用于電腦電路板和一些嵌入式系統中的隨機數據存儲,當斷電后其不能保存數據,它分為以下兩類:
SRAM (靜態隨機存取存儲器) – 芯片斷電后不保存數據
DRAM (動態隨機存取存儲器) – 數據只能被短時存儲,為了保持數據必須短時刷新,否則存儲信息會丟失,且芯片斷電后同樣不保存數據
單片機內存:單片機或微控制器內部一樣具備存儲數據的內存,這種內存通常在使用JTAG等調試工具時可以訪問到,這種單片機內存一般為以下類型存儲:
SRAM (靜態隨機存取存儲器)
EEPROM(帶電可擦除可編程只讀存儲器)
FLASH – (非易失性閃存)
硬件通信接口
一塊電路板上的不同硬件之間以及電路板與外部世界之間都需要進行相互通信,這些通信都基于定義好的標準硬件通信協議,從一個攻擊者角度來看,可以通過嗅探或惡意數據注入等方式來了解這種實際的通信過程,從以下描述的通用接口中我們可以具體來分析一些安全問題:
UART:UART (通用異步收發傳輸器) 是一種硬件外設之間的異步通信收發器,它可用于同一電路板上(例如單片機與電機或LED屏幕通信)或兩個不同設備(如單片機與PC通信)之間的通信。這是一個有意思的攻擊面,它可能允許串行方式對設備進行讀/寫訪問。 在許多設備中,電路板上的UART端口是開放的,任何人都可以通過串行連接和訪問,以獲得某種類型的shell控制權、自定義命令行控制端、日志輸出等,為了發送和接收串行數據,這種設備通常具有一組輸出連接到單片機UART的RX和TX引腳,后續我會發文討論如何識別和訪問設備的UART端口。以下為一個標準的4引腳輸出UART端口電路:
單片機調試端口:單片機在運行時都能利用特定的引腳和輸出對進行調試,這些引腳輸出(端口)是為開發和設計者預留的,利用它們可以進行設備調試、固件內存讀寫、后期引腳控制測試等,因此,基于攻擊者角度的權限來說,這類調試端口可能會成為最致命的攻擊面。以下是包含調試端口的幾類標準接口:
1.JTAG(聯合測試工作組):隨著單片機和電路板設計越來越小,成型產品的后期測試變得非常困難。因此,為了對電路板執行高效的后期測試,多家主要電子制造商聯合成立了該組織,并確定了一系列電路板后期測試方法標準,后成為IEEE 1149.1,也稱為JTAG測試協議,它具體定義了單片機調試的標準接口和命令。 標準的JTAG接口包括4個引腳接口和1個額外可選的TRST引腳接口:
TMS – 測試模式選擇
TCK – 測試時鐘
TDI – 測試數據輸入
TDO – 測試數據輸出
TRST – 測試復位 (可選)
除了芯片調試之外,調試器還能利用這些引腳與單片機上的測試訪問端口(TAP)進行通信,從安全角度來看,識別JTAG端口并與之連接,攻擊者可以實施固件提取、邏輯逆向、惡意固件植入等非法目的。
2.cJTAG (緊湊型JTAG): 這是一種新的JTAG測試協議(IEEE 1149.7),它不是對JTAG(1149.1)的取代,而是在其基礎上的一個向后兼容擴展測試協議, 它定義了TCK和TMS兩個引腳接口和TAP的一些實現特性。
3. SWD (串行線調試): 這是單片機調試的另一種方法,它定義了SWDIO(雙向)和SWCLK (時鐘)引腳接口,它是基于ARM技術的ARM CPU雙向線標準調試協議,來源于V5版本的ARM調試接口定義,其中說明了SWD是一種比JTAG更高效的調試方法。
以下為一個電路板上的JTAG接口位置:
I2C(內置集成電路):I2C是飛利浦公司發明的,同塊電路板上芯片之間進行短距離通信的協議,它具備主從架構和以下二線總線:
SDA – 串行數據信號線
SCL – 串行時鐘信號線
I2C的典型應用就是在EEPROM(帶電可擦除可編程只讀存儲器)芯片上連接I2C引腳并進行數據和代碼存儲,對這種協議的攻擊包括數據嗅探、敏感信息提取、數據破壞等,我們可以對EEPROM芯片進行靜態數據分析,也可對I2C通信進行動態嗅探來分析其行為和安全問題,后續我會發文討論I2C的通信安全問題。
串行外設接口(SPI):串行外設接口也是芯片間的一種短距離通信協議,由摩托羅拉公司發明,它具備全雙工和主從架構特點,比I2C吞吐量更高,并使用了以下四線串口總線:
SCLK – 串行時鐘信號線或SCL
MOSI – 串行數據輸出信號線
MISO – 串行數據輸入信號線
SS – 從選擇信號線
SPI應用于多種外設間的通信,閃存Flash和EEPROM同樣使用SPI, 其測試分析方法類似I2C,只是總線接口不同。
USB:USB接口一般用于充電和數據通信,后期出于方便也用于問題調試,可進行動態數據嗅探和靜態數據FUZZ來分析其中的安全問題。
傳感器:它是物理設備的外部接口,但不僅限于溫度計之類的感應類接口,還包括一些開關控制按鈕。按照其實現操作可分為三類:
監控器: 這是最接近傳感器意思表達的設備了,感應和監控外部世界變化,如溫度、行為、脈博、血壓和胎壓等。
控制器: 多為控制外部設備的開關和行為,如開關、分發器等。
混合控制器: 是監控器和控制器的兩種混合設備,如溫度控制器、燈光感應器等,由于這類控制器的感應數據會被發往遠程云服務端或其它控制端,所以其接口安全至關重要,攻擊者可以向該類控制器發送畸形數據進行混淆干擾,進而對整個IoT系統形成影響,可以導致IoT系統癱瘓、產生運行異常甚至形成物理破壞。
人機交互接口(HMI):與傳感器接口類似, HMI不局限于工控系統應用,它也被定義為IoT架構中用戶與設備之間的通信接口,用戶可以通過它來直接對設備進行操控,如觸屏、按下按鈕、觸摸板等,HMI也會存在一些繞過機制和安全設置問題。
其它硬件通信接口:還存在其它與硬件設備的通信方式,作為滲透測試人員,要積極分析并擅于發現接口的一些安全繞過和設置錯誤問題,其它硬件通信接口包括(但不限于):
D-Subminiature – 顯示器VGA類接口
ecommended Standards (RS232, RS485 etc) – 一些推薦性標準接口
On-board Diagnostics (OBD) – 汽車在線診斷接口
網絡通信接口
該接口允許設備與包括傳感器網絡、云端和移動設備的其它數字設備進行網絡通信,而負責網絡通信的硬件接口可能包含自主獨立的單片機/固件等,所以,這種情況的攻擊面可能為底層通信實現的固件或驅動程序代碼。
無線網絡通信:無線網絡通信接口存在一些已知的安全問題,從攻擊角度看,可對無線芯片形成攻擊乃至物理破壞、DOS、安全驗證繞過或代碼執行等。
以太網接口:以太網設備接口如wifi接口等都存在一些底層TCP/IP通信漏洞、硬件實現漏洞和其它攻擊向量。
無線電通信接口:由于很多IoT產品都集成或轉向無線電通信方式,無線電通信接口將會是一個關鍵的攻擊面,在很多情況下,無線通信要比有線通信更加高效,這毋庸置疑。我之所以把無線通信單獨列出,就是為了把它和需要網關設備的無線網絡通信和有線通信區分開來,無線電通信與它們完全不同,它可以分為以下兩類:
1.簡單/非結構化:通常用于簡單產品,如百葉窗、鎖、門鈴等。簡單非結構化也即是它使用簡單數據流,并通過無線接口進行發送。 作為滲透測試人員,需要對通信過程進行逆向,去發現其中的運行漏洞,可使用無線電嗅探硬件工具(如SDR等)對無線電通信流量進行抓包嗅探。
2.復雜/結構化:這種通信意味著它使用結構化數據包進行無線電通信,除了數據之外,它們在通信中攜帶了關于協議的附加信息和元數據,稍顯復雜。 由于高效、標準、成本低廉、運行方便等原因,這類協議已物聯網領域應用廣泛,針對該類協議有多種嗅探和分析工具可以提取其中的通信數據。常見的該類協議包括:
Bluetooth (and BLE)
ZigBee
Zwave
NFC
RFID
LoRA
Wireless HART
以上就是我對IoT安全和其攻擊面的一些個人理解和定義,不足之處,請多包涵。