Определите блоки регистров для определенных функций, чтобы проверять данные, избегать переполнений и блокировать несанкционированные записи для защиты данных контроллера.  Временная память является легко используемой областью памяти. Если записывать данные в регистры Modbus, и не учесть размер, то выходящие за границу данные могут привести к перезаписи регистров памяти, используемых для временных вычислений.  Как правило, к регистровой памяти могут обращаться другие устройства в сети ПЛК для чтения и операций записи. Некоторые регистры могут быть прочитаны HMI, а другие могут быть записаны SCADA и т. д. Наличие определенных регистров для определенных приложений также упрощает задачу разграничения доступа чтения/записи.   Пример разделения регистров по функциям:  для чтения  для записи (с HMI / контроллеров / другие внешние устройства)  для проверенной записи  вычислительные функции (промежуточных значений)  Обеспечение внешней записи только в допустимые регистры помогает избежать ошибок сброса основной памяти из-за злонамеренных действий. Эти назначенные блоки регистров можно использовать как буфер для записи ввода-вывода, таймеров и счетчиков, проверяя, что буфер полностью записан (не содержит частично старых, частично новых данных).  Дополнительная информация:  Основная память и регистровая память используются по-разному. Основная память используется постоянно во время выполнения программной логики, тогда как регистровая память используется как временная память. Несмотря на то, что регистровая память является временной, она используется исполняющей логикой и может содержать некоторые важные переменные, которые влияют на основную логику.  Что может случиться, если не соблюдать данную рекомендацию: (Источник: G. P. H. Sandaruwan, P. S. Ranaweera, Vladimir A. Oleshchuk, PLC Security and Critical Infrastructure Protection):  Siemens обычно использует оперативную память в области флагов (от 200.0 до 255.7). Изменения в этой области с большой вероятностью приведут к серьезной неисправности ПЛК в зависимости от важности этого бита или байта.  Предположим, что злоумышленник может получить доступ к одной из машин в сети ПЛК и заразить эту машину червем, способным записывать произвольные значения в регистровую память. Поскольку значения регистровой памяти изменяются произвольно, он может изменять значение, например, давления.  Выполнение логики установило новое значение и в зависимости от изменения может произойти нарушение допустимого уровня безопасности системы и, возможно, отказ.  Примеры использования рекомендаций:  В сценарии, где есть зона безопасности (но DCS может читать), межсетевой экран может регистрировать любые попытки "записи" с правилом, что эти регистры READ ONLY в зоне безопасности.  В другом сценарии могут быть некоторые регистры с возможностью записи, а другие доступны только для чтения, но наличие всех регистров READ ONLY в одном массиве упрощает их настройку в контроллере (или брандмауэре). Упрощается защита разных данных контроллера (чтение / запись / проверка).  Упрощается работа брандмауэров, чувствительных к протоколам: правила становятся проще, потому что ясно, какие блоки регистров разрешены для доступа HMI. Упрощаются правила брандмауэра.  Несанкционированное внесение изменений во внутреннюю временную память является легко эксплуатируемой уязвимостью (обходная логическая атака).  Когда входы и выходы в процедуры ПЛК должным образом проверены, любые изменения (со стороны злоумышленника или по ошибке) могут быть легко зафиксированы вместо того, чтобы долго оставаться в логической последовательности и вызывать ошибки / проблемы позже при выполнении.  Ускоряется чтение и запись, поскольку сокращается количество транзакций.  Даже авторизованные изменения и ошибки программирования могут привести к сбою, если временная память не защищена.  Ошибки сети и связи в длинных сообщениях могут привести к непреднамеренным ошибкам, если достоверность данных не проверяется перед обработкой.  Ошибки программирования, приводящие к записи во временную память, могут затруднить поиск ошибок, поэтому проблемы можно избежать, назначив определенные регистры для записи.  Напоминаю, что это перевод, и автор не может знать всех тонкостей всех ПЛК. Оставляйте замечания в комментариях,. Также не забывайте, что некоторые рекомендации могут не подходить для отдельных ПЛК. Разные производители имеют разную структуру и типы памяти.  Приглашаю всех в telegram чат и telegram канал для специалистов в области промышленной автоматизации. Здесь можно напрямую задать очень узкоспециализированный вопрос и даже получить ответ. Жду ваше мнение и опыт относительно данного пункта в комментариях. Всего будет 20 пунктов из "Top 20 Secure PLC Coding Practices", надеюсь на каждый получить как можно больше комментариев, чтобы составить свой список рекомендаций по программированию для ПЛК. Безопасность ПЛК: 8,9) Проверяйте входные переменные, следите за косвенными обращениями Безопасность ПЛК: 11,12) Скоро Software Developer