16) Суммируйте время циклов и направляйте их на HMI
Суммируйте время циклов каждые 2-3 секунды и направляйте на HMI для визуализации на графике.
Описание
Время цикла обычно является системной переменной в ПЛК и может использоваться для суммирования в коде ПЛК. Суммирование должно быть сделано для расчета среднего, пикового и минимального времени цикла. HMI должен отслеживать эти значения и предупреждать о значительных изменениях.
Время цикла — это время, необходимое для вычисления каждой итерации логики для ПЛК. Программные циклы представляют собой комбинацию лестничных диаграмм (LD), функциональных блок-схем (FBD), списка инструкций (IL) и структурированного текста (ST). Эти логические компоненты могут быть объединены вместе последовательными функциональными диаграммами (SFC).
Время цикла на ПЛК должно быть постоянным, если только не изменятся, например:
Состояние сети
Логика ПЛК
Процесс
Таким образом, необычные изменения времени цикла могут быть индикатором изменения логики ПЛК и предоставлять полезную информацию для проверки целостности.
Визуализация значений с течением времени с помощью графика обеспечивает интуитивно понятный способ привлечь внимание к аномалиям, которые было бы труднее заметить, просто имея абсолютные значения.
Пример
Многие ПЛК имеют мониторинг “максимального времени цикла” на аппаратном уровне. Если время цикла превышает максимальное значение, аппаратное обеспечение останавливает процессор (5). Конечно, злоумышленники знают об этом и постараются максимально сократить возможный код атаки, чтобы свести к минимуму влияние на общее время цикла. В дополнительной программе мониторинга времени цикла программного обеспечения эталонное время цикла tref определяется как время базового цикла. Поскольку небольшие колебания являются естественными, необходимо определить приемлемый порог (1,3). Мониторинг цикла запускается, если порог превышен (2,4).
Любое отклонение от контрольного времени может быть сохранено в файле журнала, подобном этому:
Если время цикла отражено в HMI, то сразу видны большие нагрузки процессора. На следующей диаграмме в качестве примера показана PLC-программа с периодически выполняемым вредоносным кодом. (1,3) показывают допустимые колебания времени цикла (“шум”) во время нормальной работы. Также выполняется код атаки (2,4), который увеличивает время цикла.
Безопасность
Атаки на ПЛК включают изменение его логики, активацию новой программы, тестирование нового кода, загрузку нового рецепта процесса, вставку вспомогательной логики для отправки сообщений или активации какой-либо функции. Для большинства ПЛК традиционные проверки криптографической целостности невозможны. Тем не менее, полезно знать, если произойдет какое-либо из вышеперечисленных изменений логики. Поскольку время цикла довольно постоянно при нормальных обстоятельствах, изменения во времени цикла являются хорошим показателем того, что логика в одном из вышеперечисленных логических компонентов изменилась.
Надёжность
См. раздел Безопасность, но не по злонамеренным причинам.
17) Регистрируйте время безотказной работы ПЛК и отображайте его в HMI
Логируйте время безотказной работы ПЛК, чтобы знать, когда он был перезапущен. Отслеживайте время безотказной работы на HMI для диагностики.
Описание
Следите за временем безотказной работы ПЛК
В самом ПЛК (если время работы является системной переменной)
В самом ПЛК, если у него есть MIB-2 / любая другая реализация SNMP
Через сторонние инструменты через, например, SNMP
Если у ПЛК есть SNMP с MIB-2, что очень распространено. Сброс времени безотказной работы является важным показателем для перезапуска ПЛК. Убедитесь, что HMI предупреждает о любом перезапуске ПЛК.
Безопасность
Самый распространенный вектор атаки ПЛК - заставить его выйти из строя и/или перезапустить. Для многих ПЛК это не так сложно сделать, потому что многие ПЛК не всегда хорошо справляются с неожиданными входами или слишком большим трафиком. Таким образом, неожиданные перезапуски могут быть индикатором того, что ПЛК сталкивается с необычными действиями.
Надёжность
Перезапуск ПЛК также хорош для диагностики в случае сбоев и для мониторинга того, какие ПЛК работают в какое время.
Поддержка
Время безотказной работы с кодами ошибок будут полезны для диагностики.
18) Логируйте неожиданные остановки ПЛК и выводите их на HMI
Храните события неожиданной остановки ПЛК из-за сбоев или отключений для будущего извлечения системой мониторинга в HMI, чтобы проанализировать их перед перезапуском ПЛК. Синхронизируйте время для получения корректных данных.
Описание
События сбоя указывают, почему ПЛК выключился, чтобы проблему можно было устранить до повторного включения.
Некоторые ПЛК могут содержать коды ошибок последнего события, когда ПЛК вышел из строя или неправильно отключился. Запишите эти ошибки, а затем удалите их. Возможно, было бы неплохо сообщить об этих ошибках в HMI в качестве информационных данных или на сервер системного журнала, если такие функции и такая инфраструктура существуют.
Большинство ПЛК также имеют специальные функции первого сканирования, которые генерирует события. Это поведение, которое в той или иной форме присуще почти всему оборудованию ПЛК. По сути, это один или несколько флагов или назначенная процедура, которая выполняется при первом сканировании ПЛК после его “пробуждения”. Это первое сканирование должно быть зарегистрировано и отслежено.
Безопасность
Журналы позволяют устранять неполадки в случае инцидента. Прежде чем ПЛК начнет функционировать, особенно после возникновения проблем, важно убедиться, что ему можно доверять.
Надёжность
Журналы также являются хорошими источниками для отладки, если событие не было вызвано злонамеренно.
19) Контролируйте использование памяти ПЛК и отображайте его на HMI
Измеряйте и предоставляйте базовую информацию об использовании памяти каждым контроллером, развернутым в производственной среде, и отображайте ее на HMI.
Описание
Поскольку увеличение строк кода в логике также может привести к увеличению потребления памяти во время выполнения, программистам ПЛК рекомендуется отслеживать любое отклонение от базового и выделять предупреждение для этого события.
Пример
В ПЛК Rockwell Allen Bradley на контроллере можно установить базовую величину использования памяти, а отслеживать её можно с помощью средства мониторинга задач RSLogix 5000. С помощью трендов можно отслеживать не только основную память, но также память ввода-вывода и память тегов.
Безопасность
Увеличение использования памяти может быть показателем того, что ПЛК выполняет измененный код.
Надёжность
Отслеживание использования памяти для запущенных программ может быть полезно для предотвращения полного потребления памяти и возможного сбоя контроллера ПЛК.
Поддержка
Отслеживание использования памяти может быть использовано для настройки и определения наилучшего времени сканирования для контролируемого контроллера, а также для устранения неполадок и проблем, связанных с неисправными состояниями.
От себя
Проект proPoll
Стартовал опрос специалистов области промышленной автоматизации, благодаря которому планируем составить общее представление о состоянии индустрии, а также попытаться заглянуть в будущее. Расскажите о своем опыте, что займет у вас буквально 5 минут.
Результаты опроса будут опубликованы в telegram-канале @pro_PLC в конце декабря 2021. Просим помочь в распространении данного опроса, делитесь ссылкой в рабочих и профессиональных чатах. https://forms.gle/VKNf21VCSPjSXGSa8
Сообщество
Приглашаю всех в telegram чат и telegram канал для специалистов в области промышленной автоматизации. Здесь можно напрямую задать очень узкоспециализированный вопрос и даже получить ответ.
Жду ваше мнение и опыт относительно данного пункта в комментариях. Всего будет 20 пунктов из "Top 20 Secure PLC Coding Practices", надеюсь на каждый получить как можно больше комментариев, чтобы составить свой список рекомендаций по программированию для ПЛК.
Безопасность ПЛК: 13-15) Сетевые интерфейсы и безопасная перезагрузка ПЛК
Безопасность ПЛК: 20) Ловите ложные срабатывания для критических предупреждений