O pacote SNMPv3
Conceitos
O modelo de segurança introduzido no SNMPv3 trás uma série de novos conceitos, dentre os quais os seguintes são utilizados pela USM:
- Authoritative SNMP engine: de forma a proteger a comunicação das ameaças de segurança supracitadas, uma das engines de comunicação SNMP é designada como engine de autoridade, devendo então receber as mensagens do SNMP que necessitam de resposta. Esta engine é sempre representada pelo agente com o qual a estação de gerenciamento está se comunicando.
- snmpEngineID: um identificador único para a engine SNMP dentro de um domínio administrativo. É uma sequencia de bytes que não pode ter comprimento nulo ou ser composta apenas de '0's ou 'H's. Em geral, esta é criada a partir de uma combinação de um número arbitrário definido pela empresa ou instituição que controla a rede, concatenado com o endereço IP ou MAC do agente e uma sequencia administrativa, também arbitrária.
- snmpEngineBoots: este contador especifica o número de vezes que uma engine SNMP foi reinicializada desde a última vez em que foi definida a snmpEngineID. Seu valor inicial é zero.
- snmpEngineTime: este contador especifica o número de segundos desde que uma engine SNMP foi reinicializada. Quando chega a seu máximo (2147483647), o valor do contador snmpEngineBoots é incrementado e este contador é reiniciado.
- snmpSecurityLevel: este campo indica o tipo de segurança utilizado pela engine, sendo este especificado por um destes três valores: noAuthNoPriv, que especifica a ausência de privacidade ou autenticação; authNoPriv, que especifica o uso de autenticação, mas não de privacidade; e authPriv, que especifica o uso de autenticação e privacidade. Vale ressaltar que não existe um modo noAuthPriv (sem autenticação, porém com privacidade), uma vez que a autenticação é necessária para garantia dos parâmetros de privacidade.
Estrutura
![Diagrama do SNMPv3](img/pacotesnmpv3.png)
Figura 5.1 - Diagrama de um pacote do SNMPv3
- msgVersion: a versão do pacote SNMP (1, 2 ou 3).
- msgID: a identificação da mensagem de forma a coordenar a requisição e a resposta trocadas pelo agente e NMS. Este campo deve ser idêntico em ambas as mensagens.
- msgMaxSize: determina o tamanho máximo da mensagem que o emissor é capaz de receber de outra engine SNMP.
- msgFlags: este campo é composto por um único octeto, que determina como a mensagem deve ser processada. Dentre os bits disponíveis, aqui estão designados dois bits responsáveis pela notificação de encriptação e autenticação do pacote.
- msgSecurityModel: o SNMP3 foi projetado para trabalhar com modelos de segurança distintos coexistentes. Este campo especifica qual destes foi utilizado e, consequentemente, o processo de segurança pelo qual deve passar a mensagem recebida.
- msgSecurityParameters: é composta por uma sequência de bytes que contém dados específicos ao modelo de segurança adotado. Estes valores são utilizados pelo módulo de autenticação para prover integridade e autenticação; pelo módulo de temporização (timeliness), de forma a prover proteção contra atraso de mensagens e repetição; e pelo módulo de privacidade, responsável por assegurar a confidencialidade do PDU.
- msgAuthoritativeEngineID: a snmpEngineID da engine de autoridade é colocada neste campo, independente de quem envia a mensagem.
- msgAuthoritativeEngineBoots: a snmpEngineBoots da engine de autoridade.
- msgAuthoritativeEngineTime: a snmpEngineTime da engine de autoridade.
- msgUserName: o nome do usuário cujas chaves secretas foram possivelmente utilizadas para autenticar ou encriptar o pacote.
- msgAuthenticationParameters: se o pacote foi autenticado, este campo contém o resultado da função resumo (hash function) utilizada: HMAC-MD5-96 ou HMAC-SHA-96, ambos explicados mais adiante.
- msgPrivacyParameters: se o scopedPDU do pacote está encriptado, este campo contém o valor aleatório gerado (salt) que foi usado como entrada do algorítmo DES.
- scopedPDU: este campo é dividido em 3 blocos:
- contextEngineID: identificador único da entidade do SNMP que pode acessar uma instância de um objeto gerenciado dentro do contexto.
- contextName: o nome único do contexto administrativo ao qual o PDU pertence.
- PDU: contém o PDU efetivo, onde consta uma operação a ser realizada sobre os dados no contexto especificado, identificado pelo contextEngineID
transmitido.