
Fuzzer instrumentado para aplicaciones de control ICS basadas en PLC, dirigido al runtime de Codesys en controladores Wago para descubrir corrupción de memoria y entradas que inducen fallos.
ICSFuzz: Herramienta de Fuzzing para Aplicaciones de Control ICS
ICSFuzz es una herramienta de fuzzing del lado del PLC para descubrir vulnerabilidades en aplicaciones de control ICS
por Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
La herramienta requiere un compilador cruzado ya existente en su máquina. Dado que el fuzzer se ejecuta de forma nativa en el PLC, debe compilarse con una cadena de herramientas cruzada basada en ARM, como OSELAS. Para instalar dicha cadena de herramientas, siga las instrucciones del siguiente enlace y modifique el Makefile con la ubicación de su compilador cruzado.
Cadena de herramientas OSELAS <https://pengutronix.de/en/software/toolchain.html>__La herramienta ICSFuzz es una herramienta especializada de evaluación de seguridad para evaluar aplicaciones de control ICS. En esta etapa actual, solo admite aplicaciones basadas en la plataforma Codesys que ha sido modificada y adaptada para el PLC Wago. Si bien esta herramienta es un esfuerzo continuo de nuestra parte, cualquier sugerencia para mejoras y mayor compatibilidad es más que bienvenida :) Simplemente envíeme un correo electrónico a [email protected]
Esta herramienta está construida como una aplicación simple que se ejecutará en su PLC Wago. Simplemente ejecute el Makefile, copie el binario fuzzer producido a su PLC y ejecútelo! Dado que la herramienta accede y modifica memoria de procesos arbitraria, requiere privilegios de administrador. Asegúrese de ejecutarla como usuario sudo o root.
La herramienta es actualmente compatible con Codesys 3.5, parche 02.06.20(08) y versiones anteriores; por favor actualice o degrade el firmware de su PLC para que pueda alojar ICSFuzz adecuadamente. Para obtener retroalimentación visual sobre el proceso de fuzzing, puede utilizar la plataforma e!cockpit, que se ofrece como herramienta de desarrollo/HMI para PLC Wago. A través de ella, puede rastrear la entrada de fuzzing entregada a la aplicación y también informarse sobre un posible fallo, ya que la aplicación dejará de ejecutarse y el LED de "run" se quedará atascado en rojo. Dado que la aplicación se detendrá, la entrada actual (atascada) es la que causó el fallo. Puede reiniciar la aplicación a través de e!cockpit y reiniciar el fuzzer una vez más.
El fuzzer tiene un valor inicial codificado de forma fija (se indica como seed_input en el código fuente) que puede modificar a voluntad mientras juega con el fuzzer.
Si encuentra nuestro trabajo interesante y lo utiliza en su investigación (académica o no), por favor cite nuestro artículo de Usenix Security 2021 que describe ICSFuzz:
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, como todas las cosas buenas de la vida, se basa en los hombros de gigantes. El marco de trabajo se basa en el potente AFL de Michal Zalewski para producir las mutaciones de entrada necesarias que se entregan a la aplicación ICS.
AFL <https://lcamtuf.coredump.cx/afl/>__