1. 程式人生 > >揭秘VxWorks——直擊物聯網安全罩門

揭秘VxWorks——直擊物聯網安全罩門

share 同時 python 惡意軟件 image 基礎上 ner 模式 lin

轉載:http://chuansong.me/n/1864339 技術分享

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軟件進行調試總的過程需要如下幾步:

  1. 編譯網卡驅動

  2. 修改系統配置文件

  3. 編譯bootrom並加載到啟動磁盤

  4. 編譯VxWorks鏡像

  5. 用FTP把系統鏡像傳到虛擬機裏

  6. 配置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——直擊物聯網安全罩門