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) Проверяйте таймеры, счётчики и парные входы/выходы

Комментарии (0)