SCADA/ICS: Modbus

Je me suis intéressé depuis peu à la sécurité des systèmes SCADA/ICS Je me suis donc interessé dans un premier temps au protocole Modbus.

Les systèmes de type SCADA sont basés sur les évènements l'architecture type est d'avoir un PLC connecté à un HMI (IHM). Pour reproduire l'environnement  Modbus: j'ai installé deux VM Windows 32 bits, l'une sert d'IHM et l'autre de PLC, il faut installer le logiciel "ModScan 32" sur l'IHM et  "ModSim 32" sur le PLC.

Pour le PLC choisir une connexion Modbus/TCP svr.

J'ai ensuite créé un "coil status":

Avec une valeur à "1" sur ma première adresse ( ce qui correspond à Coil: ON).

Sur la partie IHM il suffit de se connecter au PLC via TCP pour avoir une connexion sur le PLC:

On lit ainsi les informations renvoyé du PLC à l'HMI

On peut effectuer des modifications de valeur en double cliquant sur une addresse:

SI l'on passe à 1 l'adresse 2:

La valeur passe à 1 côté PLC.

Si la valeur du PLC varie ( dans le cas de la lecture d'un registre), elle est mise à jour lors de la requête.

Côté WireShark on observe assez facilement les requêtes effectuées:

Lors de la modification d'une valeur depuis l'IHM on a ce genre de requêtes:

Pour un passage à 0:

Pour un passage à 1:

Lors du passage à off (0) on envoi 0000, lors d'un passage à on (1) on envoi ff00

La lecture s'effectue avec une requête qui prend cette forme:

Grâce à une attaque de type MITM on peut ainsi  envoyer des fausses informations dans les deux sens, ici plusieurs techniques possibles:

  • Utiliser la lib scapy avec Python
  • Utiliser ettercap

Avec ettercap vous pouvez faire des scripts "filter" qui vous permettent de modifier uniquement le trafic qui vous intéresse.

Afficher les commentaires