Peach3 元素详细解析(三)

7 测试

  Test 元素被用于配置一个指定的 fuzzing 测试,这个配置通过一个 Publisher 和其他选项 (比如 including/excluding 等被变异的元素、Agents、fuzzing 策略)组合成一个 StateModel。 多个 test 元素是支持的,在 Peach 命令行使用中,只需简单提供 test 元素的名字即可。
Peach3 元素详细解析(三)Peach3 元素详细解析(三)
属性:
Name—必备的,test 元素的名字,默认为“Default”。
Waittime—每次测试之间的等待时间,默认为 0。
Faultwaittime—在开始下一次迭代时等待错误的时间,默认为 0。
controlIneration—我们只需控制迭代的频率,默认为 0。

有效子元素:
Agent(可选)
StateModel(必须)
Publisher(必须)
Include(可选)
Exclude(可选)
Strategy(可选)
Logger(可选,推荐)

8 Publishers

Publishers是Peach发送和接收数据的I/O接口,Publisher支持基于流和操作的调用。当fuzzer运行时,除了slurp之外,所有的action使用一个Publisher来执行操作。不同的Publishers支持不同的action类型。比如,文件Publisher支持从一个文件读取数据作为输入,把数据写入一个文件作为输出,但是不支持接收或者调用。这和com Publisher不同,它支持调用,但不支持输入、输出或接收。所有的 fuzzing 定义必须使用至少一个 Publisher,如 果需要的话也可以选择多个 Publishers。当使用多个 Publisher 的时候,每个 action 必须指定 它引用了哪个 Publisher,通请参考 action 的 publisher 属性中的 name 属性。如果 Publisher 属性丢失了,action 将执行 Test 中定义的第一个 Publisher。

8.1 网络Publishers

当进行网络协议fuzzing的时候,Publisher常常被用于包含目标协议的协议。比如,当进行http 协议 fuzzing 的时候,使用 Tcp Publisher。当进行 TCPfuzzing 的时候,使用 IPv4 或 IPv6 Publisher。当进行 IPv4 fuzzing 的时候,使用 ethernet Publisher。

8.2 自定义Publisher

Peach支持创建自定义Publisher。建议先对一些现有 Publisher 代码进行审核,以了解 Publisher 怎么运行。创建一个自定义的 Publisher 不需要改变 Peach 的源代码。相反,代码 放被一个新的.NET 程序集(dll)中,然后把 dll 添加进 Peach bin 文件夹中,Peach 会自动地 识别新的 Publisher,并使它可用。

8.3 Publisher

(1)com

Com Publisher允许调用方法和com对象上的属性
参数:clsid–com clsid。
操作:Call—调用一个方法。Getproperty—获取属性值。Setproperty—设置属性值。

Peach3 元素详细解析(三)

(2)console

Console Publisher 将会输出数据到标准输出。
参数:没有。操作:Output—需要显示的数据。

Peach3 元素详细解析(三)

(3)consoleHex

consoleHex Publisher 将会输出数据到一个标准输出。数据将会以十六进制格式显示。
参数:Bytesperline—每行文本字节数,可选,默认为 16。操作:Output—要示的数据。

Peach3 元素详细解析(三)
Peach3 元素详细解析(三)

(4)File

File Publisher 将会打开一个文件来读和写。
参数:
Filename—要打开文件的名字。
Overwrite—覆盖存在的文件,可选,默认为真。
Append—向存在的文件附加数据,可选默认为假。 操作:
Output—数据被写进一个文件。
Input—从文件读取数据。

Peach3 元素详细解析(三)
Peach3 元素详细解析(三)

(5)FilePerIteration

FilePerIteration Publisher 在每次迭代 fuzzer 执行时,将会创建一个输出文件。当进行预 先产生 fuzzing 事件时,非常有用。
参数:
Filename—创建文件的名字,文件名字必须包含“{0}”,它将被迭代次数代替。
操作:
Output—写数据到文件。
Peach3 元素详细解析(三)

(6)Http

Http Publisher 通过你选择的方法发送 HTTP 数据。这个 Publisher 支持以下特性:
⚫ 通过 Basic、Digest 或者 windows 集成来认证。
⚫ 定义方法类型。
⚫ Fuzzing 和动态头设置(键和值)。
⚫ Fuzzing 和动态查询字符串设置。
⚫ 可选的 cookie 支持。
⚫ SSL

参数:
Method—HTTP 方法类型(Get,Post 等)。
Url—目标 url。
Baseurl—一些认证类型使用的基本 url,可选。
Username—认证用户名,可选。
Domain—认证域名,可选。
Cookies—可用的 cookie 支持,可选,默认为真。
Cookiesacrossiterations—跨迭代跟踪 cookies,可选,默认为假。
Timeout—等待多久数据连接,单位为微秒,可选,默认为 3000。
Ignorecerterrors—忽略 cert 状态,允许 http,默认为假。

操作:
Call—为了 fuzzing 查询字符串或者头,支持指定的方法名。
Query—为一次调用操作指定方法名字,第一个参数为查询字符串。
Header—为一次调用操作指定方法名字,第一个参数是头名字,第二个是值。
Output—通过 output 发送数据,通过输出发送的数据作为 HTTP 主体提供。

Peach3 元素详细解析(三)Peach3 元素详细解析(三)
Peach3 元素详细解析(三)Peach3 元素详细解析(三)Peach3 元素详细解析(三)

Peach3 元素详细解析(三)Peach3 元素详细解析(三)Peach3 元素详细解析(三)

(7)NULL

所有发送到 null Publisher 的数据将被丢弃,这个 Publisher 被单元测试使用。 参数:没有。
Peach3 元素详细解析(三)

(8)RawEther

RawEther Publisher 允许发送带有 IP 头的 raw IPv6 包。
参数:
Interface—要绑定的接口 IP,可选。
Protocol—要使用的 Ethernet 协议,可选,默认为 ETH_P_ALL。
Timeout—数据/连接等待的时间,单位为微秒,可选,默认为 3000。
操作:
Output—发送数据给远程主机。
Input—从远程主机接收数据。
Peach3 元素详细解析(三)

(9)RawIPv4

RawIPv4 Publisher 允许发送带有 IP 头的 Raw IPv4 包。
参数:
Host—主机名或者远程主机 IP 地址。
Interface—要绑定的接口 IP 地址。
Protocol—要使用的 IP 协议。
Timeout—数据/连接要等待的时间,单位为微秒,可选,默认为 3000。
maxMTu—最大允许可用的 MTU 属性值,可选,默认为 131070。
minMTU—最小允许可用的属性值,可选,默认为 1280。
操作:
Output—发生数据给远程主机。
Input–从远程主机接收数据。
Peach3 元素详细解析(三)

(10)RawIPv6 官网内容不可访问。

(11)Rawv4

Rawv4 Publisher 允许发送带有 IP 头的 Raw IPv4 包。
参数:
Host—主机名或者远程主机 IP 地址。
Interface—要绑定的接口 IP 地址。
Protocol—要使用的 IP 协议。
Timeout—数据/连接要等待的时间,单位为微秒,可选,默认为 3000。
maxMTu—最大允许可用的 MTU 属性值,可选,默认为 131070。
minMTU—最小允许可用的属性值,可选,默认为 1280。
操作:
Output—发生数据给远程主机。
Input–从远程主机接收数据。
Peach3 元素详细解析(三)

(12)RawV6

RawV6 Publisher 允许发送带有 IP 头的 IPv6 包。
参数:
Host—主机名或者远程主机 IP 地址。
Interface—要绑定的接口 IP 地址。
Protocol—要使用的 IP 协议。
Timeout—数据/连接要等待的时间,单位为微秒,可选,默认为 3000。
maxMTu—最大允许可用的 MTU 属性值,可选,默认为 131070。
minMTU—最小允许可用的属性值,可选,默认为 1280。
操作:
Output—发生数据给远程主机。
Input–从远程主机接收数据。
Peach3 元素详细解析(三)
(13)Remote
Remote Publisher 从一个 Peach Agent 进程中运行另外一个 Publisher。
参数:
Agent—运行 Publisher 的代理名字。
Class—运行的 Publisher 名字。
Other parameters—远程 Publisher 所需的参数。
操作:
被远程 Publisher 支持的任何操作。
Peach3 元素详细解析(三)Peach3 元素详细解析(三)
(14)TCPClient Publisher
TCPClient Publisher 连接一个远程的 TCP 服务。
参数:
Host—主机名或者远程主机 IP 地址。
Port—目的端口数字。
Timeout–数据的等待时间,单位为微秒,可选,默认为 3000。
Connecttimeout—一个新连接的等待时间,单位为微秒,可选,默认为 10000。
操作:
output—发送数据到远程主机。
Input—从远程主机接收数据。
Peach3 元素详细解析(三)Peach3 元素详细解析(三)
(15)udp Publisher
Udp Publisher 能发送和接收 UDP 包。
参数:
Host—主机或者 ip 地址或者远程主机。
Port—目的端口数字,当第一个包被目标发送时可选。
Srcport—源端口,可选。
Interface—绑定的接口 IP
Timeout—数据/连接的等待时间,单位为微秒,可选,默认为 3000。
maxMTU—最大允许可用 MTU 属性值,可选,默认为 131070
minMTU—最小允许可用 MTU 属性值,可选,默认为 1280。
操作:
Output—发送数据到远程服务器。
Input—从远程主机接收数据。
Peach3 元素详细解析(三)
(16)webservice Publisher
Webservice Publisher 能调用基于 web 服务的 SOAP 和 WCF。默认情况下,Publisher 将 会尝试定位一个服务定义或者被提供的服务定义。
参数:
Url—webService URL
Service—服务名字。
Wsdl—web 服务的 WSDL 路径或 url,可选。
Erroronstatuscode—当状态代码不是 200 时,发生错误,可选,默认为真。
Timeout—数据/连接的等待时间,单位为微秒,可选,默认为 3000。
Throttle—连接之间的等待时间,单位为微秒,可选,默认为 0。
操作:
Call—web 服务要调用的方法属性。
Peach3 元素详细解析(三)Peach3 元素详细解析(三)

9 Loggers

Peach 有一个可扩展的记录系统,它允许使用者存储他们想要的记录。默认情况下,Peach 使用一个单独的文件系统记录器。 文件系统记录器会指定一个路径,它会创建一个包含运行名字和时间标记的文件夹,文 件夹中是真实的记录。除非探测到错误,否则非常少的记录信息会被保存在磁盘空间中。
Peach3 元素详细解析(三)
参数: Path—创建记录文件的相对或绝对路径。

10 变异策略

一般来说,Peach 的 Datamodel 是在自上而下的。它保证每个数据元素都都能 fuzzing 到各种事例,但对于能够产生大量事例的大的复制系统来说不是最优的。此外,需要一种能 能容易改变如何执行 fuzzing 的机制,进而以最优的方法和策略来进行研究。这就需要变异 策略。通过实现单个类,用户可以完全控制 Peach 如何 fuzzing 包括状态转换的目标。

10.1 随机

随机策略会一直运行,此策略将一次选择最多 MaxFieldsToMutate 个元素进行变异。对 于每个选择的元素,其相应的突变体之一是随机选择的。 桃源从随机生成的种子数中导出 这些选择的随机性。可以通过将相同的种子值作为 Peach 命令行选项与–seed 命令行选项传 递来重复相同的测试运行。这对于重放模糊迭代以重现先前的故障很有用。
参数:
MaxFieldsToMutate—一次变异的最大区域,默认为 6。
Switchcout—进行切换数据集之前执行的迭代次数,默认为 200。
Peach3 元素详细解析(三)

10.2 有顺序的

在同一时刻,Peach 将会按照顺序对 DataModel 中的每个元素进行 fuzzing。Peach 将从 Datamodel 的顶部开始,并对每个数据元素执行所有有效的突变,直到所有可能的突变都已 用尽。这种策略有一定数量的 fuzzing 迭代。此策略的种子不可配置,始终为 31337

Peach3 元素详细解析(三)

10.3 随机确定性(默认)

这个 fuzzing 策略是确定性的(有开始和结尾)。除了突变顺序外,它和顺序策略类似。

11 变异器

变异器列表如下:

ArrayNumericalEdgeCasesMutator

Peach3 元素详细解析(三)

ArrayRandomizeOrderMutator

Peach3 元素详细解析(三)

ArrayReverseOrderMutator

Peach3 元素详细解析(三)

ArrayVarianceMutator

Peach3 元素详细解析(三)

BlobBitFlipperMutator

Peach3 元素详细解析(三)

BlobDWORDSliderMutator

Peach3 元素详细解析(三)

BlobMutator

Peach3 元素详细解析(三)

DataElementDuplicateMutator

Peach3 元素详细解析(三)

DataElementRemoveMutator

Peach3 元素详细解析(三)

DataElementSwapNearNodesMutator

Peach3 元素详细解析(三)

FiniteRandomNumbersMutator

Peach3 元素详细解析(三)

NumericalEdgeCaseMutator

Peach3 元素详细解析(三)

NumericalVarianceMutator

Peach3 元素详细解析(三)

SizedDataNumericalEdgeCasesMutator
SizedDataVarianceMutator
SizedNumericalEdgeCasesMutator
SizedVarianceMutator
StringCaseMutator
StringMutator
UnicodeBadUtf8Mutator
UnicodeBomMutator
UnicodeStringsMutator
UnicodeUtf8ThreeCharMutator
ValidValuesMutator
WordListMutator
XmlW3CMutator