VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘
Posted Seebug漏洞平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘相关的知识,希望对你有一定的参考价值。
漏洞概览
安装Fuzzing框架Sulley & 相关协议Fuzzing
VxWorks WDB RPC V2分析
暴露在互联网中的VxWorks WDB RPC V2服务!!!
VxWorks 5.5 & 6.6模拟环境搭建 https://github.com/knownsec/VxPwn/tree/master/doc
vmWare上运行VxWorks(5.5) http://www.vxdev.com/html/44/624.htm
Python灰帽子 第9章 Sulley http://blog.chinaunix.net/uid-25979788-id-1747694.html
Sulley官方文档:https://github.com/OpenRCE/sulley/blob/master/docs/index.html
1. 执行nmap命令(可能需要执行多次)
2. 其中192.168.1.111为运行VxWorks 5.5版本的主机IP,在收到上述扫描数据包后,VxWorks主机并没有错误提示,但是网络栈已经崩溃,无法再与外界进行通信。
3. 对tcp/21运行的FTP服务连续发送体积极大的FTP请求数据包。
4. 也可用如下Python代码验证该问题:
Sulley - Windows Installation https://github.com/OpenRCE/sulley/wiki/Windows-Installation
FreeBuf也有文章对上述文档进行了翻译:
在渗透测试中使用fuzz技术(附windows安装指南) http://www.freebuf.com/articles/network/34136.html
MinGW
下载 https://github.com/develersrl/gccwinbinaries/releases/download/v1.1/gcc-mingw-4.3.3-setup.exe
安装时,在"Select Components"对话框中,除了默认选项,还需勾选"C++ Compiler"和"ObjC Compiler"
下载并安装Python 2.7 x86版本(请安装2.7.2版本,高版本如2.7.11在后续编译libdasm步骤中可能出错)
下载并安装 Git for Windows (http://git-scm.com/download/win)
将C:Python27和C:MinGWin加入到系统环境变量$PATH中
pydbg
下载
编译安装
libdasm
下载 http://libdasm.googlecode.com/files/libdasm-beta.zip 并解压
编译
安装
C:sulley_buildlibdisasmpydasm>python setup.py install 下载并安装 WinPcap (https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe)
下载 WinPcap Dev Kit(WpdPack)
PCapy
下载 https://github.com/CoreSecurity/pcapy 并解压
编译(需指定WpdPack中的include目录及lib目录)
C:sulley_buildpcapy-0.10.5>python setup.py build_ext -c mingw32 -I "C:sulley_buildWpdPackInclude" -L "C:sulley_buildWpdPackLib" 安装
C:sulley_buildpcapy-0.10.5>python setup.py install 下载并安装setuptools和pip
安装impacket
pip install -U impacket Sulley
下载
确认process_monitor.py正常工作(无import异常)
确认network_monitor.py正常工作(正常会打印网卡列表)
github上已有人公开了基于Sulley的FTP Fuzzing程序(https://github.com/proteansec/fuzzyftp),我们直接用其进行Fuzzing,该脚本ftp.py fuzz的协议字段节点图如下:
6.6版本无影响。
5.5连续发送极大的FTP请求包时,会造成ring buffer overflow,导致VxWorks无法进行网络通信。该问题也属于上文中已经提到的网络栈问题,不属于FTP协议问题。
关于Sun RPC的细节可以参考如下文档:
Unix网络编程 卷二 第二版 第16章
ONC+ Developer's Guide - Appendix B RPC Protocol and Language Specification (http://docs.oracle.com/cd/E19683-01/816-1435/rpcproto-13077/index.html)
字段变量 | 字段释义 | 字段长度(字节) | 字段类型 |
---|---|---|---|
xid | transaction identifier | 4 | unsigned int |
mtype | message type | 4 | enum |
rpcvers | rpc version | 4 | unsigned int |
prog | remote program | 4 | unsigned int |
vers | remote program version | 4 | unsigned int |
proc | the procedure within the remote program to be called | 4 | unsigned int |
Fuzzing结果: 5.5及6.6版本均测试出18处崩溃点,通过观察结果中的寄存器状态,都属于一类,该漏洞仅造成tPortmapd服务崩溃,对其他服务没有影响。该漏洞Formaggio在44 con上进行过详细分析。
要实现自动或半自动化Fuzzing通常需解决如下问题:
随机或是随机的方式生成大量协议数据包:(本次由Sulley生成)
将生成的数据包发送给被测试组件/服务 (本次需基于Sulley实现针对特定协议的Fuzz脚本)
检测被测组件的状态,如是否能够响应、响应是否正确等(难点)
获取组件异常信息,如崩溃原因、内存内容等 (难点)
被测组件环境复原,如重启
metasploit-framework/modules/auxiliary/scanner/vxworks/wdbrpc_version.rb (https://github.com/rapid7/metasploit-framework/blob/b206de77081069dd53b1f90f57bfaccd0ecbb0d8/modules/auxiliary/scanner/vxworks/wdbrpc_version.rb)
metasploit-framework/modules/auxiliary/scanner/vxworks/wdbrpc_bootline.rb (https://github.com/rapid7/metasploit-framework/blob/b206de77081069dd53b1f90f57bfaccd0ecbb0d8/modules/auxiliary/scanner/vxworks/wdbrpc_bootline.rb)
metasploit-framework/modules/auxiliary/admin/vxworks/wdbrpc_reboot.rb (https://github.com/rapid7/metasploit-framework/blob/b206de77081069dd53b1f90f57bfaccd0ecbb0d8/modules/auxiliary/admin/vxworks/wdbrpc_reboot.rb)
metasploit-framework/modules/auxiliary/admin/vxworks/wdbrpc_memory_dump.rb (https://github.com/rapid7/metasploit-framework/blob/b206de77081069dd53b1f90f57bfaccd0ecbb0d8/modules/auxiliary/admin/vxworks/wdbrpc_memory_dump.rb)
(参考自Wind River Documentation)
IP Header
UDP Header
RPC Request Header
WDB Parameter Wrapper
Function input parameters
响应数据包
IP Header
UDP Header
RPC Reply Header
WDB Reply Wrapper
Function output
WDB_TARGET_CONNECT
WDB_TGT_INFO_GET
我们用Python封装了如上所述的功能,代码请移步至wdbdbg.py(https://github.com/knownsec/VxPwn/blob/master/sulley/wdbdbg.py),其中需要用到第三方模块capstone(https://capstone-engine.github.io/download/3.0.4/capstone-3.0.4-python2.7-win32.exe),请自行安装。
监视所有组件(服务)状态
恶意固件刷入、后门植入
重启VxWorks设备
任意内存读写
登陆绕过
...
通过Zmap调用wdbrpc-scan脚本扫描全网暴漏端口IP数约5万+,其中3.4万能读取到系统信息和bootline信息。
数量按国家分布Top10
中国: 7861
美国: 5283
巴西: 3056
意大利: 1025
日本: 823
俄罗斯: 647
墨西哥: 505
哈萨克斯坦: 486
澳大利亚: 481
印度: 448
数量按VxWorks系统版本号统计:
VxWorks5.5.1 15601
VxWorks5.4.2 6583
VxWorks5.4 5410
VxWorks5.4.2 5254
VxWorks5.5 899
VxWorks 654
VxWorks5.3.1 236
数量按设备信息统计Top10:
Telogy Networks GG30E Reference Board 3674
TI TNETV1050 Communication Processor 3360
Motorola MPC82xx ADS - HIP7 2626
IP-ADSL DSLAM (MPC860/855T) 1972
HUAWEI ET&IAD 1796
MPC8245Board: EDSL , Map B (CHRP) 1678
PowerPC 875, 133MHZ 1553
Mips 4KEc 1239
MGCB 912
Intel IXP425 - IXDP425 BE 887
其中受影响的PLC模块型号:
罗克韦尔Rockwell Automation 1756-ENBT固件版本为3.2.6、3.6.1及其他
西门子Siemens CP 1604、Siemens CP 1616
施耐德Schneider Electric 昆腾部分以太网模块
运行V1版本WDB RPC服务(即运行VxWorks 5.x版本的主机)的IP共30339个,数量较z-0ne在2015年11月1日统计得出的3.4万有所减少。
运行V2版本WDB RPC服务(即运行VxWorks 6.x版本的主机)的IP共2155个。
运行未知版本VxWorks的主机20093个。这些主机对V1和V2版本的WDB_TGT_INFO_GET请求,都没有返回我们期望的WDB_TGT_INFO格式的结果,而是返回了长度较短的错误响应数据包,但其格式符合WDB RPC的响应格式,因此基本可以说明这类主机运行着WDB RPC服务,即运行着VxWorks系统,但版本未知。该问题值得进一步研究。
国家分布统计TOP 10
国家 | 代号 | 数量 |
---|---|---|
印度 | IN | 667 |
乌干达 | UG | 266 |
美国 | US | 228 |
巴西 | BR | 156 |
不丹 | BT | 128 |
加拿大 | CA | 73 |
纳米比亚 | NA | 60 |
卢旺达 | RW | 60 |
南非 | ZA | 59 |
韩国 | KR | 57 |
VxWorks 6.x版本统计
版本 | 数量 |
---|---|
VxWorks 6.6 | 1878 |
VxWorks 6.7 | 8 |
VxWorks 6.8 | 250 |
VxWorks 6.9 | 4 |
VxWorks 未知版本 | 15 |
芯片/集成电路板 | 数量 | 应用产品或行业 |
---|---|---|
671 | 智能电网家庭能源网关、数据集线器、无线LAN接入点、无线家庭基站、消费电子印刷以及包括工业控制和工厂自动化在内的工业应用 | |
522 | 小型办公室/家庭办公室(SOHO)、打印、 IP服务和工业控制 | |
291 | 网络、通信及工业控制 | |
271 | IP摄像头、工业机器人、无线 LAN (WLAN)接入点、网络附加存储、打印及成像、路由器 | |
205 | 互联网话音协议(VoIP)、安全与门禁控制面板、医疗保健仪器与设备 | |
Freescale Unknown processor | 88 | |
16 | 企业网络、电信传输和交换,以及3G无线基站等仅以太网或RapidIO网络应用 | |
15 | 通信、工业控制 | |
14 | VoIP | |
未知 | 14 | |
BCM53000 (MIPS74K) | 12 | 路由器 |
8 | 家用或企业级无线接入点、路由器、网关 | |
6 | 联网、电信、军事、工业 | |
6 | 网络、通信、工业控制 | |
Intel(R) Pentium4 Processor SYMMETRIC IO MPTABLE | 2 | |
2 | 数码相机、调制解调器、机顶盒、手机、GPS、打印机、传真机、网卡、交换机、存储设备 | |
2 | 路由器、PBX、LAN/WAN、打印机、扫描仪、PPC | |
2 | Ethernet通信与交换 | |
2 | 高级驾驶员辅助系统、医疗内窥镜、小型蜂窝基带、专业照相机、机器视觉、电信级以太网回传、4K2K超高解析度电视、多功能打印机 | |
/bcm1190) | 2 | VoIP、宽带接入 |
1 | 工业和嵌入式联网 | |
1 | 运载、SCADA、通信 | |
1 | SOHO路由器、网关、WLAN AP | |
1 | 家用或企业级无线接入点、路由器、网关 |
我们可以看到,将WDB RPC服务暴露于互联网中的危险性极大,但它是使用VxWorks系统的硬件设备的系统开发人员不可或缺的工具,在开发过程中需要开启它,但在编译出厂设备的VxWorks系统时一定要将其关闭。
对应漏洞见:https://www.sebug.net/vuldb/ssvid-88844(点击[阅读原文]访问)
长按右边二维码,直到识别它
以上是关于VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘的主要内容,如果未能解决你的问题,请参考以下文章
资源:开源Fuzzers工具列表 (以及其它fuzzing工具)