4) Використовуйте змінні-прапори для перевірки цілісності логіки
Додавайте лічильники для прапорів помилок.
Опис
Якщо ПЛК працював нормально, але раптово ділить на нуль, розберіться, з'ясуйте причину. Більшість програмістів пояснять проблему як математичну помилку або, що ще гірше, можуть припустити, що їх код ідеальний, і дозволять ПЛК увійти в стан жорсткої відмови. Під час розробки коду інженерам необхідно тестувати і перевіряти свої програмні модулі, підставляючи дані за межами очікуваних кордонів. Це прийнято називати unit тестами.
Призначте різні заблоковані сегменти пам'яті для мікропрограм, логіки та стеку протоколів. Протестуйте випадки зловживання. Способом атаки може бути посилка спеціальних значень у заголовку пакета.
Приклад
Збої ПЛК, викликані даними, які виходять за допустимий діапазон, дуже поширені. Це відбувається, наприклад, коли вхідне значення призводить до того, що індекси масиву виходять за межі, або таймери запускаються з від'ємними передустановками, або відбувається ділення на нуль.
Типові випадки:
- поділ на нуль;
- переповнення лічильника;
- від'ємна статутка лічильника або таймера;
- переповнення регістрів вводу/виводу.
Безпека
Атаки на ПЛК можуть включати зміну логіки, активацію нової програми, тестування нового коду, завантаження нового рецепта процесу, вставлення допоміжної логіки для надсилання повідомлень або активації будь-якої функції. Оскільки більшість ПЛК не забезпечують перевірку криптографічної цілісності, прапори можуть бути хорошими індикаторами, якщо відбудеться одна з вищевказаних змін.
Надійність
Серйозне ставлення до прапорців може запобігти роботі ПЛК з програмними помилками і помилками введення/виводу. Крім того, якщо виникає помилка, джерело збою більш очевидне.
5) Використовуйте криптографічні методи або контрольну суму для перевірки цілісності коду
Використовуйте хеші або контрольну суму (якщо хеші не можуть бути використані) для перевірки цілісності коду і видачі попередження, якщо він був змінений.
Опис
А) Контрольні суми
Там, де (криптографічні) хеші неможливі, можна використовувати контрольні суми. Деякі ПЛК генерують унікальні контрольні суми при завантаженні коду в ПЛК. Контрольна сума повинна бути задокументована виробником/інтегратором після SAT (On Site Acceptance Test) і бути частиною гарантійних або сервісних умов.
Якщо функція контрольної суми спочатку не доступна в контролері, її також можна згенерувати за допомогою сторонніх інструментів, і наприклад, один раз на день використовувати для порівняння з хешем вихідного коду в ПЛК, щоб переконатися, що вони збігаються. Хоча це не буде надавати оповіщення в реальному часі, цього достатньо, щоб дізнатися, що хтось змінив код ПЛК.
Значення контрольної суми також можна перемістити в регістр ПЛК і налаштувати для видачі аварійного сигналу, коли він зміниться.
Б) Хеші
ЦП ПЛК зазвичай не мають обчислювальної потужності для генерації або перевірки хешів під час роботи.
Спроба хешування може призвести до збою ПЛК. Але спеціальне програмне забезпечення для роботи ПЛК може мати можливість обчислювати хеші з коду ПЛК і зберігати їх або в ПЛК, або десь ще в системі управління.
Приклад
Постачальники ПЛК, які мають функції контрольної суми:
- Siemens (див. приклад)
- Rockwell
Зовнішнє програмне забезпечення може використовуватися для генерації контрольних сум:
- Version dog
- Asset Guardian
- PAS
Безпека
Важливо знати про зміни коду ПЛК, і пов'язані з цим ризики, щоб перевіряти проект на безпеку роботи ПЛК після змін.
Надійність
Хеші або контрольні суми також можуть бути засобом перевірки того, що в ПЛК знаходиться код затверджений постачальником.
Від себе
Гарна стаття про контрольну суму
Коротко, що таке хешування
Запрошую всіх у telegram чат і telegram канал для фахівців у галузі промислової автоматизації. Тут можна безпосередньо поставити дуже вузькоспеціалізоване питання і навіть отримати відповідь.
Чекаю вашу думку і досвід щодо даного пункту в коментарі. Всього буде 20 пунктів з "" Top 20 Secure PLC Coding Practices ", сподіваюся на кожен отримати якомога більше коментарів, щоб скласти свій список рекомендацій щодо програмування для ПЛК.
Безпека ПЛК: 3) Вся логіка процесу по можливості повинна бути в ПЛК
Безпека ПЛК: 6,7) Перевіряйте таймери, лічильники та парні входи/виходи
Тільки зареєстровані користувачі можуть брати участь в опитуванні. Увійдіть, будь ласка.
Яким чином ви відстежуєте цілісність проекту?
20% Використовую вбудовані в середовищі розробки інтсрументи 2
10% Генерую і зберігаю хеші 1
20% Обчислюю і зберігаю контрольні суми 2
20% Не стежу за цілісністю, але тепер буду 2
30% Не стежу за цілісністю, і не буду 3
Проголосували 10 користувачів. Утрималися 3 користувачі.