0
雷鋒網(wǎng)按:嵌入式產(chǎn)品Hacking 一直都是備受關(guān)注的議題,而越來越多的攻擊者也瞄上了物聯(lián)網(wǎng)嵌入式設(shè)備。跟以往純軟件安全研究不同的是,這類研究往往需要結(jié)合相應(yīng)的硬件知識(shí)和設(shè)備。如何能快速入門嵌入式系統(tǒng)?雷鋒網(wǎng)邀請(qǐng)了狗汪汪,分享針對(duì)I2C協(xié)議的實(shí)戰(zhàn)案例和相應(yīng)的工具使用。希望可以一起來Hacking all the Things。
本文由阿里云先知社區(qū)小冰推薦。
0x01 I2C協(xié)議基礎(chǔ)
凡是接觸過嵌入式系統(tǒng)的朋友,對(duì)I2C協(xié)議一定不會(huì)陌生。其與UART,SPI和JTAG等并列為最常見調(diào)試協(xié)議。I2C 全稱為Inter-Integrated Circuit,是由飛利浦公司設(shè)計(jì)的一種多主從架構(gòu)的串口通訊協(xié)議。
I2C協(xié)議非常簡單,僅有Clock 和 Data 兩條數(shù)據(jù)總線,外加 Ground. 通常是1個(gè)主設(shè)備和多個(gè)從設(shè)備的架構(gòu)。在通訊速度上分別為100khz,400khz,1Mhz,3.2Mhz。在運(yùn)用方面對(duì)速度沒有高要求的,都可以使用I2C進(jìn)行通訊。比如PC風(fēng)扇的溫度和電池的電壓數(shù)據(jù)采集等,每個(gè)I2C設(shè)備都各有一個(gè)讀和寫地址,只有知道了這個(gè)讀寫地址才能跟其通訊。
除此之外許多用來存儲(chǔ)系統(tǒng)配置和參數(shù)的EEPROM芯片自身也支持I2C協(xié)議,比如IBM Thinkpad 系列用來存儲(chǔ)BIOS 密碼的EEPROM,就是通過I2C協(xié)議在MCU與EEPROM 之間進(jìn)行交互。
0x02 神器BusPirate
工欲善其事必先利其器,擁有一款神器對(duì)嵌入式設(shè)備Hacking將起到事半功倍的作用。BusPirate 是由Dangerous prototypes 設(shè)計(jì)出品的一款硬件hacking 瑞士軍刀,支持多項(xiàng)常見協(xié)議并可跨平臺(tái)Windows/Linux/MAC,并擁有豐富的幫助文檔。
BusPirate可以Sniffing 和讀寫 I2C等協(xié)議,同時(shí)還可對(duì)AVR 等芯片進(jìn)行編程操作,在操作上也是非常簡單,只需用minicom 以115200 波特率跟BusPirate連接便可。
BusPirate支持協(xié)議如下:
BusPirate 接口連接示意圖:
BusPirate 命令列表:
0x03 攻擊案例 -- 數(shù)字密碼鎖
接下來我們來看一個(gè)通過分析I2C 協(xié)議,從而破解門鎖密碼的實(shí)戰(zhàn)案例,我們的目標(biāo)是這款 型號(hào)為YL99 的數(shù)字密碼鎖。這款密碼鎖完全依賴于用戶設(shè)置的數(shù)字密碼,也許對(duì)某些人來說不需要帶一堆鑰匙的確方便了很多。
因?yàn)閅L99 是完全電子化的的門鎖,所以提供了普通機(jī)械鎖沒有的功能。比如YL99 擁有多 個(gè)功能不同的賬戶,Master 賬戶:可用于設(shè)置管理用戶密碼(默認(rèn)0123#)。普通賬戶:用于存儲(chǔ)普通用戶密碼。YL99 同時(shí)還提供了貼心的防密碼泄漏功能,操作方法:鍵入起始碼(0) + 跟隨用于掩蓋的任意幾位數(shù)字+ 跟隨正確密碼 + # (確認(rèn)結(jié)束). 通過這樣的方式就算邊上有人,也不怕被看到正確密碼了。
但是千里之堤,潰于蟻穴。YL99 的設(shè)計(jì)缺陷,竟能讓人從外部將鎖的鍵盤部分分離,從而訪問到內(nèi)部PCB 主板。而玩過硬件Hacking 的朋友都知道,被人輕易訪問到內(nèi)部PCB 主板部分是大忌。
在YL99被打開后主板結(jié)構(gòu)便展現(xiàn)眼前。除了YL99 使用的元器件外,我們還可以清晰看到主板上還標(biāo)有一個(gè)Reset 復(fù)位觸點(diǎn)。那么這個(gè)時(shí)候我們便可以通過短接復(fù)位觸點(diǎn)和Ground 的方式將密碼恢復(fù)到出廠設(shè)置,從而得到bypass 的目的。但這方法的短處也非常明顯,在bypass 的時(shí)候每次都需要卸螺絲,而且如果恢復(fù)到出廠值,很容易就被人發(fā)現(xiàn)了。
演示視頻如下: https://www.youtube.com/watch?v=4sqDXkUQbqM
不過好戲才剛開始。我們?cè)谥靼迳线€發(fā)現(xiàn)了YL99使用的MCU em78p156e 和用來存儲(chǔ)密碼信息的EEPROM 24C02。通過閱讀24C02 的datasheet 我們得知其使用I2C 協(xié)議和MCU 通訊,同時(shí)datasheet 也清晰的標(biāo)出了芯片管腳的用途,比如I2C 使用的SCL(時(shí)鐘頻率) 和SDA(數(shù)據(jù)總線)。
終于我們的神器BusPirate要派上用場了。我們首先用數(shù)據(jù)線將24C02的I2C 管腳和BusPirate的對(duì)應(yīng)接口連接起來。
隨后通過minicom 或其他serial tools 進(jìn)入Buspirate的I2C調(diào)試模式。
在I2C 的調(diào)試模式中,有個(gè)非常有用的功能I2C sniffer。通過它我們可以監(jiān)控I2C 的數(shù)據(jù),用過WIRESHARK 的朋友一定不會(huì)陌生。
開啟了I2C Sniffer 模式后,我們便可開始觀察MCU 和 EEPROM之間的密碼交互。比如YL99 的密碼輸入過程為起始碼(0) + 正確密碼 + 結(jié)束確認(rèn)(#)。
通過觀察發(fā)現(xiàn)在按下結(jié)束確認(rèn)(#) 后,MCU 便向24C02 發(fā)送密碼驗(yàn)證請(qǐng)求。但隨后致命的設(shè)計(jì)錯(cuò)誤出現(xiàn),EPPROM 24C02 將正確的密碼以明文的方式發(fā)回給MCU 以求完成密碼驗(yàn)證過程,而這過程我們通過BusPirate 的I2C sniffer一覽無遺。
▲如圖:因?yàn)槭褂玫膌ittle endian 所以密碼 123 和456 會(huì)反著顯示
0X04 總結(jié)
通過本文的介紹和實(shí)踐案例,相信大家對(duì)I2C 協(xié)議和利用方式有了一定的了解。劍走偏鋒,反其道行之。攻擊者往往將系統(tǒng)的短板作為攻擊點(diǎn),倘若某款嵌入式系統(tǒng)的設(shè)計(jì)者僅僅考慮到軟件層面的安全,而攻擊者又能得到物理訪問的話,那些防御方式便形同虛設(shè)。同時(shí)嵌入式產(chǎn)品往往面臨上市后便難以升級(jí)的困難,一旦攻擊方式曝光由此給產(chǎn)品帶來的損失是巨大的,因此安全產(chǎn)品在設(shè)計(jì)之初即應(yīng)將安全考慮進(jìn)去。
0x05 參考文獻(xiàn)
https://learn.sparkfun.com/tutorials/i2c
http://dangerousprototypes.com/docs/Bus_Pirate
https://code.google.com/archive/p/the-bus-pirate/
http://dangerousprototypes.com/blog/bus-pirate-manual/i2c-guide/
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。