【实战】工控网络协议模糊测试:用peach对modbus协议进行模糊测试
本文来自 熊猫(s_panda) 的投稿
0×00 背景
本人第一次在FB发帖,进入工控安全行业时间不算很长,可能对模糊测试见解出现偏差,请见谅。
在接触工控安全这一段时间内,对于挖掘工控设备的漏洞,必须对工控各种协议有一定的了解,然后对工控协议,首先具备的对网络知识以及工控行业流程有所熟悉,其次就是对工控协议进行模糊测试。
0×01 模糊测试介绍
下面介绍一下模糊测试概念以及针对网络协议模糊测试的一些框架。
模糊测试就是通过非预期的输入并监视异常结果来发现软件故障的方法。(相对来说比较抽象,个人理解怕有偏差就不在此所描述了)。
针对模糊测试,目前已经开发了一些框架,这些框架统称为模糊器。常见的模糊测试器有sulley(在FB上面已经有人总结过了,在此不再说明),Peach,SIPIKE(用在UNIX下)等。
0×02 工控协议安全分析
工业控制网络协议模糊测试的目的是测试工业控制网络协议的实现的健壮性,它是采用构造畸形数据包,将畸形数据包发送给被测工控目标,从而测试被测工业控制网络协议的安全性。
下面是具体流程图:
流程图具体工作原理:
1、根据协议控制规范或者捕获工业控制网络协议数据流来构造正常的数据包;
2、分析正常协议的字段及其重要性;
3、根据分析的协议中不同的数据类型,设计有效地变异策略。
4、设计并实现工业控制网络协议数据包发包工具;
5、设计并实现代理器及监视器;
6、采用发包工具,将畸形数据包发送给被测工控目标;
7、通过监视器探测被测工控目标异常数据记录。
0×03 peach模糊测试
在研究网络协议模糊测试时,对sulley和peach两大框架都有所研究,依我个人而言,peach相对于sulley有以下几点优势:
1、sulley目前已不再维护。
2、对sulley模糊测试编写程序,需要有一定的python语言基础。而peach是xml格式的,比较容易理解。
3、sulley配置环境相对繁琐,而peach配置环境相对简单(目前我手头有绿色版本,可以直接运行)。
4、sulley只能对网络协议进行模糊测试,而peach相对更加多样化。
上面的工业控制网络协议流程图是建立在模糊测试的基础上的,下面针对讲解一些关于peach的模糊测试的知识,对于初学模糊测试不必找资源而烦躁了。(目前peach框架的文档相对来说较少,下面讲解的是依据一些英文文档以及相关的博客总结的,如有不足之处,请指出)。
peach概述
Michael Eddington等人开发的peach是一个遵守MIT开源许可证的模糊测试框架,最初采用python编写的发布与2004年,第二版于2007年发布,最新的第三版使用C#重写了整个框架。
peach支持对文件格式、ActiveX、网络协议、API等进行Fuzz测试。
下载和安装
相对比较容易,在Window下使用peach3需要安装.net4和windbg;我用的是绿色版本。
下载地址:http://pan.baidu.com/s/1eQ6XzyE
peach基础知识
peach中最重要一部分就是peach Pit配置文件。Peach Pit文件包含以下内容:
1、General Configuration(通用配置)
2、Data Modeling(数据模型)
3、State Modeling(状态模型)
4、Agents and Monitors(代理和监视)
5、Test Configuration(测试配置)
具体编写步骤如下:
<?xml 版本,编码之类?>
<Peach 创建时间,地址,作者等等>
<Include 包含外部文件 />
<DataModel> 类型信息,关系(大小,计数,偏移)、可嵌套等<DataMode>
<StateModel>测试逻辑,状态转换</StateModel>
<Agent>监视被测目标的情况,崩溃信息等</Agent>
<Test>指定使用哪个StateModel,Agent,Publisher、Strategy、Logger等</Test>
</Peach>
这只是编写Peach Pit配置文件的简单步骤,里面涉及的属性很多,下面发出给出一个测试案例:
这是关于peach针对http协议模糊测试,具体步骤如图所标。具体属性不做介绍(详情见下面英文文档进行学习)。
这是peach框架模糊测试的英文文档下载地址:链接: http://pan.baidu.com/s/1gdGyJZl 密码: ibnc
0×04 peach模糊测试modbus工控协议
modbus是全球一个真正用于工业现场的总线协议,是公开的协议,协议报文格式比较简单。下面以modbus协议为例来讲解关于peach在工业控制协议方面的模糊测试。
modbus在TCP/IP通信数据报格式
MBAP报头字段如下:
modbus中1号功能码请求的报头格式:
由上面的报文格式可以组包为:00 01 00 00 00 06 01 01 00 00 00 01
对modbus协议可以组包之后通过peach框架编写Peach Pit配置文件:
在上图所示中,简单的描述了编写网络协议模糊测试的Pit文件。里面没有涉及到代理和监听还有调试功能(主要是工控设备目前不支持,仅我个人理解),在这里不是很懂的话,请详细了解peach的英文文档多加了解。其中的日志路径实际包含运行名字和时间戳。直到检测到一个故障信息,这些记录才会记录到磁盘空间。
下面是对01号功能码进行安全性测试过程,如图所示:
针对执行过程,通过wireshark抓包可以获取通信数据流量,如图所示:
上面的例子只是简单的运用peach框架对工控中modbus的一个使用。
0×05 总结
模糊测试技术是发现工业控制网络协议未知漏洞和隐患的重要技术。针对工业控制网络协议,在这里介绍了相关的工业控制协议模糊测试挖掘漏洞的流程图,以及对peach框架简单的介绍,还有对modbus协议如何组包以及如何编写peach pit文件对工业控制协议进行模糊测试实例。第一次发帖,可能讲的不是很好,如有新手想学习,可以给我留言,大神勿喷。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python基础之算数运算符
- 一文带你领略并发编程的内功心法
- HBase监控
- CVPR19-Deep Stacked Hierarchical Multi-patch Network for Image Deblurring
- HTTP缓存机制与Cookie
- 52. Vue使用watch监听网页的URL变化
- 如何设计一个秒杀系统
- SQL注入之dns回显注入
- 只要一行代码,实现五种 CSS 经典布局
- Flutter-引入第三方依赖包
- Hive操作——删除表(drop、truncate)
- 如何搭建redis集群 --- redis-cluster
- IO之Standard IO
- XSS原理详解
- IO之Formatted IO