
Fuzzer strumentato per applicazioni di controllo ICS basate su PLC, rivolto al runtime Codesys sui controller Wago per scoprire corruzione della memoria e input che causano crash.
ICSFuzz: strumento di fuzzing per applicazioni di controllo ICS
ICSFuzz è uno strumento di fuzzing lato PLC per scoprire vulnerabilità nelle applicazioni di controllo ICS
di Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
Il tool richiede un cross compiler già esistente sulla tua macchina. Poiché il fuzzer viene eseguito nativamente sul PLC, deve essere compilato con una cross-toolchain basata su ARM, come OSELAS. Per installare tale toolchain, segui le istruzioni al seguente link e modifica il Makefile con il percorso del tuo cross-compiler.
OSELAS toolchain <https://pengutronix.de/en/software/toolchain.html>__Il tool ICSFuzz è uno strumento specializzato di valutazione della sicurezza per applicazioni di controllo ICS. In questa fase attuale, supporta solo applicazioni basate sulla piattaforma Codesys modificata e adattata per il PLC Wago. Poiché questo tool è un lavoro in corso da parte nostra, qualsiasi suggerimento per miglioramenti e maggiore compatibilità è più che benvenuto :) Mandami un'email all'indirizzo [email protected]
Questo tool è realizzato come una semplice applicazione che verrà eseguita sul tuo PLC Wago. Basta eseguire il Makefile, copiare il binario fuzzer prodotto sul tuo PLC ed eseguirlo! Poiché il tool accede e modifica memoria di processo arbitraria, richiede privilegi di amministratore. Assicurati di eseguirlo come utente sudo o root.
Il tool è attualmente compatibile con Codesys 3.5, patch 02.06.20(08) e versioni precedenti; aggiorna o retrocedi il firmware del tuo PLC affinché possa ospitare ICSFuzz correttamente. Per un feedback visivo sul processo di fuzzing, puoi usare la piattaforma e!cockpit, offerta come strumento di sviluppo/HMI per il PLC Wago. Attraverso di essa, puoi tracciare l'input di fuzzing consegnato all'applicazione e anche essere informato su un potenziale crash, poiché l'applicazione interromperà l'esecuzione e il LED "run" si bloccherà sul rosso. Poiché l'applicazione si ferma, l'input corrente (bloccato) è quello che ha causato il crash. Puoi riavviare l'applicazione tramite e!cockpit e riavviare il fuzzer un'altra volta.
Il fuzzer ha un valore iniziale hard-coded (annotato come seed_input nel codice sorgente) che puoi modificare a piacimento mentre sperimenti con il fuzzer.
Se trovi interessante il nostro lavoro e lo usi nella tua ricerca (accademica o non), ti preghiamo di citare il nostro articolo Usenix Security 2021 che descrive 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, come tutte le cose belle della vita, si basa sulle spalle dei giganti. Il framework si basa sul potente AFL di Michal Zalewski per produrre le necessarie mutazioni di input che vengono consegnate all'applicazione ICS.
AFL <https://lcamtuf.coredump.cx/afl/>__