工控网络协议模糊测试:用peach对modbus协议进行模糊测试

0x00 背景

本人第一次在FB发帖,进入工控安全行业时间不算很长,可能对模糊测试见解出现偏差,请见谅。

在接触工控安全这一段时间内,对于挖掘工控设备的漏洞,必须对工控各种协议有一定的了解,然后对工控协议,首先具备的对网络知识以及工控行业流程有所熟悉,其次就是对工控协议进行模糊测试。

0x01 模糊测试介绍

下面介绍一下模糊测试概念以及针对网络协议模糊测试的一些框架。

模糊测试就是通过非预期的输入并监视异常结果来发现软件故障的方法。(相对来说比较抽象,个人理解怕有偏差就不在此所描述了)。

针对模糊测试,目前已经开发了一些框架,这些框架统称为模糊器。常见的模糊测试器有sulley(在FB上面已经有人总结过了,在此不再说明),Peach,SIPIKE(用在UNIX下)等。

0x02 工控协议安全分析

工业控制网络协议模糊测试的目的是测试工业控制网络协议的实现的健壮性,它是采用构造畸形数据包,将畸形数据包发送给被测工控目标,从而测试被测工业控制网络协议的安全性。

下面是具体流程图:

14491986222970.png!small

流程图具体工作原理:

1、根据协议控制规范或者捕获工业控制网络协议数据流来构造正常的数据包;2、分析正常协议的字段及其重要性;3、根据分析的协议中不同的数据类型,设计有效地变异策略。4、设计并实现工业控制网络协议数据包发包工具;5、设计并实现代理器及监视器;6、采用发包工具,将畸形数据包发送给被测工控目标;7、通过监视器探测被测工控目标异常数据记录。

0x03 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配置文件的简单步骤,里面涉及的属性很多,下面发出给出一个测试案例:

14492045975574.png!small

这是关于peach针对http协议模糊测试,具体步骤如图所标。具体属性不做介绍(详情见下面英文文档进行学习)。

这是peach框架模糊测试的英文文档下载地址:链接: http://pan.baidu.com/s/1gdGyJZl 密码: ibnc

0x04 peach模糊测试modbus工控协议

modbus是全球一个真正用于工业现场的总线协议,是公开的协议,协议报文格式比较简单。下面以modbus协议为例来讲解关于peach在工业控制协议方面的模糊测试。

modbus在TCP/IP通信数据报格式

1449215555408.png!small

MBAP报头字段如下:

14492156822072.png!small

modbus中1号功能码请求的报头格式:

14492158083096.png!small

由上面的报文格式可以组包为:00 01 00 00 00 06 01 01 00 00 00 01

对modbus协议可以组包之后通过peach框架编写Peach Pit配置文件:

14492151422075.png!small

在上图所示中,简单的描述了编写网络协议模糊测试的Pit文件。里面没有涉及到代理和监听还有调试功能(主要是工控设备目前不支持,仅我个人理解),在这里不是很懂的话,请详细了解peach的英文文档多加了解。其中的日志路径实际包含运行名字和时间戳。直到检测到一个故障信息,这些记录才会记录到磁盘空间。

下面是对01号功能码进行安全性测试过程,如图所示:

14492168971469.png!small

针对执行过程,通过wireshark抓包可以获取通信数据流量,如图所示:

14492169733654.png!small

上面的例子只是简单的运用peach框架对工控中modbus的一个使用。

0x05 总结

模糊测试技术是发现工业控制网络协议未知漏洞和隐患的重要技术。针对工业控制网络协议,在这里介绍了相关的工业控制协议模糊测试挖掘漏洞的流程图,以及对peach框架简单的介绍,还有对modbus协议如何组包以及如何编写peach pit文件对工业控制协议进行模糊测试实例。第一次发帖,可能讲的不是很好,如有新手想学习,可以给我留言,大神勿喷。

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/160578.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt开发之路--模块化设计.pri文件

Qt开发之路--模块化设计.pri文件 QT pro文件和pri文件的区别Chapter1 Qt开发之路--模块化设计.pri文件一&#xff1a;.pri文件简介二&#xff1a;通过.pri模块化设计三&#xff1a;结尾 Chapter2 Qt开发大型项目时&#xff0c;通过.pri文件将众多文件按功能模块分类显示Qt中多p…

概率神经网络分类问题程序

欢迎关注“电击小子程高兴的MATLAB小屋” %% 概率神经网络 %% 解决分类问题 clear all; close all; P[1:8]; Tc[2 3 1 2 3 2 1 1]; Tind2vec(Tc) %数据类型的转换 netnewpnn(P,T); Ysim(net,P); Ycvec2ind(Y) %转换回来

7天狂揽 1.3w star 的 MetaGPT,他们的目标让软件公司为之一惊

在 AI 产品爆炸的今天&#xff0c;拥有各种本领的 AI 产品层出不穷&#xff0c;但 MetaGPT 的出现仍然显的格外耀眼&#xff0c;其可以实现只输入单一 prompt&#xff0c;就可以输出需求分析、需求文档、技术架构、最终代码等等产物&#xff0c;这相当于一个开发团队的输出成果…

Linux:【Kafka四】集群介绍与单机搭建

目录 环境简介 一、搭建kafka集群 1.1、复制出两个kafka的配置文件 1.2、修改配置文件中的如下属性 二、启动kafka集群 三、可校验kafka三个节点是否均启动成功 四、查看集群中主题的分区和副本 4.1、新建一个包含了分区和副本的主题 4.2、查看该主题的详细信息 五、…

Android查看签名信息系列 · 使用逆向分析工具JadxGUI获取签名

前言 Android查看签名信息系列之使用逆向分析工具JadxGUI获取签名&#xff0c;通过这种方式&#xff0c;可以获取到的签名信息包括&#xff1a;MD5、SHA1、SHA-256、公钥(模数)等信息 实现方法 1、进入JadxGUI目录下的lib文件夹内&#xff0c;找到jadx-gui-1.4.7.jar文件 2、…

计算机网络第2章-HTTP和Web协议(2)

Web和HTTP 一个新型应用即万维网&#xff08;World Wide Web&#xff09;Web。 HTTP概况 Web的应用层协议是超文本传输协议&#xff08;HTTP&#xff09;&#xff0c;它是Web的核心。 HTTP由两个程序实现&#xff1a;一个用户程序和一个服务器程序。 Web页面&#xff08;W…

VSCode 调试 u-boot

文章目录 VSCode 调试 u-boot调试配置启动 u-boot 脚本调试界面重定向之后继续调试参考 VSCode 调试 u-boot 调试配置 参考 qemu基础篇——VSCode 配置 GDB 调试 要想调试 u-boot 只需要再添加一个 u-boot 的配置即可 {"version": "0.2.0","conf…

如果你有一次自驾游的机会,你会如何准备?

常常想来一次说走就走的自驾游&#xff0c;但是光是想想就觉得麻烦的事情好多&#xff1a;漫长的公路缺少娱乐方式、偏僻拗口的景点地名难以导航、不熟悉的城市和道路容易违章…… 也因为如此&#xff0c;让我发现了HUAWEI HiCar这个驾驶人的宝藏&#xff01; 用HUAWEI HiCar…

科研上新 | 第2期:可驱动3D肖像生成;阅读文本密集图像的大模型;文本控制音色;基于大模型的推荐智能体

编者按&#xff1a;欢迎阅读“科研上新”栏目&#xff01;“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 …

16 个 Linux 最佳 Markdown 编辑器(2)

对于初学者来说&#xff0c;Markdown 是一个用 Perl 编写的简单且轻量级的工具&#xff0c;它使用户能够编写纯文本格式并将其转换为有效的 HTML&#xff08;或 XHTML&#xff09;。它是一种易于阅读、易于编写的纯文本语言&#xff0c;也是一种用于文本到 HTML 转换的软件工具…

操作系统四大特征

OS四大特征 1.OS的并发性&#xff08;同一时间间隔内执行和调度多个程序的能力&#xff09; 宏观上&#xff0c;处理机同时执行多道程序 微观上&#xff0c;处理机在多道程序间高速切换(分时交替执行)&#xff0c;微观上并非是同时执行的。 关注单个处理机同一时间段内处理任…

IOS课程笔记[4-5] 计算器实现与更换主题 的使用

计算 控件介绍 文本输入 设置键盘格式为NumberPad字符串与数字转换方法 NSInteger num2 [str2 integerValue]; 弹窗控件 UIAlertController 新版本弹窗 UIAlertController *alert [UIAlertController alertControllerWithTitle:"error" message:"输入有…

数据结构-----红黑树的插入

目录 前言 红黑树的储存结构 一、节点旋转操作 左旋&#xff08;Left Rotation&#xff09; 右旋&#xff08;Right Rotation&#xff09; 二、插入节点 1.插入的是空树 2.插入节点的key重新重复 3.插入节点的父节点是黑色 4.插入节点的父节点是红色 4.1父节点是祖父…

软考-网络安全体系与网络安全模型

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 by 2023年10月 网络安全体系相关安全模型 BLP机密性模型 BLP&#xff08;Biba-格雷泽-麦克拉伦&#x…

嵌入式平台的电源总结

本文引注: https://mp.weixin.qq.com/s/PuSxHDFbJjjHEReukLSvyg 1.AC的定义 Alternating Current&#xff08;交流&#xff09;的首字母缩写。AC是大小和极性&#xff08;方向&#xff09;随时间呈周期性变化的电流。电流极性在1秒内的变化次数被称为频率&#xff0c;以Hz为单位…

Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)

查询Sql Server Database中的唯一约束 with UniqueBasic as (SELECTtab.name AS TableName, -- 表名称idx.name AS UniqueName, -- 唯一约束的名称col.name AS UniqueFieldName -- 唯一约束的表字段FROMsys.indexes idxJOIN sys.index_columns idxColON (idx.object_id idxCo…

【分享Python代码】图片转化为素描画

哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 代码生成效果图 原图&#xff1a; 生成图&#xff1a; 原图&#xff1a; 生成图&#xff1a; 准备工作 Python编程首先需要安装环境&#xff0c;下面是详细步骤&#xff1a; 会的小伙伴可自行跳过&#xff0c;代码在最后 1…

spring boot RabbitMq基础教程

RabbitMq 由于RabbitMQ采用了AMQP协议&#xff0c;因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息&#xff0c;都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不同语言的客户端。 但是&#xff0c;RabbitMQ官方提供的Java客户端编码相对复杂&#xff0c;一般…

idea使用Spring Initializer创建springboot项目的坑【保姆级教学】

项目场景&#xff1a; 提示&#xff1a;这里先简述项目创建后遇到的问题和解决方案&#xff1a; idea 使用 Spring Initializer 创建springboot项目后&#xff0c; 有以下问题&#xff1a; ① 右键没有Run ② 右键New新建文件发现无Java Class选项 然后解决掉 ①② 问题后出…

总结:JavaEE的Servlet中HttpServletRequest请求对象调用各种API方法结果示例

总结&#xff1a;JavaEE的Servlet中HttpServletRequest请求对象调用各种API方法结果示例 一方法调用顺序是按照英文字母顺序从A-Z二该示例可以用作servlet中request的API参考&#xff0c;从而知道该如何获取哪些路径参数等等三Servlet的API版本5.0.0、JSP的API版本&#xff1a;…