Всем привет! Сегодня мы расскажем вам, как прошли путь от разработки более пятидесяти различных модулей для контроля устройств в составе программного комплекса Efros Config Inspector к созданию одного универсального, и объясним, почему это хорошо для пользователей.
![image](https://habrastorage.org/r/w780q1/webt/f-/7f/4h/f-7f4hws59m6xikgadgbd1vgm_a.jpeg)
Необходимость учета изменений в конфигурациях, хранения их бекапов, а также анализа безопасности отмечается всеми экспертными сообществами – российским ФСТЭК, зарубежными институтами типа Center for Internet Security, авторами библиотеки ITIL.
Решения, позволяющие автоматизировать этот процесс, широко представлены на рынке, и одно из них – российская разработка Efros Config Inspector. Efros CI является средством, созданным для работы с конфигурациями: контроль целостности файлов и анализ изменений, обнаружение небезопасных конструкций (например, использование открытых протоколов типа telnet для управления устройствами, слабых паролей и т. п.), а также известных уязвимостей по каталогам CVE и др.
С ростом популярности продукта мы столкнулись с тем, что поддерживать контроль топ-5 самых известных производителей оборудования – недостаточно, а разрабатывать каждый раз новый модуль выходит накладно. После того, как количество поддерживаемых операционных систем (включая системы активного сетевого оборудования) стало приближаться к 100, мы задумались о разработке универсального способа подключения объектов сетевой инфраструктуры к комплексу, а именно – возможности создавать свои модули для контроля устройств. О ней и расскажем дальше.
В процессе разработки мы, конечно же, сталкивались с моментами, когда требуется сделать универсальное решение для контроля разных типов операционных систем, и всегда находились такие устройства, которые полностью или частично отличались от уже поддерживаемых как по синтаксису команд, так и по приглашениям и прочим параметрам. Предлагаем ознакомиться с теми тонкостями, которые уже учтены в системе и на основе которых будет строится наш пользовательский модуль.
Для начала рассмотрим процесс взаимодействия программного комплекса с сетевым оборудованием: коммутатор, маршрутизатор, межсетевой экран и т. п…
Подключение к устройству
Для подключения в большинстве случаев пользуются протоколом 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](https://habrastorage.org/r/w1560/webt/4h/zo/et/4hzoetv0s2bv4zioinobzz5o6hm.png)
На скриншоте представлен интерфейс конструктора, в котором можно провести настройку и тестирование подключения, а также просмотреть результаты перед добавлением в систему. Расскажем, из чего состоит сам конструктор:
• Имя нового устройства (для дальнейшей идентификации в системе);
• Таймауты для ввода команд и получения ответа (для ограничения времени ожидания и закрытия сессии в случае недоступности и иных ситуаций; значения по умолчанию подходят в большинстве случаев);
• Определение приглашения (для определения режима 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](https://habrastorage.org/r/w780q1/webt/ad/aw/wy/adawwyrswlrwudtj2ycftzps_w0.jpeg)
Контроль Eltex MES
![image](https://habrastorage.org/r/w780q1/webt/o1/0c/fj/o10cfjgzw_rnjba8n91ftikef6a.jpeg)
Контроль Fortinet Fortigate (FortiOS)
![image](https://habrastorage.org/r/w1560/webt/jf/aw/b2/jfawb2f5ewytowjv2k9o4tbwacg.png)
Контроль Juniper JunOS
Ну и наконец результат проверки отображает лог нашей сессии и указывает на успех или ошибку. Его можно открыть и ознакомиться для дальнейшей отладки в случае ошибок. В случае же успеха достаточно нажать на кнопку «Применить» и получить свой собственный «Пользовательский модуль» для контроля вашего оборудования. Дальнейшая настройка контроля конфигураций для нового типа устройств происходит в специальном разделе и позволяет пользователю создать отчет, который в свою очередь будет выполнять необходимую команду для получения конфигурации. Полученные конфигурации служат источником для последующего анализа на выявление изменений, проверок безопасности, уязвимостей и других возможностей.
В заключение хочется отметить, что функциональные возможности комплекса Efros Config Inspector гораздо шире и включают в себя работу с уязвимостями, анализ перечней правил межсетевых экранов, обработку данных протоколов Netflow, IPFIX и им подобных, работу с картой сети и не только. Приглашаем всех заинтересовавшихся специалистов скачать бесплатную демоверсию с сайта и самим оценить возможности продукта в течение месяца с момента установки без каких-либо ограничений.
Материал подготовили специалисты ГК «Газинформсервис» Дмитрий Семенов, Сергей Никитин.
![image](https://habrastorage.org/webt/f-/7f/4h/f-7f4hws59m6xikgadgbd1vgm_a.jpeg)
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](https://habrastorage.org/webt/4h/zo/et/4hzoetv0s2bv4zioinobzz5o6hm.png)
На скриншоте представлен интерфейс конструктора, в котором можно провести настройку и тестирование подключения, а также просмотреть результаты перед добавлением в систему. Расскажем, из чего состоит сам конструктор:
• Имя нового устройства (для дальнейшей идентификации в системе);
• Таймауты для ввода команд и получения ответа (для ограничения времени ожидания и закрытия сессии в случае недоступности и иных ситуаций; значения по умолчанию подходят в большинстве случаев);
• Определение приглашения (для определения режима 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](https://habrastorage.org/webt/ad/aw/wy/adawwyrswlrwudtj2ycftzps_w0.jpeg)
Контроль Eltex MES
![image](https://habrastorage.org/webt/o1/0c/fj/o10cfjgzw_rnjba8n91ftikef6a.jpeg)
Контроль Fortinet Fortigate (FortiOS)
![image](https://habrastorage.org/webt/jf/aw/b2/jfawb2f5ewytowjv2k9o4tbwacg.png)
Контроль Juniper JunOS
![image](https://habrastorage.org/webt/ec/oa/0z/ecoa0zrkkcfptwos7ls869nzzkg.jpeg)
Ну и наконец результат проверки отображает лог нашей сессии и указывает на успех или ошибку. Его можно открыть и ознакомиться для дальнейшей отладки в случае ошибок. В случае же успеха достаточно нажать на кнопку «Применить» и получить свой собственный «Пользовательский модуль» для контроля вашего оборудования. Дальнейшая настройка контроля конфигураций для нового типа устройств происходит в специальном разделе и позволяет пользователю создать отчет, который в свою очередь будет выполнять необходимую команду для получения конфигурации. Полученные конфигурации служат источником для последующего анализа на выявление изменений, проверок безопасности, уязвимостей и других возможностей.
В заключение хочется отметить, что функциональные возможности комплекса Efros Config Inspector гораздо шире и включают в себя работу с уязвимостями, анализ перечней правил межсетевых экранов, обработку данных протоколов Netflow, IPFIX и им подобных, работу с картой сети и не только. Приглашаем всех заинтересовавшихся специалистов скачать бесплатную демоверсию с сайта и самим оценить возможности продукта в течение месяца с момента установки без каких-либо ограничений.
Материал подготовили специалисты ГК «Газинформсервис» Дмитрий Семенов, Сергей Никитин.