知道创宇404实验室
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
作者:wh0am1i@知道创宇404实验室
原文链接:https://paper.seebug.org/3114/
在开始之前,让我们来回顾一下什么是实时操作系统,什么是分时操作系统。
实时操作系统(Real Time Operating System,简称RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任,并控制所有实时任务协调一致运行的操作系统。
分时操作系统是一种多任务处理系统,它通过在多个任务之间切换执行,为每个任务分配时间片。其目标是在多个任务之间共享处理器时间,以提高系统的整体吞吐量和资源利用率。
两者的主要区别包括:
响应时间要求:
实时操作系统:具有对任务响应时间的硬实时要求,即任务必须在预定的时间内完成。
分时操作系统:没有硬实时要求,任务的完成时间相对灵活,系统主要关注提高整体效率。
任务切换机制:
实时操作系统:任务切换是由于时间限制而严格控制的,以确保在规定的时间内完成任务。
分时操作系统:任务切换是基于时间片轮转或优先级调度等策略,以确保公平分配处理器时间。
应用领域:
实时操作系统:通常用于需要满足严格时间限制的应用领域,如航空航天系统、医疗设备、工业自动化等。
分时操作系统:通常用于一般计算机系统,如个人计算机、服务器等,其中任务的完成时间相对较为灵活。
VxWorks是美国风河系统公司(Wind River Systems)于1983年设计开发的一种嵌入式实时操作系统,是嵌入式开发环境的关键组成部分。
VxWorks 具有良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器、2008年5月登陆的凤凰号,和2012年8月登陆的好奇号也都使用到了VxWorks。
1 环境搭建
本文用到的工具和软件如下:
Windows 10
VMware Workstation 16 Pro
Workbench 3.2
TFtpd64
2 安装 Workbench
打开 ISO 文件,点击setup.ext
,开始安装Workbench
,如图2-1所示:
需要注意的地方有两处,第一处在检查更新的地方,需要禁止更新,如图2-2所示:
第二处在加载 license 的地方,如图2-3所示:
其他的按照默认的设置安装,无所任何改动。
3 编译
在编译之前需要 VxWorks 的文件进行一些修改,具体可以看食铁兽的文章,笔者这里不再赘述。在修改时,DEFAULT_BOOT_LINE
需要根据自己的实际 IP 进行修改。
3.1 编译 BSP
打开Wind River WorkBench 3.2
,选择File->New Wind River Workbench Project
,选择操作系统为VxWorks 6.8
,如图 3-1 所示:
接着下一步选择 `Build Type`为 `Boot loader/BSP Project`, 如图 3-2 所示:
下一步新建工程名,最好能表明是 bsp 项目,其他默认即可。接着进入 `Board support package`设置,笔者这里在之前修改配置文件的时候,将 `pcPentium4`复制了一份,并命名为 `pcPentium4P`,此处一定要将 `Copy file to project`勾选,否则下一个无法完成。读者可根据自己修改的配置进行设置,完整配置如图 3-3 所示:
最后点击 `Finish`完成项目创建。接着右键点击项目,选择 `Build Project`或者 `Rebuild Project`编译项目。
编译完成之后,右键点击项目,选择Open Wind River VxWorks 6.8 Development Shell
,进入命令行编译引导程序。具体步骤:首先cd
进入pcPentium4P
,再执行make bootrom.bin
,完成编译。如图 3-4 所示:
进入 `workspace/项目目录/pcPentium4P`目录中,找到编译好的 `bootrom.bin`并将 `bootrom.bin`重命名为 `bootrom.sys`,至此引导程序编译完成。
3.2 编译 VxWorks
引导编译完成后,接下来开始 VxWorks 固件,选择菜单File->New->Project
,新建一个 VIP 项目 ,如图 3-5 所示:
下一步工程名,根据自己的喜好来命名,例如:`vmware_vip`。工程名输入完毕后,进入下一步工程设置,需要与之前的 BSP 项目相关联,具体设置如图 3-6 所示:
点击 `Finish`完成 VIP 项目的创建。为了保证后续的漏洞成功复现,需要在VxWorks Image的编译工程的Kernel Configuration中添加组件,添加的组件有 `telnet/ftp`,右键选中 `NetWork Components`,选择 `Include`添加组件,如图 3-7 所示:
组件添加完成后,右键选择项目名,选择 `Build Project`或者 `Rebuild Project`进行构建。构建完成后,进入 `workspace/[vip name]/default`目录下,找到生成的 `VxWorks`,将 `VxWorks`复制出来,与 `bootrom.sys`放入同一文件夹中,如图 3-8 所示:
4 启动
在启动 VxWorks 之前,我们需要了解一下 VxWorks 的启动方式,在 VxWorks 4/5/6 中,需要使用 bootrom 对 VxWorks 进行加载,VxWorks 的 bootrom 存储在闪存中,并在系统复位时开始自动运行。bootrom 会初始化所有运行VxWorks所需的硬件,然后加载VxWorks系统(通常以ELF文件形式存在)到内存并运行它,bootrom可以从包括可用格式的flash存储文件系统加载VxWorks镜像,或者通过网络连接从另一台机器上加载。具体方式可以参考食铁兽的文章。
VxWorks 7不再支持编译一个旧风格的 bootrom(或者任何形式的只读VxWorks镜像),取而代之,硬件必须要安装一个独立的引导加载程序来从复位开始运行并启动系统。
由于 VxWorks 6 的启动方式过于复杂,因此笔者在这里使用了 VxWorks7 的引导方式来启动 VxWorks 6.8。具体操作方式如下:
找到编译好的 VxWorks 7 引导vxStage1Boot.bin
,并把 VxWorks 6.8 的镜像重命名为bootapp.sys
,将它们放入同一文件夹内,如图 4-1 所示:
开启 Tftpd,设置如下,如图 4-2 、4-3 所示:

创建一个新的虚拟机,虚拟机的参数不重要,重要的是设置**引导方式需要从 PXE 启动**,设置完成后开启虚拟机,等待引导完成,如图 4-4 所示:
等待片刻后,VxWorks 成功运行,如图 4-5 所示:
5 Hello World
在前面一节中,成功启动 VxWorks 6.8 ,在这一章节中我们将创建我们的第一个应用。首先打开Workbench 3.2
,新建一个DKM(VxWorks Downloadable Kernel Module Project)
项目,如图 5-1 所示:
点击 `Finish`完成创建。右键选中 `hellowd`项目,选择 `New->File`,创建一个 `main.c`文件,如图 5-2 所示:
创建完成后在 `main.c`输入代码如下:
#include <stdio.h>
int main()
{
printf("Hello, World!");
return 0;
}
右键选中项目,选择Build Project
,编译工程。如果编译中出现弹窗请选择Coutinue
。接下来连接远程目标,首先点击Workbench
左上方的Run(一个绿色的播放按钮)
,在弹出的窗口中选择VxWorks Kernel Task
,再点击弹窗右上角的新建连接按钮,新建一个链接,创建一个Target Server Connection
,具体步骤如 图 5-3 所示:
新建 `Target Server Connection`具体设置如下,如图5-4 所示:
点击 `Finish`完成创建。回到 `Workbench`界面,需要指定函数入口,如图 5-5 所示:
随后点击 `Run`,就可以在 `VxWorks`中看到 `Hello,World!`。至此我们的第一个 VxWorks 应用就成功的运行了。
6 漏洞复现
目前公开的 VxWorks 漏洞危害较为严重当属URGENT/11
,URGENT/11
由11个漏洞组成,可分为两类:
可 RCE 的六个漏洞
可导致拒绝服务、信息泄漏或者某些逻辑缺陷的五个漏洞
本文搭建的系统为 VxWorks 6.8,因此受到了部分漏洞的影响,下面使用 Pocsuite3 对漏洞进行验证。首先扫描一下端口情况,如图 6-1 所示:
使用 Pocusite3 对 `URGENT/11`进行检测,结果如图 6-2 所示:
既然存在 `URGENT/11`漏洞,那我们找一个漏洞再验证一下,这里选择 CVE-2019-12255 进行验证,CVE-2019-12255 是一个栈溢出漏洞,可导致 VxWorks 的服务崩溃,如 telnet、ftp等。验证结果如图 6-3 所示:
笔者在这里选择的 telnet 服务,即 23 端口。VxWorks 崩溃,如图 6-4 所示:
7 总结
本次的学习过程比较曲折,主要是在环境搭建方面,国内这一块资料比较少,而 VxWorks 作为业界领先的实时操作系统,还有很多内容需要深入研究。
8 参考链接
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)