5.Peach小试【工业控制系列】

介绍

本节将会进行学习Peach Fuzz的脚本文件编写,以达到针对设备进行的Fuzz测试。

Peach Fuzz使用

首先通过WiresharkModbus协议的报文进行提取,选择一条流量数据进行报文提取,提取方式为:选择 Modbus/TCP右键选择复制一条Hex流。

image-20240419220155930

脚本编写

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功能码进行循环与增加数据包长度的测试

image-20240419222107746

image-20240419220101292

此危害会导致

1.设备崩溃:不合法的长度可能导致目标设备的处理逻辑出现问题,导致设备崩溃或重启。
2.安全漏洞:如果设备不正确地处理异常长度的请求,这可能暴露安全漏洞,比如缓冲区溢出,可被攻击者利用。
3.服务中断:非法的请求可能导致服务暂时中断,影响正常运行。
4.系统资源耗尽:处理大量异常请求可能导致系统资源(如内存、CPU)耗尽。

本文链接:

https://www.linqi.net.cn/index.php/archives/527/