Промышленный прокси-сервер
Промышленный прокси-сервер предназначен для работы с промышленными протоколами и реализует следующие функции:
Постановка в разрыв между управляющим и контролируемыми устройствами.
Независимое терминирование сессий от всех устройств на себя.
Полный разбор пакетов в соответствии со спецификациями промышленных протоколов.
Осуществление гибкой фильтрации по всем параметрам или комбинациям параметров.
Логирование событий и трафика.
Список поддерживаемых протоколов:
МЭК 60870-5-104
Описание логики работы промышленного прокси-сервер
Сетевой (L3/L4) уровень
В основе логики работы лежит принципиальная схема, где промышленный прокси-сервер помещается «в разрыв» между управляющей станцией (SCADA) и контролируемыми устройствами (ПЛК). И, перехватывая весь проходящий трафик, предотвращает прямое их взаимодействие.
Вместо прямой передачи данных прокси-сервер самостоятельно терминирует на себе обе сессии: одну — с управляющим устройством, другую — с контролируемым. Это позволяет ему полностью контролировать сетевое взаимодействие, анализировать содержимое каждого пакета и принимать решение о его дальнейшей передаче или блокировке.
Технически перехват трафика реализуется с помощью механизма DNAT (Destination Network Address Translation): трафик, направленный к удаленному хосту, перехватывается и перенаправляется на внутренний интерфейс промышленного прокси-сервера для дальнейшей обработки. Ниже показано, как изменяется схема сети при включении прокси-сервера.
Прикладной уровень
Промышленный прокси-сервер выполняет глубокий разбор TCP-пакетов в соответсвии со спецификацией промышленного протокола (например, МЭК-104). Основной логической единицей анализа становятся отдельные объекты информации (например, ASDU, если использовать протокол МЭК-104). Фильтрация применяется независимо к каждому объекту, даже если они находятся в одном TCP-пакете. При этом учитываются также штатные признаки самого TCP-пакета.
Группа фильтров — базовое понятие. Каждый объект информации, обрабатываемый промышленным прокси-сервером, попадает в заданную Группу фильтров, где последовательно проверяется по установленным критериям фильтрации в так называемых Фильтрах. Проверка идет до первого совпадения параметров объекта информации с условиями Фильтра. Как только совпадение найдено, выполняется указанное в Фильтре политика выполнения Действие, и дальнейшие проверки прекращаются. Если объект информации дошел до конца Группы фильтров, не вызвав срабатывания, к нему применяется Действие по умолчанию. Ниже представлена схема с логикой обработки объекта информации в Группе фильтров.
Каждый фильтр должен иметь определенную политику выполнения - Действие. Для протокола МЭК-104 используются следующие политики выполнения(Действия):
Принимать - разрешение к дальнейшей передаче объекта информации при совпадении параметров с критериями фильтрации;
Отбрасывать - блокирование и отбрасывание объекта информации при совпадении параметров с критериями фильтрации;
Замена - произвести замену полезной нагрузки объекта информации IOA на заданное значение в конфигурируемом Фильтре;
Логический перехода - данная политика позволяет реализовывать нелинейные цепочки проверок. Объект информации в начале может обрабатываться в одной Группе фильтров, при совпадении определеных условий фильтрации, этот же Объекта информации может перемещаться для обработки в другую Группу фильтров.
Например, на схеме ниже изображено, как трафик по первичным признакам сперва распределяется в разные Группы фильтров, где и происходят основные проверки.
Закрыть сессию - производится закрытие существующей TCP-сессии при совпадении параметров обрабатываемого объекта информации с критериями фильтрации;
Установка ЛП (локальной переменной) - политика с нестандартной логикой выполнения. Пользователь может объявить переменную, действующую только в пределах программного модуля Промышленного прокси-сервера. Её значение не влияет на передаваемый Объект информации. Локальную переменную можно, например, присвоить одному фильтре, выполнив арифметические действия, а затем сравнить с заданными значениями в другом фильтре. Подробный кейс применения доступен в разделе Примеры конфигурации промышленного прокси-сервера.
Обработка заблокированных пакетов при использовании политики выполнения Отбрасывать
Поскольку МЭК-104 содержит механизмы контроля сессий, простое «тихое» отбрасывание пакета недопустимо. Это приведет к необоснованной отправке данных или разрыву соединения. Промышленный прокси-сервер обязан корректно обрабатывать блокировку на уровне протокола, имитируя ожидаемое поведение устройства.
Для решения данной проблемы промышленный прокси-сервер имеет несколько механизмов обработки заблокированных объектов информации:
Отправка в ответ S-type сообщения - в данном случае система подтверждает получение пакетов на уровне сессии МЭК-104, в результате чего сессия не рвётся, однако если клиентская сторона ожидает результата выполнения, то она ничего не получит, что может привести к перепосылкам сообщений.
Отправка в ответ I-type сообщения с заданной причиной передачи (CoT) - это более сложный механизм, позволяющий избежать повторных пересылок. Однако он применим только при определённых сочетаниях причины передачи (CoT) и типа объекта информации (ASDU).
Описание параметров
Конфигурация промышленного прокси-сервера производится на вкладке Службы - Промышленный прокси
В верхней части страницы отображается статус службы и статистическая сводка текущей сессии Промышленного прокси-сервера.
Блок статистической сводки Промышленного прокси содержит 2 строки: Клиент (SCADA) и Сервер (ПЛК). Для каждой стороны обмена формируются счётчики:
Настройки логически разбиты на несколько категорий, которые разделены на разные вкладки:
Общие настройки
Серверы
Группы фильтров
Фильтры
Локальные переменные (ЛП)
Общие настройки
На вкладке Общие настройки производится настройка параметров основной службы.
Серверы
На вкладке Серверы задаются параметры контролируемых устройств(например, ПЛК).
Важно
Добавлять конфигурацию в Серверы параметры клиентских узлов (например, SCADA) не нужно.
Статистика по добавленным ранее серверам содержит описание конфигураций:
При нажатии на кнопку + открывается окно добавления сервера:
Сервер - МЭК-104
Группы фильтров
На вкладке Группы фильтров задаются последовательность фильтров и Действие по умолчанию (если ни один фильтр не сработал).
На картинке ниже представлена актуальная очерёдность Фильтров. Каждый Фильтр имеет уникальный идентификатор (ID), который задается динамически при создании конфигурации, и который не влияет на последовательность обработке в Группе Фильтров.
Фильтры
На вкладке Фильтры создаются отдельные правила для последующего добавления в какую-то Группу фильтров.
Ниже приведён список Действий с описанием логики работы.
Действие «Отбрасывать»
В случае выбора Действия Отбрасывать появляются дополнительные опции обрасывания, многие из которых применимы только в случае блокировки трафика с определёнными типами объекта информации (ASDU) или причины передачи (CoT). В таблице ниже дано описание дополнительных опций и их зависимости от параметров трафика.
Локальные переменные (ЛП)
На вкладке Локальные переменные (ЛП) можно создать Локальные переменные для последующего использовании в Фильтрах
Подсистема логирования Промышленного прокси
Подсистема логирования состоит из разделов:
Журналы системы
Журнал фильтров
Журналы системы
Журналы системы расположены в разделе Службы - Промышленный прокси - Журналы системы
В данном журнале фиксируются системные события и ошибки службы Промышленного прокси-сервера. В таблице ниже представлено описание основных системных событий.
Журнал фильтров
Журнал фильтров расположен в разделе Службы - Промышленный прокси - Журнал фильтров
В данном журнале фиксируются события фильтрации трафика. В таблице ниже представлено описание основных атрибутов событий фильтрации.
Фильтровать события возможно по категориям:
Все - все доступные события;
DEBUG - отладочная информации;
INFO - информационное сообщения (события фильтрации трафика);
WARNING - предупреждения;
ERROR - ошибки выполнения;
Примеры конфигурации промышленного прокси-сервера
Конфигурация с действием по умолчанию «блокировать»
Для примера сконфигурируем промышленный прокси таким образом, чтоб пропускался только трафик, который явным образом разрешнён, а весь остальной - блокировался.
Сначала необходимо сконфигурировать Фильтры
В результате должно получится 9 правил, как на скриншоте ниже.
Затем на вкладке Группа фильтров создать Группу фильтров и добавить в неё созданные ранее фильтры
Результат конфигурирования Группы фильтров на скриншоте ниже
Затем нужно сконфигурировать Сервер
Параметр |
Описание |
|---|---|
Включен |
Включить сервер |
Имя |
PLC |
Адрес сервера |
192.168.8.50 |
Порт сервера |
2404 |
Цепочка фильтров |
Filter_chain |
Результат конфигурирования Сервера на скриншоте ниже
Затем необходимо задать необходимые интерфейсы
Параметр |
Описание |
|---|---|
Включен |
Включен |
Протокол |
iec104 |
IP-адрес интерфейса (Прослушивание подсети) |
GE3, GE4 |
В итоге мы получили конфигурацию, где весь трафик будет блокироваться, за исключением явного указанного в разрешающих правилах.
Конфигурация с действием «Логический Переход»
Помимо линейной логики проверок в Группах фильтров присутствует инструмент для создания разветвлённой логики фильтрации при помощи действия Логический Переход. Для примера, сконфигурируем Группы фильтров так, чтобы в основной Группе фильтров объекты распределялись по признаку ASDU type, после чего объекты с типами M_SP_NA_1, M_ME_NC_1, M_IT_NA_1 проверялись отдельно в разных Группах фильтров. Для этого, как и в прошлом примере, начнём с конфигурирования Фильтров
В результате должно получится 3 правила, как на скриншоте ниже.
Далее создадим несколько произвольных правил, например, по 2 на каждый тип:
Затем на вкладке Группы фильтров создадим 1 основную группу с именем «Filter_chain», и 3 дочерние: «Jump_M_SP_NA_1_FILTER_CHAIN_1», «Jump_M_ME_NC_1_FILTER_CHAIN_2», «Jump_M_IT_NA_1_FILTER_CHAIN_3»
В основной Группе фильтров добавить 3 фильтра, с Логическими Переходами
В остальные группы добавить обычные фильтры, блокирующие или разрешающие в зависимости от параметров.
Затем следует вернуться на вкладку Фильтры и в фильтрах Логического перехода вместо отсутствует указать созданные только что**Группы фильтров**
Теперь, привязываем группу «Filter_chain» к необходимым Серверам и запускаем службу промышленного прокси-сервера. При текущей настройке весь трафик сперва будет проверяться в группе «Filter_chain», из неё распределяться по трём дочерним, и уже там будут происходить необходимые пользователю проверки.