Каталог статей
Поиск по базе статей  
Статья на тему Компьютеры » Безопасность » SNMP протокол - принципы, безопасность, применение

 

SNMP протокол - принципы, безопасность, применение

 

 

Вступление

Данная статья посвящена протоколу SNMP (Simple Network Management Protocol) - одному из протоколов модели OSI, который практически не был затронут в документации просторов RU-нета. Статья не претендует на звание "документации для разработчика", а просто отражает желание автора осветить аспекты работы с данным протоколом, объяснить его предназначение, показать его слабые места и уязвимости в системе "security".

Предназначение

Протокол SNMP был разработан с целью проверки функционирования сетевых маршрутизаторов и мостов. Впоследствии сфера действия протокола охватила и другие сетевые устройства, такие как маршрутизаторы, шлюзы, терминальные сервера, LAN Manager сервера, машины под управлением Windows NT и т.д. Кроме того, протокол допускает возможность внесения изменений в функционирование указанных устройств.

загрузка...

 

 



Теория

Основными взаимодействующими лицами протокола являются агенты и системы управления. Если рассматривать эти два понятия на языке "клиент-сервер", то роль сервера выполняют агенты, то есть те самые устройства, для опроса состояния которых и был разработан рассматриваемый нами протокол. Соответственно, роль клиентов отводится системам управления - сетевым приложениям, необходимым для сбора информации о функционировании агентов. Помимо этих двух субъектов в модели протокола можно выделить также еще два: управляющую информацию и сам протокол обмена данными.

"Для чего вообще нужно производить опрос оборудования?" - спросите Вы. Постараюсь пролить свет на этот вопрос. Иногда в процессе функционирования сети возникает необходимость определить определенные параметры некоторого устройства, такие как , например, размер MTU (Minimal Transmission Unit), количество принятых пакетов, открытые порты, установленную на машине операционную систему и ее версию, узнать включена ли опция форвардинга на машине и многое другое. Для осуществления этого как нельзя лучше подходят SNMP клиенты.

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

Остановимся на том, какую же все-таки информацию может почерпнуть система управления из недр SNMP. Вся информация об объектах системы-агента подержится в так называемой MIB (Management Information Base ) - базе управляющей информации, другими словами MIB представляет собой совокупность объектов, доступных для операций записи-чтения для каждого конкретного клиента, в зависимости от структуры и предназначения самого клиента. Ведь не имеет смысла спрашивать у терминального сервера количество отброшенных пакетов, так как эти данные не имеют никакого отношения к его работе, так как и информация об администраторе для маршрутизатора. Потому управляющая система должна точно представлять себе, что и у кого запрашивать.

На данный момент существует четыре базы MIB :
  1. Internet MIB - база данных объектов для обеспечения диагностики ошибок и конфигураций. Включает в себя 171 объект (в том числе и объекты MIB I).
  2. LAN manager MIB - база из 90 объектов - пароли, сессии, пользователи, общие ресурсы.
  3. WINS MIB - база объектов, необходимых для функционирования WINS сервера (WINSMIB.DLL).
  4. DHCP MIB - база объектов, необходимых для функционирования DHCP сервера (DHCPMIB.DLL), служащего для динамического выделения IP адресов в сети.
Все имена MIB имеют иерархическую структуру. Существует десять корневых алиасов (категорий):
  1. System - данная группа MIB II содержит в себе семь объектов, каждый из которых служит для хранения информации о системе (версия ОС, время работы и т.д.).
  2. Interfaces - содержит 23 объекта, необходимых для ведения статистики сетевых интерфейсов агентов (количество интерфейсов, размер MTU, скорость передачи , физические адреса и т.д.) .
  3. AT (3 объекта) - отвечают за трансляцию адресов. Более не используется. Была включена в MIB I. Примером использования объектов AT может послужить простая ARP таблица (более подробно об ARP протоколе можно почитать в статье "Нестандартное использование протокола ARP", которую можно найти на сайте www.uinc.ru в разделе "Articles" ) соответствия физических (MAC) адресов сетевых карт IP адресам машин. В SNMP v2 эта информация была перенесена в MIB для соответствующих протоколов.
  4. IP (42 объекта) - данные о проходящих IP пакетах (количество запросов, ответов, отброшенных пакетов).
  5. ICMP (26 объектов) - информация о контрольных сообщениях (входящие/исходящие сообщения, ошибки и т.д.).
  6. TCP (19) - все, что касается одноименного транспортного протокола (алгоритмы, константы, соединения, открытые порты и т.п.).
  7. UDP (6) - аналогично, только для UDP протокола (входящие/исходящие датаграммы, порты, ошибки).
  8. EGP (20) - данные о трафике Exterior Gateway Protocol (используется маршрутизаторами, объекты хранят информацию о принятых/отосланных/отброшенных кардах).
  9. Transmission - зарезервирована для специфических MIB.
  10. SNMP (29) - статистика по SNMP - входящие/исходящие пакеты, ограничения пакетов по размеру, ошибки, данные об обработанных запросах и многое другое.
Каждый из них представим в виде дерева, растущего вниз, (система до боли напоминает организацию DNS). Например, к адресу администратора мы можем обратиться посредством такого пути: system.sysContact.0 , ко времени работы системы system.sysUpTime.0 , к описанию системы (версия, ядро и другая информация об ОС) : system.sysDescr.0 . С другой стороны те же данные могут задаваться и в точечной нотации. Так system.sysUpTime.0 соответствует значение 1.3.0, так как system имеет индекс "1" в группах MIB II, а sysUpTime - 3 в иерархии группы system. Ноль в конце пути говорит о скалярном типе хранимых данных. В процессе работы символьные имена объектов не используются, то есть если менеджер запрашивает у агента содержимое параметра system.sysDescr.0, то в строке запроса ссылка на объект будет преобразована в "1.1.0", а не будет передана "как есть". Далее мы рассмотрим BULK-запрос и тогда станет ясно, почему это столь важно .

На этом мы завершим обзор структуры MIB II и перейдем непосредственно к описанию взаимодействия менеджеров (систем управления) и агентов. В SNMP клиент взаимодействует с сервером по принципу запрос-ответ. Сам по себе агент способен инициировать только оно действие, называемое ловушкой-прерыванием. Помимо этого, все действия агентов сводятся к ответам на запросы, посылаемые менеджерами. Менеджеры же имеют гораздо больший "простор для творчества", они в состоянии осуществлять четыре вида запросов:
  • GetRequest - запрос у агента информации об одной переменной.
  • GetNextRequest - дает агенту указание выдать данные о следующей (в иерархии) переменной.
  • GetBulkRequest - запрос за получение массива данных. При получении такового, агент проверяет типы данных в запросе на соответствие данным из своей таблицы и цикле заполняет структуру значениями параметров: for(repeatCount = 1; repeatCount < max_repetitions; repeatCount++)
  • SetRequest - указание установить определенное значение переменой.

    Кроме этого менеждеры могут обмениваться друг с другом информацией о своей локальной MIB. Такой тип запросов носит название InformRequest.

    Приведу значения числовых констант для всех видов запросов:
    #define SNMP_MSG_GET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x0)
    #define SNMP_MSG_GETNEXT (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x1)
    #define SNMP_MSG_RESPONSE (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x2)
    #define SNMP_MSG_SET (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x3) /* PDU для SNMPv1 */
    #define SNMP_MSG_TRAP (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x4) /* PDU для SNMPv2 */
    #define SNMP_MSG_GETBULK (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x5)
    #define SNMP_MSG_INFORM (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x6)
    #define SNMP_MSG_TRAP2 (ASN_CONTEXT | ASN_CONSTRUCTOR | 0x7)

    Вот тут то мы сталкиваемся с еще одной интересной деталью: как видно, для ловушки есть две числовые константы. На самом деле существует две основные версии протокола SNMP (v1 & v2) и самое важное то, что они не являются совместимыми (на самом деле версий значительно больше - SNMP v2{p | c | u} etc, только все эти модификации довольно незначительны, так как , например, введение поддержки md5 и т.п.).

    SNMP - протокол контроля и диагностики, в связи с чем он рассчитан на ситуации, когда нарушается целостность маршрутов, кроме того в такой ситуации требуется как можно менее требовательный с аппаратуре транспортный протокол , поэтому выбор был сделан в сторону UDP (User Datagram Protocol). Но это не значит, что никакой другой протокол не может переносить пакеты SNMP. Таковым может быть IPX протокол (например, в сетях NetWare) , также в виде транспорта могут выступать карды Ethernet, ячейки ATM. Отличительной особенностью рассматриваемого протокола есть то, что передача данных осуществляется без установки соединения.

    Допустим, менеджер послал несколько пакетов разным агентам, как же системе управления в дальнейшем определить, какой из приходящих пакетов касается первого и второго агента? Для этого каждому пакету приписывается определенный ID - числовое значение. Когда агент получает запрос от менеджера, он генерирует ответ и вставляет в пакет значение ID, полученное им из запроса, не модифицируя его. Одним из ключевых понятий в SNMP является понятие group (группа). Процедура авторизации менеджера представляет собой простую проверку на принадлежность его к определенной группе, из списка, находящегося у агента. Если агент не находит группы менеджера в своем списке, их дальнейшее взаимодействие невозможно. До этого мы несколько раз сталкивались с первой и второй версией SNMP. Обратим внимание на отличие между ними. Первым делом заметим, что в SNMP v2 включена поддержка шифрования трафика, для чего, в зависимости от реализации, используются алгоритмы DES, MD5 . Это ведет к тому что при передаче данных наиболее важные данные недоступны для извлечения сниффингом, в том числе и информация о группах сети. Все это привело в увеличению самого трафика и усложнению структуры пакета. Сам по себе, на данный момент, v2 практически нигде не используется. Машины под управлением Windows NT используют SNMP v1. Таким образом мы переходим к, пожалуй, самой интересной части статьи, а именно к проблемам Security.

    Практика и безопасность

    В наше время вопросы сетевой безопасности приобретают особое значение, особенно когда речь идет о протоколах передачи данных, тем более в корпоративных сетях. Даже после поверхностного знакомства с SNMP v1/v2 становится понятно, что разработчики протокола думали об этом в последнюю очередь или же их жестко поджимали сроки сдачи проекта. Создается впечатление что протокол рассчитан на работу в среде так называемых "доверенных хостов".

    Представим себе некую виртуальную личность. Человека, точнее некий IP адрес, обладатель которого имеет намерение получить выгоду , либо же просто насолить администратору путем нарушения работы некой сети. Станем на место этой особы.

    Рассмотрение этого вопроса сведем к двум пунктам:
  • a) Мы находимся вне "враждебной сети". Каким же образом мы можем совершить свое черное дело? В первую очередь предполагаем, что мы знаем адрес шлюза сети. Согласно RFC, соединение системы управления с агентом происходит по 161-ому порту (UDP). Вспомним о том что для удачной работы необходимо знание группы. Тут злоумышленнику на помощь приходит то, что зачастую администраторы оставляют значения (имена) групп, выставленные по умолчанию, а по умолчанию для SNMP существует две группы - "private" и "public".

    В случае, если администратор не предусмотрел подобного развития событий, недоброжелатель может доставить ему массу неприятностей. Как известно, SNMP протокол является частью FingerPrintering. При желании , благодаря группе system MIB II, есть возможность узнать довольно большой объем информации о системе. Чего хотя бы стоит read-only параметр sysDescr. Ведь зная точно версию программного обеспечения, есть шанс , используя средства для соответствующей ОС, получить полный контроль над системой.

    Я не зря упомянул атрибут read-only этого параметра. Ведь не порывшись в исходниках snmpd (в случае UNIX подобной ОС ), этот параметр изменить нельзя, то есть агент добросовестно выдаст злоумышленнику все необходимые для него данные. А ведь не надо забывать о том, что реализации агентов под Windows поставляются без исходных кодов, а знание операционной системы - 50% успеха атаки. Кроме того, вспомним про то, что множество параметров имеют атрибут rw (read-write), и среди таких параметров - форвардинг! Представьте себе последствия установки его в режим "notForwarding(2)". К примеру в Linux реализации ПО для SNMP под название ucd-snmp есть возможность удаленного запуска скриптов на сервере, путем посылки соответствующего запроса.

    Думаю, всем понятно к чему могут привести "недоработки администратора".
  • b) Злоумышленник находится на локальной машине. В таком случае вероятность увольнения админа резко возрастает. Ведь нахождение в одном сегменте сети дает возможность простым сниффингом отловить названия групп, а с ними и множество системной информации. Этого случая также касается все сказанное в пункте (а).

    Перейдем к "практическим занятиям". Что же может на понадобиться. В первую очередь программное обеспечение. Его можно достать на /redir.php?url=net-snmp.sourceforge.net. Примеры будут приводиться для ОС Линукс, но синтаксис команд аналогичен Windows ПО.

    Установка пакета стандартна:
    gunzip udc-snmp-3.5.3.tar.gz
    tar -xvf udc-snmp-3.5.3.tar
    cd udc-snmp-3.5.3
    ./configure
    make
    make install
    Запуск демона (агента)
    snmpd
    После инсталяции Вам доступны программы:
    snmpget
    snmpset
    snmpgetnext
    snmpwalk
    snmpbulkwalk
    snmpcheck
    snmptest
    snmpdelta
    snmpnetstat snmpstatus
    snmptable
    snmptrap
    snmptranstat
    и демон
    snmptrapd
    Посмотрим, как выглядят описанные выше операции на практике. Запрос GetRequest реализует одноименная программа snmpget. Для получения необходимой информации выполним следующую команду:

    root@darkstar:~# snmpget 10.0.0.2 public system.sysDescr.0

    На что сервер добросовестно сообщит нам:
    system.sysDescr.0 = Hardware: x86 Family 6 Model 5 Stepping 0 AT/AT COMPATIBLE - Software: Windows NT Version 4.0 (Build Number: 1381 Uniprocessor Free )
    (не правда ли - довольно содержательно), либо же
    system.sysDescr.0 = Linux darkstar 2.4.5 #1 SMP Fri Aug 17 09:42:17 EEST 2001 i586
    Прямо-таки - руководство по проникновению.

    Допустим, мы хотим что-либо изменить в настройках агента. Проделаем следующую операцию:

    root@darkstar:~# snmpset 10.0.0.2 public system.sysContact.0 s test@test.com

    и получим ответ: system.sysContact.0 = test@test.com

    Думаю, настало время рассмотреть SNMP на пакетном уровне.

    SNMP


    Этот пакет был отловлен сниффером NetXRay на сетевом интерфейсе агента. Как видим - практика недалека от теории. Наблюдаем Request ID и параметры запроса.
    Как видите, название группы абсолютно никак не шифруется (о чем в свою очередь говорит Protocol version number : 1). Хочется отметить, что согласно спецификации протокола, пакеты SNMP не имеют четко определенной длины. Существует ограничение сверху равное длине UDP сообщения, равное 65507 байт, в свою очередь сам протокол накладывает другое максимальное значение - лишь 484 байта. В свою очередь не имеет установленного значения и длина заголовка пакета (headerLength).

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

     

     

    Наверх


    Постоянная ссылка на статью "SNMP протокол - принципы, безопасность, применение":


    Рассказать другу

    Оценка: 4.0 (голосов: 16)

    Ваша оценка:

    Ваш комментарий

    Имя:
    Сообщение:
    Защитный код: включите графику
     
     



    Поиск по базе статей:





    Темы статей






    Новые статьи

    Противовирусные препараты: за и против Добро пожаловать в Армению. Знакомство с Арменией Крыша из сэндвич панелей для индивидуального строительства Возможно ли отменить договор купли-продажи квартиры, если он был уже подписан Как выбрать блеск для губ Чего боятся мужчины Как побороть страх перед неизвестностью Газон на участке своими руками Как правильно стирать шторы Как просто бросить курить

    Вместе с этой статьей обычно читают:

    Honda ASV-3: безопасному автомобилю водитель не нужен

    Компания Honda представила автомобиль, гордо названный самым безопасным в мире. Неизвестно, можно ли сделать самым безопасным в мира автомобиль, созданный на базе Accord (разницу в массе с полноразмерными внедорожниками никто не отменял), но самым «активно-безопасным» ASV-3 назвать вполне можно. Дело в том, что японцы не просто нашпиговали серийный автомобиль разнообразными системами безопасности, но и синхронизировали их работу.

    » Японские автомобили - 2375 - читать


    Mercedes C-Class: По принципу Гиппократа

    В тесте участвуют автомобили: Mercedes C-Class "Примум нон ноцере" – "Не навреди!" – уже более двух тысячелетий назад призывал Гиппократ всех, кто собирался заняться врачеванием. Обновляя свою самую популярную модель, дизайнеры "Мерседес-Бенца" рассудили, что главный принцип медицины хорош и в автомобилестроении.

    » Немецкие автомобили - 2021 - читать


    Подушкам безопасности исполнилось 20 лет

    Сегодня Mercedes празднует 20-летие с момента появления надувных подушек безопасности. Работы над созданием первых аэр-бегов начались 35 лет назад – в 1966 году, хотя идея о «воздушной прокладке» появилась у инженеров Mercedes в 1950 году. Всего на создание первой подушки безопасности было потрачено около 13 миллионов долларов и 15 лет напряженной работы, пока в 1981 году Mercedes-Benz не представил на автосалоне в Женеве первый автомобиль S-класса с надувной подушкой безоп ...

    » Немецкие автомобили - 2402 - читать


    Безопасность беспроводных сетей: инструкция к применению

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

    » Комуникация и сети - 6152 - читать


    Принцип работы УЗО и его применение для защиты от поражения электрическим током

    Мы в своей повседневной работе часто сталкиваемся с тем, что многие из наших партнёров хотели бы больше узнать об УЗО. Об этом модульном устройстве, использование которого предписывается ПУЭ, единственном из модульных устройств, требующем пожарной сертификации (этим я ещё раз хочу подчеркнуть всю важность понимания принципов его работы). Мы решили попробовать выполнить эту просьбу.

    » Разное - 3808 - читать



    Статья на тему Компьютеры » Безопасность » SNMP протокол - принципы, безопасность, применение

    Все статьи | Разделы | Поиск | Добавить статью | Контакты

    © Art.Thelib.Ru, 2006-2024, при копировании материалов, прямая индексируемая ссылка на сайт обязательна.

    Энциклопедия Art.Thelib.Ru