工控网络协议模糊测试:用peach对modbus协议进行模糊测试
0x00 背景
本人第一次在FB发帖,进入工控安全行业时间不算很长,可能对模糊测试见解出现偏差,请见谅。
在接触工控安全这一段时间内,对于挖掘工控设备的漏洞,必须对工控各种协议有一定的了解,然后对工控协议,首先具备的对网络知识以及工控行业流程有所熟悉,其次就是对工控协议进行模糊测试。
0x01 模糊测试介绍
下面介绍一下模糊测试概念以及针对网络协议模糊测试的一些框架。
模糊测试就是通过非预期的输入并监视异常结果来发现软件故障的方法。(相对来说比较抽象,个人理解怕有偏差就不在此所描述了)。
针对模糊测试,目前已经开发了一些框架,这些框架统称为模糊器。常见的模糊测试器有sulley(在FB上面已经有人总结过了,在此不再说明),Peach,SIPIKE(用在UNIX下)等。
0x02 工控协议安全分析
工业控制网络协议模糊测试的目的是测试工业控制网络协议的实现的健壮性,它是采用构造畸形数据包,将畸形数据包发送给被测工控目标,从而测试被测工业控制网络协议的安全性。
下面是具体流程图:
流程图具体工作原理:
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配置文件的简单步骤,里面涉及的属性很多,下面发出给出一个测试案例:
这是关于peach针对http协议模糊测试,具体步骤如图所标。具体属性不做介绍(详情见下面英文文档进行学习)。
这是peach框架模糊测试的英文文档下载地址:链接: http://pan.baidu.com/s/1gdGyJZl 密码: ibnc
0x04 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的一个使用。
0x05 总结
模糊测试技术是发现工业控制网络协议未知漏洞和隐患的重要技术。针对工业控制网络协议,在这里介绍了相关的工业控制协议模糊测试挖掘漏洞的流程图,以及对peach框架简单的介绍,还有对modbus协议如何组包以及如何编写peach pit文件对工业控制协议进行模糊测试实例。第一次发帖,可能讲的不是很好,如有新手想学习,可以给我留言,大神勿喷。
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
相关文章:
工控网络协议模糊测试:用peach对modbus协议进行模糊测试
0x00 背景 本人第一次在FB发帖,进入工控安全行业时间不算很长,可能对模糊测试见解出现偏差,请见谅。 在接触工控安全这一段时间内,对于挖掘工控设备的漏洞,必须对工控各种协议有一定的了解,然后对工控协议…...
python+opencv+机器学习车牌识别 计算机竞赛
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于机器学习的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:3分 该项目较为新颖,适…...
魔域服务端数据库说明
Magic.DB MagID: 魔法ID Mag:Magic MagName: 魔法名称 EffectType: 效果类型 Effect: 效果 Spell: 魔力(魔法值) Power: 能力,力量 MaxPower: 最大能力 DefSpell: 变化后的魔力Def:deformation DefPower: 变化后能力 DefMaxPower:…...
笔记本无线网卡MAC一直改动
今天在网管处把我无线网卡的MAC地址添加后,回来链接无线网却一直显示网络链接失败,以为是自己的驱动问题,去官网下载了最新的驱动结果依然无法链接。之前在家或者公共场合链接WiFi从来没有出现过类似情况。 百思不得其解之际发现自己的无线网…...
【Tomcat】Apache发布两个新版本Tomcat修复多个Bug
Apache 官网发布了两个最新的 Tomcat 版本包,分别是:8.5.94、9.0.81 这两个最新版本修复了多个漏洞,统计信息如下表所示。有关漏洞的详细信息,请查阅官方相关文档(见:参考)。 严重等级漏洞说明…...
Empowering Low-Light Image Enhancer through Customized Learnable Priors 论文阅读笔记
中科大、西安交大、南开大学发表在ICCV2023的论文,作者里有李重仪老师和中科大的Jie Huang(ECCV2022的FEC CVPR2022的ENC和CVPR2023的ERL的一作)喔,看来可能是和Jie Huang同一个课题组的,而且同样代码是开源的…...
LeetCode 2652. 倍数求和【数学,容斥原理】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
ansible-playbook剧本
一,playbook组成: (1)Tasks:任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 (2)Variables:变量 (3)Templates&…...
竞赛选题 深度学习LSTM新冠数据预测
文章目录 0 前言1 课题简介2 预测算法2.1 Logistic回归模型2.2 基于动力学SEIR模型改进的SEITR模型2.3 LSTM神经网络模型 3 预测效果3.1 Logistic回归模型3.2 SEITR模型3.3 LSTM神经网络模型 4 结论5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 …...
机械设计师应该在工作中培养哪些良好习惯?
图纸规范 1、一定要按照制图标准设计图纸!图纸上任何一条直线(无论是点划线、粗实线、细实线等等)、数值、公差、图标等,都必须有理有据,不能想当然。图纸是产品生产的基础,无论是生产、加工、装配&#x…...
小程序新增功能页面
需求背景: 小程序主页面有个报名板块,我打算替换主页面报名板块菜单,迁移到我的页面里面, 替换成资讯栏目,我喜欢分享最新技术,开源课题,IT资讯,本想做成论坛的效果,由于时间问题,先替换添加板块 替换后效果: 模块功能: 添加、修改、删除、查看 文件目录:// 添…...
LeetCode每日一题——2652. Sum Multiples
文章目录 一、题目二、题解 一、题目 Given a positive integer n, find the sum of all integers in the range [1, n] inclusive that are divisible by 3, 5, or 7. Return an integer denoting the sum of all numbers in the given range satisfying the constraint. E…...
Python问答题(更新中)
1. 列表(list)和元组(tuple)有什么区别? 列表是可变的,创建后可以对其进行修改;元组是不可变的,元组一旦创建,就不能对其进行更改。列表表示的是顺序。它们是有序序列&a…...
服务器中了locked勒索病毒怎么办,勒索病毒解密,数据恢复
最近一段时间内,相信很多使用金蝶或用友的办公软件的企业,有很多都经历了locked勒索病毒的攻击,导致企业服务器被加密无法正常使用,严重影响了企业的正常工作。通过云天数据恢复中心的解密恢复发现,在今年locked勒索病…...
游游的字母串 (环形数组两点之间的位置)
题目链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 yab 输出 3 思路: 暴力枚举,全部变成对应的26个字母字符需要的操作步数,取最少的一个操作步数, 这里的操作步数࿰…...
Flink的ResourceManager详解(一)
ResourceManager 总结 一、概述 1、ResourceManager 管理 Flink 集群中的计算资源,计算资源主要来自 TaskManager 组件。 2、如果集群采用 Native【本地模式】部署,则 ResourceManager 会动态地向集群资源管理器申请 Container 并启动TaskManager&…...
Tornado 可以使用 nginx 提供负载均衡
Tornado和nginx都是网络服务器的重要组成部分,但它们在职能和使用场景上存在显著的差异。 Tornado可以独立运行,而不需要依赖nginx等其他Web服务器。这是因为Tornado本身就是一个完整的Web服务器,可以独立处理HTTP请求并返回响应数据。 ngi…...
Golang 面向对象编程 多态
基本介绍 变量(实例)具有多种形态。面向对象的第三大特征,在Go语言,多态特征是通过接口实现的(接口能够体现多态的特征)。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。 在前面的Usb接口案例,u…...
WLAN 无线案例(华为AC控制器配置模板)
实验说明: 无线用户VLAN 30 192.168.30.0/24 AP和AC用VLAN 20 192.168.20.0/24 有线网段 VLAN 10 192.168.10.0/24 步骤一:全网互通 sw1: sysname sw1 # vlan batch 10 20 30 # dhcp enable # ip pool 20 gateway-list 192.168.20.1…...
精美的早安问候语,暖心祝福,开心每一天
1、 美好的祝福,成了清晨的主题。相互问候,是一天的开始。让我们伴着不老的岁月,永远开心快乐。早晨好! 2、 心宽似海,百福皆来,世事看淡,内心安然。随缘即福,随遇而安࿰…...
嵌入式养成计划-41----C++ auto--lambda表达式--C++中的数据类型转换--C++标准模板库(STL)--list--C++文件操作
九十九、auto 99.1 概念 C11引入了自动类型推导,和Python不一样,C中的自动类型推导,需要auto关键字来引导比如 :auto a 1.2; 会被编译器自动识别为 a 为 double 类型 99.2 作用 auto修饰变量,可以自动推导变量的数…...
全局事件总线
全局事件总线 功能:可以解决所有组件之间通信传数据的问题原理:通过一个共享对象,将所有组件全部绑定到对象上,即可通过这个对象实现组件与组件之间的传递数据,而这个共享对象叫做全局事件总线。 如何分清楚谁是发送方…...
通讯网关软件026——利用CommGate X2ORACLE-U实现OPC UA数据转入ORACLE
本文介绍利用CommGate X2ORACLE-U实将OPC UA数据源中的数据转入到ORACLE数据库。CommGate X2ORACLE-U是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,将OPC UA数据源的数据写入到ORACLE数据…...
RAII与智能指针
RAII与智能指针 1.RAII1.1RAII理解1.2RAII的原理1.2.1简单的例子说明局部对象的自动销毁的特性 1.2.2 RAII 过程 2.智能指针2.1 auto_ptr2.1.1auto_ptr的使用构造函数与析构函数拷贝构造函数与赋值提领操作auto ptr其它函数 2.1.2autoptr使用的注意事项 2.2 unique_ptr2.2.1uni…...
易云维智慧工业云平台助力广西国企培育数字产业化平台,打造数字化产业生态
2022年6月6日,广西壮族自治区人民政府国有资产监督管理委员会出台了《国有企业数字化转型工作实施意见》,明确了总体要求、主要目标、重点推进国有企业数字化转型的任务和保障措施。 《意见》预计,到2025年底,广西基本实现自治区级…...
【密码学】第三章、分组密码
DES、IDEA、AES、SM4 1、分组密码定义(按照五个组成部分答) 密钥空间:属于对称加密算法kekd明密文空间:将明文划分为m比特的组,每一块依次进行加密加解密算法:由key决定一个明文到密文的可逆映射 2、发展…...
宁夏企业过等保选哪家测评机构好?选哪家堡垒机好?
最近不少宁夏小伙伴在问,宁夏企业过等保选哪家测评机构好?选哪家堡垒机好?今天我们小编就给大家来简单说说哈! 宁夏企业过等保选哪家测评机构好? 目前宁夏正规具有资质的等保测评机构只有3家,分别为中电信…...
Vue绑定style和class 对象写法
适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。 绑定 class 样式【对象写法】: .box{width: 100px;height: 100px; } .aqua{background-color: aqua; } .border{border: 20px solid red; } .radius{bor…...
使用vue-sign插件
Vue-sign是一个基于Vue.js和Canvas的签名组件,可以轻松地在Vue应用程序中实现签名板或手写签名功能。使用它可以使用户在前端网页上直接进行手写签名,实现更好的用户交互和业务需求。 使用Vue-sign可以提供以下好处: 通过Vue.js框架进行开发…...
python究竟可以用来做些什么
这里就不撰述python的一些像什么“高级语言”之类的比较常规的介绍了,还是老样子,说说一些比较常用的东西吧。 python是什么 python,一款可编程的开源软件,很多第三方库、框架也是开源的,比如强大的anaconda、sklear…...
网站平台怎么做的好处/营销策划公司靠谱吗
BAD_ACCESS 在什么情况下出现 BAD_ACCESS 报错属于内存访问错误,会导致程序崩溃,错误的原因是访问了野指针(悬挂指针)。野指针指的是本来指针指向的对象已经释放了,但指向该对象的指针没有置 nil,指针指向随机的未知的内存&#…...
广州做网站哪里好/重庆seo网络推广优化
内容:软件项目与过程管理课程内容总结 经过八周时间的学习,软件项目与过程管理课程已经逐渐接近了尾声。通过这八周的学习,我对软件项目与过程管理课程有了更深的理解。 一、关于团队项目。 团队项目是本次软件项目与过程管理课程中最重要的一…...
做网站好的书/企业网站推广外包
文章转自:https://blog.csdn.net/github_38885296/article/details/85272964 众所周知, 软件开发时遵守一个规范的设计模式非常重要, 学习行业内主流的design pattern往往能够为你节省大部分时间. 根据我2年的全栈经验, 在Web应用程序领域最流行的, 并且若干年内不…...
企业网站托管服务常用指南/百度关键词点击排名
您好,我是独立顾问(Independent Advisor)Dexter,请让我来帮助您.WSL和Windows主系统之间的文件系统是可以互相访问的。如果在WSL中访问Windows系统的文件,可在根目录下/mnt/看到对应Windows盘符字母的文件夹,通过这些文件夹即可访问Windows的文件系统。如…...
网站开发必学的技巧有哪些/新闻今天最新消息
决策边界SVM损失函数 回顾一下前面博客中提到的决策边界,在二维的平面上,决策边界即超平面是一条直线。 现在假设有N个样本点,每个样本点表示为(xi_ii, yiy_iyi),xi_ii是特征向量。为了便于理解,所以假设每个样…...
做企业网站注意/南昌seo排名外包
update() 方法 update() 方法用于更新已存在的文档。语法格式如下: db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>} )参数说明: query : update的查询条件&…...