Время прочтения: 3 мин.

Любая серьезная организация на сегодняшний день имеет в своем арсенале развитую сетевую инфраструктуру, состоящую из маршрутизаторов, коммутаторов, межсетевых экранов и т.д. Как показывает статистика (информация с сайта), в 2021 г. частота хакерских атак во всем мире будет составлять 11 секунд. Проникновение в периметр внутренней сети является важнейшим вопросом для любой компании. А если речь идет про обработку конфиденциальной информации – то риски утечек становятся самой фокусной проблемой.

Была поставлена задача – оценить уровень защищенности сетевого оборудования. Для этого были выгружены конфигурации настроек коммутаторов и маршрутизаторов, определены параметры и метрики для проверки.

В данной статье приведу несколько примеров анализа конфигураций на примере оборудования CISCO. Файлы были загружены в Python, использовался модуль для работы с регулярными выражениями re с функциями re.search(pattern, string), которая ищет в строке первое совпадение паттерна, и re.finditer(pattern, string) – ищет все совпадения паттерна в строке. Флаг re.IGNORECASE применялся, чтобы при поиске не учитывались маленькие и большие буквы. Действие после оператора if не описываю в статье, т.к. оно может быть различным: запись в журнал, вывод на экран и т.д.

Примеры паттернов:

  1. no\sip\shttp\sserver – необходимо отключить протокол http. При необходимости, использовать более защищенный протокол HTTPS.
  2. ip\sssh\sversion — отключение протокола SSH v1 необходимо, т.к. он устарел, считается ненадежным. Необходим SSH версии 2.
  3. r’service password-encryption – проверка, шифруются ли пароли учетных записей.
  4. password\s7 – поиск зашифрованных паролей типа 7. Данный тип шифрования без труда дешифруется специальными online-сервисами. Использовать данный тип шифрования крайне небезопасно!
  5. no\sservice\sdhcp – если нет необходимости автоматически распределять ip адреса из пула, то сервис DHCP рекомендуется отключить.
def check_cisco(s):
# проверка отключения сервисов
    if re.search(r'no\sip\shttp\sserver', s, re.IGNORECASE):

# отключение протокола SSH v1
    if re.search(r'ip\sssh\sversion\s[23]{1}', s, re.IGNORECASE):

# безопасное хранение пароля в системной конфигурации оборудования
    if re.search(r'service password-encryption', s, re.IGNORECASE):
    for m in re.finditer(r'password\s7', s):
	
# отключен функционал DHCP-сервера
    if re.search(r'no\sservice\sdhcp', s, re.IGNORECASE):

Отмечу, что поиск данных паттернов – лишь малая часть проверки, т.к. весь перечень рекомендаций вендора по усилению мер Кибербезопасности выходит за рамки данной статьи.

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

Какие дальнейшие планы? В будущем, удобно выгружать конфигурации скриптом, имена файлов называть по маске. Запуск данного кода реализовать через планировщик заданий, с определенным интервалом времени. Это позволит полностью автоматизировать процесс поиска уязвимостей.

Итак, данный инструмент позволил выявить недоработки ИТ службы, предотвратить угрозы проникновения в корпоративную сеть организации. Если использовать ручной поиск фрагментов кода в сотнях конфигураций, то процесс занял бы несколько месяцев. Но такой срок недопустим при регулярных киберугрозах, с которыми сталкиваются компании. Поэтому, предложенная идея крайне полезна и нашла свое применение.