我在哪里可以了解有关小型嵌入式系统的黑盒模糊测试的更多信息?

逆向工程 硬件 模糊测试
2021-06-22 03:18:39

Fuzzing已成为用于软件测试的一种非常常见的地方技术,并被大量用于发现安全问题。有许多框架(sullyPeach Fuzzer等)适用于对大型复杂软件系统进行模糊测试。我没有找到太多关于更小、更简单的嵌入式系统(通常是那些小而简单的不能运行操作系统的嵌入式系统)的信息。

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

我已经成功地使用类似模糊测试的技术来发现安全问题并查看系统的行为方式。目前,这主要包括基于对真实数据包的观察,对发送到系统中的数据包的格式进行模糊测试。一些例子:

  • 使用模糊测试来确定数据包的结构 - 有时您知道大致的数据包格式,但如果您只有少量真正的设备或采样传输,则 ID 位、校验和等内容并不总是确定的。
  • 当数据包长于预期时发现数据包解码中的问题 - 简单的事情,例如将可变数据包长度设置为高于预期值。
  • 寻找可接受传输的限制——像重传这样的事情在单向射频系统中很常见。将注册为正确传输的最小数据包数量是多少?我们可以改变多少波特率(即接收器中是否有良好的时钟恢复)。
  • 寻找干扰检测的极限。在检测到干扰之前,我们可以将系统推多远?查找未记录的功能 - 例如,如果 00 是武装,01 是解除武装,10 是部分武装,那么 11 有什么作用?

我发现的最大挑战之一是检测系统状态的方法。这通常以来自 LED、LCD 总线等的输出的大杂烩告终。我一直在使用 Arduino 和类似 Arduino 的板作为输入和输出(通常是Teensy 2.0)。我还经常需要包含一种在系统崩溃时重新启动系统的方法。

令我惊讶的是,我找不到许多其他人在该领域进行工作或研究。我主要是在我进行的过程中编造的。

所以,问题是:

  • 有没有沿着这些路线的资源?
  • 任何复杂的模糊测试框架都可以用于此应用程序吗?

(顺便说一句,我不认为这是谷歌的失败。类似的概念包括“故障”和“故障注入”,但我相信这是不同的)

我看过这个培训:https : //www.blackhat.com/us-13/training/peach-fuzzer-embedded-edition.html

2个回答

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

从那里你需要处理检测。这将因设备而异。有时您可以使用 JTAG,有时我会在诸如 Teensy 之类的小板的帮助下连接光电传感器来读取 LED。对于联网设备,通常 ping 是一个很好的起点。

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

正确设置后,您应该能够执行长期设备模糊测试。这意味着模糊器能够在识别出故障或设备无响应时重新启动设备,并能够检测到可能对进一步研究感兴趣的故障状态。

你似乎在正确的轨道上。正如@Michael Eddington 指出的那样,Peach 在模糊测试嵌入式系统方面非常出色(根据我的经验,不仅仅是对较小的简单系统)。我有类似的经验,使用它和各种方法来检查设备是否仍然有效,例如简单的 ICMP 消息是否已联网、JTAG 响应,或者只是在执行安全启动故障时串行输出的更改。更高级的方法是查看例如电源配置文件的变化以检测成功的攻击。

关于故障注入,您可以通过阅读FDTCCosade会议的论文来提取有关设置的一些想法