7.Peach 监听模块【工业控制系列】
前言
前面讲解的课程主要针对Modbus协议的攻击进行Fuzz测试。但是由于是对设备进行的测试过程中我们无法实时的监测设备状态,本章中我们将学习引入监听模块, 对被测试设备进行主动监听,更好的确定设备存在的异常。
监听模块
Peach中默认可以进行socket、ping监听两种状态。
这里我们使用Ping监听设备状态,在代码中新建agent,Monitor类型为Ping;设置主机为192.168.43.245。
<!--监听配置信息-->
<Agent name="Local">
<Monitor class="Ping">
<Param name="Host" value="192.168.43.245" />
</Monitor> 在发送中引入Agent。名称为刚才配置的Agent name字段。
<!--设置发送IP与端口-->
<Test name="Default">
<Agent ref="Local" /><!--在发送中进行ping检测-->
<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="24" value="00 06 01" valueType="hex" signed="false" mutable="false" />
<Number name="04" size="8" value="01" valueType="hex" signed="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>
<!--监听配置信息-->
<Agent name="Local">
<Monitor class="Ping">
<Param name="Host" value="192.168.43.245" />
</Monitor>
</Agent>
<!--设置发送IP与端口-->
<Test name="Default">
<Agent ref="Local" /><!--在发送中进行ping检测-->
<StateModel ref="TheState" />
<Publisher class="tcp.Tcp">
<Param name="Host" value="192.168.43.245" />
<Param name="Port" value="502" />
</Publisher>
</Test>
</Peach>运行测试
再次运行时候,使用Wireshark进行过滤Modbus or icmp已经出现了相关结果。

运行命令为:peach.exe XML --debug
这里因为是使用的虚拟机,将虚拟机链接网络的网卡进行断开链接,进行模拟一下服务端设备无法ping通情况。

Socket 监听测试
Socket是更为精准的进行级别监听,查看端口是否存在;但是同样也存在弊区,因为使用socket会导致Fuzz测试速度变慢。
<!--socket监听方式-->
<Monitor Class="Socket">
<Param name="Host" value="192.168.43.245" />
<Param name="Socket" value="502" />
</Monitor>