模糊测试已成为用于软件测试的一种非常普遍的场所技术,并且大量用于发现安全问题。有许多框架(特别是Peach Fuzzer等)适合模糊大型,复杂的软件系统。我还没有找到有关模糊,小型化的嵌入式系统(通常是那些小型且简单到无法运行OS的系统)的信息。

这些小型系统随处可见-RFID卡读取器,防盗器警报系统,无钥匙进入系统,发动机控制单元,HVAC控制等。它们通常具有非常有限的输入和输出(按钮,小键盘,小字符显示器,LED,蜂鸣器,RF通信)。复杂的网络(以太网,TCP / IP),串行端口等很少见。

通过采用类似模糊测试的技术来发现安全问题并查看系统的性能,我已经取得了成功。当前,这主要包括基于对真实数据包的观察,对发送到系统中的数据包的格式进行模糊处理。一些示例:


使用模糊确定数据包的结构-有时您知道
近似的数据包格式,但是诸如ID位,校验和
之类的东西。如果您只有少量的
正品设备或采样的变速器,则不一定总能确定。
发现数据包长于预期时的数据包解码问题-类似简单的事情
将可变数据包长度设置为高于预期值。
找到可接受的传输限制-诸如
重发在单向RF系统中很常见。将注册为正确传输的最小数据包数量是多少?
我们可以如何改变波特率(即接收器中的时钟恢复良好)。
确定干扰检测的极限。在检测到卡纸之前,我们可以将系统推入多远?查找未记录的文件
功能-例如,如果00是布防,01是撤防,10是部分布防,
11的作用是什么?

我发现的最大挑战之一就是检测方法系统状态。通常,这会导致从LED,LCD总线等获取的输出杂乱无章。我一直在使用Arduino和类似Arduino的板进行输入和输出(通常是Teensy 2.0)。我还经常需要包含一种方法,以在发生崩溃时重新启动系统。

令我惊讶的是,我找不到在这一领域进行工作或研究的其他人员。我正在逐步完善自己。

因此,问题是:


这些方面是否有资源?
可以将任何复杂的模糊测试框架用于此应用程序吗?

(顺便说一句,我认为这对Google来说并不是失败的。类似的概念包括“轻巧”和“故障注入”,但我相信这是有区别的)

我已经看到了该培训可用:
https://www.blackhat.com/us-13/training/peach-fuzzer -embedded-edition.html

#1 楼

Peach在模糊较小的嵌入式系统方面非常出色。配置和检测是嵌入式系统的最大区别。这往往会改变设备,但我最常用的工具之一是Cana Kit中继控制器(http://www.canakit.com/4-port-usb-relay-controller.html)。桃子有一个监视模块,能够触发继电器。我用它来打开/关闭设备,或模拟插入/拔出的USB电缆等。

从那里您需要进行检测。设备之间的差异会很大。有时您可以使用JTAG,而其他时候我借助诸如Teensy之类的小板连接了光电传感器来读取LED。对于联网的设备,通常ping是一个很好的起点。

如果您有一些基本的编码经验,Peach的一个优点就是添加一个模块来检测故障或执行设备重置很容易。

正确设置后,您应该可以进行长期的设备模糊测试。这意味着当发现故障或设备无响应时,模糊器能够重新启动设备,并能够检测到可能需要进一步研究的故障状态。

评论


例如,与Teensy合作时,您是否有更多有关控制Peach输出的详细信息?

– Cyber​​gibbons
13年4月6日在0:20

Teensy易于通过USB串行接口。 Peach 3具有一个串行端口发布程序(I / O接口),用于发送模糊数据并接收回响应。这是一种简单的接口方式。

– Michael Eddington
13年4月8日在20:48



#2 楼

您似乎走在正确的轨道上。正如@Michael Eddington指出的那样,Peach在模糊嵌入式系统方面非常出色(根据我的经验,不仅限于较小的简单系统)。我有类似的经验,使用过多种方法来检查设备是否仍然有效,例如通过网络发送的简单ICMP消息,JTAG响应,或者在进行安全启动故障时仅更改串行输出。例如,更高级的方法是查看电源配置文件的变化以检测成功的攻击。<​​br />
关于故障注入,您可以通过阅读FDTC,Cosade等会议上的论文来提取一些有关设置的想法。 。