Разбираемся с SNMP
Max Alexeev (@wi_max)Назначение
Протокол SNMP (Simple Network Management Protocol) был разработан с целью проверки функционирования сетевых маршрутизаторов и мостов. Впоследствии сфера действия протокола охватила и другие сетевые устройства, такие как хабы, шлюзы, терминальные сервера, LAN Manager сервера , машины под управлением Windows NT и т.д.
По умолчанию функционирование SNMP подразумевает использование UDP-портов 161 и 162. Запросы поступают на порт SNMP 161. Далее с него отправляется ответ менеджеру. При отправке запроса он идентифицируется при помощи ID, что в дальнейшем позволяет связать запрос менеджера с поступившим ответом.
На сегодняшний день существует три версии данного протокола: 1, 2/2с и 3. Отличие заключается в том, что первые две версии используют для аутентификации Community string (к этому понятию мы вернемся позже), а версия 3 – учетные данные для входа. Кроме того, в последней версии используется шифрование при передаче данных по сети.
Как работает SNMP?
Основные действующие лица протокола: агенты – устройства, для опроса состояния которых придуман протокол и системы управления - сетевые приложения, необходимые для сбора информации о функционировании агентов. Опрос агентов позволяет получать и в некоторых случаях изменять информацию об агентах.
Рассмотрим более подробно, какую информацию можно получить, используя протокол SNMP. Вся информация об объектах содержится в MIB (Management Information Base) – базе управляющей информации, иными словами, MIB представляет собой совокупность объектов, доступных для операций записи-чтения для каждого конкретного клиента, в зависимости от структуры и предназначения самого клиента.
Также, важным понятием является Community string – строка, используемая для аутентификации между системой управления и агентом.
Таким образом, если мы обнаружили порт, нам необходимо знать CS для получения информации об устройствах с помощью протокола SNMP.
Один из способов определения CS – брутфорс, который возможен с помощью инструмента hydra:
hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt <IP> snmp
После нахождения CS можно просмотреть записи в MIB. Наиболее простой способ – воспользоваться утилитой snmpwalk:
snmpwalk -v 1 -c public {IP} > ~/Desktop/SNMP_out.txt
Запись в MIB однозначно определяет конкретный объект, занимающий определенное место в иерархии. При этом, каждый объект имеет так называемый OID (Object Identifier). Пример, иллюстрирующий данный тезис представлен ниже:

Учитывая приведенное выше описание, рассмотрим информацию, которую выводит snmpwalk :
iso.3.6.1.2.1.1.1.0 = STRING: "Linux focus 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (280768) 0:46:47.68
iso.3.6.1.2.1.1.4.0 = STRING: "Daniel"
iso.3.6.1.2.1.1.5.0 = STRING: "Focus"
…
Если необходимо проследить иерархию объектов, представленных в выводе, можно воспользоваться данным ресурсом .
Почему это важно?
Во-первых, зачастую при сканировании пропускают UDP порты. (так как стандартное SYN сканирование их не обнаруживает). Во-вторых, иногда в MIB могут содержаться важные данные о целевом хосте, вплоть до учетных данных. Таким образом, редко когда точкой входа является доступный сервис SNMP (хотя, подобные случаи возможны, подробнее тут), однако, полученная в ходе сканирования информация, может помочь при дальнейшей компрометации системы.