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