Расширение возможностей SNMP агента в Windows
Протокол SNMP (англ. Simple Network Management Protocol — простой протокол управления сетями) давно зарекомендовал себя как простое и удобное средство сбора информации о работе различных устройств и систем. Агенты SNMP реализованы для множества операционных систем что даёт возможность строить масштабируемые системы мониторинга функционирования инфраструктуры.
К сожалению, штатный агент Windows, несмотря на кажущуюся информативность, ограничен в вариантах доступной информации о работе системы и в особенности сторонних приложений, работающих на сервере. В этой статье описано как получать по SNMP больше данных о работе сервера, в частности значения счётчиков производительности ОС и любые другие данные, которые могут предоставлять приложения работающие на сервере, например количество подключённых пользователей к серверу приложений 1С 8 или любую другую информацию, которую Вы захотите получить.
SNMP Агент Windows позволяет расширить охват данных при помощи подключения дополнительных библиотек, что дает возможность получить доступ к нужным данным. Информацию по написанию таких расширений можно найти в MSDN, но мы воспользуемся одним из готовых, а именно — snmptools. Эта библиотека позволяет передавать информацию полученную из счетчиков произовдительности Windows или результат выполнения консольной программы/скрипта в ответах SNMP агента.
snmptools поддерживает все современные версии Windows, начиная с XP и заканчивая 2008R2 и имеет функционал, достаточный для решения большинства задач по мониторингу.
Качаем архив с библиотекой.В нем лежат:
- snmptools.dll и snmptools64.dll — собственно библиотеки расширения SNMP Агента. 32-х и 64-х битная версии соответственно
- counters.sample и traps.sample — файлы с примерами конфигурации
- .reg файлы с примерами регистрации расширения в системном реестре
- .reg файлы с примерами регистрации расширения в системном реестре
- perf32.exe — программка для доступа к значениям счетчиков производительности из командной строки
- папки с примерами скриптов
Для установки копируем библиотеку нужной архитектуры в системную папку Windows. Рядом создаем ini файл с конфигурацией (по умолчанию предлагается его ложить в корень диска С:). После чего изменяем путь к библиотеке и конфигурации в .reg файле и импортируем ключи в реестр. Вуаля — после перезапуска службы SNMP библиотека будет загружена, и будет возвращать данные описанные в файле конфигурации.
Файл конфигурации представляет собой ini-файл с простой структурой. Заголовок раздела задает обрабатываемый oid. Параметры которых всего 2 — type и counter — указывают какую информацию возвращать.
;Значение счетчика производительности
[1.3.6.1.4.1.15.2]
counter = LogicalDisk\Free Megabytes\_Total
;Результат выполнения консольной команды.
[1.3.6.1.4.1.15.3]
type = exec
counter = cmd /c ver
;Результат выполнения VB скрипта
[1.3.6.1.4.1.15.4]
type = exec
counter = cscript /nologo c:\1c_sessions.vbs
; Описательные поля
[1.3.6.1.4.1.15.10.1]
type = string
counter = 2
[1.3.6.1.4.1.15.10.1.1]
type = string
counter = Available Bytes
[1.3.6.1.4.1.15.10.1.2]
type = string
counter = Committed Bytes
; Информационные поля
[1.3.6.1.4.1.15.10.2]
type = string
counter = 2
[1.3.6.1.4.1.15.10.2.1]
counter = memory\Available Bytes
[1.3.6.1.4.1.15.10.2.2]
counter = memory\Committed Bytes
;Необходимо указывать конец для корректной работы последовательного обхода с помощью snmp_get_next
[1.3.6.1.4.1.15.9999]
type = string
counter = EOF
И проверим работу:
> snmpwalk — v 2c — c public — O a 192 . 168 . 1 . 1 1 . 3 . 6 . 1 . 4 . 1 . 15
SNMPv2 — SMI :: enterprises . 15 . 1 = STRING: «this is a test»
SNMPv2 — SMI :: enterprises . 15 . 2 = INTEGER: 160922
SNMPv2 — SMI :: enterprises . 15 . 3 = STRING: «Microsoft Windows [. 5.2.3790]»
SNMPv2 — SMI :: enterprises . 15 . 4 = INTEGER: 4
SNMPv2 — SMI :: enterprises . 15 . 10 = INTEGER: 2
SNMPv2 — SMI :: enterprises . 15 . 10 . 2 = INTEGER: 2
SNMPv2 — SMI :: enterprises . 15 . 10 . 2 . 1 = STRING: «Available Bytes»
SNMPv2 — SMI :: enterprises . 15 . 10 . 2 . 2 = STRING: «Committed Bytes»
SNMPv2 — SMI :: enterprises . 15 . 10 . 3 = INTEGER: 2
SNMPv2 — SMI :: enterprises . 15 . 10 . 3 . 1 = INTEGER: 427024384
SNMPv2 — SMI :: enterprises . 15 . 10 . 3 . 2 = INTEGER: 522661888
SNMPv2 — SMI :: enterprises . 15 . 9999 = STRING: «EOF»
End of MIB
Если что-то не заладилось можно включить отладку работы библиотеки установив в единицу параметр HKEY_LOCAL_MACHINE\SOFTWARE\snmptools\currentversion\debug. При этом отладочные сообщения будут сохранятся в файл c:\log.txt
Также можно настроить отправку трапов. Для этого нужно в настройках SNMP Агента Windows указать адрес получателя трапов, и в реестре в ветке HKEY_LOCAL_MACHINE\SOFTWARE\snmptools\currentversion создать строковой параметр traps с путем к файлу конфигурации трапов. Опционально можно добавить параметр trap_delay типа DWord для указания периодичности отправки трапов в миллисекундах.
Как видим snmptools это простой и удобный инструмент который может немного помочь в контроле увеличения энтропии вселенной и селекции зеленых хомячков.;-)
Если же Вам недостаточно функциональности предоставляемой snmptools, например требуются расширенные возможности протокола SNMP, типа управления сервером — можете попробовать использовать более продвинутые аналоги например, SNMPInformant
И в дополнение пример скрипта на VBScript для получения количества подключенных пользователей к серверу приложений 1Сv82.
Set Connector = CreateObject(«V82.COMConnector»)
Set Connection = Connector.ConnectAgent(«tcp://localhost»)
Clasters = Connection.GetClusters()
Set Cluster = Clasters (0)
Connection.Authenticate Cluster , «user», «password»
WScript.StdOut.WriteLine ( UBound (Sessions)+1)
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
- 14 февраля 2021 в 12:31 Мониторинг публичных IP-адресов пользователей в Интернете
- 16 ноября 2020 в 11:34 Автоматизация установки софта на чистую Windows
- 24 ноября 2020 в 14:25 Как за долгое время я вернулся на Windows (WSL)
- 23 января 2021 в 19:39 Мониторинг блокировок Роскомнадзором доменов на Cloudflare по IP-адресам
- 30 марта 2021 в 23:07 Отключается внешний жесткий диск. Что делать? [Человеческим языком]
AdBlock похитил этот баннер, но баннеры не зубы — отрастут
Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.
Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.
Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.
Не надо пропускать:
- рекламные и PR-публикации
- вопросы и просьбы (для них есть Хабр Q&A);
- вакансии (используйте Хабр Карьеру)
- статьи, ранее опубликованные на других сайтах;
- статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
- жалобы на компании и предоставляемые услуги;
- низкокачественные переводы;
- куски программного кода без пояснений;
- односложные статьи;
- статьи, слабо относящиеся к или не относящиеся к ней вовсе.
Проверка доступности snmp windows
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:
- -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-адресов;
- Запись журнала в файл.
Рассмотрим его работу на примере маршрутизатора:
При помощи флага -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-строк, ограничить доступ к сервису или отключить его, если он не используется. Узнать больше об инструментарии для проведения тестирования на проникновение на программах практической подготовки Корпоративные лаборатории Pentestit.
Оставить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.