quinta-feira, 29 de outubro de 2009

Tipos de Ataques por Camada - Camada de Aplicação



Olá amigos,

Estamos chegando ao ultimo artigo da série "Tipos de Ataques por Camada", o que me deixa extremamente orgulhoso. É a primeira série de artigos que eu tenho a honra de escrever, e pelo que tenho visto no Google Analytics tem muita gente apaixonada por segurança da informação como eu.

Bom, vamos ao que interessa. Dando continuidade ao nosso trabalho, hoje iremos falar sobre as principais ameaças da camada de aplicação, que é a camada que interage diretamente com o usuário final.



Como tenho costume de fazer, recomendo a leitura dos artigos anteriores para complementar o seu conhecimento.

Artigos recomendados:


Para manter uma padronização dos nossos artigos usaremos a seguinte estrutura:

1) Estrutura do artigo
  • Introdução;
  • Ataques ao Domain Name System (DNS);
  • Ataques ao Web Server;
  • Ataques aos Sistemas de Controle de Versão;
  • Ataques ao Mail Transport Agents (MTA);
  • Ataques ao Simple Network Management Protocol (SNMP);
  • Ataques ao Open Secure Sockets Layer (OpenSSL);
  • Bibliografia.
OBS: Dentro de cada tópico que será abordado falaremos a respeito de algumas soluções para se defender dos respectivos ataques.

2) Introdução

Nesse artigo serão abordadas as vulnerabilidades da camada de aplicação da arquitetura TCP/IP, nela é possível encontrar uma série de falhas, das quais serão apresentadas as principais. Seguem abaixo algumas delas.


3) Ataques ao Domain Name System (DNS)

 Existem dois tipos de DNS bastante utilizados atualmente, que são os autoritativos e os recursivos. Os servidores DNS autoritativos são responsáveis por manter mapas referentes às zonas locais e respondem a consultas oriundas de todo o planeta, de máquinas que precisam resolver nomes de domínio da zona sob a autoridade deste servidor. Já os servidores DNS recursivos são responsáveis por receberem consultas DNS de clientes locais além de realizar consultas aos servidores externos.

Um problema bastante comum relacionado ao DNS é o servidor DNS recursivo aberto, que consiste em uma falha na configuração que permite a qualquer máquina na Internet fazer consultas ao servidor DNS recursivo de uma determinada rede.

Esse tipo de vulnerabilidade abre caminho para os atacantes realizarem um ataque conhecido como envenenamento de cache (cache poisoning), que permite aos invasores manipularem as informações do servidor. Tais informações podem ser usadas para redirecionar um cliente desavisado para um site falso, colocando em risco seus dados pessoais.

Outro problema causado pela má configuração são os ataques de negação de serviço distribuídos (DDoS), que podem gerar uma grande quantidade e tráfego de respostas DNS para uma vítima que teve o endereço IP forjado. Nesse tipo de ataque o atacante publica um registro muito grande em um servidor DNS que está sob o seu controle, em seguida, com uma lista de servidores recursivos abertos na mão, ele envia a esses servidores centenas de milhares de consultas pelo registro publicado no DNS invadido, colocando o endereço IP da vítima como sendo a origem da consulta. Assim, o atacante faz com que as respostas sejam enviadas para a vítima e não para a máquina que fez a consulta.

Embora o servidor Bind não forneça um shell propriamente dito, podemos utilizar a técnica de chroot jail, que consiste em criar um espaço de trabalho para o servidor de maneira que se um atacante conseguir acesso a um shell do sistema através deste serviço ele seja limitado a área configurada no jail, não conseguindo fazer nada no sistema hospedeiro. Sempre aplicar os pacotes de correções e atualizações disponibilizadas pelo fabricante, utilizar o DNS Transaction Signatures (TSIG) para realizar transferência de zonas entre servidores de maneira segura e desativar as opções “recursão” e “glue fetching” da versão 8.4.4 e 8.4.5, e "dnssec validation" no nível "Options/View" da versão 9.3.0 deste servidor, para se defender contra envenenamento de cache DNS (DNS cache poisoning).


4) Ataques ao Web Server

Um dos servidores mais populares do mundo o Apache já foi alvo de inúmeros ataques. Na maioria das vezes esses ataques buscam explorar vulnerabilidades em scripts CGI, PHP ou em scripts feitos por qualquer outra linguagem. Esses ataques buscam alguma funcionalidade que permita ler ou executar algum arquivo no servidor, sem ter acesso direto ao mesmo.

Outro ataque bastante comum aos servidores web é a de negação de serviço (DoS), que consiste em realizar um grande número de requisições de conexão até que o servidor não consiga mais reservar recursos de hardware e passe a recusar pedidos de conexão.

Para deixar os servidores web Apache mais seguros é preciso tomar alguns cuidados, tais como: Instalar patches de segurança e mantê-lo atualizado, remover todos os scripts de exemplo dos módulos add-on (mod_php, mod_cgi, mod_perl), caso deseje executar scripts php, cgi ou feitos por outras linguagens, utilize o suEXEC, que é um programa utilizado pelo Apache que permite a chamada de scripts a partir de usuários com ID diferente do utilizado pelo Apache.

Não para por aí, ações como não permitir a realização de uploads de scripts feitos por usuários não confiáveis, acompanhar sites e artigos relacionados a novas vulnerabilidades de qualquer projeto de código fonte aberto, não executar o servidor web como root e modificar qualquer informação que possa indicar ao atacante qual servidor web ele está tentando prejudicar, ajudam a dificultar o sucesso dos ataques
.

5) Ataques aos Sistemas de Controle de Versão

Os sistemas de controle de versão são softwares que fornecem ferramentas para que desenvolvedores possam trabalhar simultaneamente sobre o mesmo conjunto de arquivos e gerenciar diferentes versões de código fonte.

Em sistemas Linux o sistema de controle de versão mais utilizado é o CVS (Concurrent Versions System), utilizado por muitos projetos de software livre que permitem acesso anônimo aos repositórios CVS via protocolo pserver que por padrão é executado na porta TCP 2401. O CVS possui algumas vulnerabilidades que podem ser explorados por pessoas mal intencionadas, e um deles é um problema com a pilha de protocolos TCP/IP, que ao injetar um código malicioso ocasiona o estouro da pilha (buffer overflow), permitindo ao invasor executar comandos arbitrários no servidor CVS. Outra vulnerabilidade do sistema de controle de versão diz respeito a falhas de implementação de comandos e funções que podem ser explorados por um usuário autenticado, causando negação de serviço.

Para resolver esses problemas se faz necessário tomar algumas precauções, tais como: atualizar o CVS para a versão mais recente e estável; executar o servidor CVS em uma prisão chroot; configurar o servidor CVS para utilizar o protocolo SSH em vez do protocolo pserver que envia dados em texto plano; ao permitir acesso anônimo no servidor CVS, filtrar a porta 2401 para permitir que apenas hosts confiáveis possam se conectar e conceder apenas acesso de leitura para usuários anônimos. Após tomar essas precauções podemos executar novamente os ataques contra o servidor para verificar a eficácia das medidas de segurança adotadas.


6) Ataques ao Mail Transport Agents (MTA)

O serviço de e-mail juntamente com seu protocolo SMTP é um dos mais populares da Internet e um dos mais antigos também. Por padrão o servidor SMTP recebe pedidos de conexão na porta 25. No mercado existe uma série de soluções de e-mail, para Linux o mais popular é o Sendmail que até pouco tempo possuía um grande número de vulnerabilidades.

Os problemas mais comuns em servidores de e-mails são: buffer overruns e heap overflows que podem ser utilizados por atacantes remotos ou locais para comprometer o servidor; o problema conhecido como retransmissor aberto (open relay) resultado da má configuração, permite que usuários mal intencionados utilizem o servidor de e-mails para distribuir spams, causando grande prejuízo para a organização quando o seu servidor é inserido em uma lista negra de servidores de e-mail, além do fato dos spams consumirem muita largura de banda.


7) Ataques ao Simple Network Management Protocol (SNMP)

Atualmente a grande parte dos novos dispositivos de rede usam o SNMP para monitoramento remoto e configuração. O SNMP é um protocolo simples usado normalmente por softwares de monitoramento para obter informações dos dispositivos gerenciáveis, tais como o tráfego de rede, leitura de CPU, carga de disco, modificação de configuração de dispositivos sem fio, roteadores de banda larga entre outros.

Grande parte dos dispositivos que implementam o protocolo SNMP usam a versão 1 ou 2, que disponibilizam um método de autenticação muito fraco. A versão 1 do SNMP contém uma série de falhas na forma como as traps (mensagens) SNMP e requisições de mensagens são tratadas e decodificadas, permitindo a exploração das vulnerabilidades de várias maneiras, de negação de serviços à reescrita da configuração.

O SNMP nas versões 1 e 2 usam strings chamadas de community para fazerem autenticação. Estes são enviados para a porta UDP 161 não encriptada, desta forma fica muito fácil para os atacantes realizar um man-in-the-middle e capturar as communities. Para aumentar o nível de segurança do protocolo SNMP deve-se criar duas communities, uma que tenha acesso somente de leitura que por padrão é a “public”, e um que tenha acesso de leitura e escrita que por padrão é a “private”.

Se for possível não use o SNMP nas versões 1 e 2, a menos que seja extremamente necessário; sempre que possível, usar o SNMP versão 3, que tem a possibilidade de usar autenticação e encriptação; caso use o SNMP, altere o padrão das communities; crie um bom firewall no dispositivo ou em um dispositivo na frente do mesmo, permitindo que apenas máquinas confiáveis possam se conectar usando o SNMP.


8) Ataques ao Open Secure Sockets Layer (OpenSSL)

O OpenSSL é uma das opções mais populares para se utilizar em aplicações que precisam de criptografia para suporte a redes de comunicação. Várias aplicações utilizam o OpenSSL dentre as quais destacam-se o Apache (conexões http seguras), Sendmail, OpenLDAP e OpenSSH. Vulnerabilidades no OpenSSL afetam todas as aplicações que a utilizam. Dependendo das funções utilizadas pelo aplicativo, as vulnerabilidades podem ser exploradas através da própria aplicação para executar código arbitrário no servidor ou mesmo para obter privilégios de root.

Para diminuir as vulnerabilidades se faz necessário a adoção de atitudes como: identificar as versões do OpenSSL instalados nos servidores, caso seja necessário atualize para as versões mais recentes e se as aplicações usando OpenSSL não exigem conexões de usuários desconhecidos, crie regras de firewall para permitir conexões apenas de sites confiáveis.


9) Bibliografia

  • GHEORGHE, Lucian. Designing and Implementing Linux Firewalls and Qos using netfilter, iproute2, NAT, and L7-filter. 1. Ed. Birmingham: Packt Publishing, 2006.
  • HOEPERS, Cristine; STEDING-JESSEN, Klaus; MURILO, Nelson; OBELHEIRO Rafael R. Recomendações para evitar o abuso de servidores DNS recursivos abertos. Cert.br, São Paulo, 10 ago. 2007. Disponível em: . Acesso em: 29 out. 2009.

Espero que tenham gostado. Já que falamos dos tipos de ataques, nos próximos artigos pretendo falar um pouco dos tipos de atacantes e de como eles são classificados.



0 comentários: