
Fuzzer instrumentado para aplicações de controle ICS baseadas em PLC, voltado ao runtime Codesys em controladores Wago para identificar corrupção de memória e entradas que induzem a crashes.
ICSFuzz é uma ferramenta de fuzzing do lado do PLC para descobrir vulnerabilidades em aplicações de controle ICS
por Dimitris Tychalas \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
A ferramenta requer um compilador cruzado já existente em sua máquina. Como o fuzzer executa nativamente no PLC, ele precisa ser compilado com um cross-toolchain baseado em ARM, como o OSELAS. Para instalar um desses toolchains, siga as instruções no link a seguir e modifique o Makefile com a localização do seu compilador cruzado.
toolchain OSELAS <https://pengutronix.de/en/software/toolchain.html>__A ferramenta ICSFuzz é uma ferramenta especializada de avaliação de segurança para testar aplicações de controle ICS. Neste estágio atual, ela suporta apenas aplicações baseadas na plataforma Codesys, que foi modificada e adaptada para o PLC Wago. Como esta ferramenta é um esforço contínuo de nossa parte, sugestões para melhorias e maior compatibilidade são mais que bem-vindas :) É só me enviar um e-mail para [email protected]
Esta ferramenta é construída como uma aplicação simples que será executada no seu PLC Wago. Basta executar o Makefile, copiar o binário fuzzer gerado para o seu PLC e executá-lo! Como a ferramenta acessa e modifica memória arbitrária de processos, ela requer privilégios de administrador. Certifique-se de executá-la como usuário sudo ou root.
A ferramenta é atualmente compatível com Codesys 3.5, patch 02.06.20(08) e versões anteriores; por favor, atualize ou faça downgrade do firmware do seu PLC para que ele possa hospedar o ICSFuzz corretamente. Para obter feedback visual do processo de fuzzing, você pode usar a plataforma e!cockpit, que é oferecida como uma ferramenta de desenvolvimento/HMI para PLCs Wago. Através dela, você pode acompanhar a entrada de fuzzing entregue à aplicação, além de ser informado sobre uma possível falha, pois a aplicação interrompe a execução e o LED "run" fica travado em vermelho. Como a aplicação para, a entrada atual (travada) é a que causou a falha. Você pode reiniciar a aplicação através do e!cockpit e reiniciar o fuzzer mais uma vez.
O fuzzer possui um valor inicial fixo no código (anotado como seed_input no código-fonte), que você pode modificar à vontade enquanto experimenta o fuzzer.
Se você achar nosso trabalho interessante e usá-lo em sua pesquisa (acadêmica ou não), por favor cite nosso artigo do Usenix Security 2021 que descreve o 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 as coisas boas da vida, apoia-se nos ombros de gigantes. O framework é baseado no poderoso AFL, de Michal Zalewski, para produzir as mutações de entrada necessárias que são entregues à aplicação ICS.
AFL <https://lcamtuf.coredump.cx/afl/>__