
Fuzzer instrumenté pour les applications de contrôle ICS basées sur PLC, ciblant l'environnement d'exécution Codesys sur les contrôleurs Wago afin de détecter les corruptions mémoire et les entrées provoquant des crashs.
ICSFuzz est un outil de fuzzing côté PLC pour découvrir des vulnérabilités dans les applications de contrôle ICS
par Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
L'outil nécessite un compilateur croisé déjà installé sur votre machine. Comme le fuzzer s'exécute nativement sur le PLC, il doit être compilé avec une chaîne d'outils croisée basée sur ARM, telle que OSELAS. Pour installer une telle chaîne d'outils, veuillez suivre les instructions sur le lien suivant et modifier le Makefile avec l'emplacement de votre compilateur croisé.
Chaîne d'outils OSELAS <https://pengutronix.de/en/software/toolchain.html>__L'outil ICSFuzz est un outil spécialisé d'audit de sécurité pour évaluer les applications de contrôle ICS. À ce stade, il ne prend en charge que les applications basées sur la plateforme Codesys, qui a été modifiée et adaptée pour le PLC Wago. Bien que cet outil soit un travail en cours de notre côté, toute suggestion d'améliorations et de compatibilité accrue est plus que bienvenue :) Envoyez-moi simplement un e-mail à [email protected]
Cet outil est conçu comme une application simple qui s'exécutera sur votre PLC Wago. Exécutez simplement le Makefile, copiez le binaire fuzzer produit sur votre PLC et exécutez-le ! Comme l'outil accède à la mémoire arbitraire des processus et la modifie, il nécessite des privilèges administrateur. Veuillez vous assurer de l'exécuter en tant qu'utilisateur sudo ou root.
L'outil est actuellement compatible avec Codesys 3.5, patch 02.06.20(08) et les versions antérieures. Veuillez mettre à niveau ou rétrograder le firmware de votre PLC afin qu'il puisse héberger ICSFuzz correctement. Pour un retour visuel sur le processus de fuzzing, vous pouvez utiliser la plateforme e!cockpit, proposée comme outil de développement/HMI pour les PLC Wago. Grâce à elle, vous pouvez suivre l'entrée de fuzzing délivrée à l'application et être informé d'un éventuel crash : l'application cessera de s'exécuter et le voyant "run" restera rouge. Comme l'application s'arrête, l'entrée actuelle (bloquée) est celle qui a provoqué le crash. Vous pouvez redémarrer l'application via e!cockpit puis relancer le fuzzer.
Le fuzzer possède une valeur de départ initiale codée en dur (notée seed_input dans le code source) que vous pouvez modifier à volonté pendant que vous jouez avec le fuzzer.
Si vous trouvez notre travail intéressant et que vous l'utilisez dans vos recherches (académiques ou non), veuillez citer notre article Usenix Security 2021 décrivant 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, comme toutes les bonnes choses de la vie, s'appuie sur des épaules de géants. Le framework est basé sur le puissant AFL de Michal Zalewski pour produire les mutations d'entrée nécessaires qui sont délivrées à l'application ICS.
AFL <https://lcamtuf.coredump.cx/afl/>__