Всем привет! Сегодня мы расскажем вам, как прошли путь от разработки более пятидесяти различных модулей для контроля устройств в составе программного комплекса Efros Config Inspector к созданию одного универсального, и объясним, почему это хорошо для пользователей.
image

Intro


Необходимость учета изменений в конфигурациях, хранения их бекапов, а также анализа безопасности отмечается всеми экспертными сообществами – российским ФСТЭК, зарубежными институтами типа Center for Internet Security, авторами библиотеки ITIL.
Решения, позволяющие автоматизировать этот процесс, широко представлены на рынке, и одно из них – российская разработка Efros Config Inspector. Efros CI является средством, созданным для работы с конфигурациями: контроль целостности файлов и анализ изменений, обнаружение небезопасных конструкций (например, использование открытых протоколов типа telnet для управления устройствами, слабых паролей и т. п.), а также известных уязвимостей по каталогам CVE и др.
С ростом популярности продукта мы столкнулись с тем, что поддерживать контроль топ-5 самых известных производителей оборудования – недостаточно, а разрабатывать каждый раз новый модуль выходит накладно. После того, как количество поддерживаемых операционных систем (включая системы активного сетевого оборудования) стало приближаться к 100, мы задумались о разработке универсального способа подключения объектов сетевой инфраструктуры к комплексу, а именно – возможности создавать свои модули для контроля устройств. О ней и расскажем дальше.

Взаимодействие комплекса Efros Config Inspector и сетевого оборудования


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

Подключение к устройству
Для подключения в большинстве случаев пользуются протоколом SSH, который рекомендуется использовать для безопасной передачи данных. Во время подключения необходимо учесть такие моменты, как:
• таймаут соединения;
• проверка корректности подключения;
• определение режима CLI (прав пользователя): в некоторых случаях необходимо использовать привилегированный режим.

Получение конфигураций
Получение конфигураций заключается в выполнении необходимых команд в CLI, получении ответа и записи его для дальнейшего контроля. Для корректной работы команд также стоит учесть:
• команды предварительной настройки терминала сетевого устройства для удобного получения ответа на команды;
• таймауты на получение ответа;
• варианты ответа после ввода команды (подтверждение выполнения, запрос на листинг, ошибки и т. д.).

Отключение от устройства (закрытие сессии)
Отключение от устройства сопровождается либо вводом команды на выход (закрытие сессии), либо разрывом сессии. Сложность с корректностью выхода, например, может возникнуть при выходе с нескольких уровней CLI, а именно – при вводе команды несколько раз, без использования разрыва сессии.

Ближе к делу: пользовательский модуль


Пользовательский модуль – это механизм описания взаимодействия, создаваемый пользователем для подключения к устройствам и сбора необходимой информации. Команды для подключения и набор получаемых данных настраивает сам пользователь. Как правило, в решениях управления конфигурациями сетевого оборудования (network configuration management, NCM) используется механизм добавления устройства, где предоставляется возможность указать вид приглашения:
• Приглашение пользователя;
• Приглашение режима «enable» или аналогов;
• В некоторых случаях даже приглашение режима администрирования (например, «config»).
Разберем конфигурацию модуля для подключения к Cisco IOS (для других вендоров примеры приведены дальше). Приглашение пользователя у нас выглядит как Cisco2960>, приглашение enable – как Cisco2960#, и наконец приглашение config – как Cisco2960(config)#. Благодаря заполнению данной информации мы можем рассчитывать на успешное подключение к устройству, определение местоположения внутри командной строки (CLI) и дальнейшее выполнение необходимых команд для получения и анализа конфигураций.
Данный способ подходит для некоторых продуктов, но не может считаться универсальным из-за отсутствия дополнительных настроек, которые были упомянуты выше. Например, после создания такого подключения для устройств определенного вендора предлагается выбрать список настроек, который ограничен и «зашит» в комплекс. Изменить его без участия разработчиков ПО невозможно.
В Efros CI возможность создания собственного модуля нацелена не на подключение устройства под уже имеющуюся логику в комплексе, а на подключение новых типов устройств (вернее, операционных систем этих устройств), которые не поддерживаются в Efros CI «из коробки» и их поддержка пока не планируется.
Основная задача, которую решает модуль, – как можно быстрее получить возможность контролировать настройки любого устройства по протоколу SSH и при необходимости передать данную экспертизу разработчикам для дальнейшей работы над уязвимостями или создания проверок безопасности. Все стандартные возможности комплекса будут корректно функционировать с новым устройством, созданным таким образом.

image



На скриншоте представлен интерфейс конструктора, в котором можно провести настройку и тестирование подключения, а также просмотреть результаты перед добавлением в систему. Расскажем, из чего состоит сам конструктор:
• Имя нового устройства (для дальнейшей идентификации в системе);
• Таймауты для ввода команд и получения ответа (для ограничения времени ожидания и закрытия сессии в случае недоступности и иных ситуаций; значения по умолчанию подходят в большинстве случаев);
• Определение приглашения (для определения режима CLI);
• Привилегированный режим (опционально; здесь мы можем настроить команду перехода, enable или super и т. д.);
• Команды после входа (опционально; команды в основном настраивают работу терминала для сессии, что позволяет выводить ответ на команды целиком, а не запрашивать действие для листинга (прокрутки);
• Запрос на продолжение (опционально; используется в том случае, если терминал не настраивается и запрос на листинг приходит, например, в виде текста «--More--» и ответом по умолчанию в виде пробела; также можно добавить запрос на подтверждение операции и ответ Y/N);
• Команда закрытия сессии (для выхода, закрытия сессии);
• Обработка логов (для отладки).

Примеры использования


Далее мы покажем, как можно настраивать модуль для контроля различных типов сетевых устройств. Создание отчетов для получения конфигураций этих устройств – отдельный процесс, который вы можете посмотреть, установив демоверсию продукта Efros Config Inspector.
В качестве примера рассмотрим самые часто изменяемые поля и попробуем выявить различия, а также приведем примеры заполнения в картинках для 4 типов устройств (Vipnet, Eltex, Fortinet, Juniper). Обратите внимание, что все примеры пересекаются с картинками ниже, на которых можно посмотреть готовый вариант модуля для их дальнейшего контроля в системе:
Определение приглашения
Example> – здесь мы можем воспользоваться регулярным выражением \S+>.
Example# – здесь мы можем воспользоваться регулярным выражением \S+#.
Example # – здесь мы можем воспользоваться регулярным выражением \S+ #, так как у нас появился пробел между именем устройства и обозначением уровня CLI.
Конечно, приглашения могут быть и более сложного вида (например, Example (admin)>), что заставит сделать регулярное выражение сложнее и учесть маскирование таких элементов, как “(“, например, \S+ \(\S+\)>. На основе этой информации пользователь может заполнить поле и определить приглашение CLI для дальнейшей работы с устройством.
Привилегированный режим
Команда перехода. Чаще всего это слово в единственном числе (например, enable или super), которое переводит нас в другой режим и дает больше прав и команд. Необходим для некоторых устройств, так как получить полную информацию можно только в привилегированном режиме.
Определение ввода пароля. Используется, чтобы понять, как выглядит запрос на ввод пароля. Тут все просто. Как пример можно рассмотреть Password: или password:, что перекроется [P,p]assword:.
Новое приглашение. Описывает, как будет выглядеть приглашение после перехода в режим “enable” или “super” или иной вариант. Тут все аналогично первичному определению.
Ошибка пароля. Используется для быстрого разрыва сессии в случае неподходящего пароля и вывода информации об этом без ожидания таймаута.
Команды после входа
Terminal length 0 – команда отключения листинга для Cisco IOS.
Screen-length 0 temporary – команда отключения листинга на Huawei VRP.
System – к примеру дополнительный переход в уровень system для дальнейшего ввода команд на получение конфигурации, если потребуется.
Цель может заключаться как в настройке вывода текста в удобном виде, так и в необходимости перехода на необходимые уровни конфигурации для получения информации.
Запрос на продолжение
Настройка используется для тех устройств, в которых не удалось настроить отключение листинга или это было сделано преднамеренно. Рассмотрим некоторые из них:
--More-- – запрос на продолжение для Cisco IOS. Требует от нас ввода пробела для вывода новой страницы или q (quit) для завершения. В нашем случае в запрос пишем полное соответствие и в ответ ставим пробел.
---(more)--- или ---(more 27%)--- или ---(more 99%)--- – запрос на продолжение для Juniper JunOS, в котором нужно учесть, как первый запрос, так и последующие с процентами. Отсюда определение пишем как ---\(more(?:\s+\d+%)?\)--- и в ответ ставим пробел.
: – запрос для продолжения для Vipnet xFirewall, в котором достаточно учесть: и в ответ поставить пробел.
Также в ответ может попасть Y/N или Yes/No и т. д. в зависимости от типа ОС.
Команда закрытия сессии
Команда для выхода. В большинстве случаев это exit или quit. Также могут быть встретиться варианты.
На скриншоте ниже представлен контроль Vipnet coordinator на примере пользовательского модуля.
image


Контроль Eltex MES
image


Контроль Fortinet Fortigate (FortiOS)
image


Контроль Juniper JunOS
image


Ну и наконец результат проверки отображает лог нашей сессии и указывает на успех или ошибку. Его можно открыть и ознакомиться для дальнейшей отладки в случае ошибок. В случае же успеха достаточно нажать на кнопку «Применить» и получить свой собственный «Пользовательский модуль» для контроля вашего оборудования. Дальнейшая настройка контроля конфигураций для нового типа устройств происходит в специальном разделе и позволяет пользователю создать отчет, который в свою очередь будет выполнять необходимую команду для получения конфигурации. Полученные конфигурации служат источником для последующего анализа на выявление изменений, проверок безопасности, уязвимостей и других возможностей.
В заключение хочется отметить, что функциональные возможности комплекса Efros Config Inspector гораздо шире и включают в себя работу с уязвимостями, анализ перечней правил межсетевых экранов, обработку данных протоколов Netflow, IPFIX и им подобных, работу с картой сети и не только. Приглашаем всех заинтересовавшихся специалистов скачать бесплатную демоверсию с сайта и самим оценить возможности продукта в течение месяца с момента установки без каких-либо ограничений.

Материал подготовили специалисты ГК «Газинформсервис» Дмитрий Семенов, Сергей Никитин.

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


  1. Shaman_RSHU
    27.09.2021 11:46

    Эх, что было 8 лет назад, что сейчас. Только интерфейс перерисовался.


  1. NAI
    27.09.2021 12:09

    Всегда было интересно, как решается вопрос с устройствами которые не поддерживают SSH (web-based или telnet-only), коих в АСУ ТП немерено начиная от "народных" MOXA EDS-40*\Hirschmann и заканчивая экзотикой в виде всяких феникс-конакторов. Ну и циски тоже не все умеют в ssh:

     Manageability: Web GUI interface, and diagnostics and analysis options through Simple Network Management Protocol (SNMP) and syslog


  1. Krakozaber
    27.09.2021 16:43

    Ещё один велосипед клонирующий NOC Project ?


    1. Gazinformservice Автор
      04.10.2021 09:28

      Спасибо за вопрос, да действительно эти продукты решают похожие задачи в части управления конфигурациями. Но Efros CI работает не только с сетевыми устройствами и обладает рядом возможностей, которых нет у NOC Project (Compliance, уязвимости,..). Более того,  для добавления нового типа устройства в EfrosCI пользователю не надо писать скрипты на Python, т.е. мы постарались сделать EfrosCI более user friendly.