雷鋒網(公衆号:雷鋒網)按:嵌入式産品hacking 一直都是備受關注的議題,而越來越多的攻擊者也瞄上了物聯網嵌入式裝置。跟以往純軟體安全研究不同的是,這類研究往往需要結合相應的硬體知識和裝置。如何能快速入門嵌入式系統?雷鋒網邀請了狗汪汪,分享針對i2c協定的實戰案例和相應的工具使用。希望可以一起來hacking all the things。
本文由阿裡雲先知社群小冰推薦。
0x01 i2c協定基礎
凡是接觸過嵌入式系統的朋友,對i2c協定一定不會陌生。其與uart,spi和jtag等并列為最常見調試協定。i2c 全稱為inter-integrated circuit,是由飛利浦公司設計的一種多主從架構的序列槽通訊協定。
i2c協定非常簡單,僅有clock 和 data 兩條資料總線,外加 ground. 通常是1個主裝置和多個從裝置的架構。在通訊速度上分别為100khz,400khz,1mhz,3.2mhz。在運用方面對速度沒有高要求的,都可以使用i2c進行通訊。比如pc風扇的溫度和電池的電壓資料采集等,每個i2c裝置都各有一個讀和寫位址,隻有知道了這個讀寫位址才能跟其通訊。
除此之外許多用來存儲系統配置和參數的eeprom晶片自身也支援i2c協定,比如ibm thinkpad 系列用來存儲bios 密碼的eeprom,就是通過i2c協定在mcu與eeprom 之間進行互動。
0x02 神器buspirate
工欲善其事必先利其器,擁有一款神器對嵌入式裝置hacking将起到事半功倍的作用。buspirate 是由dangerous prototypes 設計出品的一款硬體hacking 瑞士軍刀,支援多項常見協定并可跨平台windows/linux/mac,并擁有豐富的幫助文檔。
buspirate可以sniffing 和讀寫 i2c等協定,同時還可對avr 等晶片進行程式設計操作,在操作上也是非常簡單,隻需用minicom 以115200 波特率跟buspirate連接配接便可。
buspirate支援協定如下:
buspirate 接口連接配接示意圖:
buspirate 指令清單:
0x03 攻擊案例 -- 數字密碼鎖
接下來我們來看一個通過分析i2c 協定,進而破解門鎖密碼的實戰案例,我們的目标是這款 型号為yl99 的數字密碼鎖。這款密碼鎖完全依賴于使用者設定的數字密碼,也許對某些人來說不需要帶一堆鑰匙的确友善了很多。
因為yl99 是完全電子化的的門鎖,是以提供了普通機械鎖沒有的功能。比如yl99 擁有多 個功能不同的賬戶,master 賬戶:可用于設定管理使用者密碼(預設0123#)。普通賬戶:用于存儲普通使用者密碼。yl99 同時還提供了貼心的防密碼洩漏功能,操作方法:鍵入起始碼(0) + 跟随用于掩蓋的任意幾位數字+ 跟随正确密碼 + # (确認結束). 通過這樣的方式就算邊上有人,也不怕被看到正确密碼了。
但是千裡之堤,潰于蟻穴。yl99 的設計缺陷,竟能讓人從外部将鎖的鍵盤部分分離,進而通路到内部pcb 主機闆。而玩過硬體hacking 的朋友都知道,被人輕易通路到内部pcb 主機闆部分是大忌。
在yl99被打開後主機闆結構便展現眼前。除了yl99 使用的元器件外,我們還可以清晰看到主機闆上還标有一個reset 複位觸點。那麼這個時候我們便可以通過短接複位觸點和ground 的方式将密碼恢複到出廠設定,進而得到bypass 的目的。但這方法的短處也非常明顯,在bypass 的時候每次都需要卸螺絲,而且如果恢複到出廠值,很容易就被人發現了。
示範視訊如下: https://www.youtube.com/watch?v=4sqdxkuqbqm
不過好戲才剛開始。我們在主機闆上還發現了yl99使用的mcu em78p156e 和用來存儲密碼資訊的eeprom 24c02。通過閱讀24c02 的datasheet 我們得知其使用i2c 協定和mcu 通訊,同時datasheet 也清晰的标出了晶片管腳的用途,比如i2c 使用的scl(時鐘頻率) 和sda(資料總線)。
終于我們的神器buspirate要派上用場了。我們首先用資料線将24c02的i2c 管腳和buspirate的對應接口連接配接起來。
随後通過minicom 或其他serial tools 進入buspirate的i2c調試模式。
在i2c 的調試模式中,有個非常有用的功能i2c sniffer。通過它我們可以監控i2c 的資料,用過wireshark 的朋友一定不會陌生。
開啟了i2c sniffer 模式後,我們便可開始觀察mcu 和 eeprom之間的密碼互動。比如yl99 的密碼輸入過程為起始碼(0) + 正确密碼 + 結束确認(#)。
通過觀察發現在按下結束确認(#) 後,mcu 便向24c02 發送密碼驗證請求。但随後緻命的設計錯誤出現,epprom 24c02 将正确的密碼以明文的方式發回給mcu 以求完成密碼驗證過程,而這過程我們通過buspirate 的i2c sniffer一覽無遺。
▲如圖:因為使用的little endian 是以密碼 123 和456 會反着顯示
0x04 總結
通過本文的介紹和實踐案例,相信大家對i2c 協定和利用方式有了一定的了解。劍走偏鋒,反其道行之。攻擊者往往将系統的短闆作為攻擊點,倘若某款嵌入式系統的設計者僅僅考慮到軟體層面的安全,而攻擊者又能得到實體通路的話,那些防禦方式便形同虛設。同時嵌入式産品往往面臨上市後便難以更新的困難,一旦攻擊方式曝光由此給産品帶來的損失是巨大的,是以安全産品在設計之初即應将安全考慮進去。