揭秘VxWorks——直擊物聯網安全罩門
VxWorks是美國風河(WindRiver)公司於1983年設計開發的一種嵌入式實時操作系統(RTOS),是嵌入式開發環境的關鍵組成部分。良好的持續發展能力、高性能的內核以及友好的用戶開發環境,在嵌入式實時操作系統領域占據一席之地。
VxWorks支持幾乎所有現代市場上的嵌入式CPU,包括x86系列、MIPS、 PowerPC、Freescale ColdFire、Intel i960、SPARC、SH-4、ARM,StrongARM以及xScale CPU。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛星通訊、軍事演習、彈道制導、飛機導航等。在美國的F-16、F/A-18戰鬥機、B-2隱形轟炸機和愛國者導彈上,甚至連一些火星探測器,如1997年7月登陸的火星探測器,2008年5月登陸的鳳凰號,和2012年8月登陸的好奇號也都使用到了VxWorks。——摘自《維基百科》
https://zh.wikipedia.org/wiki/VxWorks
正因為VxWorks操作系統的開放性、模塊化和可擴展性的系統結構特征以及能在多線程、多任務的系統環境中達到高實時要求的PLC控制要求,在保證實時性的同時,實現多點位、復雜功能的PLC系統控制目標,因此被廣泛用於物聯網嵌入式設備及工業控制領域。西門子、施耐德的多款PLC設備軟件搭載在VxWorks系統上運行。
來看下CVE公布的VxWorks相關漏洞:
對於一款被廣泛應用的操作系統,CVE漏洞能控制在這個數量可以說安全做得已經挺好了。最新的7.0系統又做出了很多針對安全的功能,更是提出了應用程序加密這樣的安全模式,任何一個系統應用在運行前需要做哈希驗證,這樣能極大程度減少惡意軟件和木馬的植入對於系統帶來的威脅。
難道說搭載風河VxWorks系統的嵌入式設備真的就無懈可擊了?我要告訴你,在系統以及網絡層我們還是能做很多事情的。
先來簡單了解下該系統。
這是我在Vmware上運行的基於Pentium架構的VxWorks 5.5.1版本系統,雖然不是最新版本,但用於了解系統的工作方式,做一些基本的測試已經足夠了,而且本身大部分加載VxWorks系統的設備也並不是最新的,低於此版本的設備也不在少數。
在虛擬機上運行VxWorks5.5系統並通過tornado軟件進行調試總的過程需要如下幾步:
-
編譯網卡驅動
-
修改系統配置文件
-
編譯bootrom並加載到啟動磁盤
-
編譯VxWorks鏡像
-
用FTP把系統鏡像傳到虛擬機裏
-
配置target server來調試系統以及應用
如果對於嵌入式系統沒有基礎那麽這幾步還是挑戰很大,因此網上能找到已經編譯好的針對vmware的系統鏡像以及VxWorks BSP文件。這極大得降低了研究的門檻,我們只需要進行相應的配置再通過系統專門的集成開發環境tornado 2.2就可以展開對於VxWorks系統的入門級研究。當然這只是入門級研究環境,對於熟悉系統工作原理和網絡棧已經可以滿足,但是如果要研究系統底層安全性如溢出、shellcode那就需要真實的系統以及針對性的指令架構。
另外推薦兩款搭載VxWorks系統的設備,也可以針對真實的設備進行研究。第一款為經典的思科Linsys54g路由器,這款路由出廠內置VxWorks5.5系統,很多對於固件的逆向都是從這款路由的固件入手的,通過接入板子串口可以拿到系統boot shell,但我在嘗試時系統運行不到VxWorks shell,會報一個網絡配置的錯誤,有興趣的朋友可以一起研究下,如果知道怎麽解決可以和我聯系。另外一款設備是華為的UAP2105 UMTS是一款家庭使用的小型蜂窩基站。這款設備在2015Blackhat上被爆出多個漏洞,可以通過JTAG接口拿到VxWorks shell,並且可以通過遠程調試端口進行訪問。
在做了如上準備工作後,我們就可以開始對於VxWorks系統的安全性進行探秘了。
我們先來直觀的感受下這個系統,來看下VxWorks系統的shell,這是可用的基本命令,和我們熟悉的Linux Bash區別還是很大的。
其中還包括輸入輸出、調試、文件系統、網絡等一些具體的命令。我們註意到這個系統的shell具有一些針對於任務(task)的操作命令以及可以修改內存的命令,可以說權限是相當大的。看下當前任務狀態,我們就可以感受到實時操作系統的特點了。
有興趣可以去自己了解,這裏不做詳細介紹。
我們來用nmap做下端口掃描,結果如下:
可以看到系統支持了多種標準網絡協議進行通信,我們主要來針對wdbrpc調試端口進行hack。
什麽是Wdbrpc?
wdbrpc是VxWorks的遠程調試端口,以UDP方式進行通信,端口號為17185。協議基於sun-rpc。該服務主要用於支持系統遠程通過集成開發環境Tornado交互。
通過Tornado開發環境軟件可以進行應用程序代碼編寫、上傳到設備、遠程調試、rom燒錄等一系列功能。支持通過wdbrpc、wdbpipe、wdbserial等不同的連接交互方式。
Vxworks系統將一起與硬件相關的模塊都放在BSP庫中。BSP庫是硬件與軟件的接口,處理硬件的初始化、中斷處理與產生、硬件時鐘與定時管理、局部和總線內存空間的映射、內存大小定義等等。能夠自行啟動目標設備、初始化目標設備,能夠與host通信下載系統內核,將系統權限交由Vxworks內核來調用應用程序等功能。
因此該通信端口權限十分大,然後並沒有身份認證與傳輸加密機制。該通信接口為遠程攻擊設備提供了無限可能。
通過以上簡單了解,我們需要深入了解wdbrpc通信協議,然而網上並沒有官方詳細的協議說明,只有在風河開發文檔中簡單涉及一些協議說明。
Rapid7曾在2010年8月發表博客《Shiny Old VxWorks Vulnerabilities》其中說明了wdbrpc端口的問題並且給出了當時的統計報告以及4個metasploit攻擊模塊。因此我們可以從模塊入手進行分析。
https://community.rapid7.com/community/metasploit/blog/2010/08/02/shiny-old-vxworks-vulnerabilities
包括wdbrpc_version、wdbrpc_bootline、wdbrpc_reboot、wdbrpc_memory_dump。分別提供遠程獲取系統版本號信息、獲取bootline信息、遠程重啟系統以及遠程dump內存。
通過對虛擬機遠程設備進行嘗試,可以看到我們能從wdbrpc端口上輕松獲取到系統版本號以及bootline啟動配置信息。通過wireshark我們在仔細看下協議過程。
可以看到協議內容並無加密,但是wireshark也不能解析該協議,因此攻擊手段也將受限,wdbrpc提供的功能很多並且權限很大,但目前也只能通過這四個攻擊模塊進行攻擊。初步嘗試還發現獲取系統版本號可以直接通過重放進行攻擊,然而要是獲取bootline信息或遠程dump內存並不能簡單的重放,協議的交互過程還是具備初始化等步驟。因此我們還是需要進一步深入了解該協議。
Vxworks開發文檔上有如下對於wdbrpc協議請求和響應的說明:
這是一個請求數據包的格式,其中20字節IP頭,8字節UDP頭,40字節wdbrpc頭,其中包含WDBPROG為4字節固定為0x55555555、WDBVERS為4字節(0x00000001)以及RPC調用編碼。XDR stream為調用參數信息。
RPC請求數據頭具體如下:
RPC請求參數wrapper部分具體如下:
建立連接的通信過程為,host首先給target發送一個Connect請求,收到回應包後,即可發送Fanc_call數據包。Connect請求的Procedure字段為0x00000001,data字段需要填充具體的調用參數為0x00000002,0x00000000,0x00000000。
遠程內存讀取的通信過程為,在建立連接的基礎上發送以0x0000000A為Procedure、以offset/length/params為具體參數的data,即可收到相應內存地址上的數據。具體內容可以通過閱讀源碼了解${WIND_BASE}/share/src/agents/wdb/wdb.h
http://www.codeforge.cn/read/82844/wdb.h__html
今後會在Github上公布關於VxWorks系統攻擊的python源碼,敬請期待。
https//github.com/ameng929/VxworksHack
當我們具備了wdbrpc協議的基礎,我們就可以通過該協議對Vxworks系統設備進行遠程攻擊了。列舉幾種簡單的攻擊方式:
一、篡改bootline繞過登錄驗證
首先看下ARM架構下的系統內存布局:
其中0x0700到0x0800地址之間存放Bootline配置信息。如果系統架構為x86那麽對應地址將從0x1200開始。
我們可以通過wdbrpc遠程修改內存地址數據令其以0x20方式啟動,這樣就可以繞過登錄認證通過ftp或telnet訪問系統。
二、Dump內存數據從中抓取登錄密碼
以一個遠程昆騰PLC為例,通過wdbrpc協議dump全部內存空間數據。
10分鐘後就拿到了遠程設備約15M左右的完整內存數據。
可以看到ppc架構指定位置上的bootline信息,再通過string命令抓取內存文件中的字符串數據。
再通過這樣一個正則就輕松的找到了內存中的所有ftp、telnet登錄密碼:
cat strings.memory.dmp |grep -n "[RSbcdeyz9Q]\{9\}"
具體為什麽正則要這樣寫以及這個hash密碼如何利用,請看我之前的文章《邪惡的0x4321》。
現在可以回答之前文章的問題了,0x4321即為wdbrpc的端口號17185的16進制格式。
下面交給Z-one大神 (⊙.⊙)
以下是全球暴漏在IPv4公網上的17185端口統計分析:
http://plcscan.org/lab/census/vxworks/
通過Zmap調用wdbrpc-scan腳本掃描全網暴漏端口IP數約5萬+,其中3.4萬能讀取到系統信息和bootline信息。
數量按國家分布Top10:
中國: 7861
美國: 5283
巴西: 3056
意大利: 1025
日本: 823
俄羅斯: 647
墨西哥: 505
哈薩克斯坦: 486
澳大利亞: 481
印度: 448
數量按VxWorks系統版本號統計:
VxWorks5.5.1 15601
VxWorks5.4.2 6583
VxWorks5.4 5410
VxWorks5.4.2 5254
VxWorks5.5 899
VxWorks 654
VxWorks5.3.1 236
數量按設備信息統計Top10:
Telogy Networks GG30E Reference Board 3674
TI TNETV1050 Communication Processor 3360
Motorola MPC82xx ADS - HIP7 2626
IP-ADSL DSLAM (MPC860/855T) 1972
HUAWEI ET&IAD; 1796
MPC8245Board: EDSL , Map B (CHRP) 1678
PowerPC 875, 133MHZ 1553
Mips 4KEc 1239
MGCB 912
Intel IXP425 - IXDP425 BE 887
其中受影響的PLC模塊型號:
羅克韋爾Rockwell Automation 1756-ENBT固件版本為3.2.6、3.6.1及其他
西門子Siemens CP 1604、Siemens CP 1616
施耐德Schneider Electric 昆騰部分以太網模塊
另外通過Shodan和Zoomeye搜索“vxworks”Dork的數量對比:
知道創宇-ZoomEye:
FTP 77,123
Telnet 10,795
SNMP 133
Shodan:
FTP 26,212
SNMP 17,261
Telnet 4,735
以下的數據由Z-one提供,未經允許不得引用。
搞物聯網安全的黑闊們又可以瘋狂了。
Make some noise~?:.?ヽ(?????)??.:?+?
揭秘VxWorks——直擊物聯網安全罩門