SNMP pode acabar sendo um problema de segurança
Autor: JulianoL | Publicado: 2014-09-12T09:20:00-03:00


O&nbsp;SNMP&nbsp;é um protocolo muito utilizado por&nbsp;administradores de rede&nbsp;em todo o mundo para&nbsp;gerenciamento de seus equipamentos. Ele oferece ao profissional uma quantidade gigantesca de informações sobre os dispositivos. Através deste protocolo, você pode tanto ler as informações (por exemplo, qual foi o uso de CPU em um&nbsp;roteador&nbsp;nos últimos 15 minutos ou mesmo quantos pacotes passaram por uma interface de rede) quanto escrever outras (por exemplo, modificando a configuração de um serviço).





Hoje, você vai aprender um pouco mais sobre o SNMP e também vai entender como ele pode se tornar um&nbsp;problema de segurança&nbsp;sério e te causar muita dor de cabeça!



O que é o SNMP

O SNMP (Simple Network Management Protocol) é um protocolo da&nbsp;camada de Aplicação do modelo OSI&nbsp;muito utilizado para auxiliar na administração de redes. Utilizando aplicações capazes de “falar” o protocolo SNMP, é possível acessar bancos de dados chamados MIBs que contém várias estatísticas e informações sobre o funcionamento de equipamentos como servidores rodando Windows/Linux/*NIX, roteadores, switches, impressoras, unidades de no-break mais avançadas, etc.

A grande vantagem que o SNMP traz é a facilidade em conseguir acesso às informações (todo o armazenamento dos dados pode ser feito em um banco de dados central, que será a única interface que você precisará acessar para ler as informações e você não precisa logar diretamente em cada dispositivo para verificar as informações que você deseja), independentemente do tamanho da rede.

Atualmente, existem 3 versões do SNMP em uso:&nbsp;1, 2c e 3. A versão 3 é a considerada padrão atualmente e as versões 1 e 2c são desatualizadas e&nbsp;inseguras, portanto não devem mais ser usadas em ambientes de produção.

Para transmitir tais informações, o protocolo usa a porta 161 do UDP. O “sistema” SNMP (todo o conjunto de componentes) é dividido da seguinte forma:

Agente: que é o software executado pelo dispositivo que está sendo monitorado.
Estação de gerenciamento: que é a máquina executando um software capaz de ler os dados SNMP dos dispositivos da rede e organizá-los de uma maneira que fique confortável para o administrador ler e entender o que está acontecendo e, à partir daí, tomar as ações necessárias. Um exemplo deste tipo de software é o Cacti.
MIBs: As MIBs (Management Information Bases) são os “bancos de dados” criados em cada um dos agentes para que eles possam armazenar as informações que serão capturadas pela estação de gerenciamento. Os nomes das MIBs são padronizados.


Todo o acesso às informações armazenadas nas MIBs é controlado utilizando-se as&nbsp;Community Strings. As community strings nas versões 1 e 2 do SNMP são utilizadas como senhas: se a estação de gerenciamento não souber a community string que foi configurada em um determinado dispositivo, ela não será capaz de pegar as informações de tal dispositivo. Na maioria das implementações hoje em dia, o nome padrão da community string é “public”. É muito importante que isto seja modificado assim que possível para evitar que pessoas não autorizadas consigam acesso à informações tão valiosas quanto as disponibilizadas pelo SNMP. Veremos as implicações disso mais adiante no texto.

No caso do SNMP v3, a segurança já é bem melhor. Embora não hajam mudanças no protocolo em si, algumas modificações importantes no aspecto de segurança do protocolo foram adicionadas:

As informações nesta versão agora são criptografadas ao serem transmitidas pela rede;
A integridade da informação é garantida;
Autenticação é utilizada para garantir que a mensagem veio de uma fonte autorizada.


Esta versão do SNMP é definida nas RFCs 3411-3418 e é, hoje em dia, considerada a versão padrão do SNMP.

Agora que você já tem um conhecimento melhor da teoria de como funciona o SNMP, vamos entender como uma ferramenta tão útil como esta pode se tornar um problemão para a segurança da sua rede. Focarei aqui nas versões 1 e 2c para convencer você a não usá-las nunca mais. :)

Falta de criptografia

Como citei anteriormente, as informações do SNMP são transferidas do agente para a estação de gerenciamento em texto claro, ou seja, qualquer um que conseguir executar um&nbsp;sniffer&nbsp;em uma máquina local da sua rede (e lembre-se que usar switches não é mais desculpa para não se preocupar com sniffers) vai conseguir capturar tanto a community string quanto qualquer dado que for requisitado para o SNMP.

Lembre-se que o SNMP pode transferir muitas informações delicadas, como nomes de usuários, conteúdos de arquivos do sistema, processos sendo executados no momento do polling (que é o ato da estação de gerenciamento requisitar os dados do agente), etc. Neste caso, nem mesmo uma community string forte vai te ajudar muito já que ela será capturada pelo atacante quando você estiver se “autenticando” com o agente para pegar as informações.

Mas aí você diz “Bom, esse negócio de sniffer só vale com máquina local, certo? Então posso ficar tranquilo!”. Você está redondamente enganado. Primeiro, tenha em mente o óbvio: qualquer atacante que conseguir acesso à uma máquina ligada à sua rede, tem uma máquina local que ele pode usar para capturar dados. Isso sem contar que hoje em dia muitas pessoas (principalmente vendedores) levam os seus próprios notebooks para reuniões e frequentemente têm autorização para conectá-los à sua rede. E se esta máquina estiver comprometida? E se o próprio vendedor agir maliciosamente e capturar os dados? Você não o conhece, portanto não pode assumir que ele só terá um comportamento idôneo.

E lembre-se também: softwares como ettercap conseguem&nbsp;sniffar&nbsp;informações mesmo em redes que utilizam switches. Portanto, tenha certeza de que pontos de acesso público estão em segmentos sem qualquer acesso às outras redes da sua empresa ou que pelo menos estejam em uma VLAN diferente.

Community strings fracas ou padrão

Nas versões 1 e 2c do protocolo, a única barreira impedindo o acesso às informações armazenadas nas MIBs dos seus dispositivos é a community string. Estas strings podem ser tanto read-only (apenas para leitura) quanto read-write (leitura e escrita).

Dois grandes erros são cometidos por administradores inexperientes:

Não modificar a community string padrão de um dispositivo: Na maioria das implementações de hoje em dia, a community string padrão é “public”. Portanto, se você não modificá-la o atacante irá conseguir acessar qualquer coisa protegida por esta community string. No caso de strings padrão, o valor poderia ser até “ap948jnq9578hqi7$#!*&amp;” que ela ainda representaria um risco para você: por ser padrão, qualquer pessoa pode descobrir qual ela é e acessar as informações.
Utilizar community strings fracas:&nbsp;Community strings devem obedecer os mesmos padrões para escolha de boas senhas: utilizar pelo menos 10 caracteres; utilizar letras maiúsculas e minúsculas; utilizar caracteres especiais; utilizar números e serem modificadas frequentemente. No caso de SNMP v1 e 2c é ainda mais importante que se modifique as community strings frequentemente por elas serem transmitidas em texto claro várias vezes. Ou seja, você tem que tratar as community strings da mesma maneira com que você trata a senha do Administrador do domínio ou do usuário root.


NOTA: Uma community read-only não oferece menos riscos mesmo só permitindo acesso de leitura. Este tipo de acesso pode ser mais que o suficiente para um atacante.

Não desabilitar o SNMP quando este não for necessário

Muita gente segue a política de não fuçar muito para não acabar causando problemas no dispositivo. Isso é um problemão já que em vários dispositivos o SNMP já vem habilitado por padrão, usando uma community string fraca que já dá acesso à informações do dispositivo. Portanto, se não for usar o SNMP em um dispositivo você deve ter certeza absoluta de que ele foi desabilitado e ninguém consegue acessar informações através dele.

Este cuidado na verdade serve para qualquer serviço em qualquer plataforma: se não precisa de um serviço desabilite-o imediatamente, de preferência antes de colocar o host em produção.

Definir quais hosts podem acessar o SNMP

Um outro cuidado muito importante é definir quais hosts podem acessar o SNMP. Permitir que qualquer um acesse estas informações (mesmo que sejam máquinas da sua rede interna) abre brecha para muitos problemas de segurança.





Algumas implementações de SNMP permitem que você especifique quais hosts poderão se comunicar com o serviço SNMP. Em outros casos, você vai precisar fazer este controle via firewall e permitir ou negar os acessos à porta 161 UDP manualmente. Obviamente, você precisa que todas as suas máquinas (não apenas os servidores) tenham algum tipo de filtro de pacotes rodando e configurado adequadamente para que você tenha o mínimo de segurança. Lembre-se sempre: você deve controlar tanto o tráfego de entrada na sua máquina quanto o tráfego de saída gerado por ela. Controlar apenas o tráfego de entrada não é uma boa estratégia de segurança qualquer que seja o serviço em questão.

Não permita SNMP inbound ou outbound na borda da sua rede

Já deixei claro aqui neste texto que as informações fornecidas pelo SNMP são extremamente sensíveis e não devem ser acessadas por qualquer pessoa. Em hipótese alguma você deve permitir que qualquer host acesse as informações de SNMP através da Internet, por mais que seja um host controlado por você que está em uma outra filial, por exemplo. Como já disse anteriormente, o SNMP não criptografa as informações e qualquer um tem acesso à elas.

Se for imprescindível que você transmita tráfego SNMP através da Internet para outras localizações, você deverá utilizar umaVPN&nbsp;bem configurada para impedir que informações valiosas sobre a sua rede acabem caindo nas mãos erradas. Talvez, alguma forma de tunelamento via&nbsp;SSH&nbsp;também possa te dar segurança o suficiente para alguma coisa temporária. Mas a VPN é uma solução melhor.

Ok, mas como seria um exemplo prático?

Bom, agora você já conhece alguns dos possíveis problemas de segurança envolvidos no uso do SNMP dentro da sua rede. Primeiro, vamos usar o&nbsp;scanner&nbsp;“onesixtyone” para scanear a rede inteira e descobrir quais hosts estão com o SNMP habilitado. Depois, vamos usar o snmpwalk.pl para pegar a informação disponibilizada pelo serviço. O meu alvo aqui vai ser uma máquina rodando Microsoft Windows 2000.

As duas ferramentas que vou usar neste exemplo estão disponíveis por padrão no BackTrack. Caso queira usar em alguma outra distribuição, basta baixá-las e executar os comandos conforme descrito abaixo.

Bom, então vamos scanear a rede e descobrir quem está rodando SNMP. Mas primeiro, vamos dar uma olhada nas opções do onesixtyone:

-c arquivo.txt: O -c vai especificar um arquivo com várias palavras que serão testadas como community strings. O BackTrack tem um arquivo chamado dict.txt com vários nomes comuns de community strings pra te dar uma ajuda. Ele fica no mesmo diretório do onesixtyone.
-i arquivo.txt: O -i permite que você coloque todos os IPs que você quer scanear em um arquivo para que o onesixtyone já verifique todos de uma vez sem que você precise ficar especificando host a host na mão.


Estas são as duas opções que mais uso e sinceramente não acho muita necessidade de verificar outras. Um exemplo de execução:

# ./onesixtyone -c dict.txt -i /tmp/hosts.txtScanning 55 hosts, 50 communities192.168.1.103 [public] Hardware: x86 Family 6 Model 7 Stepping 10 AT/AT COMPATIBLE – Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)192.168.1.104 [public] Hardware: x86 Family 6 Model 7 Stepping 10 AT/AT COMPATIBLE – Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)

Como podemos ver pelo output acima, dos 55 hosts scaneados 2 têm SNMP habilitado e a community string é “public”. Explicando o output do comando:

192.168.1.103: IP do host que tem o SNMP habilitado;
[public]: Nome da community;
Hardware…: Mostra a arquitetura da máquina e também a versão do sistema operacional sendo utilizado por ela.


Só no output do scanner nós já conseguimos algumas informações bastante interessantes. Agora, vamos ver quais outras informações o SNMP consegue nos dar. Para isso, vamos usar o snmpenum.pl.

O snmpenum.pl funciona como uma estação de gerenciamento no sentido de que ele vai trocar informações SNMP com o agente e nos apresentar o que for mais importante do ponto de vista da segurança. Atualmente, ele já tem modelos prontos para Linux, Windows e Cisco. O formato geral do comando é:

perl snmpenum.pl ENDEREÇO-IP COMMUNITY ARQUIVO-DE-CONFIGURAÇÃO

Vamos rodá-lo contra a máquina Windows que descobrimos durante o nosso scan:

# perl snmpenum.pl 192.168.1.103 public windows.txt

—————————————-UPTIME—————————————-

104 days, 06:08:09.99

—————————————-HOSTNAME—————————————-

OSIRIS

—————————————-USERS—————————————-

joaoGuestIUSR_OSIRISIWAM_OSIRISAdministratorHelpAssistantSUPPORT_122aJ

—————————————-LISTENING UDP PORTS—————————————-

1351614451026102710291030300430053456

—————————————-SYSTEM INFO—————————————-

Hardware: x86 Family 6 Model 7 Stepping 10 AT/AT COMPATIBLE – Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)

—————————————-LISTENING TCP PORTS—————————————-

21801354434451025103133243325338946904719

—————————————-SERVICES—————————————-

ServerThemesEvent LogIIS AdminMessengerNet LogonTelephonyWebClientDNS ClientWorkstationSNMP ServiceWindows TimePlug and PlayWindows AudioFTP PublishingTask SchedulerUpload ManagerRemote RegistrySecondary LogonComputer BrowserCOM+ Event SystemTerminal ServicesNetwork ConnectionsLogical Disk ManagerVMware Tools ServiceTCP/IP NetBIOS HelperCryptographic ServicesCOM+ System ApplicationShell&nbsp;Hardware DetectionSecurity Accounts ManagerSystem Event NotificationWorld Wide Web PublishingRemote Procedure Call (RPC)Distributed Link Tracking ClientNetwork Location Awareness (NLA)Remote Access Connection ManagerApplication Layer Gateway ServiceWindows Management InstrumentationDistributed Transaction CoordinatorVMware Physical Disk Helper ServiceInternet Connection Firewall (ICF) / Internet Connection Sharing (ICS)

—————————————-DOMAIN—————————————-

pedropereira.net

Cortei um pouco do output gerado pela ferramenta para a listagem não ficar tão longa. Acredito que a listagem seja clara o suficiente para você entender a necessidade de se ter boas práticas de segurança quando se usa o SNMP. Isso aí é informação de muito valor para alguém tentando atacar a sua rede.

Conclusão

Acredito que o exemplo simples que mostrei no texto já seja o suficiente para te deixar alarmado com a implantação do SNMP aí na empresa onde você trabalha. A melhor proteção neste caso é usar o SNMP v3 onde for possível e tomar todo o cuidado comentado no texto quando se utilizar as versões 1 ou 2c pois elas podem deixar a sua rede exposta a muitos ataques sérios.

Embora não tenha mostrado aqui como configurar o serviço (assunto para outro pos) acredito que você não vá ter qualquer problema para arrumar a sua implantação. Agora você já sabe o que procurar, basta configurar a coisa do jeito certo. Não seja preguiçoso: faça a coisa certa ao invés de fazer a coisa mais fácil. A preguiça pode te custar muito caro.

E você? Tem alguma outra ferramenta que gosta de usar para fazer enumeração de SNMP? Encontrou um erro no texto ou tem alguma sugestão? Deixe um comentário!



Autor:&nbsp;http://www.pedropereira.net/snmp-problemas-seguranca/

Direitos de Pedro Pereira.

Como achei muito útil para conhecimento copiei o texto de sua autoria para eu ter em um repositório próprio.