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
搜索網路連接設置,選擇其中的有線網卡(不能用也沒關係,主要是有線網卡就可以)。右鍵點擊屬性菜單。
然後點擊配置按鈕,彈出配置介面,點擊高級子介面
打開資源包中的WRSLicenseWH701-VX-2Hypervisor.lic文件,找到這裡:
複製裡面的hostid=欄位的內容,16位MAC地址字元串。如果不是16位MAC地址而是字元串ANY
,表示此證書並未綁定網卡MAC地址,不限制網卡。
填入如下位置:
開始安裝:
-
安裝UItraISO(其他載入工具也可以)。運行uiso9_cn.exe,一路默認安裝UItraISO,注意選擇附加任務時三項都要勾選,尤其是「安裝虛擬ISO驅動器」(默認三項都勾選)
-
載入DVD-R175636.1-1-00到虛擬光碟機,接著打開所載入的虛擬光碟機,運行setup程式;
-
安裝過程沒有特別描述的都以默認選項進行;
-
這一步將Check都取消勾選
-
- 這一步選擇Permanent activation(永久激活),將所給的.lic文件(證書)導入
- 其餘都用默認選項,選擇Next即可,最後等待安裝完成
編譯BSP
-
找到WorkBench的安裝目錄,目錄名為WindRiver,找到vxworks-6.8目錄,進入找到target目錄,進入找到config目錄,進入找到pcPentium4目錄
-
將「修改及增加文件」文件夾內提供的文件複製粘貼到Pentium4目錄內,已有文件全部覆蓋
需要修改以下文件,這裡直接將修改好的複製過來。
-
打開config.h文件,定位到定義 DEFAULT_BOOT_LINE 宏的地方。修改預處理條件
CPU = = PENTIUM4
分支下的定義如下:這裡的h(host)地址表示你的主機IP地址,可以先修改為主機IP地址,或者隨便填一個IP地址,之後修改主機地址為該地址,e(target)地址表示VxWorks系統目標機的IP地址,只需要和主機IP地址在同一個網段內即可,u=target pw=target是FTP下載的用戶名和密碼,都可以根據自己實際情況修改,最好使用target,簡單易記。
-
打開Workbench3.2,Workspace就選擇WindRiver目錄下的workspace目錄
-
File->New->Wind River Workbench Project,選擇Wind River VxWorks 6.8,然後Next
- Build type選擇Boot Loader / BSP Project,然後Next
-
Project name任取,最好與BSP相關,Location選擇默認的in workspace,然後Next
-
Board support package選擇步驟2中經過修改的Pentium4目錄,Tool chain選擇gnu,勾上Copy files to project,然後Finish
- 右鍵選中項目,選擇Build Project或者Rebuild Project進行構建
-
構建完成後,右鍵選中項目,選擇Open Wind River VxWorks 6.8 Development Shell,打開命令行,cd進入Pentium4目錄後,輸入make bootrom.bin命令,將生成bootrom.bin文件
-
找到workspace目錄,找到該項目目錄,在項目目錄下找到Pentium4目錄,進入並找到生成的bootrom.bin,複製出來,並修改後綴名為.sys,後續該文件作為引導程式
-
找到vxload.com和vxsys.com兩個文件(手動搜索,或者一般在XX\WindRiver\vxworks-6.8\host\x86-win32\bin目錄下),與上一步得到的bootrom.sys放在一起,以待後續使用
生成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
3、Project name任取,最好與Image相關,Location選擇默認項in workspace,然後Next
4、Based on選擇an existing project,Project中將顯示此時workspace中的項目,選擇第2章節中創建好的BSP項目,然後Finish
5、如果需要額外開啟各種服務,則需要在VxWorks Image的編譯工程的Kernel Configuration中添加組件
選擇所需要的服務,這裡添加了telnet ftp rpc,然後點擊finish
然後即可在Network Applications(default)模組下,看到對應的組件
還可以進行一些配置,例如TELNET組件:
6、組件添加完成後,右鍵選中項目,選擇Build Project或者Rebuild Project構建
7、在workspace目錄下,找到該項目目錄,進行default目錄,進入並找到生成的vxWorks以及vxWorks.sym,複製出來,後續這兩個文件將作為VxWorks系統文件通過FTP引導系統
但是我這裡並沒有生成vxWorks.sym文件,不知道為什麼…不過後面並沒有影響
VxWorks虛擬機安裝
1、首先使用DOS622鏡像文件創建虛擬機,鏡像文件格式為IMG,大小為1.44MB,軟盤的大小。
2、使用VMware,新建虛擬機->典型->稍後安裝作業系統->其他(MS-DOS)->自定義名稱(默認為MS-DOS)和位置->使用默認最大磁碟大小2GB,將虛擬磁碟存儲為單個文件->完成
3、打開上一步創建的虛擬機設置,在硬體部分「添加」「軟盤驅動器」
4、軟盤添加「完成」後,選擇軟盤,勾選「啟動時連接」,以及「使用軟盤映像文件」,並點擊「瀏覽」選擇提供的DOS662.img文件
5、選擇CD/DVD,取消勾選「啟動時連接」,修改記憶體大小為256MB(適當大小即可)
6、完成設置後,開啟該虛擬機,進入開始介面,選擇第三個選項Other IDE CD-ROM
7、選擇3後進入真正的DOS介面,開始進行硬碟分區,輸入fdisk
8、選擇1,建立DOS分區
9、選擇1,建立一個主分區
10、選擇Y,此時詢問這個分區是否使用全部的空間,由於我們只需要一個分區就可以,因此選擇Y
11、輸入任意鍵,虛擬機將重啟
12、重新選擇3 Other IDE CD-ROM,進行主分區的格式化,輸入format c: /s
,這裡輸入Y確認
13、這裡詢問是否填寫卷標,由於並不需要所以直接回車即可
14、此時已經有主分區C盤了,關閉虛擬機,在虛擬機設置中選擇硬碟,選擇「映射」,取消勾選「以只讀模式打開文件」後確定,彈出警告點「是」即可,由此將打開該虛擬機的硬碟空間
之後,本地多出來個Z盤:
15、將”編譯BSP”章節中的三個文件放入盤中後,在硬碟處「斷開連接」,重新開啟虛擬機,依然選擇3,輸入c:進入c盤(即主分區)
17、輸入vxsys c: 命令,輸入y確認
18、由此bootrom.sys成功設置為引導程式,關閉虛擬機,在虛擬機設置中選擇軟盤,取消勾選「啟動時連接」,再次開啟虛擬機,VxWroks系統虛擬機安裝完成,其中IP地址為192.168.111.200,也就是所提供的config.h文件內設置的地址
19、移步到win10虛擬機,在C:\WindRiver\vxworks-6.8\host\x86-win32\bin下找到wftpd32.exe,使用該程式進行FTP的連接
20、在任意位置創建一個文件夾,用來給目標機提供FTP文件目錄,方便起見,我們直接在桌面下創建一個名為ftp的文件夾,將之前得到的vxWorks
,vxWorks.sym
兩個文件放入其中
這裡我只生成了vxWorks
21、打開wftpd32.exe,Security->Users/Rights->New User->創建一個名為target,密碼為target的用戶(這個用戶名密碼是在config.h文件修改時設定好的)
22、用戶創建好後選擇該用戶,在Home Directory內填入20步中創建的文件夾,然後選擇「Done」
23、重啟VxWorks虛擬機,此時虛擬機將通過FTP連接載入VxWroks系統,完成
這裡我們在」生成VxWorks鏡像「章節,並沒有生成vxWorks.sym文件,但是依然可以搭建成功。
24、由於前面我們配置了RPC、TELNET、FTP組件,所以掃描可以看到對應的開放埠
漏洞測試
在上一部分,我們已經搭建成功了 VxWorks 6.8.3 + VxWorks Workbench 3.2.3
下面進行一些已知漏洞測試
urgent11
IPnet TCP/IP 堆棧檢測
該工具以 TCP 和 ICMP 指紋的形式對目標主機實施 4 種獨特的檢測方法。通過計算所有方法得分的總和,我們可以高精度地確定設備是否運行依賴於 IPnet TCP/IP 堆棧的作業系統以及該作業系統是否為 VxWorks。此外,我們還測試了主機是否容易受到 CVE-2019-12258 的攻擊,這是影響所有使用 IPnet 的 VxWorks 版本的 URGENT/11 漏洞之一。如果檢測到設備在 VxWorks 上運行 IPnet,並且不受此 CVE 的攻擊,則可以推斷該設備已針對 URGENT/11 漏洞進行了修補。
對上面搭建的環境進行測試,可以發現沒有修補漏洞:
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地址:
運行poc.py
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
運行:
#當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
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
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