Segurança

Evolução do protocolo

SNMPv1

A primeira versão do SNMP possui um esquema de autenticação extremamente frágil, sendo seu único mecanismo de segurança os "nomes de comunidade".

Um nome de comunidade representa um grupo de gerenciamento com permissões específicas, ou seja, atribuição dos direitos de utilização das instruções SET e GET sobre um certo parâmetro a membros desta comunidade. O armazenamento destes nomes de comunidade é local, ou seja, cada agente que implementa o SNMP deve registrar as permissões dadas a cada comunidade de gerenciamento que pode fazer uso de seus parâmetros.

É importante notar que as permissões são dadas à uma certa comunidade, e não a estações de gerenciamento específicas, de fato, não há nenhuma listagem dos membros de uma comunidade. A "autenticação" de uma NMS é feita através da declaração, enviada em formato texto, do nome da comunidade a qual esta pertence. A NMS, deve, deste modo, manter uma listagem dos nomes de comunidade relevantes para cada agente da rede. Para simplificar a tarefa de gerenciamento, tende-se a manter certa uniformidade nos grupo de gerenciamento cadastrados nas várias entidades da rede, mas isto não é obrigatório.

A principal falha deste modelo de segurança reside no fato de que qualquer um que conheça o nome de comunidade com os privilégios adequados pode enviar um comando do SNMP pela rede. Para piorar a situação, como não há privacidade no SNMPv1, as informações sobre os nomes de comunidades são enviados em forma de texto e sem encriptação nas mensagens UDP que trafegam na rede, é extremamente simples para um atacante interceptar estes nomes e relacioná-los às estações as quais se destinam.

Dada esta total insegurança gerada pela combinação da falta de privacidade com o modelo simples e descentralizado de autenticação, quase todas as implementações desta versão do SNMP em sistemas de produção desabilitam a instrução SET, e restringem os parâmetros acessíveis pelas instruções GET a informações não confidenciais. Esta atitude limita muito a funcionalidade do protocolo, mas ao mesmo tempo garante segurança nos ambientes onde ela é essencial.

SNMPv2

Originalmente, uma reforma no modelo de segurança do SNMP era parte dos objetivos na criação da segunda versão do protocolo. No entanto, muitos vieram a considerara nova especificação demasiadamente complexa.

Dado o fracasso na definição de um padrão bem aceito para segunda versão do SNMP ocorreram bifurcações que culminaram em um conjunto de versões incompatíveis: SNMPv2 party-based, SNMPv2*, SNMP2u, SNMPv2c. Por fim, versão do protocolo que foi normatizada foi a versão 2c, que apesar de introduzir novas funcionalidades como a instrução getBulkRequest, não fez qualquer alteração no modelo de segurança do protocolo.

Desta forma, todas as propostas de melhoria de segurança ao longo da discussão da versão 2 foram perdidas e o modelo baseado em nomes de comunidade se manteve.

SNMPv3 - Um novo modelo de segurança

Esta versão do protocolo teve como principal foco a melhoria da segurança oferecida pelas versões anteriores do protocolo SNMP. Foram desenvolvidos mecanismos para lidar com cada uma das falhas de segurança discutidas até então. Desta forma, se tornou possível utilizar o potencial completo do protocolo, incluindo as instruções SET, sem comprometer a segurança da rede. O novo modelo de segurança garante confidencialidade, integridade, autenticação e controle de acesso [5].

Em termos gerais, o PDU efetivo que carrega a instrução do SNMP (seja SNMPv1 ou SNMPv2c) é encapsulado em um PDU do SNMPv3. Esta operação provê as funções relacionadas a segurança no nível de processamento de mensagens. Para que esta comunicação seja efetiva, tanto a estação de gerenciamento, quanto os agentes devem estar utilizando a mesma SNMP engine.

Os dois módulos principais do modelo de segurança do SNMPv3 são o Modelo de Segurança Baseado em Usuário (User-based Security Model - USM) e o Modelo de Controle de Acesso Baseado em Visões (View-based Access Control Model - VACM). O USM é encarregado de autenticar, encriptar e decriptar os pacotes SNMP, enquanto que o VACM é encarregado de administrar o acesso aos dados na MIB.