Тестирование на проникновение SNMP-устройств
SNMP (англ. Simple Network Management Protocol — простой протокол сетевого управления) — стандартный интернет-протокол для управления устройствами в IP-сетях на основе TCP/UDP. К поддерживающим SNMP устройствам относятся маршрутизаторы, коммутаторы, серверы, рабочие станции, принтеры, модемные стойки и другие. Протокол обычно используется в системах сетевого управления для контроля подключённых к сети устройств на предмет условий, которые требуют внимания администратора. Разберем специализированный инструментарий для работы с SNMP-протоколом: onesixtyone и snmpwalk.
Информация предоставлена исключительно в ознакомительных целях. Не нарушайте законодательство!
onesixtyone
onesixtyone — SNMP-сканер, использующий особенность протокола — работу без установки соединения и отправку всех запросов настолько быстро, насколько это возможно, после чего ожидает ответ и записывает его. По умолчанию onesixtyone ожидает 10 миллисекунд между отправкой пакетов, что достаточно для коммутируемых сетей 100 Мбит/с. Изменить значение можно с помощью параметра -w
. Если установлено значение 0, сканер будет отправлять пакеты настолько быстро, насколько устройство сможет их принять, что может привести к блокировке пакетов. Его можно использовать для обнаружения устройств, отвечающих на community-строки, или для проведения атак по словарю на одно или несколько устройств.
Установка (Debian 10):
# apt install onesixtyone
Синтаксис:
Чтобы увидеть список команд, используйте onesixtyone:
# onesixtyone
-c user_file
— путь до словаря с community-строками;-i IP_file
— путь до списка с IP-адресами;-o user_file
— файл журнала;-p
— порт устройства;-d
— режим отладки, использовать дважды для получения дополнительной информации, укажите альтернативный порт;-w n
— изменить время ожидания между отправкой пакетов, гдеn
— время в миллисекундах (по умолчанию 10);-q
— тихий режим, без вывода в консоль.
Ограничения:
- Максимальное число хостов: 65535;
- Максимальная длина community-строки: 32;
- Максимальное число
communities
: 16384.
Пример использования:
# onesixtyone 192.168.4.0/24 public # onesixtyone -c dect.txt -i hosts -o my.log -w 100
Особенности:
- Перебор community-строк;
- Сканирование диапазона IP-адресов;
- Запись журнала в файл.
Рассмотрим его работу на примере маршрутизатора:
# onesixtyone 192.168.61.45
При помощи флага -i
можем просканировать IP-адреса из файла:
# onesixtyone -i /usr/IP.lst
Далее добавим параметр -с
и укажем файл со списком community-строк:
# onesixtyone -c /usr/password.lst 192.168.61.45
Эту команду можно повторить, используя опцию -d
для подробного вывода действий в терминал:
# onesixtyone -c /usr/password.lst 192.168.61.45 -d
Результат
Выполним команду с выводом журнала в терминал, записью журнала в файл, сканированием заданного диапазона IP-адресов и последующим перебором community-строки в режиме отладки и временем ожидания между запросами в 70 миллисекунд.
# onesixtyone -o /usr/log.txt -i /usr/IP.lst -c /usr/password.lst -d -w 70
Результат
По итогу на IP-адресе 192.168.61.45 была найдена community-строка «secret». В зависимости от производителя, community-строки бывают public
, которые позволяют только просмотреть настройки устройства, и private
позволяющие изменять конфигурацию.
Перейдём к следующему инструменту.
snmpwalk
Snmpwalk — утилита для SNMP протокола, которая автоматически выполняет несколько запросов GetNext. Поддерживает подключение MIB библиотеки, упрощая навигацию по OID.
Установка:
# apt install snmp
Произведём установку утилит snmpget
, snmpwalk
, snmptrap
, snmpinform
.
Все параметры, которые можно получить от устройства по протоколу SNMP, можно увидеть с помощью команды:
# snmpwalk -c public -v2c 127.0.0.1
где 127.0.0.1 — IP-адрес устройства, -v2c
— версия SNMP.
Чтобы получить значение конкретной ветки или параметра, нужно добавить его OID. Например, для получения описания всех портов коммутатора:
# snmpwalk -c public -v2c 127.0.0.1 1.3.6.1.2.1.2.2.1.2
Команда snmpwalk автоматически выполняет серию snmpnext-команд внутри заданного OID-диапазона.
OID — Object IDentification — цифровой код параметра системы, например, 1.3.6.1.2.1.2.2.1.1.7. Для каждого производителя коды OID разные, их вы можете найти на сайте производителя, к примеру для CISCO, VyOS и так далее.
Для того, чтобы OID-объекты отображались более читабельно, используем MIB библиотеки, которые мы взяли согласно документации. С их помощью можно настраивать и производить мониторинг SNMP на вашем устройстве.
Ранее, с помощью onesixtyone мы получили community-строку «secret», используем её с помощью snmpwalk.
# snmpwalk -c secret -v1 192.168.61.45
Результат
где -с
параметр для установки community-строки. Он может быть как public
так и private
, -v1
версия SNMP v1.
В терминале отображается множество строк, которые являются выводом GetNext запросов, по умолчанию команда # snmpwalk -c secret -v1 192.168.61.45
выведет все GetNext запросы.
Поскольку вывод в терминал объемный, запишем его в файл:
# snmpwalk -c secret -v1 192.168.61.45 > /usr/result.txt
Теперь есть возможность исследовать полученный файл с помощью grep
# cat /usr/result.txt | grep root
Так же можно получать необходимую информацию по OID, что соответственно является запросом GetNext.
# snmpwalk -c secret -v1 192.168.61.45 iso.3.6.1.2.1.1.1.0
где iso.3.6.1.2.1.1.1.0 — является OID строкой, содержащей название операционной системы роутера и её версии.
Но разобраться с OID такого вида трудно, если не иметь соответствующей документации или опыта работы с SNMP. Используем MIB библиотеки, которые позволят преобразовать строки формата iso.3.6.1.2.1.1.1.0 в текст для более удобного анализа полученной информации. MIB библиотеки мы взяли согласно документации к роутеру VyOS из директории /usr/share/snmp/mibs
.
Загруженные библиотеки нужно разместить в /usr/share/snmp/mibs
. Теперь мы можем их использовать с помощью команды
# snmpwalk -c secret -v1 192.168.61.45 -m ALL
Где -m
это подключение библиотек, после которой указываете имя необходимой, ALL
позволяет подключить их все.
Результат
И теперь мы видим вместо цифр текст. Мы можем получить имя ОС, где SNMPv2-MIB::sysDescr.0
является именем OID для названия ОС, с помощью следующей команды.
snmpwalk -c secret -v1 -Of 192.168.61.45 -m ALL SNMPv2-MIB::sysDescr.0
Примеры использования команд для SNMP v3:
# snmpwalk -v3 -l authPriv -u -a MD5 -A -x DES -X # snmpwalk -v3 -l authPriv -u admin -a MD5 -A lslslsls1 -x DES -X ag66gaga 127.0.0.1
Опции:
-v3
— версия SNMP v3;-l
— уровень безопасности;(noAuthNoPriv | authNoPriv | authPriv)
-u
— имя пользователя;-a
— (MD5 или SHA) протокол аутентификации;-A
— пароль;-x
— протокол конфиденциальности; (DES или AES)-X
— пароль.
С помощью команды snmpwalk -h
возможно увидеть полный список ключей и параметров для snmpwalk.
Вывод
Некорректная настройка протокола SNMP на устройстве может привести к его компрометации, в том числе получению учетных записей. Рекомендуется изменить пароль для community-строк, ограничить доступ к сервису или отключить его, если он не используется.