Протокол SNMP

С расширением компьютерных сетей возникла необходимость управлять ими. Это просто непрактично постоянно переходить c рабочей станции на сервер и назад на рабочую станцию, чтобы убедиться, что все в порядке. Вот здесь в игру вступает Протокол управления простыми сетями (SNMP).

Протокол SNMP

Протокол SNMP появился в конце 1980-х гг., когда возникла необходимость управлять растущими сетями и проверять определенные условия функционирования данных сетей. Большинство протоколов в TCP/IP построены на основе модели клиент/сервер. За исключением небольших различий в плане определения синтаксиса протокол SNMP из той же категории.

Существует несколько хорошо известных программ, использующих SNMP в качестве части их набора управления сетями. Среди них IBM Tivoli и HP Openview. Они обе используют протокол SNMP. Именно благодаря этому протоколу, а если точнее, то принципу его работы, администраторы с легкостью могут управлять самыми большими сетями.

SNMP и его версии

В настоящий момент существует три версии протокола: SNMPv1, SNMPv2c, и SNMPv3. Каждая последующая версия построена на основе предыдущей с добавлением каких-то новых функций. Вы неправы, если считаете, что самая последняя версия является самой распространенной. На самом деле первая версия пользуется большей популярностью вследствие своей простоты и нормального человеческого желания использовать проверенные вещи.

Между тремя версиями существуют значительные различия. SNMPv1 отлично справлялся со своей задачей, но в нем были некоторые недостатки, в частности, безопасность была практически на нулевом уровне. Сообщения передавались открытым текстом, и могли быть прочитаны любым владельцем анализатора пакетов. Это конечно же плохо. Поэтому появился SNMPv2, в котором были исправлены некоторые недостатки предшественника. В нем были изменены определения MIB (информационная база управления), PDU (узел данных протокола) и улучшена безопасность. Последнее выразилось в виде целостности данных через использование MD5 и алгоритма шифрования DES. И наконец появилась защита от атак в виде процедуры аутентификации.

Версии версии!

На самом деле существует 4 варианта версии SNMPv2: SNMPv2c (ориентирован на сообщество), SNMPv2* (также известный как «звезда»), SNMPv2u (ориентирован на пользователя) и SNMPv2. Одной из причин плохой распространенности данной версии была ее запутанность и, соответственно, сложность использования.

На волне проблем с безопасностью в SNMPv1 и v2, а также сложности SNMPv2 появилась необходимость устранить эти недостатки. В результате вышла версия SNMPv3. Улучшенная безопасность выразилась в виде аутентификации через хэширование, временные отметки и шифрование сообщений. Последняя версия не такая сложная как вторая и более безопасна, нежели первая. Но несмотря на все это, первая версия самая распространенная.

Какие же сообщения можно увидеть в трафике SNMP? Это хороший вопрос, и мы перечислим эти сообщения. Ради простоты мы перечислим типы сообщений PDU (узла данных протокола) в SNMPv1, потому что он самый используемый. Сообщения выглядят следующим образом:

GetRequest, GetNextRequest, GetResponse, SetRequest, Trap

В SNMPv2 и v3 появились и другие: GetBulkRequest и InformRequest. После подробного объяснения различных версий SNMP пришло время взглянуть на пакет SNMP. Разберем пакет SNMPv1 и остановимся на некоторых существенных моментах.

Ближе к практике

Что стоит сухая теория без практики? Разберем пакет, показывающий использование SNMPv1. Благодаря этому, мы увидим как работает SNMPv1: сообщения администратору о состоянии сети и ее неполадках. Взгляните на пакет, представленный ниже, а далее мы обсудим некоторые его моменты.

01:31:26.631025 192.168.1.200.161 > 192.168.1.100.40274: { SNMPv1
C=testnet-pub { GetResponse(90) R=1546751089
.1.3.6.1.2.1.2.2.1.10.24=3936973547 .1.3.6.1.2.1.2.2.1.16.24=3178
267035 .1.3.6.1.2.1.1.3.0=4268685032 .1.3.6.1.2.1.1.5.0="G"} } (ttl 255, id41656, len 148)
0x0000 4500 0094 a2b8 0000 ff11 151c c0a8 01c8 E...............
0x0010 c0a8 0164 00a1 9d52 0080 3f43 3076 0201 ........R..?C0v..
0x0020 0123 0123 0123 6574 2d70 7562 a266 0204 ..testnet-pub.f..
0x0030 5c31 8c71 0201 0002 0100 3058 3013 060a \1.q......0X0...
0x0040 2b06 0102 0102 0201 0a18 4105 00ea a972 +.........A....r
0x0050 eb30 1306 0a2b 0601 0201 0202 0110 1841 ..0...+.........A
0x0060 0500 bd70 819b 3011 0608 2b06 0102 0101 ....p..0...+.....
0x0070 0300 4305 00fe 6ef6 e830 1906 082b 0601 ...C...n..0...+..
0x0080 0201 0105 0004 0d47                     .......G

Я прокомментирую пакет с первой строки и справа налево. Нормальная временная отметка – это первое поле, за ней следует IP адрес и порт-источник. Обратите внимание, что портом-источником является 161, порт для SNMP. Далее идут IP адрес и порт места назначения. В скобках мы видим, что пакет сообщает о том, что это SNMPv1. Потом следует “community string”, хотя обычно значение по умолчанию - “read only”. В нашем случае имя community string - “testnet-pub”,  что видно из пакета.

Далее мы видим тип PDU “GetResponse”, а следом номер идентификации запроса в виде последовательности цифр с пробелами. Они называются OID или идентификаторы объекта. Они используются для определения периода работоспособности системы, пропускной способности NIC и нагрузки на сервер. Например, станция управления использует команду “GetRequest’s” для определенного компьютера, чтобы узнать нагрузку на сервер в данное время. Таким образом администратор использует SNMP для управления обширной сетью.

Это тот протокол, который нельзя сломать руками, для этого необходим как минимум анализатор протоколов, а еще лучше программа, поставляемая вместе с программным обеспечением управления сетями. А это, в свою очередь, позволит использовать вышеупомянутые OID. Поэтому SNMPv1 не самый лучший выбор. Все очень просто. Даже безграмотный хакер сможет причинить много вреда с помощью информации, извлеченной из пакета. Лучше всего обновить протокол до третьей версии. Вот и пришла пора заканчивать обзор протокола SNMP и прощаться. До встречи.

Дон Паркер (Don Parker)