
面向基于 PLC 的 ICS 控制应用的插桩模糊测试器,针对 Wago 控制器上的 Codesys 运行时,旨在发现内存破坏和引发崩溃的输入。
ICSFuzz 是一款面向 PLC 端的模糊测试工具,用于发现 ICS 控制应用中的漏洞。
作者:Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
该工具要求你的机器上已存在交叉编译器。由于模糊测试器原生运行在 PLC 上,因此需要使用基于 ARM 的交叉工具链(如 OSELAS)进行编译。要安装此类工具链,请按照以下链接中的说明操作,并修改 Makefile 以指定交叉编译器的位置。
OSELAS toolchain <https://pengutronix.de/en/software/toolchain.html>__ICSFuzz 工具是一种专门用于评估 ICS 控制应用的安全评估工具。目前,它仅支持基于 Codesys 平台并针对 Wago PLC 进行修改和适配的应用。虽然该工具仍在持续开发中,但我们非常欢迎任何关于升级和增强兼容性的建议 :) 只需发送邮件至 [email protected]
该工具构建为一个简单的应用程序,将运行在你的 Wago PLC 上。只需运行 Makefile,将生成的 fuzzer 二进制文件复制到 PLC 上并执行即可!由于该工具会访问和修改任意进程内存,因此需要管理员权限。请务必以 sudo 或 root 用户身份执行。
该工具目前兼容 Codesys 3.5、补丁 02.06.20(08) 及更早版本,请升级或降级你的 PLC 固件,以便正常承载 ICSFuzz。如需模糊测试过程的视觉反馈,可以使用 e!cockpit 平台,该平台是 Wago PLC 的开发/HMI 工具。通过它,你可以跟踪传递给应用的模糊测试输入,并在潜在崩溃发生时收到通知,因为应用将停止执行,“run” LED 会卡在红色。由于应用停止,当前(卡住的)输入就是导致崩溃的输入。你可以通过 e!cockpit 重启应用,然后再次重启模糊测试器。
该模糊测试器有一个初始硬编码起始值(在源代码中记为 seed_input),你在使用模糊测试器时可以根据需要随意修改。
如果你觉得我们的工作有趣,并在你的(学术或其他)研究中使用它,请引用我们描述 ICSFuzz 的 Usenix Security 2021 论文:
Tychalas, Dimitrios, Hadjer Benkraouda, and Michail Maniatakos. "ICSFuzz: Manipulating I/Os and Repurposing Binary Code to Enable Instrumented Fuzzing in {ICS} Control Applications." 30th {USENIX} Security Symposium ({USENIX} Security 21). 2021.
ICSFuzz 与生活中一切美好事物一样,站在巨人的肩膀上。该框架基于 Michal Zalewski 开发的强大 AFL,用于生成传递给 ICS 应用所需的输入变异。
AFL <https://lcamtuf.coredump.cx/afl/>__