ПЛК и модули сетевых интерфейсов обычно поддерживают несколько протоколов связи, которые включены по умолчанию. Отключите порты и протоколы, которые не требуются для проекта.   Распространенными протоколами, обычно включаемыми по умолчанию, являются, например: HTTP, HTTPS, SNMP, Telnet, FTP, MODBUS, PROFIBUS, Ethernet/IP, ICMP и т.д.   Наилучшей практикой является разработка схемы потока данных, которая отображает необходимые связи между ПЛК и другими компонентами системы.   На диаграмме потока данных должны быть показаны как физические порты ПЛК, так и логические сети, к которым они подключены. Для каждого физического порта должен быть определен список необходимых сетевых протоколов, а все остальные отключены.  Например, многие ПЛК включают встроенный веб-сервер для обслуживания и устранения неполадок. Если эта функция не будет использоваться - ее следует отключить, так как это может быть использовано для атаки.  Каждый включенный порт и протокол увеличивают потенциальная область атаки ПЛК. Самый простой способ убедиться, что злоумышленник не сможет использовать их для несанкционированной связи - это полностью отключить их.  Если ПЛК не может осуществлять связь через определенный порт или протокол, это также уменьшает потенциальный объем (искаженного) трафика, будь то вредоносный или нет, что снижает вероятность сбоя ПЛК из-за непреднамеренных/искаженных пакетов связи.  Отключение неиспользуемых портов и протоколов также облегчает техническое обслуживание, поскольку снижает общую сложность ПЛК. То, чего нет, не нуждается в администрировании или обновлении.  Ограничьте типы соединений и доступные данные для сторонних интерфейсов. Соединения или интерфейсы передачи данных должны быть четко определены и ограничены, чтобы чтение/запись были доступны только для необходимого обмена данными.  В некоторых случаях, из-за длинных кабельных трасс или большого объема данных, сторонние коммуникации представляют собой лучший бизнес-вариант для передачи данных, чем жесткий проводной обмен данными между двумя отдельными сторонами.  При разработке и внедрении стороннего интерфейса обмена данными следует учитывать и следовать, где это практически возможно, следующим принципам:  Используйте выделенный коммуникационный модуль, либо напрямую подключенный к стороннему ПЛК или оборудованию для обмена данными, либо используйте выделенное сетевое оборудование, физически отделенное от основной сети каждой стороны. MAC-адрес подключенных устройств обычно доступен в системных переменных для любого устройства с поддержкой ICS Ethernet, что позволяет проверять идентичность устройства с помощью многофакторного подхода (IP-адрес + код производителя MAC = доверенное устройство). Эта практика, безусловно, не является надежной, так как MAC- и IP-адреса могут быть подделаны, но она служит для повышения планки с точки зрения связи между надежными системами и устройствами ICS.  При выборе протокола для сторонних интерфейсов выберите протокол, который сводит к минимуму возможность третьей стороны записывать данные в систему владельца.  Выберите способ подключения и порт подключения, которые не позволяют третьей стороне настраивать ПЛК владельца или оборудование для обмена данными.  Третья сторона не должна иметь возможности читать или записывать какие-либо данные, которые не были явно определены и предоставлены.  Используйте сторожевой таймер для контроля связи, чтобы команды не отправлялись на ПЛК в режиме сбоя. Последовательное подключение: Используйте специальный коммуникационный модуль для каждого стороннего интерфейса с ограниченным массивом данных. Убедитесь, что сторона владельца соединения является Инициатором, а третья сторона - Ответчиком.  Ethernet/IP: Некоторые ПЛК позволяют модулям связи функционировать в качестве брандмауэра и могут выполнять глубокую проверку пакетов (DPI) или ограничивать интерфейсы модулей связи, чтобы ограничить обмен данными предопределенным подмножеством. Если эти функции доступны и используется протокол Ethernet/IP, убедитесь, что эти функции включены и настроены.  Когда операционные или договорные требования не позволяют владельцу выполнить предыдущие пункты, рассмотрите возможность использования отдельного “концентратора данных” (он же прокси/DMZ) ПЛК для буферизации данных и защиты владельца от нежелательной записи/программирования со стороны третьей стороны. Убедитесь, что объединительная плата этого ПЛК не может быть пройдена из сторонней сети.  Трубопроводные или арендные устройства автоматической передачи на хранение (LACT), которые передают и измеряют углеводороды или воду, обменивающиеся между добывающей или трубопроводной компанией, расположенной выше по течению, и трубопроводной компанией среднего течения с сетевыми или последовательными подключениями, обменивающимися измерительной, государственной и разрешительной информацией между компаниями.   Региональный поставщик питьевой воды, разделяющий расход воды, подаваемой на водопроводную станцию местного муниципалитета.   Ограничение доступа из сторонних сетей и оборудования.  Аутентификация внешних устройств для предотвращения подмены.  Ограничивается возможность преднамеренных или непреднамеренных модификаций или доступа из сторонних мест или оборудования.  Определите безопасные состояния для процесса в случае перезапуска ПЛК.  Если что-то заставляет ПЛК перезапускаться в середине рабочего процесса, мы должны быть уверены, что программа продолжится плавно с минимальными нарушениями процесса. Убедитесь, что процесс, которым он управляет, безопасен для перезапуска.   Если нецелесообразно настраивать ПЛК на безопасный перезапуск, убедитесь, что он предупреждает вас об этом факте и не выдает никаких новых команд. Кроме того, в этом случае убедитесь, что стандартные операционные процедуры (SOP) содержат очень четкие инструкции по настройке ручного управления, чтобы ПЛК правильно запустил процесс.   Кроме того, документируйте все процедуры запуска, выключения, устойчивого управления и перезапуска системы управления процессом.  Исключается потенциально неожиданное поведение:  основной вектор атаки для ПЛК - заставить его выйти из строя и/или перезапустить. Для многих ПЛК это не так сложно сделать, потому что многие места не могут хорошо справляться с неожиданными входами или слишком большим трафиком. Хотя существует несколько проверок действий контроллера во время его работы, как он обрабатывает запуск с запущенным процессом, обычно неясно. Это может быть неочевидно, но это основной вектор атаки, если мы примем во внимание вредоносное поведение злоумышленника.  Избегаются непредвиденные задержеки: если после включения ПЛК машина состояний инициализируется в состояние с некоторыми условиями, которые не позволяют запустить процесс, и оператор не может нормализовать систему, техническому специалисту потребуется вмешаться в программу ПЛК, чтобы заставить его перейти в желаемое состояние, чтобы иметь возможность начать работу. Это может привести к задержкам и производственным потерям.  Стартовал опрос специалистов области промышленной автоматизации, благодаря которому планируем составить общее представление о состоянии индустрии, а также попытаться заглянуть в будущее. Расскажите о своем опыте, что займет у вас буквально 5 минут.  Результаты опроса будут опубликованы в telegram-канале @pro_PLC в конце декабря 2021. Просим помочь в распространении данного опроса, делитесь ссылкой  в рабочих и профессиональных чатах. https://forms.gle/VKNf21VCSPjSXGSa8 Приглашаю всех в telegram чат и telegram канал для специалистов в области промышленной автоматизации. Здесь можно напрямую задать очень узкоспециализированный вопрос и даже получить ответ. Жду ваше мнение и опыт относительно данного пункта в комментариях. Всего будет 20 пунктов из "Top 20 Secure PLC Coding Practices", надеюсь на каждый получить как можно больше комментариев, чтобы составить свой список рекомендаций по программированию для ПЛК. Безопасность ПЛК: 11, 12) Реализуйте механизмы для проверки достоверности измерений и входных значений Безопасность ПЛК: 16-19) Отслеживайте длительность циклов, потребление памяти, логируйте аварийные ситуации Software Developer