转载

44CON议题《攻击 VxWorks:从石器时代到星际》探究

在2015年9月9日-11日举办的“44 CON 伦敦”峰会中,议题众多,本文将针对“攻击 VxWorks”这个议题进行学习研究。

0×01 前言

VxWorks 是世界上使用最广泛的一种在嵌入式系统中部署的实时操作系统,是由美国WindRiver公司(简称风河公司,即WRS 公司)于1983年设计开发的。其市场范围跨越所有的安全关键领域,仅举几例,包括火星好奇心流浪者、波音787梦幻客机、网络路由器。这些应用程序的安全高危性质使得VxWorks的安全被高度关注。

加拿大安全研究人员Yannick Formaggio发现 VxWorks中存在严重的漏洞 ,允许攻击者远程执行代码。Formaggio对VxWorks进行了深入的安全分析,包括它所支持的网络协议和操作系统安全机制。演讲中他展示了其开发的VxWorks评估工具,主要目的是通过在python中实现WdbRPC协议来提供有效的渗透测试。为了显示它的效果,揭示一些在研究过程中发现的bug。

一个快速的互联网扫描显示了至少有10万台运行了VxWorks的设备连接到了互联网。考虑到VxWorks在物联网时代的普及,这一问题将会产生广泛的影响。

0×01 什么是VxWorks?

44CON议题《攻击 VxWorks:从石器时代到星际》探究

VxWorks操作系统是由美国Wind River(风河公司)开发的一种嵌入式实时操作系统(RTOS),已宣称拥有至少1.5亿台设备,VxWorks支持几乎所有现代市场上的嵌入式CPU架构,包括x86系列、MIPS、 PowerPC、Freescale ColdFire、Intel i960、SPARC、SH-4、ARM, StrongARM以及xScale CPU。

0×02 VxWorks的安全性

这一页是介绍VxWorks从2008年至2015年的CVE安全漏洞数量详细信息统计图表:

来源: http://www.cvedetails.com/product/15063/Windriver-Vxworks.html?vendor_id=95

44CON议题《攻击 VxWorks:从石器时代到星际》探究

风河公司非常注重VxWorks的安全性:

2011年与McAfee建立合作伙伴关系。 VxWorks 6.x 引进了一些内存保护机制。 VxWorks 7.x 进一步提升了以下方面: 数字签名模块(X.509) 加密 集中式的用户数据库 密码管理(SHA-256算法) 在运行过程中创建/删除用户 加密数据存储

0×03 以往的研究与启示

在这一节,演讲者主要介绍了以往一些大牛对VxWorks的漏洞挖掘的研究。

在2010年, HD Moore 在Metasploit社区发表了题为“ Shiny Old VxWorks Vulnerabilities ”的漏洞分析文章,并且提供了4个针对WDB RPC的msf攻击模块以及密码的哈希算法加密漏洞。 

在2011年, /DEV/TTYS0 大牛对VxWorks的固件WRT54Gv8进行了逆向分析,并发表了题为“ Reverse Engineering VxWorks Firmware: WRT54Gv8 ”的文章。

SecNiche Security Labs 的安全研究人员对VxWorks整体的系统安全和固件进行了漏洞挖掘,并发表了题为“ Digging Inside VxWorks OS and Firmware – Holistic Security ”的文章。

0×04 VxWorks内部探究(内存布局与保护)

X86内存布局:上端内存

44CON议题《攻击 VxWorks:从石器时代到星际》探究

X86内存布局:中断向量表(在32位保护模式下该表称为中断描述符表)IDT

44CON议题《攻击 VxWorks:从石器时代到星际》探究

X86内存布局:致命错误异常消息的ASCII字符串

44CON议题《攻击 VxWorks:从石器时代到星际》探究

X86内存布局:VxWorks镜像入口点

44CON议题《攻击 VxWorks:从石器时代到星际》探究

X86内存布局:WDB(Wind Debug协议)共享内存

44CON议题《攻击 VxWorks:从石器时代到星际》探究

内存保护:

VxWorks 为带有 MMU 的目标板提供了虚拟内存机制,对于非 MMU 的目标板是基于堆错误检测进行内存保护。

接下来是介绍VxWorks在内存保护方面所实现的一些机制。

内存保护:

任务堆栈超荷和欠载检测 中断堆栈超荷和欠载检测

44CON议题《攻击 VxWorks:从石器时代到星际》探究

内存保护:

非可执行的任务堆栈 & 非可写文本段     INCLUDE_TASK_STACK_NO_EXEC     INCLUDE_PROTECT_TEXT     任务堆栈大小 = MMU 页大小

44CON议题《攻击 VxWorks:从石器时代到星际》探究

内存保护:

空指针使用检测

44CON议题《攻击 VxWorks:从石器时代到星际》探究

堆区块超荷检测 / 使用情况跟踪与泄漏检测

44CON议题《攻击 VxWorks:从石器时代到星际》探究

0×05 什么是WDB RPC?

在对VxWorks进行模糊测试前,需要明白,WDB RPC是一个基于SUN-RPC协议的调试接口,它的服务运行在UDP协议的17185端口上,可以直接访问系统的内存。

接下来是介绍WDB协议V2的动态图解:

44CON议题《攻击 VxWorks:从石器时代到星际》探究

调用:由目标服务器发出

44CON议题《攻击 VxWorks:从石器时代到星际》探究

应答:由目标代理发出

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(一): 绿色表示调用过程,红色表示应答过程。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(二): 调用过程:主机连接至目标。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(三): 应答过程:目标连接至主机。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(四): 调用过程:主机对目标发起WDB功能调用操作。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(五): 应答过程:目标对主机发起WDB功能调用操作。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(六): 调用过程:主机对目标发起WDB内容挂起操作。 应答过程:目标对主机发起WDB内容挂起操作。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(七): 调用过程:主机对目标发起WDB事件点添加操作。 应答过程:目标对主机发起WDB事件点添加操作。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 5.x 使用WDB对过程进行监测(八): 调用过程:主机对目标发起WDB内容控制操作。 应答过程:目标对主机发起WDB内容控制操作。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

下面是针对VxWorks 6.x 使用WDB对过程进行监测(一):

在 Gopher 上获取更多信息。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

针对VxWorks 6.x 使用WDB对过程进行监测(二):

44CON议题《攻击 VxWorks:从石器时代到星际》探究

接下来是对崩溃检测机制的介绍:

目标向主机发送事件通知。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

主机确认。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

主机请求更多的信息(寄存器内容,内存区域......)

44CON议题《攻击 VxWorks:从石器时代到星际》探究

下一节的模糊测试将会用到WDBRPC框架,使用Python编写,支持VxWorks 5.x和6.x,实现了部分WDBRPC协议,实现了一个基本的远程调试器——WdbDbg。

一些外部依赖项:

PyElfTools: 从 VxWorks 图像读取导入

Capstone Engine: 对崩溃区周围的代码进行反汇编

0×06 从模糊测试到漏洞利用

这一节将对VxWorks的一些网络协议(RPC,FTP,TFTP,NTP等)进行fuzzing。使用Sulley fuzzing框架。对于没有可用的精确崩溃检测的问题可以使用 WdbRPC 作为解决方案。

与Sulley进行对接:

灵感来自于与 Sulley process_monitor.py 脚本 执行情况:     DebuggerThread 实例化 WdbDbg,并实现回调在崩溃发生时调用。     ProcessMonitorPedRPCServer 与 Sulley 的 ped rpc 例程进行对接。 VxMon 包装的一切。

接下来是Fuzzing过程的图解:

VxMon使用WDB RPC对VxWorks目标进行监测,Sulley模糊测试框架对VxWorks目标进行模糊测试,当VxMon收到崩溃发生事件时,使用Sulley 的 ped rpc 例程与Sulley模糊测试框架进行通信,告知其崩溃发生。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

这一页是模糊测试的一个Demo:

44CON议题《攻击 VxWorks:从石器时代到星际》探究

接下来是对Fuzzing过程中产生的崩溃进行分析:

Portmap任务在相同的 RPC 字段崩溃多次: 凭据的味道 当设置为负值,则 => PC 设置为任意的内存值

44CON议题《攻击 VxWorks:从石器时代到星际》探究

对系统的authenticate函数进行反汇编:

44CON议题《攻击 VxWorks:从石器时代到星际》探究

对eax寄存器进行赋值操作:

44CON议题《攻击 VxWorks:从石器时代到星际》探究

对ebx寄存器进行赋值操作:

44CON议题《攻击 VxWorks:从石器时代到星际》探究

使用cmp指令对比ebx寄存器和2的大小,注意右侧ebx寄存器的值为0:

44CON议题《攻击 VxWorks:从石器时代到星际》探究

jg是个大于转移的汇编指令,由于0<2不满足条件,所以不会跳到0x4173c7地址处执行。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

由于上面并未跳转所以继续向下执行,call指令调用了svcauthsw函数:

44CON议题《攻击 VxWorks:从石器时代到星际》探究

进入svcauthsw函数内存空间,发现已经发生了溢出。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

如何进行漏洞利用?

整数溢出导致了RCE(远程代码执行) 堆喷射shellcode 计算凭据风味值 直接跳进shellcode 绕过所有的内存保护 设置后门帐户

该议题的演讲者在PPT后面的一页中已作相关说明,因此此漏洞的exp他并不会发布。

44CON议题《攻击 VxWorks:从石器时代到星际》探究

44CON议题《攻击 VxWorks:从石器时代到星际》探究

在模糊测试的过程中发现了其他的bug:

FTP 服务器在被高速访问时容易出现环缓冲区溢出错误。 当FTP收到精心构造的用户名和密码时会崩溃,网络堆栈会挂掉!

44CON议题《攻击 VxWorks:从石器时代到星际》探究

44CON议题《攻击 VxWorks:从石器时代到星际》探究

0×07 结论

风河公司对VxWorks的安全的确很重视,实现了很多内存保护机制,不过最后被一个简单的整数溢出漏洞打败了。

本次公开的安全问题将会影响VxWorks 5.5版本,也就是需要补丁的设备要以百万来计数。风河公司已确认存在VxWorks系统中存在漏洞,并计划在不久之后发布更新。

原文PPT下载: http://www.slideshare.net/44Con/44con-london-attacking-vxworks-from-stone-age-to-interstellar

*投稿:FreeBuf特约作者丝绸之路,本文属FreeBuf原创奖励计划,未经许可禁止转载 

正文到此结束
Loading...