VxWorks环境搭建与学习

搭建环境所需的所有资源: https://pan.baidu.com/s/1sUF2I_DBHs-86IUJ4Ykn2Q 提取码: t7sj

实时系统vxWorks - Shell命令 https://blog.csdn.net/rt201314/article/details/119551651

VxWorks开发环境学习 https://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

https://buaq.net/go-6479.html

image-20220525224730666

image-20220525224740191

image-20220525224801460

IPnet TCP/IP 堆栈检测

https://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

https://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

https://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

https://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

posted @ 2022-07-15 17:02  yokan  阅读(10072)  评论(8编辑  收藏  举报