智能硬體安全入門

智能硬體目前玩的人相對於玩PC、伺服器和移動的人來說要少很多。以前,大部分研究這塊的人都是電子行業相關人士,但是目前物聯網的流行,使得很多黑客和安全研究人員進入該領域,使得該領域產品安全問題頻發。物聯網的發展讓虛擬網路與現實生活緊密的聯繫起來,一旦發生安全問題,遭受黑客攻擊必將對人們的現實生活環境產生嚴重的影響和危害,甚至危及到人身安全和生命安全,如車聯網的安全問題等等。物聯網已然成為未來互聯網發展的趨勢,那麼物聯網安全同樣也是安全行業發展必不可少一個重要方向。

對於很多未涉足該領域的人,特別是之前從事計算機行業的人來說,感覺這個領域太廣,涉及處理器架構也比較多,嵌入式操作系統和非操作系統的也不少,感覺會無從下手,那麼本文主要目的就是引導新人入門或者給想要轉入該方向的朋友們一個學習參考。當然我個人精力也是有限的,也只能涉足少量的一些方向,目前我也只是以某一方面的學習路線來引導大家儘快入門。對於安全來說,這個領域還比較新,有太多的東西需要學習,後續我會把一些好的技術文章發到該板塊,和大家一起討論學習。

一、什麼是智能硬體

首先我們要明白智能硬體是什麼,明確了概念,才能定位方向,不至於無從著手。智能硬體實際上是智能手機概念的升級,也就是把傳統的設備進行升級改造使其具有某種智能,比如電視、冰箱、空調、手錶、門鎖、茶杯、醫療儀器、玩具、機器人、汽車甚至房子等等。因此智能硬體這塊方向比較寬泛,涉及的領域比較廣,與此相關的行業也非常非常的多。並不像PC平台那樣,我們只需要關心某一類處理器架構,甚至只需要關心某一個操作系統平台就可以。如果要完全列出智能硬體這塊的知識架構,可能得寫本書也無法列舉完全。我們每個人精力是有限的,也不能每一個領域都去涉足,因而我們只需要關心某一個領域或者方向即可。

二、按軟體進行分類

根據設備使用的軟體系統的不同,我把這些智能硬體分為如下四類:

1.android設備系列,包含智能手機,智能電視,智能手錶,連接雲的汽車,智能導航設備等等。

2.ios設備系列,主要是蘋果系的產品。

3.嵌入式操作系統:嵌入式linux,VxWorks,FreeRTOS,Windows XP Embedded,Windows CE,RTX,uCLinux等等,這一塊跟嵌入式操作系統相關。

4.非操作系統(這裡特指非智能設備):如照相機,攝影機,洗衣機,電子玩具,鍵盤,滑鼠,攝像頭,話筒等等電子設備,還包括有儀器,電子卡,SIM卡等等。

前兩類設備,對於熟悉android和ios的朋友應該問題不大。看雪這兩個版塊有很多非常好的文章,感興趣的可以到這兩個板塊進行學習。這裡我主要講的是後兩類設備的入門學習。這兩類設備需要嵌入式開發相關的知識和單片機相關的知識作為準備。

對於嵌入式系統大部分都是POSIX標準,這一塊兒的入門,大家可以先學習linux,然後學習嵌入式操作系統移植,入門應該不難,對其進行安全研究和逆向分析和傳統方式也差不多,畢竟都是基於操作系統的,學習思路很相似,只是逆向這一塊兒涉及的彙編會不一樣。

對於那些非操作系統類型的設備,安全研究和逆向分析相對來說要難一些,因為這些設備多半都是封閉式或者半封閉式的,基本上都需要拆開封裝,分析電路板並對電路板進行測試分析。這方面入門主要以單片機學習來入門會走得更遠。我們可以先學習單片機再學習嵌入式,也可以反過來,無所謂。這兩個方面都需要了解硬體,只是著重點不同而已。

三、硬體設備怎麼玩

由於硬體設備太多,嵌入式系統也不少,太多的設備會導致我們不知道該從何入手。那麼首先在我們打算學習之前,需要要弄清楚我們學習的目的是什麼,我們的興趣點是什麼,弄清楚這些後我們才有具體的學習目標,這樣更有助於我們入門。

目前我們的目標不是去做硬體開發,也不是做嵌入式開發,我們目的是做安全研究和逆向工程,那麼我們對於硬體可做哪些呢:

1.挖掘安全弱點:登錄驗證,弱口令,弱加密,溢出漏洞,固件更新漏洞,敏感信息泄露,不安全的訪問控制,嵌入式系統遺留的漏洞等等,這方面目前主要體現在物聯網上比較多,實際上是傳統安全問題在新領域的複製。

2.開源硬體DIY:開源硬體資料齊全,需要一點硬體方面的知識,但主要考驗動手能力和排錯能力,比如樹莓派(現在大量系統都主動來支持樹莓派,特別是3,潛力無限),Ardurino,Atmel Xplained(PRO),CooCox開發工具,伽利略開發板等等;還有專門的機器人開源項目(DFRobot,TurtleBot等),四軸飛行器(3DR Solo,MikroKopter,Crazepony等),3D印表機(Ormerod,Mamba3D,Ultimaker等)等等。

3.固件逆向工程:逆向固件,發現固件級別的安全問題,比如華盛頓大學和加州大學聖地亞哥的研究員通過利用藍牙固件漏洞獲取到了一個汽車遠程信息處理單元的遠程代碼執行許可權。

4.固件代碼植入:向固件中植入惡意程序,比如方程式組織的硬碟固件病毒,這一塊兒可以作為個人興趣安全研究,比如今年blackhat上有一個議題就是向PLC中植入病毒,大家可以關注一下。

5.固件DIY:國外很多人玩,比如把滑鼠改造成掃描儀,將背光鍵盤改造成貪吃蛇遊戲等等,後面我會將這些文章分享出來,介紹分析方法和實現原理。

6.硬體DIY:自己diy硬體,這一塊需要你具備硬體方面的知識更多一些,自己設計電路圖,自己焊接,需要一些手工技能,這方面該板塊後續也會引入一些帖子來介紹方法。

7.破解:比如各種卡的破解等。

四、物聯網的機遇

上面介紹的第一種玩法實際上是傳統安全的玩法。在物聯網時代,當一些原來與網路隔離的設備被加入智能操作系統並接入互聯網時,那麼傳統的安全研究思想和方法又能夠再一次的發揮威力。

由於物聯網的發展將大量原來漏洞百出的系統暴露在網路中,並且大量從事這些工作核心技術工程師來自於傳統嵌入式工程師,安全開發的意識比較缺乏,使得很多低級安全問題出現在物聯網設備中,比如各種路由器口令後門,智能電視弱登錄驗證,遙控器與智能家居的明文通信或者弱加密通信,智能開關與雲的弱驗證,遠程溢出漏洞等等,因而這些設備的安全問題隨著物聯網的發展而不斷暴露。因而這個領域的大量安全問題正等待著大家來發覺,這也是一個新領域的老問題,也是大家該介入的最好時機,不管怎麼樣,目前物聯網安全漏洞是還處於一個非常容易挖掘的時期。

當然在萬物互聯的大背景下,汽車安全、工業控制安全、POS系統安全,醫療網路安全等等都在成為大家關注的熱點問題。當然還有一些比如監控攝像頭,ATM機安全,無線通信安全等等。

基本準備:

如果你之前是做滲透測試或者漏洞挖掘,那麼基本可以直接測試自己身邊智能路由器,智能開關,智能電視等設備,以及控制這些設備的APP.

一些基本知識:

1.熟悉嵌入式操作系統,如linux,VxWorks,FreeRTOS,RTX等,可以自己試圖去編譯安裝這些系統,熟悉一下它們文件系統。

2.學習ARM和MIPS彙編

3.會使用一般的滲透測試工具進行測試,推薦使用Kali系統,裝備齊全。

物聯網的玩法簡單些,無需關心硬體,傳統的滲透測試和模糊測試的方法同樣適用,更深入點的可以dump出固件,這些固件(嵌入式系統固件)都是以一定格式存放的嵌入式操作系統及其文件系統,只需要提取出其中關心的程序(通常是ARM和MIPS彙編的程序)進行分析來發現安全漏洞。

當然你可以挑選最簡單的來玩,比如很多智能家居設備,比如智能開關,智能冰箱,智能電飯煲等等這些智能設備都會支持android和ios進行控制,你可以直接分析測試這些app是否存在一些安全問題。

五、底層硬體入門

如果大家對底層感興趣,並且讓自己能夠更加深入的玩下去,那最好是熟悉硬體底層,當然我們沒有條件也沒有必要去製造那些亂七八糟的設備,但是我們可以拿到一個設備後動手去觀察,分析,使用工具去拆解它。那麼只要我們願意去動手,願意去使用搜索引擎查看電路板的各晶元說明,即便最後沒能成功,也能學到不少東西。當然在我們做這些工作之前,還是需要做一些準備工作,我們最好還是把基礎打牢固,這樣很多看似很難得問題都能迎刃而解了。

1.首先最好學習一下單片機,這是你熟悉硬體的最佳途徑,熟悉C語言的做單片機編程真的是非常簡單,雖然我們目的不是去編程,但是編程對於我們做逆向分析和了解其運行機制非常有用。最簡單的是51單片機,其次是PIC,avr,stm32,從這些編程中,你試著逆向去了解8051指令集,avr指令集以及arm指令集等等。

學習單片機更重要的是去學習與外圍設備的通信,介面連線,調試方法等等。

1)外圍設備包含LED燈、A/D(D/A)轉換器、鍵盤、數碼管、液晶屏、感測器、紅外線、無線電、電機等等。

2)介面包含USART、RS232、PCI、SPI、I2C,USB等等.

附件里我會上傳一些資源供大家學習。如果你了解了這些,那麼基本上就有一定基礎了。

當然並不是所有外設你需要完全學會,你可以在研究到相關外設時再查資料學習。你可以把精力放在逆向上,一邊寫代碼一邊逆向,了解單片機從加電複位到你自己的代碼執行這個期間的過程搞明白。

如果你不學習單片機,直接進行物聯網方向的安全分析也是沒有問題,這方面實際只要找到了攻擊面,就好入手,但是高手都是會了解得更深入才能最大限度的擴大攻擊面。

2.彙編知識,實際上對於8051,avr,arm,mips這些處理器架構,大家不必要去糾結彙編問題,當你研究某一個平台時有一本參考書籍就可以了,這些都是公共平台。

3.電子電路,這一塊不需要太過於深入,能夠簡單識別電器元件以及其功能,能夠識別框圖,讀懂一些晶元圖,引腳和介面圖就可以。主要當你拆解一款設備後,你能夠認識那些是控制器,那些是flash,以及找到datasheet後能夠看懂晶元說明圖。

4.熟悉一些工具的使用是必備的:

1)調試工具比如JTAG/SWD模擬器,OPENJTAG, 使用usb轉串口工具等等,如果能夠準確找到相關MCU相關的編程器的話就更好。這方面在後需要的文章中會給大家介紹,如何使用OPENOCD來進行固件調試,以及如何直接取出FLASH並且讀取FLASH數據。

2)USB協議分析工具如USBPcap,Wireshark.這些工具在該設備提供升級但是你又無法進行調試時用來分析USB數據包,你可以分析升級固件程序的機制,然後使用libusb庫來編寫自己的固件dump工具和擦寫工具。這塊後續通過分析文章給大家介紹。

3)有一定基礎後可以自己DIY調試模擬器,FLASH讀取器等,按照自己的需求進行設計,現在國外很多愛好者都是自製的。

下面是一些資源,歡迎大家補充:

dfrobot機器人開源網站

http://wiki.dfrobot.com.cn/index.php...A6%96%E9%A1%B5

Crazepony開源微型四軸飛行器

www.crazepony.com

互聯網在線設備搜索引擎,絕對的神器,你可以找到全世界在線的網路攝像頭、路由器、信號燈、核電站等有信息漏洞的設備:

Shodan

晶元手冊

Datasheet PDF Search Site for Electronic Components and Semiconductors

晶元型號及其所屬的內核晶元家族:

Keil開發工具所有支持晶元(包括ARM,51,166,251內核)

施耐德PLC乙太網模塊固件後門:

http://www.360doc.com/content/15/101...6538554.shtml#

揭秘黑客是如何黑掉三星NX300智能相機的

揭秘黑客是如何黑掉三星NX300智能相機的

向硬碟固件程序嵌入代碼

硬碟固件程序嵌入代碼,泄密是遲早的事情

openOCD+jlink調試uboot

openOCD+jlink調試uboot-gc5084-ChinaUnix博客

最低成本的ARM調試解決方案

最低成本的ARM調試解決方案——有關於Wiggler、H-Jtag、OpenOCD、GDB、Insi...

libusb庫官網:

libusb-win32

USBpcap,Wireshark,usb協議分析必備

USBPcap

https://bugs.wireshark.org/bugzilla/...ug.cgi?id=8503

通用usb驅動libusb介紹和使用示例

http://www.cnblogs.com/image-eye/arc...0/2159897.html

常見基站定位/基站數據查詢網站

cellid.cn/

基站定位_基站位置查詢

基站雲_移動聯通電信基站定位介面,全國最新最全的基站資料庫!!

Kautilya是一個給人機介面設備提供各種payload的工具包,比如可以燒錄給teensy,它可以幫助人們進行滲透測試。

GitHub - samratashok/Kautilya: Kautilya

劫持無線滑鼠項目

GitHub - BastilleResearch/mousejack: MouseJack device discovery and research tools

ZigBee(無線通信)安全研究工具包

GitHub - BastilleResearch/killerbee: IEEE 802.15.4/ZigBee Security Research Toolkit

物聯網安全:LED燈中存在多個安全漏洞

https://blog.viktorstanchev.com/2015...fi-lightbulbs/

汽車黑客揭秘:我是如何通過逆向API介面黑掉寶馬i3的

https://shkspr.mobi/blog/2015/11/rev...he-bmw-i3-api/

GitHub - edent/BMW-i-Remote: A reverse engineered interface for the BMW i3 Electric Car
推薦閱讀:

智能健身器材市場已經初步標準化了
如何 DIY 電影中的超科幻鏡面顯示屏(實操篇)
用它來挖自己的小洞洞,爽翻了

TAG:物联网 | 智能硬件 | 逆向工程 |