Programmazione “PLC sicura” Informazioni sul progetto

Per molti anni, i controllori a logica programmabile (PLC) sono stati progettati e programmati in modo insicuro.

Per rimediare a questo gap di security, diversi anni di personalizzazione e applicazione delle migliori pratiche dell’IT hanno dato origine a protocolli sicuri, comunicazioni crittografate, segmentazione della rete, ecc. Tuttavia, fino ad oggi, non c’è stato un focus sull’utilizzo delle caratteristiche nei PLC (o SCADA/DCS) per la Security, o su come programmare i PLC pensando alla Security.

Il progetto “Top 20 Secure PLC Coding Practices”, ispirato alle esistenti pratiche di codifica sicura per l’IT, cerca di colmare questa lacuna.

Scritto per gli ingegneri dagli ingegneri

Lo scopo di questo progetto è fornire linee guida ai programmatori PLC che stanno creando software (logica ladder, grafici funzionali, lista istruzioni, ecc.) per contribuire a migliorare la “postura” di Security dei sistemi di controllo industriale. Queste pratiche sfruttano le funzionalità disponibili in modo nativo nei PLC e DCS.

Per implementare queste pratiche sono necessari pochi strumenti software o hardware aggiuntivi. Possono essere tutti inseriti nel normale flusso di lavoro di programmazione e funzionamento del PLC. Per l’implementazione di queste pratiche è necessaria una buona conoscenza dei PLC da proteggere, della loro logica e del processo sottostante, oltre alle competenze in materia di Security.

Per rientrare nell’ambito dell’elenco delle pratiche “Top 20 Secure PLC Coding”, le pratiche stesse devono includere istruzioni e modifiche da apportare direttamente alla logica del PLC.

  • Il codice del PLC deve essere semplice, modulare e testato in ogni sua parte.
  • Il PLC non deve fidarsi (troppo) dello SCADA
  • Lo SCADA non deve fidarsi (troppo) del PLC
  • La logica operativa deve rimanere sul PLC, perché ha prestazioni che un computer non ha
  • Il PLC deve essere consapevole delle variazioni alla sua configurazione.
  • Le comunicazioni da e per il PLC devono essere limitate e controllate

Ecco qui l’elenco. Per avere la lista completa di descrizioni ed istruzioni, consultare il documento completo qui sotto!

Consulta il documento completo CLICCA QUI!

 

Secure PLC Coding Practices: Top 20 List Version 1.0 (15 June 2021)

 

1. Rendere modulare il codice PLC

Suddividere il codice PLC in moduli, utilizzando diversi blocchi funzione (subroutine). Testare i moduli in modo indipendente.

2. Tracciare le modalità operative

Mantenere il PLC in modalità RUN. Se i PLC non sono in modalità RUN, dovrebbe essere generato un allarme per gli operatori.

3. Lasciare la logica operativa nel PLC ove possibile

Lasciare quanta più logica operativa possibile, ad esempio la totalizzazione o una integrazione, direttamente nel PLC. L’HMI potrebbe non ricevere abbastanza aggiornamenti per farlo correttamente.

4. Utilizzare i flag PLC come controlli di integrità

Mettere dei contatori sui flag di errore del PLC per intercettare eventuali problemi matematici.

5. Utilizzare controlli di integrità crittografici e/o checksum nel codice PLC

Utilizzare hash crittografici, o checksum se gli hash crittografici non sono disponibili, per verificare l’integrità del codice PLC e generare un allarme quando cambiano.

6. Convalidare timer e contatori

Se i valori di timer e contatori vengono scritti nel programma PLC, devono essere convalidati dal PLC se ragionevoli e verificare se i conteggi all’indietro risultano inferiori a zero.

7. Convalidare e avvisare per ingressi/uscite accoppiati

Se ci sono dei segnali accoppiati, assicurarsi che entrambi i segnali non siano comandati insieme se non necessario. Allarmare l’operatore quando si verificano stati di ingresso/uscita fisicamente non fattibili. Considerare la possibilità di rendere indipendenti i segnali accoppiati o di aggiungere timer di ritardo quando l’attivazione/disattivazione delle uscite potrebbe essere dannosa per gli attuatori.

8. Convalidare le variabili/input di ingresso provenienti dall’HMI a livello di PLC, non solo sull’HMI

L’input da parte dell’ HMI di variabili sul PLC può (e dovrebbe) essere limitato in un intervallo di valori operativi valido sull’HMI, ma è necessario aggiungere ulteriori controlli incrociati nel PLC per prevenire o segnalare valori al di fuori degli intervalli accettabili programmati nell’HMI.

9. Convalidare le impostazioni indirette di dati su una stringa

Convalidare le impostazioni indirette limitando le estremità della stringa di dati, per rilevare eventuali errori di indirizzamento.

10. Assegnare blocchi di registro designati per ogni funzione (lettura/scrittura/convalida)

Assegnare blocchi di registro designati per funzioni specifiche al fine di convalidare i dati, evitare buffer overflow e bloccare scritture esterne non autorizzate al fine di proteggere i dati sul PLC.

11. Strumenti per i controlli di plausibilità

Aggiungere, se possibile, strumenti sul processo in modo da consentire controlli di plausibilità incrociando diverse misurazioni provenienti da diversi sensori.

12. Convalidare gli input in base alla plausibilità fisica

Assicurarsi che gli operatori possano inserire manualmente solo ciò che è pratico o fisicamente fattibile nel processo. Impostare un timer per un’operazione di input indicando la durata che dovrebbe durare fisicamente. Valutare di avvisare quando ci sono deviazioni e anche in caso di inattività non prevista.

13. Disabilitare porte e protocolli di comunicazione non necessari/non utilizzati

I PLC e i moduli di interfaccia di rete generalmente supportano più protocolli di comunicazione abilitati con impostazione predefinita. Disabilitare porte e protocolli non necessari per l’applicazione.

14. Limitare le interfacce dati di terze parti

Limitare il tipo di connessioni e i dati disponibili per le interfacce di terze parti. Le connessioni e/o le interfacce dati dovrebbero essere ben definite e limitate per consentire solo capacità di lettura/scrittura per il trasferimento di dati richiesto.

15. Definire uno stato di processo sicuro in caso di stop/riavvio del PLC

Definire e impostare quali siano gli stati sicuri per il processo in caso di stop/riavvio del PLC (ad esempio, dare corrente, staccare corrente, mantenere lo stato precedente).

16. Riepilogare i tempi di ciclo del PLC e analizzarli sull’HMI

Avere traccia del tempo di ciclo del PLC ogni 2-3 secondi e riportarlo sull’HMI per la visualizzazione su un grafico di trend.

17. Registrare il tempo di attività del PLC e analizzarlo sull’HMI

Registrare il tempo di attività del PLC per sapere quando è stato riavviato. Trend e log uptime sull’HMI per eventuale diagnostica.

18. Registrare gli arresti hardware del PLC e analizzarli sull’HMI

Memorizzare gli eventi di arresto hardware del PLC per guasti o shutdown, per il recupero da parte dei sistemi di allarme sull’HMI da consultare prima del riavvio del PLC. Sincronizzazione l’ora tra PLC e HMI per dati più precisi.

19. Monitorare l’utilizzo della memoria del PLC e tracciarne il trend sull’HMI

Misurare e fornire una base di riferimento per l’utilizzo della memoria per ogni PLC distribuito nell’ambiente di produzione e analizzarlo sull’HMI.

20. Intercettare falsi negativi e falsi positivi per allarmi critici

Identificare gli allarmi critici e programmare un check per quegli allarmi. Impostare il check per monitorare le condizioni e lo stato di allarme per qualsiasi deviazione.

Informazioni sul progetto di programmazione sicura del PLC.

Consulta il documento completo CLICCA QUI!