Компания Siemens в версии 17 TIA Portal Step7 для FW ≥4.5 (S7-1200) и FW ≥2.9 (S7-1500) встала на путь легкого принуждения к повышению уровня информационной безопасности. Теперь TIA Portal мягко предлагает задать пароль на хранилище сертификатов CPU, пароль на чтение/запись программы CPU, пароль на обмен с HMI и, конечно же, шифрованный обмен с применением сертификата. Все это, конечно, отключаемо, но зачем отключать то, что предлагается «из коробки»? События этого века показали всю важность инфобеза систем промышленной автоматики, а так же показали, что происходит при защите систем «от честного человека» (я про stuxnet, да). Основная причина, по которой, как мне кажется, шифрование не применяется - непонимание принципов работы и инерционность мышления (наши деды ни про какой TLS не слышали, и мы тоже не будем). В рамках одного проекта TIA Portal все еще более-менее ясно, а как быть с подключением «непортальных» систем? Рассмотрим такое подключение на примере S7-1500 FW2.9 и WinCC OA 3.18. Поскольку главная задача- это настройка со стороны WinCC OA, то на стороне TIA Portal мы не будем использовать global security settings, обойдемся «простым» проектом. Кстати, вот настройки безопасности, которые появляются после выполнения «визарда» при добавлении CPU в проект.

Тут задается пароль ПЛК для доступа к секретным данным, вроде сертификатов.

Добавьте описание

А это уровни доступа к ПЛК по паролю. Делятся на «пароль не нужен», «только чтение данных + связь с HMI», «только связь с HMI» и «пароль на все». В данном случае выбран режим «пароль на все» и задано два пароля - один пароль на полный доступ будет знать только разработчик ППО CPU (и его начальник, но это организационные меры), а пароль на связь с панелью или скадой по секрету сообщается разработчику прикладного проекта WinCC OA.

Добавьте описание

На этой вкладке указано, что мы работаем только по безопасным каналам связи с программатором, скадой и панелью, выбран сертификат со стороны ПЛК. Обратите внимание, что опция «разрешить put/get» недоступна. Все правильно, ибо в словах «put/get» the letter «s» stands for security, а по-русски: «такой механизм вообще нельзя использовать при шифрованной связи».

Добавьте описание

А вот тут мы видим список сертификатов CPU. И я предлагаю сразу проэкспортировать сертификат из проекта Portal куда-нибудь на диск в виде файлика. Напомнию про организационные меры - это очень важный файл, не надо выкладывать его на торренты с точным указанием, на каком объекте и в какой системе он применяется.

В обязательном порядке выполняем экспорт данных PLC. Для этого в TIA Portal должна быть установлена бесплатная опция SIMATIC SCADA Export соответствующей версии.

Добавьте описание

Экспорт данных ПЛК в виде файла Export.zip сохраняется на рабочем столе моего ПК.

Ну, а теперь перейдем к верхнему уровню. Создаем «legacy standart project» или же «стандартный с базовыми настройками безопасности», так как тип проекта не влияет на работу драйвера. Добавляем в консоль драйвер S7plus под номером 2 и запускаем его. 

Добавлен и запущем драйвер S7plus

Сейчас необходимо скопировать файл экспорта и файл сертификата в соответствующие директории прикладного проекта WinCC OA.

Export.zip - в <project_name>\data\TIAProjects

Добавьте описание

Сертификат - в <project_name>\data\s7plus\cert

Добавьте описание

Открывает модуль «управление системой» и заходим в пункт «драйверы S7». 

Добавьте описание
Добавьте описание
Добавьте описание

Нажимаем кнопку Создать, задаем имя соединения и приступаем к его настройке.

Добавьте описание

Выбираем в качестве источника имен тэгов и конфигурации TIA Project, проверяем номер драйвера (2) и жмем ОК. В следующем окне выбираем имя проекта (Export, мы его уже скопировали) и имя ПЛК в рамках проекта, это PLC_1. ПЛК можно развернуть и посмотреть его тэги. В завершении жмем ОК.

Добавьте описание
Добавьте описание

Проверяем настройки PG/PC. Мой ноутбук смотрит в сеть контроллера беспроводным интерфейсом и общается в режиме TCP/IP, все верно.

Добавьте описание

Если прямо сейчас в окне соединения мы попытаемся установить связь, то ничего не получится, мы увидим в журнале событий сообщение о невозможности законнектиться, ибо TLS. Так что, даже не пытаемся, продолжаем настройки... Хотя, нет. Попытаемся! Ииииии: SEVERE, 88/s7plus, S7PlusConnection, async command type 1, get_request_error, _myS7enc, Response from PLC, when TLS must be used (TLS_only). (-6772897069067010568)

Добавьте описание

Очевидно, не работает от того, что не настроено шифрование. Перейдем на вкладку расширенных настроек и выставим галочку Use TLS, источником сертификата оставим файл, а сам файл мы уже скопировали в нужную папку проекта.

Было

Было

Ставим галочку

Ставим галочку

Выбираем файл

Выбираем файл

Стало

Стало

Теперь остается указать пароль. Но какой? Их у нас целых три. Очевидно, что пароль на доступ к секьюрным данным ПЛК - не тот, что нам нужен. Остается пароль полного доступа и пароль HMI. Вводим пароль доступа HMI, и нам тут же предлагают сгенерировать ключ со стороны WinCC OA.

Нажимаем Create

Нажимаем Create

Нажимаем «Создать»

Нажимаем «Создать»

Этот приватный ключ создается в папке проекта config.

Этот приватный ключ создается в папке проекта config.

Устанавливаем соединение при помощи соответствующей галочки и смотрим журнал.

Добавьте описание

На самом деле никто не запрещает нам со стороны WinCC OA применить пароль полного доступа. Тоже будет работать, ибо Full Access включает в себя и HMI в том числе. Если же вдруг опечатались или ввели не тот пароль, лог будет забиваться следующими сообщениями:

SEVERE, 54, Unexpected state, NotificationHandler, handle_notification, _myS7enc, Invalid value retrieved for subscription. Access denied = 1, Out of memory = 0, Status = 10

Access denied = 1, т.е. доступ запрещен.

Кроме того, возможна ситуация отсутствия пароля, как в примере ниже.

Добавьте описание

Оставляем строчку пароля пустой, и все прекрасно работает. Шифрование связи при этом сохраняется, а без файла сертификата никто не подключится.

Добавьте описание

Далее необходимо убедиться, в наличии обмена на уровне тэга. Для этого запускаем модуль para, создаем точку данных в типе ExampleDP_Bit и навешаем на нее адресный конфиг.

Добавьте описание
Добавьте описание

Настраиваем переменную на чтение. Я выбрал стандартный тэг из серии Clock (меняет свое значение с известной частотой), выбираем поллинг, создаем группу опроса и делаем ее активной, ну и делаем активным сам конфиг.

После чего убеждаемся, что значение переменной меняется.

Добавьте описание

Надеюсь, этот незамысловатый гайд поможет многим коллегам быстро найти ответ на вопрос «А чего это мы не подключаемся к контроллеру, а к соседнему подключаемся, сделав точно такие же настройки».

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


  1. Mitya78
    26.06.2023 12:40

    Не совсем по теме, но почему если я для ПЛК S7-1200/1500 ставлю подключение к веб-серверу через https, устанавливаю сертификат, то потом браузер будет непременно ругаться при подключении и приходится настаивать что да, хочу перейти по этому адресу?


    1. akcount Автор
      26.06.2023 12:40

      Ругается, ибо сертификат самоподписанный.

      Либо смириться, либо внести "сименс" в доверенные на всех компах, откуда будете подключаться, либо платить за воздух и купить сертификат.


      1. NutsUnderline
        26.06.2023 12:40
        +1

        LetsEncrypt, ZeroSSH как бы есть, но оно расcчитано на то что TLS будет из внешки, по доменному имени, либо по IP, и для верификации производится внешний доступ. Т.е. для доступа из внешки это вполне реально, и даже надо, но нужно либо сертификат как то деплоить на сименс, либо проще все сделать через реверсивный прокси.

        Для внутренней сети хоть платный, хоть бесплатный сертификат так же потребуется как то распространять, и можно извращнутся и сделать внутренний DNS с таким же доменным именем как и внешнее... но мне кажется не стоит так делать... да и довольно заморочно.


        1. akcount Автор
          26.06.2023 12:40

          Отличный ответ, куда лучше моего!

          Мое предположение про "сделать Сименс доверенным" (очевидно, вручную и на каждой машине) - соответствует истине или фантазии?


          1. NutsUnderline
            26.06.2023 12:40
            +1

            Я не проф. сетевик, но получение сертификатов на сервера уже поизучал и себе настроил. Именно поэтому было интересно посмотреть че они там сделали в Сименсе.

            Сомневаюсь, что самописный сертификат в браузере - рекомендованная практика, но по факту подобный совет регулярно встречается на форумах, уж тем более - в настройках бытовых вещей, типа роутеров. Хотя роутер на openwrt можно несложно на автополучение сертификата извне настроить, уж на нем то интернет есть.

            В случае закрытой сети, помнится в среде Windows можно настроить обновление своих сертификатов в браузере вместе с обновлениями. Думаю нагуглить эту информацию не составит труда, это тоже довольно типовой вопрос.