Des chercheurs en sécurité ont trouvé un moyen d'extraire une clé de chiffrement globale codée en dur dans les CPU de plusieurs lignes de produits d'automates programmables PLC de Siemens, ce qui leur a permis de compromettre leurs communications et authentifications sécurisées. Siemens conseille à tous ses clients de mettre à jour le firmware des appareils concernés ainsi que le logiciel TIA Portal que les ingénieurs utilisent pour communiquer avec eux et déployer leurs programmes. Comme l’ont rappelé les chercheurs en sécurité de Claroty, il y a près de dix ans que Siemens a introduit la cryptographie asymétrique dans ses SIMATIC S7-1200/1500 CPU pour protéger leur configuration, leurs programmes et leurs communications.

Cependant, le constructeur a choisi de le faire en utilisant une clé privée globale codée en dur pour tous les appareils de ces familles de produits. À l'époque en effet, la distribution et la gestion dynamiques des clés n'étaient pas une pratique courante et représentaient une charge potentielle pour les clients. « Depuis, les progrès technologiques, la recherche en matière de sécurité et l'évolution rapide du paysage des menaces ont transformé ces clés cryptographiques codées en dur en risque inacceptable », indiquent les chercheurs dans leur rapport. « Un acteur malveillant capable d'extraire une clé globale codée en dur pourrait compromettre de manière irrémédiable la sécurité de toute la gamme de produits de l'appareil », ont-ils ajouté.

Des clés cryptographiques pour l'authentification et la protection du code

Selon Claroty, les automates Siemens S7-1200 et S7-1500 utilisent plusieurs clés : Une clé « per-family », partagée par tous les appareils d'une ligne de produits, et une clé « per-model/firmware » utilisée pour chiffrer les configurations et maintenir l'intégrité du code, ainsi qu'une clé de connexion utilisée dans le processus d'authentification, mais aussi pour chiffrer les communications avec les clients. Dérivée des clés de configuration, la clé de connexion sert pour le chiffrement basé sur la courbe elliptique. Cela signifie que si des attaquants obtiennent la clé de configuration, ils peuvent potentiellement déchiffrer le mot de passe de l'utilisateur à partir de la configuration d'un automate et lancer des attaques de type « man-in-the-middle », même s'ils n'ont pas accès à la configuration chiffrée.

Le problème est que cette clé de configuration « per-family » n'est pas stockée dans le firmware de l'appareil - le système d'exploitation fonctionnant sur l'appareil - mais dans le CPU lui-même, de sorte que sa lecture nécessite un accès pour interagir directement avec le CPU via les opcodes. Cette opération n’a besoin d’être réalisée qu'une seule fois sur un seul appareil, car ils partagent tous la même clé.

Un accès direct à la mémoire pour extraire la clé

L'année dernière, les chercheurs de Claroty ont découvert une vulnérabilité d'exécution de code à distance (CVE-2020-15782) affectant les automates PLC S7 et leur permettant d'exécuter du code natif sur les appareils. Normalement, les programmes ou la logique que les ingénieurs écrivent et déploient sur les automates via le logiciel d'ingénierie spécialisé s'exécutent à l'intérieur d'une sandbox dans le système d'exploitation du PLC. La faille CVE-2020-15782 a permis aux chercheurs de contourner cette couche de sécurité et de lire et écrire directement sur n'importe quelle adresse mémoire normalement protégée sur l'automate.

« En utilisant la permission de lecture DA - d’accès direct à la mémoire - que nous avons obtenue, nous avons pu extraire l'intégralité du firmware chiffré de l'automate (SIMATIC S7-1500) et cartographier ses fonctions », ont expliqué les chercheurs. « Au cours du processus de mappage, nous avons trouvé une fonction qui lisait la clé privée sur l'automate PLC. Une fois que nous avons eu l'adresse de la fonction, nous avons réécrit la fonctionnalité de certains opcodes MC7+ avec notre code shell, les forçant à appeler la fonction native qui lit la clé privée. Nous avons ensuite copié la clé à une adresse mémoire connue et l'avons lue à partir de là. L'exécution de la fonction écrasée nous a fourni la clé privée complète de l'automate ».

La clé facilite des attaques multiples

L'interaction avec les automates PLC de Siemens nécessite un mot de passe, mais les autorisations accordées au client pour l'appareil sont définies par quatre niveaux de protection, tous configurables. Si le niveau de protection est inférieur à trois, un attaquant peut extraire la configuration du PLC sans autorisation particulière. Cette configuration contient le hachage du mot de passe, mais elle est chiffrée. Cependant, s'ils disposent de la clé privée globale, les attaquants peuvent déchiffrer le hachage du mot de passe et l'utiliser pour s'authentifier auprès de l'API avec des privilèges plus élevés. Si le niveau de protection est supérieur à quatre, les attaquants peuvent utiliser la clé privée pour lancer une attaque de type « man-in-the-middle » contre un client légitime. Pour ce faire, ils simulent un faux automate et forcent le client à s'authentifier auprès de lui. Le client envoie alors une clé de connexion chiffrée au faux automate PLC, qui peut être ensuite déchiffrée avec la clé globale extraite en possession de l'attaquant et utilisée pour se connecter au véritable automate.

Le PLC réel répondra par une demande de mot de passe que l'attaquant renverra au client pour obtenir sa réponse. La transmission de cette réponse à l'automate réel peut établir une session authentifiée avec les privilèges nécessaires pour lire la configuration qui inclut le hachage du mot de passe. Ce dernier pourrait alors être déchiffré à l'aide de la clé privée globale, donnant aux attaquants un accès futur sans répéter le détournement de session à l’aide d’une attaque « man-in-the-middle ». Enfin, « un attaquant disposant d'un accès passif pour capturer le trafic vers un PLC donné sur le réseau peut intercepter les lectures/écritures de configuration de l'automate », préviennent encore les chercheurs. « En se servant de la clé privée, l'attaquant peut déchiffrer la configuration et extraire le hachage du mot de passe. Avec le hachage du mot de passe, l'attaquant peut s'authentifier auprès de l'automate et écrire une nouvelle configuration », ont-ils ajouté.

Mettre à niveau les appareils vulnérables et le logiciel d'ingénierie

« Les SIMATIC S7-1200, S7-1500 CPU et les produits connexes protègent la clé privée globale intégrée d'une manière qui ne peut plus être considérée comme suffisante », a déclaré Siemens dans un nouvel avis en réponse à ce problème. « Siemens recommande de mettre à jour les produits concernés ainsi que le projet TIA Portal correspondant vers les dernières versions. La version V17 de TIA Portal et les versions connexes du firmware du CPU ont introduit une protection des données de configuration confidentielles basée sur des mots de passe individuels par appareil et une communication PG/PC et HMI protégée par TLS ».

Les appareils vulnérables comprennent les versions de la famille SIMATIC Drive Controller inférieures à 2.9.2, SIMATIC ET 200SP Open Controller CPU 1515SP PC2 (y compris les variantes SIPLUS) inférieures à 21.9, de la famille SIMATIC S7-1200 CPU (y compris les variantes SIPLUS) inférieures à 4.5.0, les versions de la famille SIMATIC S7-1500 CPU (y compris les CPU ET200 apparentées et les variantes SIPLUS) inférieures à 2.9.2, les versions du SIMATIC S7-1500 Software Controller inférieures à 21.9 et du SIMATIC S7-PLCSIM Advanced inférieures à 4.0. Toutes les versions du SIMATIC ET 200SP Open Controller CPU 1515SP PC (y compris les variantes SIPLUS) sont également concernées, mais aucun correctif n'est disponible ou prévu pour elles.