5.Peach小试【工业控制系列】
介绍
本节将会进行学习Peach Fuzz
的脚本文件编写,以达到针对设备进行的Fuzz
测试。
Peach Fuzz使用
首先通过Wireshark
对Modbus
协议的报文进行提取,选择一条流量数据进行报文提取,提取方式为:选择 Modbus/TCP
右键选择复制一条Hex
流。
脚本编写
Peach
应用的脚本文件为XML
,也遵循一定的格式Peach
解析方法,本次试用是针对Modbus
协议中的04功能码
进行测试 , 测试的数据包通讯数据为 :340000000006010100000064
首先进行编写XML
文件的头信息与Peach
相关信息。
<?xml version="1.0" encoding="utf-8"?>
<Peach xmlns="http://peachfuzzer.com/2012/Peach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://peachfuzzer.com/2012/Peach ../peach.xsd">
</Peach>
对要进行发送的数据进行定义。因为获取到的数据为:340000000006010100000064
。为了方便查看这已经写入在备注中了。
其中标签部分需要进行说明的就是带有mutable
函数进行说明带有mutable
函数的均调整为false
;默认为不填写为true
其实这里只是默认选择了关于Modbus
协议中固定的协议帧部分,进行针对特定value
部分进行循环,除此种方法外Peach
还提供:随机、顺序循环两种方法。
1、General Configuration(通用配置)
2、Data Modeling(数据模型)
3、State Modeling(状态模型)
4、Agents and Monitors(代理和监视)
5、Test Configuration(测试配置)
<!--生成发送数据-->
<DataModel name="send_data">
<Block name="mod">
<!-- Modbus生成数据 34 00 00 00 00 06 01 01 00 00 00 64-->
<Number name="01" size="16" value="34 00" valueType="hex" signed="false" mutable="false" />
<Number name="02" size="16" value="00 00" valueType="hex" signed="false" mutable="false" />
<Number name="03" size="16" value="00 06" valueType="hex" signed="false" mutable="false" />
<Number name="04" size="16" value="01 01" valueType="hex" signed="false" mutable="false" />
<Number name="05" size="16" value="00 00" valueType="hex" signed="false" mutable="false" />
<Number name="06" size="16" value="00 64" valueType="hex" signed="false" mutable="false" />
</Block>
</DataModel>
定义相关发送函数中的信息,确定发送函数中引用的DataModel
为刚才设置的name
。
<!--发送函数-->
<StateModel name="TheState" initialState="initialState">
<State name="initialState">
<Action type="output">
<DataModel ref="send_data" />
</Action>
</State>
</StateModel>
最后设置要进行发送的端口
与IP
地址;class
为设置的连接方式,因为Modbus
链接方式为TCP
,按照Peach
编写方式为:tcp.TCP
<!--设置发送IP与端口-->
<Test name="Default">
<StateModel ref="TheState" />
<Publisher class="tcp.Tcp">
<Param name="Host" value="192.168.43.245"/>
<Param name="Port" value="502"/>
</Publisher>
</Test>
编写完成后的XML
文件为:
<?xml version="1.0" encoding="utf-8"?>
<Peach xmlns="http://peachfuzzer.com/2012/Peach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://peachfuzzer.com/2012/Peach ../peach.xsd">
<!--生成发送数据-->
<DataModel name="send_data">
<Block name="mod">
<!-- Modbus生成数据 34 00 00 00 00 06 01 01 00 00 00 64-->
<Number name="01" size="16" value="34 00" valueType="hex" signed="false" mutable="false" />
<Number name="02" size="16" value="00 00" valueType="hex" signed="false" mutable="false" />
<Number name="03" size="16" value="00 06" valueType="hex" signed="false" mutable="false" />
<Number name="04" size="16" value="01 01" valueType="hex" signed="false" mutable="false" />
<Number name="05" size="16" value="00 00" valueType="hex" signed="false" mutable="false" />
<Number name="06" size="16" value="00 64" valueType="hex" signed="false" mutable="false" />
</Block>
</DataModel>
<!--发送函数-->
<StateModel name="TheState" initialState="initialState">
<State name="initialState">
<Action type="output">
<DataModel ref="send_data" />
</Action>
</State>
</StateModel>
<!--设置发送IP与端口-->
<Test name="Default">
<StateModel ref="TheState" />
<Publisher class="tcp.Tcp">
<Param name="Host" value="192.168.43.245"/>
<Param name="Port" value="502"/>
</Publisher>
</Test>
</Peach>
运行测试
运行命令 .\peach.exe XML 文件
运行编写完成的fuzz
脚本。在Wireshark
中已经抓取到了针对Modbus
协议模糊测试的数据包,数据包都是针对于04功能码
进行循环与增加数据包长度的测试。
此危害会导致
1.设备崩溃:不合法的长度可能导致目标设备的处理逻辑出现问题,导致设备崩溃或重启。
2.安全漏洞:如果设备不正确地处理异常长度的请求,这可能暴露安全漏洞,比如缓冲区溢出,可被攻击者利用。
3.服务中断:非法的请求可能导致服务暂时中断,影响正常运行。
4.系统资源耗尽:处理大量异常请求可能导致系统资源(如内存、CPU)耗尽。