VxWorks環境搭建與學習

搭建環境所需的所有資源: //pan.baidu.com/s/1sUF2I_DBHs-86IUJ4Ykn2Q 提取碼: t7sj

實時系統vxWorks – Shell命令 //blog.csdn.net/rt201314/article/details/119551651

VxWorks開發環境學習 //www.daimajiaoliu.com/daima/4713a3a05900404

嵌入式作業系統VxWorks簡介

VxWorks作業系統是美國WindRiver公司於1983年設計開發的一種嵌入式實時作業系統(RTOS),是嵌入式開發環境的關鍵組成部分。良好的持續能力、高性能的內核以及友好的用戶開發環境,在嵌入式實時作業系統領域佔據一席之地。它以其良好的可靠性和卓越的實時性被廣泛地應用在通訊、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛星通訊、軍事演習、彈道制導、飛機導航等。在美國的F-16、FA-18戰鬥機、B-2隱形轟炸機和愛國者導彈上,甚至連1997年在火星表面登陸的火星探測器上也使用到了VxWorks。

workbench

由WindRiver提供的開發工具,集成了編輯器、編譯器、調試器於一體的高度集成的窗口環境,同樣也可以從Shell窗口下發命令和瀏覽。基於eclipse。

集成環境提供了高效明晰的圖形化的實時應用開發平台,它包括一套完整的面向嵌入式系統的開發和調測工具。此環境採用主機-目標機交叉開發模型,應用程式在主機的Windows環境下編譯鏈接生成可執行文件,下載到目標機,通過主機上的目標伺服器(Target Server)與目標機上的目標代理(Target Agent)的通訊完成對應用程式的調試、分析。它主要由以下幾部分組成:

  • VxWorks高性能的實時作業系統;
  • 應用編譯工具;
  • 交互開發工具;

BSP

板載支援包(Board support package,BSP),用於支援開發板相關的功能,包括BIOS驅動、CPU、網卡驅動、硬碟驅動、ROM驅動、Flash驅動、顯示卡驅動等等。VxWorks BSP包含了開發人員要在特定的目標機上運行VxWorks所需要的一切支援:支援特定目標機的軟體(如驅動程式等)和從主機通過網路引導VxWorks的Boot ROM。Wind River提供支援不同廠商的200多種商業體系結構和目標板的BSP。另外Wind River還提供一個BSP移植包,幫助用戶移植VxWorks到客戶化硬體板上(超過50%的VxWorks用戶使用客戶化目標機)。

BSP開發包幫助開發人員把VxWorks移植到客戶化硬體平台上。BSP開發包的選項包括:測試工具,硬體設備的驅動程式庫,BSP模板。用戶可以根據需要選擇不同的選項。Wind River還提供BSP測試驗證等諮詢服務。

VxVMI:VxVMI是VxWorks的虛擬記憶體介面。在調試階段和軟體運行時都能提供強大的記憶體管理功能。它包括程式碼段和數據段保護功能,並包含對不同CPU結構的標準編程介面。

VxMP:VxMP是VxWorks多處理器支援擴展包,它允許將任務分布在多個CPU上執行以提高效率。它透明的、高性能的設計使得在不同CPU上運行的任務可以通過現有的通訊機制,如訊號燈、消息隊列等進行同步和數據交換。

BSP是介於底層硬體和上層軟體之間的底層軟體開發包,它主要功能為屏蔽硬體,提供作業系統的驅動及硬體驅動,具體功能包括:

  • 單板硬體初始化,主要是CPU的初始化,為整個軟體系統提供底層硬體支援;
  • 為作業系統提供設備驅動程式和系統中斷服務程式;
  • 訂製作業系統的功能,為軟體系統提供一個實時多任務的運行環境;
  • 初始化作業系統,為作業系統的正常運行做好準備;

BSP文件在vxworks/target/config/all和vxworks/target/config/bspname文件夾里。其中,all文件夾里的文件是所有BSP的通用文件,bspname文件夾的文件是用戶自己訂製的BSP文件。

經過編譯、鏈接,並在makefile和depend. bspname等文件的控制下,原程式最後將生成鏡像。VxWorks的鏡像可分為兩類:可下載鏡像和可引導鏡像。

  • 可下載鏡像(Loadable Image):實際包括兩部分,一是vxWorks,二是boot ROM,兩部分是獨立創建的。其中boot ROM包括被壓縮的boot ROM鏡像(bootrom)、非壓縮的boot ROM鏡像(bootrom_uncmp)和駐留ROM的boot ROM鏡像(bootrom_res)三種類型;
  • 可引導鏡像(Bootable Image):是將引導程式和vxWorks融為一體的鏡像,它常常是最終產品,包括不駐留ROM的鏡像和駐留ROM的鏡像兩種類型。

VxWorks虛擬機安裝

安裝版本:

VxWorks 6.8.3 + VxWorks Workbench 3.2.3 + VMware 16 + MS-DOS 6.22 軟盤版

按照FTP連接的主機和目標機,將整個VxWorks6.8的安裝分為兩個部分,一是在主機(win10系統,可以使用虛擬機或者實體機,推薦使用虛擬機)上安裝workbench3.2,進行bootrom與VxWroks映像文件的生成,二是在虛擬機上安裝VxWorks系統。

WorkBench3.2安裝

以下操作在win10虛擬機上進行

準備工作:

先關閉UAC。

在Windows中搜索UAC

image-20220525162138231

搜索網路連接設置,選擇其中的有線網卡(不能用也沒關係,主要是有線網卡就可以)。右鍵點擊屬性菜單。

image-20220525162416244

然後點擊配置按鈕,彈出配置介面,點擊高級子介面

image-20220525162507394

打開資源包中的WRSLicenseWH701-VX-2Hypervisor.lic文件,找到這裡:

image-20220525162747699

複製裡面的hostid=欄位的內容,16位MAC地址字元串。如果不是16位MAC地址而是字元串ANY,表示此證書並未綁定網卡MAC地址,不限制網卡。

填入如下位置:

image-20220525162933387

開始安裝:

  1. 安裝UItraISO(其他載入工具也可以)。運行uiso9_cn.exe,一路默認安裝UItraISO,注意選擇附加任務時三項都要勾選,尤其是「安裝虛擬ISO驅動器」(默認三項都勾選)

    image-20220525152108109

  2. 載入DVD-R175636.1-1-00到虛擬光碟機,接著打開所載入的虛擬光碟機,運行setup程式;

    image-20220525152302419

    image-20220525152425916

    1. 安裝過程沒有特別描述的都以默認選項進行;

    2. 這一步將Check都取消勾選

image-20220525152611986

  1. 這一步選擇Permanent activation(永久激活),將所給的.lic文件(證書)導入

image-20220525152730290

  1. 其餘都用默認選項,選擇Next即可,最後等待安裝完成

image-20220525154055929

編譯BSP

  1. 找到WorkBench的安裝目錄,目錄名為WindRiver,找到vxworks-6.8目錄,進入找到target目錄,進入找到config目錄,進入找到pcPentium4目錄

    image-20220525154854470

  2. 將「修改及增加文件」文件夾內提供的文件複製粘貼到Pentium4目錄內,已有文件全部覆蓋

    需要修改以下文件,這裡直接將修改好的複製過來。

    image-20220525160148602

    image-20220525160105819

  3. 打開config.h文件,定位到定義 DEFAULT_BOOT_LINE 宏的地方。修改預處理條件 CPU = = PENTIUM4 分支下的定義如下:

    這裡的h(host)地址表示你的主機IP地址,可以先修改為主機IP地址,或者隨便填一個IP地址,之後修改主機地址為該地址,e(target)地址表示VxWorks系統目標機的IP地址,只需要和主機IP地址在同一個網段內即可,u=target pw=target是FTP下載的用戶名和密碼,都可以根據自己實際情況修改,最好使用target,簡單易記。

image-20220525160431993

  1. 打開Workbench3.2,Workspace就選擇WindRiver目錄下的workspace目錄

    image-20220525161115821

  2. File->New->Wind River Workbench Project,選擇Wind River VxWorks 6.8,然後Next

image-20220525163120175image-20220525163127414

  1. Build type選擇Boot Loader / BSP Project,然後Next

image-20220525163219397

  1. Project name任取,最好與BSP相關,Location選擇默認的in workspace,然後Next

    image-20220525163314729

  2. Board support package選擇步驟2中經過修改的Pentium4目錄,Tool chain選擇gnu,勾上Copy files to project,然後Finish

image-20220525163507971

  1. 右鍵選中項目,選擇Build Project或者Rebuild Project進行構建

image-20220525164325208

  1. 構建完成後,右鍵選中項目,選擇Open Wind River VxWorks 6.8 Development Shell,打開命令行,cd進入Pentium4目錄後,輸入make bootrom.bin命令,將生成bootrom.bin文件

    image-20220525164508045

  2. 找到workspace目錄,找到該項目目錄,在項目目錄下找到Pentium4目錄,進入並找到生成的bootrom.bin,複製出來,並修改後綴名為.sys,後續該文件作為引導程式

    image-20220525164651047

  3. 找到vxload.com和vxsys.com兩個文件(手動搜索,或者一般在XX\WindRiver\vxworks-6.8\host\x86-win32\bin目錄下),與上一步得到的bootrom.sys放在一起,以待後續使用

image-20220525164908634

生成VxWorks鏡像

根據具體需要在命令行環境下利用Makefile創建各種鏡像,也可以在Tornado的集成環境下Build菜單中選擇Build Boot ROM來創建各種類型的Boot ROM;

除此以外,如果系統硬體包括串口,還要根據具體情況修改sysSerial.c文件;如果包含網路部分要修改configNet.h;如果包含NVRAM要修改bootnv.h文件。總之,BSP的開發要根據具體目標板的硬體進行。

1、打開Workbench3.2,Workspace就默認為WindRiver目錄下的workspace目錄

2、File->New->Other,在Wizards內輸入VxWorks image查找並選擇VxWorks Image Project,然後Next

image-20220525165559791

3、Project name任取,最好與Image相關,Location選擇默認項in workspace,然後Next

image-20220525165641936

4、Based on選擇an existing project,Project中將顯示此時workspace中的項目,選擇第2章節中創建好的BSP項目,然後Finish

image-20220525165725112

5、如果需要額外開啟各種服務,則需要在VxWorks Image的編譯工程的Kernel Configuration中添加組件

image-20220525214653834

選擇所需要的服務,這裡添加了telnet ftp rpc,然後點擊finish

image-20220525214734377

然後即可在Network Applications(default)模組下,看到對應的組件

image-20220525215412026

還可以進行一些配置,例如TELNET組件:

image-20220525215717670

6、組件添加完成後,右鍵選中項目,選擇Build Project或者Rebuild Project構建

7、在workspace目錄下,找到該項目目錄,進行default目錄,進入並找到生成的vxWorks以及vxWorks.sym,複製出來,後續這兩個文件將作為VxWorks系統文件通過FTP引導系統

image-20220525171812776

但是我這裡並沒有生成vxWorks.sym文件,不知道為什麼…不過後面並沒有影響

VxWorks虛擬機安裝

1、首先使用DOS622鏡像文件創建虛擬機,鏡像文件格式為IMG,大小為1.44MB,軟盤的大小。

2、使用VMware,新建虛擬機->典型->稍後安裝作業系統->其他(MS-DOS)->自定義名稱(默認為MS-DOS)和位置->使用默認最大磁碟大小2GB,將虛擬磁碟存儲為單個文件->完成

3、打開上一步創建的虛擬機設置,在硬體部分「添加」「軟盤驅動器」

image-20220525172827187

4、軟盤添加「完成」後,選擇軟盤,勾選「啟動時連接」,以及「使用軟盤映像文件」,並點擊「瀏覽」選擇提供的DOS662.img文件

image-20220525172919367

5、選擇CD/DVD,取消勾選「啟動時連接」,修改記憶體大小為256MB(適當大小即可)

image-20220525173030875

6、完成設置後,開啟該虛擬機,進入開始介面,選擇第三個選項Other IDE CD-ROM

image-20220525173155805

7、選擇3後進入真正的DOS介面,開始進行硬碟分區,輸入fdisk

image-20220525173250450

8、選擇1,建立DOS分區

image-20220525173344035

9、選擇1,建立一個主分區

image-20220525173354448

10、選擇Y,此時詢問這個分區是否使用全部的空間,由於我們只需要一個分區就可以,因此選擇Y

image-20220525173410948

11、輸入任意鍵,虛擬機將重啟

image-20220525173418961

12、重新選擇3 Other IDE CD-ROM,進行主分區的格式化,輸入format c: /s ,這裡輸入Y確認

image-20220525173845902

13、這裡詢問是否填寫卷標,由於並不需要所以直接回車即可

image-20220525173912813

14、此時已經有主分區C盤了,關閉虛擬機,在虛擬機設置中選擇硬碟,選擇「映射」,取消勾選「以只讀模式打開文件」後確定,彈出警告點「是」即可,由此將打開該虛擬機的硬碟空間

image-20220525174421636

之後,本地多出來個Z盤:

image-20220525174802837

15、將”編譯BSP”章節中的三個文件放入盤中後,在硬碟處「斷開連接」,重新開啟虛擬機,依然選擇3,輸入c:進入c盤(即主分區)

image-20220525174904414

image-20220525175009271

image-20220525175109301

17、輸入vxsys c: 命令,輸入y確認

image-20220525175231731

18、由此bootrom.sys成功設置為引導程式,關閉虛擬機,在虛擬機設置中選擇軟盤,取消勾選「啟動時連接」,再次開啟虛擬機,VxWroks系統虛擬機安裝完成,其中IP地址為192.168.111.200,也就是所提供的config.h文件內設置的地址

image-20220525175324956

image-20220525175355883

19、移步到win10虛擬機,在C:\WindRiver\vxworks-6.8\host\x86-win32\bin下找到wftpd32.exe,使用該程式進行FTP的連接

image-20220525175639437

20、在任意位置創建一個文件夾,用來給目標機提供FTP文件目錄,方便起見,我們直接在桌面下創建一個名為ftp的文件夾,將之前得到的vxWorksvxWorks.sym兩個文件放入其中

這裡我只生成了vxWorks

image-20220525175843477

21、打開wftpd32.exe,Security->Users/Rights->New User->創建一個名為target,密碼為target的用戶(這個用戶名密碼是在config.h文件修改時設定好的)

image-20220525175948795

22、用戶創建好後選擇該用戶,在Home Directory內填入20步中創建的文件夾,然後選擇「Done」

image-20220525180047631

23、重啟VxWorks虛擬機,此時虛擬機將通過FTP連接載入VxWroks系統,完成

image-20220525181835199

這裡我們在」生成VxWorks鏡像「章節,並沒有生成vxWorks.sym文件,但是依然可以搭建成功。

24、由於前面我們配置了RPC、TELNET、FTP組件,所以掃描可以看到對應的開放埠

image-20220526181220429

漏洞測試

在上一部分,我們已經搭建成功了 VxWorks 6.8.3 + VxWorks Workbench 3.2.3

image-20220525181115524

下面進行一些已知漏洞測試

urgent11

//buaq.net/go-6479.html

image-20220525224730666

image-20220525224740191

image-20220525224801460

IPnet TCP/IP 堆棧檢測

//github.com/ArmisSecurity/urgent11-detector

該工具以 TCP 和 ICMP 指紋的形式對目標主機實施 4 種獨特的檢測方法。通過計算所有方法得分的總和,我們可以高精度地確定設備是否運行依賴於 IPnet TCP/IP 堆棧的作業系統以及該作業系統是否為 VxWorks。此外,我們還測試了主機是否容易受到 CVE-2019-12258 的攻擊,這是影響所有使用 IPnet 的 VxWorks 版本的 URGENT/11 漏洞之一。如果檢測到設備在 VxWorks 上運行 IPnet,並且不受此 CVE 的攻擊,則可以推斷該設備已針對 URGENT/11 漏洞進行了修補

對上面搭建的環境進行測試,可以發現沒有修補漏洞:

image-20220526104828096

CVE-2019-9865

//github.com/dazhouzhou/vxworks-poc/tree/master/CVE-2019-9865

VxWorks的RPC組件存在此漏洞。 有關漏洞的詳細資訊可以在這裡找到。

在 6.9.1 之前的 Wind River VxWorks 6.9 中啟用 RPC 時,特製的 RPC 請求會觸發整數溢出,從而導致記憶體複製越界。它可能允許遠程攻擊者導致拒絕服務(崩潰)或可能執行任意程式碼。

復現:

這裡搭建的是6.8版本,不存在漏洞

修改poc.py裡面的host地址:

image-20220525182010742

運行poc.py

image-20220525221009994

image-20220525221033588

CVE-2019-12255

//github.com/iweizime/urgent11-poc/tree/master/CVE-2019-12255

VxWorks的IPnet棧存在此漏洞。 有關漏洞的詳細資訊可以在這裡找到。

PoC可以使VxWorks任務(設置與PoC中任務對應的埠)崩潰,例如telnet、ftp等。

影響版本:6.5 ≤ VxWorks<6.9.4

復現:

修改poc.py裡面的ip和dport

image-20220526142152180

運行:

#當OS收到非請求報文時,會發送RST (reset)報文。 我們可以使用iptables來避免這種情況。 
iptables -A OUTPUT -p tcp --tcp-flags RST RST -s 192.168.111.134(攻擊者ip) -j DROP

#運行POC
python3 poc.py

image-20220526142845137

image-20220526142741074

CVE-2019-12260

//github.com/iweizime/urgent11-poc/tree/master/CVE-2019-12260

此 PoC 使用 TCP 身份驗證選項 (TCP-AO) 發送數據包

iptables -A OUTPUT -p tcp --tcp-flags RST RST -s 172.18.101.121 -j DROP
python3 poc.py

image-20220526162843158

CVE-2010-2965

VxWorks wdbrpc遠程程式碼執行漏洞

VxWorks 6.x, 5.x和之前版本中的WDB目標代理調試服務中存在許可權許可和訪問控制漏洞。遠程攻擊者可以藉助向UDP 17185埠發送的請求讀取或修改任意存儲單元,執行函數調用,從而造成任意程式碼執行。

WDB RPC有V1和V2兩個版本,VxWorks 5.5中使用V1版本,而VxWorks 6.6中使用V2版本,V2版本相較於V1版本有較多處修改,具體體現在協議欄位及交互方式。 以上這些腳本都是針對WDB RPC V1