Detecting Ladder Logic Bombs in IEC 61131-3 PLC Programs using ESBMC-PLC+: A Formal Verification Approach with Trigger Synthesis
Este artigo apresenta o ESBMC-LLB, um framework de verificação formal que estende o ESBMC-PLC+ para detectar Bombas de Lógica de Escada em programas de CLP IEC 61131-3 ao expor a lógica oculta de blocos de função e sintetizar gatilhos, alcançando taxas de detecção quase perfeitas e robustez contra gatilhos adaptativos em conjuntos de dados públicos onde os métodos existentes falham.
Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine um Controlador Lógico Programável (CLP) como o cérebro de uma fábrica, executando constantemente um ciclo: ele observa sensores, toma uma decisão, move uma máquina e depois começa tudo de novo em uma fração de segundo. Agora, imagine um hacker sorrateiro escondendo uma "bomba lógica" dentro desse cérebro. Essa bomba é como um dragão adormecido; ela não faz nada enquanto a fábrica funciona normalmente, mas no momento em que uma condição específica e oculta acontece (como um contador atingindo um determinado número), ela acorda e causa o caos — seja travando a máquina, mentindo sobre as leituras dos sensores ou fazendo uma válvula abrir quando deveria permanecer fechada.
Por muito tempo, as ferramentas usadas para verificar esses cérebros de fábrica tinham um ponto cego. Elas olhavam para o código principal, mas ignoravam os "blocos de função" — que são como pequenas sub-rotinas ou mini-programas dentro do código principal. O artigo explica que os dragões adormecidos (as bombas) estavam se escondendo dentro desses blocos de função ignorados. Como as ferramentas antigas descartavam esses blocos de sua visão, o código malicioso e o código seguro pareciam exatamente iguais para o verificador. Era como tentar encontrar um espião em uma multidão olhando apenas para os rostos das pessoas, enquanto o espião se escondia dentro de um casaco que o verificador nem sequer olhava.
A Grande Correção: Abrindo o Casaco
Os autores, Pierre Dantas, Lucas Cordeiro e Waldir Junior, construíram um novo método chamado ESBMC-LLB. O truque principal deles foi simples, mas poderoso: eles fizeram o verificador olhar dentro dos blocos de função. Eles adicionaram uma "camada de tradução" que pega o código oculto dentro desses blocos e o estende de forma plana para que o verificador possa vê-lo.
Uma vez que o código está visível, eles usam dois truques inteligentes para pegar a bomba:
- O Cronômetro (Scan-Watchdog): Se a bomba tentar travar a máquina fazendo o programa rodar em um loop infinito, o verificador age como um árbitro rigoroso com um cronômetro. Ele diz: "Você tem 100 passos para terminar esta tarefa. Se passar disso, está fora!" Se a bomba tentar rodar em loop para sempre, o verificador a pega imediatamente.
- O Testador de Fios (Output Wiring): Se a bomba tentar mentir sobre um sensor ou forçar uma máquina a se mover, o verificador conecta os fios do código oculto ao sistema principal. Se o código oculto tentar enviar uma "mentira" (como dizer para uma válvula abrir quando não deveria), o verificador vê que isso quebra as regras de segurança.
O Resultado Mágico: Encontrando o "Código Secreto"
Aqui está a parte mais legal. Quando o verificador encontra uma bomba, ele não diz apenas "Erro!". Ele realmente cospe o gatilho exato. É como se o verificador dissesse: "Eu encontrei o dragão, e aqui está a senha secreta que o acorda: 'Se o contador atingir 12'". Isso é chamado de "síntese de gatilho".
O Quão Bem Funcionou?
A equipe testou seu método em vários conjuntos de dados, e os resultados foram impressionantes, mas com algumas limitações importantes:
- O Teste Público: Em um conjunto de dados famoso de 60 programas (30 seguros, 30 com bombas), seu método encontrou todas as 30 bombas. Ele pegou cada uma delas e encontrou o gatilho secreto para cada uma. Também provou que os 29 programas seguros eram verdadeiramente seguros. Um programa seguro era tão complexo que o verificador não pôde ter 100% de certeza (ele disse "não sei" em vez de "seguro"), mas não acusou falsamente.
- O Teste do Hacker "Esperto": Eles tentaram enganar o sistema escondendo o gatilho em enigmas matemáticos (como usar um cálculo complexo em vez de um número simples). As ferramentas antigas que apenas procuram por padrões perderam essas armadilhas. O ESBMC-LLB, no entanto, entendeu o significado da matemática e pegou todas as 5 dessas versões traiçoeiras.
- O Teste de Grande Escala: Eles geraram 310 programas (155 seguros, 155 com bombas) para testar a velocidade. O sistema pegou 100% das bombas em uma média de 70 milissegundos (isso é mais rápido que um piscar de olhos!).
- O Teste do Mundo Real em uma Planta de Água: Eles testaram isso em uma simulação real de uma planta de tratamento de água (o corpus SWaT).
- Na versão mais antiga dos dados (com gatilhos de matemática simples), eles encontraram 149 de 150 bombas (99%) com zero alarmes falsos.
- O Limite: Quando testaram uma versão mais nova com matemática não linear muito complexa (como multiplicar um número por si mesmo repetidamente), o sistema travou. A matemática era difícil demais para o verificador resolver a tempo, e a detecção caiu para 49%. O artigo é muito claro aqui: seu método é ótimo para lógica padrão e matemática simples, mas encontra um limite com matemática não linear complexa. Nesses casos específicos, um tipo diferente de ferramenta (chamado detector de triagem CFG) ainda é melhor.
O Que Eles Não Reivindicam
Os autores são muito honestos sobre o que sua ferramenta não consegue fazer. Eles declaram explicitamente que, se uma bomba for projetada para terminar sua tarefa rapidamente (sem rodar em loop infinito) e não quebrar nenhuma regra de segurança específica que eles instruíram o verificador a observar, a ferramenta pode falhar. Não é uma varinha mágica que encontra todas as coisas ruins possíveis; ela encontra aquelas que ou travam o sistema ou quebram as regras de segurança que eles definiram.
A Conclusão
Este artigo mostra que, ao simplesmente "abrir o casaco" para olhar dentro dos blocos de função e usar um verificador inteligente que entende o significado do código, podemos pegar bombas industriais sorrateiras que costumavam se esconder à vista de todos. Ele encontra as bombas, diz exatamente como acioná-las (para que possamos pará-las) e prova que o resto do sistema é seguro — a menos que a matemática fique louca demais, caso em que precisamos de um tipo diferente de detetive. Os autores apresentam isso como uma nova ferramenta poderosa que trabalha junto com os métodos existentes, não uma que substitui tudo.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.