綠盟馬良:智能設備漏洞挖掘中的幾個突破點
雷鋒網編者按:如果說一場安全大會能召集五湖四海的白帽子們前來朝聖,看雪學院的安全開發者峰會必然算是一場。不久前,第二屆安全開發者峰會在北京國家會議中心落幕,峰會現場有近1000位來自全國各地的安全和開發人員參加。
本次峰會以「萬物互聯,安全開發」為主題,聚焦物聯網及區塊鏈的開發安全,10大議題覆蓋物聯網、智能設備、區塊鏈、機器學習、WEB安全、逆向、安卓、iOS等前沿領域。
其中,來自綠盟科技的馬良以「智能設備漏洞挖掘中的幾個突破點」為演講題目是,分享了針對智能設備固件提取的攻防手段。並從嵌入式系統的軟硬體的基礎架構、智能設備提取固件的十大方法兩個方面進行講解,其中還涉及到軟體和硬體工具,及工具的作用和用法。除此之外,馬良還對智能設備安全研究人員提取固件的常用方法進行梳理,也對開發者提出了一些安全方面的建議,避免廠家辛苦開發出的產品、想要保護的固件沒有保護好,被輕易提取出固件分析。
以下為演講實錄:
馬良:今天我講的目錄大綱是四點。我既做過開發者,也做過安全從業人員,在這個會議上把固件知識介紹給安全的朋友,把安全的知識做開發的朋友。
今天我講的目錄大綱是這四點。
一、智能設備基礎知識
二、 提取固件的十種思路
三、 從固件發掘漏洞的思路
四、 智能設備的加固建議
一、智能設備基礎知識
這是智能設備的組成,分為幾個部分,智能設備必須有這麼幾個東西,比如它必須有CPU、內存、相當於硬碟的flash,有網路、網口介面、串口,有時會有SD卡插座存儲設備,也有的有顯示界面。
CPU有很多架構,有X86、Linux、ARM等等;內存分為好幾種。存儲也有各種,比如flash、TF卡、mmc卡、硬碟;一般的電路板都會留串口,尤其做調試時。廠商做維護時不得不面對的問題:智能設備如果在使用中出現了問題,客戶要求馬上給解決,如果開發者沒有維護的介面,開發人員到現場可能解決不了問題。所以這些是必備的;有時是串口,有時是網口之類的;有時候是USB口。智能設備內運行的軟體也叫固件,固件有對系統進行引導的部分,常用的是Uboot,這占很大市場份額;操作系統用Linux非常多,因為它對網路的支持非常好。
跟大家介紹一下什麼是串口,串口一般分為兩種類型,主要是RS232或者TTL,TTL是5V或者3.3V,相當於CPU的電壓。左下角是對串口的定義,串口真正引用的是三條線,就是RXD、TXD、DCD。串口傳輸時,有三根線的時候,是按照一定的時序傳輸的,這個時序有一定的周期,這個周期是非同步產生的。非同步傳輸有一個波特率的概念: 如:9600的波特率,換算過來大概1秒鐘傳送1000個位元組。波特率越大,傳輸越快。
智能設備的組成里比較重要的還有flash,分為兩種,一種是Nor falsh,它的特點是價格比較貴、容量小、地址線和數據線是分開的,好處是CPU可直接定址,因為電路圖上每一個地址線都是單個連出來的,數據線也是單獨連出來的。它常用做代碼存儲,存儲容量越大,這個地址線是越多的。
算一下上圖的nor Flash的地址線的定址範圍:
8MB = 0x800000(16進位)
換算成二進位: 100000000000000000000000
地址線正好是從addr0 - addr22. 最大地址是22個1
還有一種是Nand Flash,它價格便宜、容量大,主要用作數據存儲,但這個東西一般是不可定址,需要驅動程序。
下面講一下軟體裡面的Uboot和busybox,Uboot在嵌入式里一個功能是做引導程序,啟動的時候引導用,還有一個功能是做更新時用.支持CPU的種類比較多,比如ARM、Linux、MIPS、PowerPC都支持,也支持簡單的網路命令之類的。Busybox集成了三百多個常用的Linux命令和工具軟體,它非常小巧,編譯後大概在1-2兆左右,但支持的命令非常多,而且可以根據需要做裁減。例如:有的裁剪了busybox的指令nc,dd,tar等。
這是智能設備軟體和硬體的協作關係,以Linux操作系統為例,上面是內存,下面是存儲flash,中間是固件,固件裡面的Uboot是啟動時引導用的,啟動起來是kernel,後面跟著是文件系統,文件系統裡面包括RAMFS和FALSH FS。
這是升級介面,我們對維護介面要有一定的了解,為什麼?因為介面是非常重要的,一個是升級時要用,另外一個是調試時要用,還有一個是升級固件時要用。調試介面的基本就是這幾個功能。
二、提取固件的十種思路
這十種思路是我所熟知的,是我經常用的十種方法,其他不講的方法並不代表不存在。固件提取方法簡單分為硬體和軟體兩種類型。
我剛才對基礎知識做了大概的介紹,比如我要提取它的固件,它的固件放在flash里,我肯定要做一些了解。還有對串口和介面都要有研究。還有固件裡面支持這些程序,對文件系統、基礎小命令等都要有一定的了解,這些知識和技巧利用好是可以發揮很大功效的。
智能設備提取固件的十種思路:
這裡先講九種固件提取方法, 最後一種方法給大家一個驚喜!
1、 官網或聯繫售後索取升級包。這點不多講。
2、 在線升級方式提取固件。如果有手機應用或者電腦應用,可以點「升級」,升級固件的時候就可以通過抓包的方式,把固件給抓到。如果老版本和新版本固件的下載地址有一定的命名規律的話,新版本抓到了,老版本也可以猜出來。PPT這只是一個例子,並不針對於任何廠家。
3、 逆向升級軟體,軟體內置解包和通訊演算法。如果它的設計是在下位機解密的話稍微安全點;在上位機解密的話是可以逆向破解的。
4、 從調試介面:JTAG/SWD等方式獲取固件。
騰訊玄武實驗室的小馬哥去年有兩次公開講解,今天時間所限,不做描述。
5、折flash、SD/TF卡、硬碟等,用編程器/讀卡器獲取固件。
常用的是焊下flash晶元,用編程器讀取固件,讀完後再把晶元焊回去。
需要注意的是晶元是有方向的,第一腳的地方有一個圓點,焊接或用編程器讀取時,弄清晶元的方向。
6、從串口(UART)調試口獲取固件。
這種方法是我在安全測試中幫客戶測試產品總結出來的。廠商自己做的產品,它在安全方面有追求,但可能力不從心,就找我們做安全方面的測試。還有OEM的產品要上市了,貼大廠的牌子,大廠肯定有安全方面的要求,不希望OEM產品砸了它的招牌,這時也會找我們做一個測試。
在安全測試過程中我發現了uboot提取固件漏洞,總結出了一系列固件提取方法。
我最常做的是工控設備漏洞安全的研究,這個東西基本是拿不到固件,拿到的固件也是加密的,困擾了我很長時間。經過一段時間摸索之後,有了10來個成功的提取固件的案例。今年又在攝像頭方面,普通物聯網路由器、攝像頭等類似設備,經過實踐研究有二三十個成功案例後,發現通過串口提取固件的方式是最穩妥、最可靠的。為什麼這麼說呢?去給客戶做測試時,客戶說,隨便你折騰,壞了也無所謂,但樣品就這一個!我想焊下flash提取固件,但設備就這一個,萬一焊接晶元搞壞設備了,後面就無法驗證漏洞了。關鍵是工控設備一個就2、3萬,5、6萬,10幾萬,一旦給客戶搞壞設備了,就比較尷尬了。所以我慢慢想出了一些辦法,在這裡與大家分享。
串口識別:串口有兩種標準,串口識別的時候,一般是把設備拆開以後,串口一般有四個腳,第一步要找到地(GND),地是很好找的,和電源相連的那個地,或者晶元跟地相連的。地確定了以後,我們把它接到USB介面上,我先把接收的腳接上,兩個腳都有可能是高電,這時把接收的腳和地接上,然後隨便接上一個腳,設備一啟動,如果這個時候只要有輸出了,就是接對了;然後把另外一個腳一接,三個腳就接好了。我一般找串口就是上面的思路。
這頁ppt是修改uboot啟動腳本進入密碼保護的登陸系統思路,不展開講了。共5條,每一條都是一個不用密碼進入系統的思路。
前面說到uboot,每次啟動時都有3秒時間,這個時間是可設的,一般有3秒時間在等待輸入(或者其它快捷鍵,一般有提示),進入uboot模式後,uboot有幫助命令,這些命令里有一條引起我的注意,就是md。md有什麼作用?顯示內存,能夠把內存顯示出來。這就有點意思了。發現只要是Nor flash,md可以把Nor flash的內容顯示出來(因為nor flash可以通過CPU直接定址),這就相當於md命令可以提取固件。但md命令是需要知道起始地址和長度的,知道起始地址和長度就可以把固件提取出來。怎麼知道起始地址和命令?我查看了更多的命令的信息,結果發現bdinfo和flinfo可以查看到flash起始地址和容量。如果還是找不到的話就重啟一下,重啟時不要打斷,看它會不會列印更多flash地址分布信息,通過這些信息基本就能找到起始地址把固件提取出來了。
最後把uboot提取固件的流程總結出來了:第一步,獲取flash的存儲信息,它這個flash有多大、什麼型號的、CPU訪問它的地址區間是什麼?第二步,用md命令提取固件信息。第三步,記錄下來。第四步,分析輸出信息,獲取固件。但這個方法的缺點是時間長一點,有的時候半個小時,有的時候2個小時。但這也無所謂,只要能穩定的提取固件,不要把硬體損壞,焊3條線就可以搞定了。
視頻請工作人員幫我放一下。(視頻播放)我用簡單的命令去嘗試,果然能夠讀到內核。下一步就全部讀出來,提取固件了。把上面的信息刪除掉,當時的內存地址信息和固件沒關係就刪掉了,右邊ASCII碼信息沒關係也刪掉了。最後把文件轉成二進位,就是我要得到的固件。
成功案例比較多,暫時沒有失敗的案例。總結為三個難度(第三個Level難度不講),Level1最簡單,用md就可以搞定了,只用Nor flash做存儲。
Level2級別是Nand flash里有其他文件系統,這裡有一個命令先把nand flash讀到內存,然後用md把內存讀出來,這個簡單的思路就可以搞定了。
這是我當時調試的經驗,發現用上面的這些命令可以獲取信息。另外一種需要重啟,重啟的方式有時會列印關鍵地址信息。
還有讀取命令,把flash里的md直接讀出來,如果讀不出來就用其他的思路,把SD卡或者其他文件系統的存儲讀到內存里,最後再從內存里讀出來,基本就是這個思路。
Uboot提取固件不是針對某一個廠商,幾乎所有廠商都存uboot安全問題,嵌入式設備裡面95%都用uboot作為它的啟動,基本相當於嵌入式Linux的一個標配。在開發者大會上希望與開發者做個溝通,也希望安全研究員有新的固件提取方式或者有些漏洞利用的方式能夠讓開發者知道,也是為了讓廠家更快修復漏洞,為安全做貢獻。這個方法有可能成為未來一段時間提取固件一個比較流行的方法,我發現基本都能提取出固件來。
7、通過利用網頁和通訊漏洞獲取固件的敏感信息。這個就不做演示了,只要做安全的,這種都是小問題,通過網頁能夠把敏感信息提取出來,再通過字典產生密碼暴力猜解passwd的破解設備口令。一般是嵌入式系統的許可權配置不當。
8、用邏輯分析儀監聽flash,ram獲取信息。它的優點是不用拆東西,只要把這個東西接上去就可以了,而且這個東西也挺好接的。但缺點是邏輯分析儀目前價格便宜的頻率低,但flash一般頻率比較高,都是100兆、200兆。我做了一個實驗,結果發現確實是可以的。需要把這幾個腳引出來,在它啟動的時候抓取數據,用夾子夾在晶元上,那個標紅色的腳是第一腳。抓在上面以後,通過SPI介面把傳輸的這個數據保存。
前面是SPI的命令,命令裡面這個是輸出的數據。前面第一個是讀的意思,這三個應該是地址,後面的是數據。這邊是發出的命令,那邊是接收的命令,結果是這個邏輯分析儀提取出的東西跟flash里的固件的二進位是一致的,說明這個思路是可行的,我當時找了一個速度稍微慢點的設備,也是可以把固件提取出來的。
9、用tar/dd、nc提取固件。利用原來的硬體介面,再用它原來的軟體,可能會達到事半功倍的效果,不用焊板子。這裡先是用串口,通過串口得到系統許可權,用nc從網路傳輸固件出去。
10、綜合應用
第十種固件提取方法是,前面幾種方法的融會貫通,綜合應用。它相當於「降龍十八掌」的最後一掌。
通過串口獲取許可權的話,如果運氣好,它也沒有設登陸密碼,如果能夠進入系統,就用這種方法:通過USB或者SD卡,執行拷貝命令、打包命令,把這個打包到U盤裡或者大的內存文件系統里,然後再拷貝到外置文件系統里(U盤或TF卡)。
第二種是發現echo命令可以通過二進位方式寫入「1234567」,用輸入命令的方式發送二進位文件,通過命令的方式傳輸木馬,這個木馬把固件輸出來,通過串口記錄輸出,這也是一個思路。
總結固件提取方法:智能設備普遍存在uboot,如果沒有把md類似的命令屏蔽掉,是可以輕易提取固件的。智能設備固件存在flash里,flash沒有保護固件被非法讀取的措施。如果FLASH和RAM集成在CPU上,並且開啟了加密的話是比較難提取固件的。但如果它用另外一種方式:(FLASH和RAM、CPU分別獨立),是特別容易被提取固件的,原因是拆下FLASH用編程器直接能讀到flash裡面的內容了。
硬體調試介面方法方便了維護客戶,但有時也方便了不速之客,軟體如果留一個後門是便於維護,但密碼太簡單的話容易被破解或者猜測,或者容易讓別人從固件里分析出來。結論是目前部分智能設備的架構存在一定安全隱患。
三、從固件發掘漏洞的思路
用binwalk進行固件拆解,有些同事用binwalk解不出來,但我能夠解出來,為什麼?因為它是沒有掌握binwalk的安裝方法,binwalk有些依賴的軟體,這些依賴的東西都要裝全。有一個命令(./deps.sh)是需要執行的,會把所有相關的依賴的軟體安裝,安裝以後就比較好提取了。我常用的-Me的方式提取固件。
這裡舉了一個例子,可以通過密碼字典暴力破解的方式破解linux登陸密碼,如果它的密碼比較簡單,很快就破解出來了。
我以前做過開發,所有的問題如果沒有思路時,就想一下開發人員會怎麼做?他會留下什麼調試後門?有什麼介面?如果你提取固件以後。能不能查固件里系統的敏感信息?看一下廠家有沒有留下維護的後門密碼?如果有後門密碼就簡單了。這些看完了以後,看總共有多少網路服務、網路埠,網路服務運行的二進位有沒有溢出點,把web調用介面調試調試,看看有沒有問題。基本就是這些思路,非常簡單。時間有限,只能點一下。
四、智能設備的加固建議
信息隱藏非常重要,比如uboot把固件提取出來就是因為知道它是什麼晶元,如果晶元是打磨的可能好一點,或者把封裝改了也好一點,這些重要信息要注意隱藏。
調試介面能不能屏蔽掉,比如軟體的、硬體的屏蔽掉,或者busybox不用的功能能不能去掉和裁剪掉。比如,智能設備進入系統都是root許可權,許可權太大,可以乾的事情太多了,這些是可以避免的,不一定要給root許可權。其他加固建議如PPT。
雷鋒網雷鋒網雷鋒網


※辯證看待P2P平台爆雷潮
※零食巨頭億滋牽手阿里雲,背後都有哪些故事?
TAG:雷鋒網 |