Перевод статьи: SNMP Version 3 Concepts
Автор: msinadinovic
SNMP версии 3 предоставляет три значительных новых улучшения в безопасности по сравнению с предыдущими версиями протокола. Это:
Перед тем как рассмотреть, что они собой представляют, нужно пояснить один термин.
Авторитетный агент SNMP - это агент, который поддерживает информацию, используемую для обеспечения своевременности, аутентификации и конфиденциальности. В большинстве случаев агент SNMP - это агент, содержащий информацию, которую запрашивают станции управления. Единственное исключение - это отправка агентом уведомлений Inform. В таких случаях станция управления выступает авторитетным агентом и поддерживает информацию SNMP, используемую для обеспечения перечисленных выше средств безопасности.
Своевременность - это возможность, позволяющая авторитетному агенту SNMP проверить, что информация поступила своевременно и что она не была перехвачена, сохранена и передана повторно по истечении приемлемого окна времени с момента её отправки.
Это может звучать сложно, но на самом деле это не так. Для этого используются два значения из пакета SNMP версии 3. Они называются engine boots - количество загрузок агента и engine time - время, прошедшее с последней загрузки агента.
Количество загрузок агента - это количество раз, которое авторитетный агент SNMP был запущен, загружен, выполнен, инициализирован или перешёл в любое другое состояние, которое соответствует смыслу слова "загружен". Время, прошедшее с последней загрузки - это количество секунд, прошедшее с того момента, когда авторитетный агент SNMP перешёл в состояние "загружен". Эти два значения совместно используются для проверки своевременности.
Проверка своевременности производится сравнением количества загрузок агента из пакета с сохранённым значением авторитетного агента SNMP и сравнением времени, прошедшего с последней загрузки, которое должно отличаться не более чем на 150 секунд от значения авторитетного агента SNMP. Другими словами, если количество загрузок агента в полученном пакете не равно сохранённому локально значению, авторитетный агент SNMP отклонит пакет.
Аутентификация - это метод проверки, позволяющий получателю удостовериться, что пакет не был изменён в процессе передачи. Это делается путём расчёта хэша всего пакета и (в сочетании с секретным паролем, известным агенту и станции управления, участвующим в обмене) гарантирует, что только авторизованные стороны могут изменить пакет.
Конфиденциальность - это шифрование части данных пакета SNMP. Часть данных - это Protocol Data Unit в пакете SNMP. Шифрование проводится с использованием секрета (пароля), который известен агенту и станции управления.
Поскольку авторитетный агент SNMP использует информацию для обеспечения своевременности, аутентификации и конфиденциальности, должен быть способ получить эти значения не авторитетным агентам. Этот процесс называется процессом обнаружения.
Перед выполнением запросов SNMP к авторитетному агенту SNMP, нужно отправить к нему пакет обнаружения (обычно это пустой пакет SNMP версии 3) и подождать ответного сообщения REPORT. Полученное сообщение REPORT будет содержать следующие значения: engine ID - идентификатор авторитетного агента SNMP, engine boots - количество загрузок агента SNMP и engine time - время, прошедшее с последней загрузки. Эти значения нужно будет использовать в последующих запросах.
Заполучив информацию авторитетного агента SNMP, можно начать отправлять запросы в соответствии с настройками аутентификации и конфиденциальности, которые использует запрашиваемый агент.
Теперь немого подробностей о реализации SNMP версии 3 в SnmpSharpNet. Вся функциональность собрана в классе SnmpV3Packet. Этот класс позволяет выбрать нужный уровень безопасности, алгоритм аутентификации и значение секрета, протокол шифрования и значение секрета, имя пользователя и т.п. Чтобы узнать, какие алгоритмы проверки подлинности поддерживаются в библиотеке используемой вами версии, обратитесь к перечисляемому типу SecurityDigests, в котором перечислены поддерживаемые алгоритмы аутентификации. Чтобы найти поддерживаемые протоколы шифрования, обратитесь к перечисляемому типу PrivacyProtocols.
За примерами использования SNMPv3 обратитесь к веб-сайту проекта.