用免费蜜罐工具配置Modbus工控蜜罐

news2024/11/23 11:02:10

导语:本文将用DecoyMini免费蜜罐工具来配置自定义的ModbusTCP工控仿真模板,并介绍部署后的Modbus蜜罐的使用效果。

DecoyMini是一个免费的蜜罐工具,其特色是仿真能力采用与软件松耦合的仿真模板来进行管理。通过一键式导入云端仿真模板库里的模板就可以在网络里快速部署多样化的虚假服务和应用,支持仿真模板自定义功能,支持采用可视化仿真编排引擎通过界面配置即可实现对自定义的网络协议、服务或应用的仿真能力。

本文将用DecoyMini免费蜜罐工具来配置自定义的ModbusTCP工控仿真模板,并介绍部署后的Modbus蜜罐的使用效果。

1 DecoyMini工具介绍

DecoyMini•智能仿真与攻击诱捕工具是北京吉沃科技有限公司(http://www.decoyit.com)基于商业化蜜罐产品积累而推出的免费蜜罐工具。工具支持主流操作系统,安装使用简单,支持通过仿真模板实现仿真环境的快速应用和部署。通过部署虚假的服务和应用仿真环境,吸引攻击者进行攻击,在虚假环境中对攻击者行为进行抓取和存储,基于对攻击者的行为分析来实现攻击预警、威胁分析和溯源取证。

DecoyMini免费蜜罐工具集成可视化仿真编排引擎,支持通过界面配置来定义对网络请求数据的解析方式,基于对请求参数的判断来响应对应的数据,实现对服务和应用的仿真能力。

对网络请求数据的处理支持多种方式,包括:

1、直接读取网络请求数据:支持直接读取指定长度,也支持按指定数据结尾来进行读取,对读取的数据可以直接存储到参数里,也可以将数据缓存,以便进行二次解析。

2、对缓存数据的解析:支持通过字节偏移、位偏移等方式从缓存数据里提取指定范围的数据。

对提取的数据支持以指定的类型存储到参数里,包括:

● 字符串

● 字节数组

● 整数(大端)

● 整数(小端)

在请求响应部分,引擎根据请求参数的综合条件判断,来决定给请求方的响应数据,支持的响应数据类型包括:

● 字符串

● 二进制

● 指定的配置文件

● 指定的数据文件

同时支持响应后关闭连接、跳转到指定参数来继续执行等操作。

在应答的同时,可以按需开启日志记录功能,记录的内容包括操作用户、操作类型、操作结果、日志描述、日志级别、请求参数等,以实现对攻击行为的详细记录。

2 Modbus介绍

Modbus是由Modicon(现在的https://baike.baidu.com/item/%E6%96%BD%E8%80%90%E5%BE%B7%E7%94%B5%E6%B0%94Schneider Electric)公司于1979年开发,已经成为工业领域通信协议的业界标准,现在是工业电子设备之间常用的连接方式,已经是工业领域全球最流行的协议。

Modbus协议是一种应用层报文传输协议,用Master/Slave方式通信,在1996年施耐德公司推出基于以太网TCP/IP的ModbusTCP协议后,Modbus共支持ASCII、RTU、TCP三种报文类型,物理层接口支持RS232、RS422、RS485和以太网等接口。

2.1 协议格式介绍

ModbusTCP的数据帧可分为两部分:MBAP+PDU。

2.1.1 报文头MBAP

MBAP为报文头,长度为7字节,组成如下:
在这里插入图片描述
各属性含义解释如下:

2.1.2 帧结构PDU

PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。

功能码定义

Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。
在这里插入图片描述
根据对象的不同,Modbus的功能码定义如下:
在这里插入图片描述
功能码更详细的说明如下:
在这里插入图片描述
错误代码表说明如下:
在这里插入图片描述
更详细的协议格式定义,请读者查阅Modbus协议规范。

3 仿真模板配置

了解ModbusTCP协议后,开始Modbus仿真模板配置。安装好DecoyMini工具,登录进管理中心。
在这里插入图片描述
进入仿真模板,用TCP自定义引擎新建“ Modbus TCP 协议”模板,设置基本的模板参数,开始结合Modbus协议格式来配置模板对应的解析规则。

3.1 请求数据解析

DecoyMini会按照顺序从第一条规则往后执行解析规则。依次配置参数解析规则来解析事务处理标识、协议标识、长度、单元标识符等参数。

3.1.1 事务处理标识

事务处理标识为报文头前2个字节,定义名为number的参数直接从网络请求数据中读取2个字节的数据即可。在响应数据里可以通过{{number}}形式来对事务处理标识值进行引用。

配置的规则如下:
在这里插入图片描述
3.1.2 协议标识

协议标识为事务处理标识随后2个字节,定义名为protocol的参数继续从网络请求数据中读取2个字节的数据。读取的数据将会存放在protocol参数中,在响应数据里可以通过{{protocol}}形式来引用对应的数据。

配置的规则如下:
在这里插入图片描述
3.1.3 数据长度

数据长度为协议标识后2个字节,定义名为length的参数继续从网络请求数据中读取2个字节的数据按整数(大端)格式存储到参数中。在响应数据里可以通过{{length}}形式来引用数据长度对应的值。

配置的规则如下:
在这里插入图片描述
3.1.4 读取数据区域

数据长度后为具体的数据区域,需要根据数据长度值来读取对应长度的数据,定义名为readdata的参数从网络请求数据中读取{{length}}个字节的数据存储到参数中;由于随后还需要对readdata数据进行进一步解析,因此需要为此参数启用缓存数据功能。

配置的规则如下:
在这里插入图片描述
3.1.5 单元标识符

单元标识符为数据区域的第一个字节,因此,需要从已缓存的readdata参数里去进行解析。定义名为devno的参数,设置解析数据源为缓存数据,指定缓存数据名称,设置为通过字节偏移(0:1)来获取数据。

配置的规则如下:
在这里插入图片描述
3.1.6 功能码

功能码为PDU首部,在单元标识符后面,从已缓存的readdata参数里去进行解析。定义名为function的参数,设置解析数据源为缓存数据,指定缓存数据名称,设置为通过字节偏移(1:2)来获取功能码对应数据。

配置的规则如下:
在这里插入图片描述
3.1.7 数据

数据为PDU第二部分,从已缓存的readdata参数里去进行解析。定义名为data的参数,设置解析数据源为缓存数据,指定缓存数据名称,设置为通过字节偏移(2:{{length}})来获取请求数据。

配置的规则如下:
在这里插入图片描述
最终配置完成的解析参数完整列表如下:
在这里插入图片描述
3.2 请求响应配置

3.2.1 协议格式检查

需要先检查是否为有效的Modbus请求,根据协议标识符以及实际读取的数据长度是否和报文头里定义的长度一致来判断。如果不满足条件,则为非Modbus协议连接,直接关闭TCP连接。

判断协议标识符是否有效规则定义如下:
在这里插入图片描述
判断数据长度是否有效规则定义如下:
在这里插入图片描述
3.2.2 读线圈

在设备中读线圈状态(功能码为0x01)

● 请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L

● 响应:MBAP 功能码 数据长度 数据

本示例直接返回设备故障的异常功能码(81)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.3 写单个线圈

写设备中的一个输出(功能码为0x05)

● 请求:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L

● 响应:MBAP 功能码 输出地址H 输出地址L 输出值H 输出值L

本示例直接返回设备故障的异常功能码(85)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.4 写多个线圈

写设备中的一个线圈序列的值(功能码为0x0F)

● 请求:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L 字节长度 输出值H 输出值L

● 响应:MBAP 功能码 起始地址H 起始地址L 输出数量H 输出数量L

本示例直接返回设备故障的异常功能码(95)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.5 读离散量输入

从设备中读多个连续的离散量输入状态(功能码为0x02)

● 请求:MBAP 功能码 起始地址H 起始地址L 数量H 数量L

● 响应:MBAP 功能码 数据长度 数据

本示例直接返回设备故障的异常功能码(82)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.6 读输入寄存器

从设备中读多个连续输入寄存器(功能码为0x04)

● 请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L

● 响应:MBAP 功能码 数据长度 寄存器数据

本示例直接返回设备故障的异常功能码(84)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.7 读保持寄存器

从设备中读保持寄存器连续块的内容(功能码为0x03)

● 请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L

● 响应:MBAP 功能码 数据长度 寄存器数据

本示例直接返回设备故障的异常功能码(83)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.8 写单个保持寄存器

在设备中写一个保持寄存器(功能码为0x06)

● 请求:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L

● 响应:MBAP 功能码 寄存器地址H 寄存器地址L 寄存器值H 寄存器值L

本示例直接返回设备故障的异常功能码(86)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.9 写多个保持寄存器

在设备中写连续寄存器块(功能码为0x10)

● 请求:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度 寄存器值

● 响应:MBAP 功能码 起始地址H 起始地址L 寄存器数量H 寄存器数量L

本示例直接返回设备故障的异常功能码(96)和错误码(04),读者可以按需修改为所需的返回数据。返回数据后跳转到第一个参数,重新接收新的请求。

对应的响应数据配置规则如下:
在这里插入图片描述
3.2.10 未知操作处理

如果功能码非上述值,则为不支持的功能码请求操作,直接关闭链接。
在这里插入图片描述

4 蜜罐部署效果

在DecoyMini上部署配置好的Modbus仿真模板,用Modbus工具来进行连接测试,设置正确的IP和端口后可以正常连接。
在这里插入图片描述
执行各种功能请求,也可以按预期进行正确响应。
在这里插入图片描述
由此可见,通过DecoyMini的仿真模板经过简单的配置就实现了对Modbus工控协议、设备的仿真。以上配置的模板可以到http://bbs.decoyit.com/template.php下载,此模板仅配置了Modbus的基本功能,读者可以根据自己的需求去改进以支持更完善的功能、仿真模拟不同的工控设备,实现更完备、多样化的高仿真的工控设备攻击诱捕环境。

DecoyMini免费蜜罐工具的仿真模板功能具有很强的仿真自定义能力,后继将为大家继续分享基于此免费工具来实现对更多协议、服务和应用的仿真自定义方法,敬请期待!大家感兴趣的可以下载工具安装体验,工具免费下载地址:https://github.com/decoymini

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】多线程 --- 线程同步与互斥+生产消费模型

人生总是那么痛苦吗?还是只有小时候是这样? —总是如此 文章目录 一、线程互斥1.多线程共享资源访问的不安全问题2.提出解决方案:加锁(局部和静态锁的两种初始化/销毁方案)2.1 对于锁的初步理解和实现2.2 局部和全局锁…

计算机中丢失msvcr120.dll怎么办,电脑找不到msvcr120.dll怎么办

电脑提示msvcr120.dll丢失是一个常见的问题,这个问题通常会在你尝试打开某些程序或游戏时出现。这个问题的原因是因为你的电脑缺少了一个名为msvcr120.dll的文件,这个文件是微软Visual C Redistrle for Visualv 2013的一部分。如果你遇到了这个问题&…

算法设计 || 第5题:田忌赛马-杭州电子科技大学(贪心算法)

目录 (一)杭电原题 (二)Please speak Chinese: (三)手写草稿理解思路核心算法 第一款代码: 第二款代码: (一)杭电原题 Tian Ji -- The Horse Racing Pro…

【分治法】

目录 知识框架No.1 分治法基本思想No.2 合并排序No.3 快速排序一、基本思想三、效率分析四、快速排序不稳定例子 No.4 二叉树遍历及其相关特性一、基本概念二、中序遍历三、前序遍历四、二叉树的高度计算(高度不是深度) 知识框架 No.1 分治法基本思想 将规模为N的问题分解为k…

Spring MVC:常用参数(注解)的使用和参数绑定的验证

Spring MVC:常用参数(注解)的使用和参数绑定的验证 一、学习资源二、基础源码三、实验结果3.1 Spring MVC常用参数Controller和RequestMappingRequestMappingRequestParamPathVariableCookie ValueRequestHeader 3.2 Spring MVC参数绑定3.2.1…

一路对标顶级产品,奇遇XR为何仍不见起色?

临近6月,再度遇冷的XR行业,又让很多人充满期待。外界普遍认为,基于苹果酝酿多年的MR头显产品,将于6月举行的WWDC 2023全球开发者大会正式亮相,XR行业或将迎来“iPhone时刻”。 在一派期待中,一家国内XR企业…

代码审计之PHP基础铺垫

目录 1、标记 2、注释 3、输出语句 4、关键字 5、常量的定义与使用 6、预定义常量 7、变量的赋值&#xff08;传参赋值与引用赋值&#xff09; 8、可变变量 9、双引号和单引号的区别 10、heredoc结构和nowdoc结构 11、其他符号 1、标记 <?php 和 ?> 是PHP标…

第十一届蓝桥杯青少组省赛Python中/高级组编程题真题,包含答案解析

第十一届蓝桥杯青少组省赛Python中/高级组编程题真题 编程实现 第一题&#xff1a; 输入一个字符串&#xff0c;如果该字符串以er、Iy或者ing后缀结尾的&#xff0c;则删除该字符串后缀&#xff0c;并输出删除后的字符串&#xff0c;否者将原字符串输出。 输入描述 输入一个…

零知识证明:应用和具体用例

零知识证明&#xff08;Zero-Knowledge Proofs&#xff0c;ZKPs&#xff09;是应用密码学中令人兴奋的突破&#xff0c;将在各个行业中解锁新的用例&#xff0c;从 Web3 到供应链再到物联网。通过在不揭示信息的情况下验证其真实性&#xff0c;ZKPs 可以增强数字系统的隐私、安…

【Unity-UGUI控件全面解析】| Slider 滑动条组件详解

🎬【Unity-UGUI控件全面解析】| Slider 滑动条组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 充当 进度条控制灯光亮度4.2 模拟 血条 使用💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CS…

【Spring全家桶系列】面向切面编程AOP

⭐️前面的话⭐️ 本文已经收录到《Spring框架全家桶系列》专栏&#xff0c;本文将介绍面向切面编程的思想和相关概念&#xff0c;附加一个小案例。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&a…

基于Kubernetes集群构建大中型企业CICD应用平台(2)--code阶段工具gitlab安装

这里我们为gitlab服务器准备一台虚拟机&#xff1a;192.168.19.6-gitlab服务器 在code阶段&#xff0c;我们需要将不同版本的代码存储到一个仓库中&#xff0c;常见的版本控制工具就是SVN或者Git&#xff0c;这里我们采用Git作为版本控制工具&#xff0c;GitLab作为远程仓库。…

django常用命令/vue-cli图形化界面创建方式/vueo-cli命令行创建方式/若依框架/elementui

django常用命令 django-admin.exe startproject mysite python .\manage.py startapp app01 python manage.py makemigrations python manage.py migrate python manage.py runserver python manage.py runserver 0.0.0.0:8000 from django.shortcuts import render,Http…

【Linux学习】多线程——同步 | 条件变量 | 基于阻塞队列的生产者消费者模型

多线程——同步 | 条件变量 | 基于阻塞队列的生成者消费者模型 &#x1f3d3;生产者消费者模型&#x1f3f8;同步概念&#x1f3f8;生产者消费者模型的特点 &#x1f3d3;同步的应用&#x1f3f8;条件变量&#x1f3f8;条件变量接口 &#x1f3d3;基于阻塞队列的生产者消费者模…

文心一言 VS chatgpt (16)-- 算法导论4.1 1~2题

一、当A的所有元素均为负数时&#xff0c;FIND-MAXIMUM-SUBARRAY返回什么? 文心一言&#xff1a; 当A的所有元素均为负数时&#xff0c;FIND-MAXIMUM-SUBARRAY返回-1。 这是因为在二进制中&#xff0c;当所有元素均为负数时&#xff0c;A的每个元素都对应一个负数&#xff…

基于Kubernetes集群构建大中型企业CICD应用平台(4)--Operate阶段工具

还是在192.168.19.7-CentOS-7.6-jenkins-new这台服务器上进行操作 部署过程&#xff0c;会采用Docker进行部署&#xff0c;暂时只安装Docker即可&#xff0c;后续还需安装Kubenetes 4.1 Docker安装 准备测试环境&生产环境 下载Docker依赖组件 # yum -y install yum-uti…

vue+express+mysql做一个简单前后端交互,从数据库中读取数据渲染到页面

1.下载上次的包 npm I &#xff0c;同时下载新的包 axios 2.打开数据库服务器&#xff0c;同时使用新建数据库一样&#xff0c;数据包名 3.新建一个项目 4.全局注册axios 5.新建一个server文件夹&#xff08;里面在建一个index.js的主文件&#xff09;用来放我们后端写的东西 …

设计模式——单一职责模式之桥模式

文章目录 前言一、“单一职责” 模式二、Bridge 桥模式1、动机2、模式定义3、伪代码示例4、结构 总结 前言 一、“单一职责” 模式 在软件组件的设计中&#xff0c;如果责任划分的不清晰&#xff0c;使用继承得到的结果往往是随着需求的变化&#xff0c;子类急剧膨胀&#xff…

【C++STL】map/set源码封装简单分析

文章目录 一. 问题的抛出二. 红黑树的实现三. map/set实现四. 分析五. KeyOfValue仿函数结束语 一. 问题的抛出 我们知道C的STL中map和set的底层都是红黑树。 但是仔细思考一下&#xff0c;map是存储键值对&#xff0c;也就是Key_Value模型 而set是Key的模型 那么STL中的红黑树…

apisdk-starter自动装配的思路与应用

apisdk-starter整体思路 首先定义开发者定义的开放接口声明为原始类&#xff0c;javassist生成的类是增强类。 使用springboot的EnableAutoConfiguration和Import触发Spring扫描组件扫描原始类&#xff0c;得到所有BeanDefinition拓展FactoryBean&#xff0c;构造函数的参数为…