domingo, 11 de setembro de 2011

Gerenciamento de Redes - O Protocolo SNMP

O SNMP (Simple Network Management Protocol) é um protocolo da camada de aplicação que tem como objetivo principal coletar informações de dispositivos gerenciáveis. É o responsável por veícular informações de gerência (valores das MIBs).
Suas interações são sem conexão, trabalha com Mensagens no protocolo UDP/IP, utiliza as portas 161 e 162 e seus pacotes tem tamanho variável.

Este protocolo se tornou padrão para gerência na Internet, por ser simples de implementar e amplamente difundido.

É composto de um Protocolo para troca de mensagens e padrões para estruturar a informação.



As Informações de Gerenciamento são armazenadas em MIBs que são definidas através da SMI (Structure of Management Information) e transportadas através do protocolo SNMP.

SMI
Podemos entender a SMI como uma descrição lógica das informações. É composta dos seguintes elementos:
Nomes dos objetos gerenciados, referenciados através dos OIDs (Object IDentifiers);
Sintaxe dos dados, seguindo os padrões da ASN.1 (Abstract Syntax Notation 1);
Sintaxe de transferência, seguindo as regras da BER (Basic Encoding Rules).

ASN.1
É uma linguagem de descrição de dados da ISO, definida em formato texto não ambíguo, que permite definir modelo de dados com formato independente de máquina. A implementação de dados não é considerada.

Sintaxe básica em ANS.1
Tipos de dados:
Primitivos: INTEGER, OCTET STRING, OBJECT IDENTIFIER, NULL, Subtipos;
Construtores: Lista e Tabelas;
Definidos: Nomes alternativos para tipos ASN.1.

Notações em ASN.1, seguem algumas convenções:

Exemplos de Definição ASN.1:
sysContact OBJECT-TYPE
SYNTAX DisplayString (SIZE (0...255))
ACCESS read-write
STATUS mandatory
DESCRIPTION
    “Texto xxxxxxxxxxxxxxxxxxxxxxxx”

parDhcpStartTime OBJECT-TYPE
SYNTAX  DisplayString (SIZE (1..30))
ACCESS  read-only
STATUS  mandatory
DESCRIPTION
    “Dhcp Server start time”


Campo SYNTAX:
Define o conteúdo do objeto.
INTEGER: Inteiros de 32 bits.
INTEGER (1...100) Sub-tipo inteiro).
OCTET STRING: String de bytes.
OBJECT IDENTIFIER: Localização de outro objeto na MIB.

Aceita alguns tipos específicos de aplicação:
IpAddress: OCTET STRING com 4 bytes.
Counter: Inteiro 32 bits.
Gauge: Inteiro 32 bits.
TimeTicks: Inteiro 32 bits (1/100 de segundo).

Campo ACCESS:
Define a acessibilidade do objeto.

read only: Somente leitura.
read-write: Leitura e escrita.

write-only: Somente escrita, senha do equipamento, por exemplo.
not-accessible: Não acessível, campo para operações internas, por exemplo.

Campo STATUS
Situação do objeto na MIB.
Mandatory: Devem ser implementados por todos os agentes, os valores contidos devem ser válidos.
Optional: Pode ou não ser implementado.
Deprecated: Foi substituido por novo objeto, mas ainda é válido, se tornará obsoleto mais tarde.
Obsolete: Não deve ser considerado.

Mensagem SNMP
Limitada a 484 bytes


As PDUs SNMP
Protocol Data Unit – Unidade de Dados de Protocolo 


Toda operação gera uma resposta, com excessão do Trap. Os dados das operações são transportados na porta 161 UDP/IP, enquanto os traps são transportados na porta 162 UDP/IP.


Estrutura das PDUs SNMP
Preâmbulo e Cabeçalho
Versão:
0: SNMPv1
1: SNMPv2c
2: SNMPv2u/SNMPv2p
3: SNMPv3

Tipo de PDU:
0: getRequest
1: getNextRequest
2: getResponse
3: setRequest
4: trap

Request ID:
Valor númerico usado para fazer referência a pedidos e respostas.

Códigos de erro (Error Status):
0: noError: Sucesso na operação.
1: tooBig: Resposta muito grande.
2: noSuchName: OID não suportado pelo agente.
3: badvalue: Valor incorreto para operação set.
4: readOnly: Tentativa de escrita inválida.
5: genErr: Erro não relacionado ao protocolo.

Error index:
Indica qual variável listada na PDU causou o erro.

A Arquitetura SNMP
Operações/Mensagens SNMP
Get-Request: Recupera o valor de informações de gerenciamento.

Get-Next-Request: Recupera o valor de informações de gerenciamento existentes após um determinado identificador; pega o valor da próxima variável.


Get-Bulk-Request: Estende a funcionalidade da função Get-Next. Traz um bloco de informações (Tabela) de cada vez.

Set-Request: Modifica o valor de informações de gerenciamento.

TRAP: Informa um evento ocorrido no sistema gerenciado.
Inform-Request: Fornece uma informação de gerenciamento não solicitada, usado entre gerentes, porém diferentemente do Trap no caso do Inform-Request existe a confirmação do recebimento da mensagem.
Exemplo de Operação:
Limitações de SNMP
Falta de segurança:
Esquema de autenticação trivial.
Limitações no uso do método SET.

Ineficiência:
Esquema de eventos limitado e fixo.
Operação baseada em pooling.
Comandos transportam poucos dados.

Falta de funções específicas:
MIB com estrutura fixa.
Falta de comandos de controle.
Falta de comunicação entre gerenciadores.

Não confiável:
Baseado em UDP/IP.
Traps sem reconhecimento.

Vulnerabilidade SNMP - Proteção:
Aplicar patchs fornecidos pelo fabricante;
Utilizar aplicações SNMP somente onde seja necessário;
Filtrar o acesso aos dispositivos gerenciados, permitindo somente o tráfego a partir de seus próprios servidores de gerenciamento;
Alterar o nome padrão das comunidades;
Isolar o tráfrego de gerência em uma rede específica, uma VLAN por exemplo, etc...

Versões SNMP:
  • SNMP v1
  • SNMP v2
  • SNMP v3

SNMP V1
Características e Operações Básicas:
Get: Usado pelo NMS (Network Management System – Sistema de Gerenciamento de Redes) para adquirir o valor de uma ou mais instâncias de um objeto de um agente;
GetNext: Usado pelo NMS para adquirir o valor do próximo objeto em uma tabela ou lista;
Set: Usado pelo NMS para atribuir um valor a um objeto no agente.

SNMP V2
Durante a “divergência” SNMPv2, foram definidos quatro variações:
O SNMPv2 original: SNMPv2p; Com o "p" referindo-se a "party-based“ security;
SNMPv2 baseado na comunidade: SNMPv2c;
SNMPv2 baseada no usuário: SNMPv2u;
“SNMPv2 Estrela”: SNMPv2*; Combina elementos de SNMPv2p e SNMPv2u. Isso nunca foi formalmente padronizado. Sim, isso é um asterisco no nome.

Destes, os três primeiros foram documentados em conjuntos de padrões SNMP RFC Standard, o quarto não foi.
A estrutura do formato de mensagem global para cada variante é discutido em um padrão administrativo ou de segurança para a variação em questão, que faz referência à norma SNMPv2 compartilhada para o formato de PDU (RFC 1905).

SNMP V2 (v2c)
Características e Operações adicionais:
Trap: Mensagem não solicitada, enviada por um agente para informar ao NMS sobre um evento significante;
GetBulk: Usado pelo NMS para adquirir eficientemente grandes blocos de dados;
Inform: Permite que um NMS envie traps para outro NMS e receba respostas desses traps.

SNMP V3
Melhorias de Segurança:
USM: User-based Security Model (Modelo de Segurança Baseada em Usuários);
VACM: View-based Access Control Model (Modelo de controle de acesso baseado em visões);
Configuração dinâmica de agentes SNMP utilizando comandos SNMP.

Modelo de Segurança SNMP
Modelo mais comum: SNMP V2c.
Baseado no conceito de “comunidade”.
Cada dispositivo implementa uma ou mais comunidades.
Comunidade default: “public” para leitura e “private” para gravação.


Uma comunidade define:
Método para autenticar o acesso (senha), a visibilidade da MIB e o privilégios de acesso à MIB.

Serviço de autenticação:
Todas as mensagens SNMP são autenticadas, o nome da comunidade serve como senha, porém esse é um sistema de segurança frágil e limitado; Não permite a operação SET em alguns casos.

Alguns dispositivos controlam o acesso usando o nome da comunidade e o número IP do(s) gerente(s) o que eleva um pouco a segurança, mas não resolve o problema.

Traps em SNMP
São mensagens enviadas pelo agente ao gerente, não são respostas a pedidos, ou seja são mensagens não solicitadas, representam eventos anormais.

Classificam-se em:
Genéricos: presentes na MIB padrão.
Específicos: definidos na MIB “enterprises”.

Traps genéricos
ColdStart:
Dispositivo foi ligado;
Configuração local pode ter sido alterada;
Informa ao gerente sobre sua existência.

WarmStart:
Dispositivo foi reinicializado;
Configuração local não foi alterada.

LinkDown:
Link ou porta de comunicação ligado ao nó falhou.

LinkUp:
Link ou porta local foi (re)ativada.

AuthenticationFailure:
O dispositivo recebeu mensagem SNMP não autorizada;
Comunidade não reconhecida;
Número IP de gerente inválido.

EgpNeighborLoss:
Exterior Gateway Protocol falhou no nó;
Normalmente usado em roteadores.

Referências:
Pessoal o material usado como base para a criação destes textos, veio de amigos, listas de distribuição e pesquisas na internet, portanto não possuo referências sobre os mesmos, mas se você identificar algum material de sua autoria, por favor entre em contato que os devidos créditos serão atribuídos.