← Derniers articles
💬 NLP

Detecting Ladder Logic Bombs in IEC 61131-3 PLC Programs using ESBMC-PLC+: A Formal Verification Approach with Trigger Synthesis

Cet article présente ESBMC-LLB, un cadre de vérification formelle qui étend ESBMC-PLC+ pour détecter les bombes logiques (Ladder Logic Bombs) dans les programmes d'API IEC 61131-3 en exposant la logique cachée des blocs fonctionnels et en synthétisant des déclencheurs, atteignant ainsi des taux de détection quasi parfaits et une robustesse face aux déclencheurs adaptatifs sur des jeux de données publics là où les méthodes existantes échouent.

Auteurs originaux : Pierre Dantas, Lucas Cordeiro, Waldir Junior

Publié 2026-07-10
📖 6 min de lecture🧠 Analyse approfondie

Auteurs originaux : Pierre Dantas, Lucas Cordeiro, Waldir Junior

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

Imaginez un Automate Programmable Industriel (API) comme le cerveau d'une usine, exécutant constamment une boucle : il observe les capteurs, prend une décision, actionne une machine, puis recommence tout en une fraction de seconde. Maintenant, imaginez un pirate sournois cachant une « bombe logique » à l'intérieur de ce cerveau. Cette bombe est comme un dragon endormi ; elle ne fait rien tant que l'usine fonctionne normalement, mais dès qu'une condition spécifique et cachée se produit (comme un compteur atteignant un certain nombre), elle s'éveille et provoque le chaos — soit en figeant la machine, soit en mentant sur les lectures des capteurs, soit en ouvrant une vanne qui devrait rester fermée.

Pendant longtemps, les outils utilisés pour vérifier ces cerveaux d'usine avaient un angle mort. Ils examinaient le code principal mais ignoraient les « blocs de fonctions » — qui sont comme des sous-routines ou des mini-programmes à l'intérieur du code principal. L'article explique que les dragons endormis (les bombes) se cachaient à l'intérieur de ces blocs de fonctions ignorés. Parce que les anciens outils retiraient ces blocs de leur champ de vision, le code malveillant et le code sûr paraissaient exactement identiques au vérificateur. C'était comme essayer de trouver un espion dans une foule en ne regardant que les visages des gens, alors que l'espion se cachait dans un manteau que le vérificateur ne regardait même pas.

La Grande Réparation : Ouvrir le Manteau
Les auteurs, Pierre Dantas, Lucas Cordeiro et Waldir Junior, ont construit une nouvelle méthode appelée ESBMC-LLB. Leur astuce principale était simple mais puissante : ils ont fait en sorte que le vérificateur regarde à l'intérieur des blocs de fonctions. Ils ont ajouté une « couche de traduction » qui prend le code caché à l'intérieur de ces blocs et l'aplatit pour que le vérificateur puisse le voir.

Une fois le code visible, ils utilisent deux astuces ingénieuses pour attraper la bombe :

  1. Le Chronomètre (Scan-Watchdog) : Si la bombe tente de figer la machine en faisant tourner le programme dans une boucle infinie, le vérificateur agit comme un arbitre strict avec un chronomètre. Il dit : « Vous avez 100 étapes pour terminer cette tâche. Si vous dépassez, vous êtes éliminé ! » Si la bombe tente de boucler indéfiniment, le vérificateur la attrape immédiatement.
  2. Le Testeur de Fils (Output Wiring) : Si la bombe tente de mentir sur un capteur ou de forcer une machine à bouger, le vérificateur connecte les fils du code caché au système principal. Si le code caché tente d'envoyer un « mensonge » (comme dire à une vanne de s'ouvrir alors qu'elle ne le devrait pas), le vérificateur voit qu'il enfreint les règles de sécurité.

Le Résultat Magique : Trouver le « Code Secret »
Voici la partie la plus cool. Quand le vérificateur trouve une bombe, il ne se contente pas de dire « Erreur ! ». Il recrache en réalité le déclencheur exact. C'est comme si le vérificateur disait : « J'ai trouvé le dragon, et voici le mot de passe secret qui l'éveille : 'Si le compteur atteint 12' ». C'est ce qu'on appelle la « synthèse de déclencheur » (trigger synthesis).

Combien cela a-t-il bien fonctionné ?
L'équipe a testé sa méthode sur plusieurs ensembles de données, et les résultats sont impressionnants, mais avec des limites importantes :

  • Le Test Public : Sur un ensemble de données célèbre de 60 programmes (30 sûrs, 30 avec des bombes), leur méthode a trouvé toutes les 30 bombes. Elle a attrapé chacune d'entre elles et a trouvé le déclencheur secret pour chacune. Elle a également prouvé que les 29 programmes sûrs étaient réellement sûrs. Un programme sûr était si complexe que le vérificateur n'a pas pu être sûr à 100 % (il a répondu « Je ne sais pas » au lieu de « Sûr »), mais il n'a pas fait de fausse accusation.
  • Le Test du Hacker « Intelligent » : Ils ont essayé de piéger leur système en cachant le déclencheur dans des énigmes mathématiques (comme utiliser un calcul complexe au lieu d'un simple nombre). Les anciens outils qui cherchent simplement des motifs ont manqué ces ruses. ESBMC-LLB, cependant, a compris la signification des mathématiques et a attrapé toutes les 5 de ces versions astucieuses.
  • Le Test de Grande Échelle : Ils ont généré 310 programmes (155 sûrs, 155 avec des bombes) pour tester la vitesse. Le système a attrapé 100 % des bombes en une moyenne de 70 millisecondes (c'est plus rapide qu'un clin d'œil !).
  • Le Test du Monde Réel d'une Usine de Traitement d'Eau : Ils ont testé cela sur une simulation réelle d'une usine de traitement d'eau (le corpus SWaT).
    • Sur l'ancienne version des données (avec des déclencheurs mathématiques simples), ils ont trouvé 149 bombes sur 150 (99 %) avec zéro fausse alerte.
    • La Limite : Lorsqu'ils ont testé une version plus récente avec des mathématiques non linéaires très complexes (comme multiplier un nombre par lui-même de manière répétée), le système s'est bloqué. Les mathématiques étaient trop difficiles pour que le vérificateur puisse les résoudre à temps, et la détection est tombée à 49 %. L'article est très clair ici : leur méthode est excellente pour la logique standard et les mathématiques simples, mais elle se heurte à un mur face aux mathématiques non linéaires complexes. Dans ces cas spécifiques, un autre type d'outil (appelé détecteur CFG-triage) est toujours meilleur.

Ce qu'ils ne revendiquent pas
Les auteurs sont très honnêtes sur ce que leur outil ne peut pas faire. Ils déclarent explicitement que si une bombe est conçue pour terminer sa tâche rapidement (sans boucler indéfiniment) et ne brise aucune règle de sécurité spécifique qu'ils ont demandé au vérificateur de surveiller, l'outil pourrait la manquer. Ce n'est pas une baguette magique qui trouve chaque chose mauvaise possible ; il trouve celles qui soit figent le système, soit brisent les règles de sécurité qu'ils ont définies.

L'Essentiel
Cet article montre qu'en « ouvrant simplement le manteau » pour regarder à l'intérieur des blocs de fonctions et en utilisant un vérificateur intelligent qui comprend la signification du code, nous pouvons attraper les bombes industriales sournoises qui se cachaient autrefois à la vue de tous. Il trouve les bombes, nous dit exactement comment les déclencher (pour que nous puissions les arrêter) et prouve que le reste du système est sûr — à moins que les mathématiques ne deviennent trop folles, auquel cas nous avons besoin d'un autre type de détective. Les auteurs présentent cela comme un nouvel outil puissant qui travaille aux côtés des méthodes existantes, et non comme un outil qui les remplace tous.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →