SEG. EM SISTEMAS E REDES
Vulnerabilidades
Prof. Ulisses Cotta Cavalca
<ulisses.cotta@gmail.com>
Belo Horizonte/MG
SUMÁRIO
1) Introdução
2) Vulnerabilidades em sistemas 3) Vulnerabilidades em redes
4) Dicionários de vulnerabilidades
1. INTRODUÇÃO
●
Introdução
● Principais erros
● Principais personagens
● Anatomia de um ataque
● Vulnerabilidades
1. INTRODUÇÃO
1.1. Principais erros
● Conectar sistemas na Internet sem testá-los;
● Conectar com contas e senhas padrão.
● Usuário: teste; Senha: teste123
● Não atualizar erros de segurança, quando estes são encontrados e divulgados;
● Deixar que pessoas sem o devido treinamento cuidem da segurança;
● Deixar serviços desnecessários nos computadores: ftpd, telnetd, funger, RPC, mail, Rservices;
● Manter no servidor pacotes que possibilitam o invasor
1. INTRODUÇÃO
1.1. Principais erros
● Manter no servidor ligado à Internet a base de arquivos da empresa, não diferenciados serviços de LAN e WAN;
● Conhecer a segurança física, mas desconhecer (ou inexistir) a segurança da informação;
● Falta de um ambiente de laboratório, ou de teste;
● Manter um firewall protegendo a rede, acreditando que ele é suficiente;
● Permitir o uso indiscriminado de protocolos específicos, como o ICMP;
● Implementar firewall com políticas genéricas;
1. INTRODUÇÃO
1.1. Principais erros
● Usar protocolos descriptografados para administrar sistemas remotos, firewalls, etc;
● Não idealizar perímetros para melhorar a segurança da rede;
● Não ter concentrados de logs e analisadores dos registros de logs;
● Possuir um concentrador de logs, mas com os horários dos servidores não sincronizados;
● Achar que esquecendo os problemas eles somem rapidamente;
● Falhar na implementação de antivírus ou lista de vírus;
Falhas na capacitação e conscientização dos usuários.
1. INTRODUÇÃO
1.2. Principais personagens
●
Hacker
● Especialista em informática, “problem solver”, descobre falhas e cria exploit;
● Possui “ética hacker”;
●
Cracker
● Especialista em informática,”problem creator”, hacker malicioso, criminoso;
●
Script kiddies
● Com pouco conhecimento de informática, usam exploits criados pelos hackers e executam ataques na Internet;
1. INTRODUÇÃO
1.2. Principais personagens
● Lammer
● Considerado o nível mais baixo, ou seja, indivíduo que não
conhece o poder do computador e se auto denomina um hacker, ou pensa ser um cracker e sai invadindo hosts pela Internet;
● Menor conhecimento que um script kiddie;
● Newbie
● Aprendiz do hacker, pergunta muito, é ignorado e ridicularizado;
● Larva
● Indivíduo capaz de eecutar invasões a partir de “receitas de bolo” e exploits encontrados na Internet, mas diferente do script kiddies, já são capazes de compreender o que estão fazendo e até de
1. INTRODUÇÃO
1.3. Anatomia de um ataque
● Teste de penetração (pen test)
● Também denominado teste de invasão.
● Consiste em apurar o quanto difícil é inadir uma rede de computadores ou um sistema;
● Pode revelar:
● Que tipo de informação pode ser obtida fora da organização, sem a
necessariamente conectar À rede da empresa ao acessá-la fisicamente;
● Como os sistemas reagem a um ataque;
● Se é possível acessar o sistema com informações disponíveis ou já existentes;
● Informações que possam se tornar acessíveis em caso de pane no sistema
1. INTRODUÇÃO
1.3. Anatomia de um ataque
●
Teste de penetração (pen test)
● Abordagens:
● Teste de penetração zero (black box)
● Grupo de teste não tem nenhuma informação sobre o sistema alvo
● Teste de invasão mais realístico possível
● Teste de penetração parcial (gray box)
● Organização alvo fornece informações que um atacante pode encontrar;
● Usado se o objetivo for testar um novo tipo de ataque, ou focar em um host específico;
● Informações como topologias de rede, política de segurança e inventário
● Teste de conhecimento (white box)
● Simulação do trabalho de um atacante que possui grande conhecimento da
1. INTRODUÇÃO
1.3. Anatomia de um ataque
●
Teste de penetração (pen test)
● Fases:
● Fase de descoberta
● Coleta de informações da organização
● Fase de enumeração
● Complementa da fase de descoberta, com a coleta de informações como nomes de usuários, informações de compartilhamentos, aplicativos,
plataformas, infraestruturas, etc.
● Fase de mapeamento de vulnerabilidades
● Estabelecimento de relação das informações obtidas
● Fase de exploração
1. INTRODUÇÃO
1.4. Vulnerabilidades
● Evidência ou fragiliade que eleva o grau de exposição do ativo, aumentando a probabilidade de sucesso da investida de uma ameaça
● Físicas: cabeamento de baixa qualidade, ausência de fragmentadora de papel, instalação elétrica mal
dimensionada;
● Tecnológicas: defeito de software, sistema operacional desatualizado, senha fraca;
● Humanas: falta de conscientização dos usuários, ausência de rotina de backup, descuido e despreparo.
1. INTRODUÇÃO
1.4. Vulnerabilidades
●
Sob o ponto de vista tecnológico
● São falhas presentes em um programa, protocolo ou sistema operacional;
● Decorrem de erros de especificação ou de programação
● Prevenção para erros de programação:
● Aplicação de patches ou hotfix
● Aplicação de service pack ou maintenance level
2. VULNERABILIDADES EM SISTEMAS
● Buffer overflow
● Buffer overflow baseado em pilha
● Buffer overflow baseado no heap
● Ataque por retorno da libc
● Erros de parâmetros
● SQL injection
● Cross-site Scripting (XSS)
● Poluição de parâmetros HTTP
2. VULNERABILIDADES EM SISTEMAS
2.1. Buffer overflow
● Falha amplamente conhecida, que implica em sérios impactos no funcionamento de sistemas;
● Buffer overflow é basicamente o resultado do
armazenamento em memória maior que a sua capacidade;
● O princípio é estourar o buffer e sobrescrever parte da pilha de memória, alterando o valor das variáveis locais, valores dos parâmetros e/ou o endereço de retorno;
● Sistemas que não verificam o tamanho disponível em memória estão suscetíveis a esse ataque;
● Sistemas como Apache, IIS e OpenSSH já apresentaram essa vulnerabilidade.
2. VULNERABILIDADES EM SISTEMAS
2.1. Buffer overflow
● Um processo ao ser executado é divido em quatro partes na memória:
● Texto, onde estão armazenadas as instruções e código fontes propriamente ditos. Armazena código binário e executável, está marcada apenas como leitura.
● Em seguida os dados, onde são armazenados os conteúdos das variáveis globais e estáticas do processo em execução.
● Já pilha é um espaço contínuo de memória responsável por armazenar o conteúdo das variáveis locais do processo, além de valores de passagem e retorno de funções.
● Por fim, o heap é responsável pela alocação dinâmica de memória.
2. VULNERABILIDADES EM SISTEMAS
2.1. Buffer overflow
● Stack-based buffer overflow (Buffer overflow baseado em pilha)
:
● É a técnica mais trival de ataque por buffer overflow, consistindo na rescrita da pilha de memória com o conteúdo excedido.
● O valor excedido salvo na pilha de memória pode apontar para a execução do código malicioso, ou até mesmo para parte do programa vulnerável.
2. VULNERABILIDADES EM SISTEMAS
2.1. Buffer overflow
● Stack-based buffer overflow
:
2. VULNERABILIDADES EM SISTEMAS
2.1. Buffer overflow
● Heap-base buffer overflow (Buffer overflow baseado no heap)
● Em geral é mais difícil de ser explorada, devido a sua
função de alocação dinâmica de memória, blocos contíguos e fragmentação interna.
● O buffer presente no heap deve ser estourado para que o retorno à pilha aponto para o código malicoso.
2. VULNERABILIDADES EM SISTEMAS
2.1. Buffer overflow
● Return-to-libc attack (Ataque por retorno da libc):
● consiste no estouro de um buffer para que seja apontado a um trecho do programa em execução, geralmente uma
função. Essas funções são tipicamente utilizadas pela
biblioteca libc. Ataques desse tipo são comumente aplicados após a inclusão de patches em sistemas operacionais, que são impedidos de executar códigos nas regiões de memória que o processo ocupou (região de dados, pilha, ou heap).
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● Principais alvos de ataques são serviços de DNS, servidor Web e servidor de email.
● Destes, o servidor web é o mais suscetível a ataques por erros de parâmetros, por exigir que parâmetros sejam enviados
durante a sua execução;
● Essa estratégia consiste em inserir numa determinada aplicação parâmetros que, a priori, não são previstos ou tratados no código fonte
● Podemos citar os ataques por erros de parâmetros:
● SQL injection
● XSS (Cross-site Scripting)
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● SQL injection
● A vulnerabilidade por SQL injection (SQLi) nasce quando a aplicação não trata o caracter ';
● Essa ausência de tratamento permite a inserção de código SQL para :
– expor dados escondidos,
– sobrescrever dados valiosos;
– ainda executar comandos de sistema perigosos no servidor;
● Em geral, aplicações PHP são mais suscetíveis a
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● SQL injection
● Exemplo de como SQLi funciona:
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● SQL injection
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● SQL injection
● Para verificar se um site tem essa vulnerabilidade, acrescente ' no final da URL;
● Em geral, sites que contém os seguintes arquivos, é possível aplicar SQLi:
– index.php?id=
– gallery.php?id=
– article.php?id=
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● SQL injection
● Como se proteger:
– Nunca confie em nenhum tipo de entrada no sistemas, especialmente aquela que vem do lado do cliente,
mesmo que venha de um combobox (HTML), um campo de entrada escondido (hidden) ou um cookie;
– Nunca conecte ao banco de dados como um super-
usuário ou como o dono do banco de dados. Use sempre usuários personalidados com privilégios bem limitados;
– Verifique se uma entrada qualquer tem o tipo de dados experado.
Exemplo: espere números se o campo for numérico :)
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● Cross-site Scripting (XSS)
● Envolve a consequência de misturar dados (código HTML por exemplo) e códigos em um objeto.
● Entendemos estes códigos como linguagens executadas no navegador, como o JavaScript, Active Script e o ActiveX.
● Em ataques por XSS, o agressor insere trechos em JavaScript (ou qualquer outra linguagem que seja interpretada no navegador do cliente) no HTML da aplicação, sendo impossível a mesma verificar o verdadeiro intuito desses códigos.
● A partir disso o atacante pode verificar o conteúdo de cookies (que pode conter informações de autenticação do
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● Cross-site Scripting (XSS)
Código PHP simples de um site qualquer
Acesso a partir de um browser:
http://localhost/html/index.php?nome=Redes de computadores
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● Cross-site Scripting (XSS)
Acesso a partir de um browser, injetando o código Java Script:
<script>alert(document.lastModified)</script>
http://localhost/html/index.php?
nome=<script>alert(document.lastModified)</script>
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● Cross-site Scripting (XSS)
● Como se proteger:
– Não confie nos parâmetros passados pelos métodos GET pelo protocolo HTTML;
– Alguns navegadores já possuem algum implementação que trata ataques do tipo XSS
– No servidor Web, implemente regras que trate os metacaracteres. O exemplo a seguir verifica a existência de caracter entre barra ou tags
● /((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/i
2. VULNERABILIDADES EM SISTEMAS
2.2. Erros de parâmetros
● Poluição de parâmetros HTTP
● Consiste no envio de um mesmo parâmetro mais de uma vez.
Embora essa técnica seja simples, foi anunciada publicamente recentemente;
http://www.loja.com.br/carrinho.php?idProduto=1&idProduto=2
● O servidor web não consegue tratar os valores desse parâmetro duplicado, gerando grande instabilidade, funcionamento incorreto e algumas vezes comportamentos desconhecidos.
● Uma solução seria a concatenação de parâmetros duplicados e passá-los como vetor ao invés de string, diferentemente do que é comumente feito.
● Entretanto, não existe um consenso para esse tipo de prática e
3. VULNERABILIDADES EM REDES
● ARP spoofing
● IP spoofing
● Ataques de negação de serviço
● Fragmentação de pacotes IP
● Ataques de SYN flood
● Ataque Smurf
3. VULNERABILIDADES EM REDES
3.1. ARP spoofing
● Ataque relativamente antigo, mas com grandes impactos quando bem empregados;
● Funcionamento consiste em enviar um pacote ARP falso para um rede local, redirecionando o tráfego do destino correto para um sistema malicioso;
● Outro resultado possível é a negação de serviço contra o sistema alvo. O tráfego não chegará ao sistema de destino.
● Arquitetira de ataque do tipo ARP spoofing configura ataques denominados Man-In-The-Middle (MITM);
● Grande parte de switches e roteadores corporativos possuem proteção contra ARP spoofing.
3. VULNERABILIDADES EM REDES
3.1. ARP spoofing
ARP cache
3. VULNERABILIDADES EM REDES
3.1. ARP spoofing
ARP cache e MITM
3. VULNERABILIDADES EM REDES
3.2. IP spoofing
● Tem como objetivo alterar um campo do cabeçalho IP, para que os pacotes sejam enviados como se
partissem de uma origem diferente;
● O campo do pacote alterado é o de endereço de origem.
3. VULNERABILIDADES EM REDES
3.2. IP spoofing
3. VULNERABILIDADES EM REDES
3.3. Ataque de negação de serviço (DoS)
● Tem como objetivo afetar a disponibilidade dos recursos, impedindo que as informações sejam acessadas por usuários legítimos;
● Ataques DoS fazem com que recursos sejam
explorados de maneira agressiva, o que estressa o recurso, impedindo -o de realizar suas tarefas;
● Ataques de negação de serviço pode ser realizado de maneira distribuída (DDoS), de maneira que vários
hosts realizam o ataque a um alvo simultaneamente.
3. VULNERABILIDADES EM REDES
3.3. Ataque de negação de serviço (DoS)
● Uma reflexão! :)
3. VULNERABILIDADES EM REDES
3.4. Fragmentação de pacotes IP
● A fragmentação de pacote está relacionada à Maximum Transfer Unit (MTU), unidade que determina o tamanho máximo de um pacote ;
● Exemplo:
Host A R1 Host B
MTU=1500
R2
MTU=420 MTU=1500
5000
Identification
0 0 1000
More
fragments Total
length Fragments
offset
980
Data
5000 1 0 420 400
5000 1 50 420 400
Rede 1 Rede 2 Rede 3
3. VULNERABILIDADES EM REDES
3.4. Fragmentação de pacotes IP
● Valores típicos de MTU
● IEEE 802.3: 1492 bytes
● FDDI: 4470 bytes;
● X.25: 576 bytes.
● Ataques que usam fragmentação utilizam da forma
que são implementados os métodos de fragmentação e reagrupamento dos pacotes;
● Tipicamente, os sistemas não processam o pacote até que todos os fragmentos sejam recebidos.
3. VULNERABILIDADES EM REDES
3.4. Fragmentação de pacotes IP
● Formas de exploração dessa vulnerabilidade:
● Envio de pacotes com tamanho muito maior que o MTU (ping da morte):
– Estouro (overflow) da pilha TCP, pois o sistema irá processar o pacote apenas após a sua remontagem;
– Resultado é o travamento do sistema, cujo ataque que pode ser caracterizado como DoS;
– Inicialmente explorada em 1996 pelo chamado “ping da morte”. Basicamente consiste no envio de pacotes
ICMP com 65535 bytes;
– Vulnerabilidade também pode ser através dos protocolos TCP e UDP.
3. VULNERABILIDADES EM REDES
3.4. Fragmentação de pacotes IP
● Formas de exploração dessa vulnerabilidade:
● Envio de pacotes com valor de offset nulo ou negativo (teardrop):
– Dependendo da implementação, podemos ter
resultados inesperados, com travamento da máquina.
– Ataque do tipo DoS.
● Valores de endpoint iguais (land):
– Envio de pacotes SYN com valores de IP e porta de origem iguais ao IP e porta de destino;
– Travamento da máquina atacada, caracterizando
3. VULNERABILIDADES EM REDES
3.4. Ataque de SYN flood
● Protocolo de transporte TCP: estabelecimento de conexão pelo three-way handshake:
● Negocia e sincroniza o valor inicial dos números de sequência em ambas as direções.
SYN (seq=x)
SYN (seq=y) ACK=x+1 ACK=y+1 (seq=x+1)
Host A Host B
3. VULNERABILIDADES EM REDES
3.4. Ataque de SYN flood
● Protocolo de transporte TCP, finalização de conexão:
● Ocorre separadamente em cada direção da conexão.
FIN (seq=x) ACK=x+1
Host A Host B
FIN (seq=y) ACK=y+1
...
3. VULNERABILIDADES EM REDES
3.4. Ataque de SYN flood
● É um ataque de negação de serviço que explora o
mecanismo de conexões TCP, baseado no three-way handshake;
● Consiste no envio de um grande número de
requisições de conexões (pacotes SYN) para a vítima, de forma que se torne incapaz de responder as
requisições;
● A quantidade máxima de conexões é atingida, de forma que as conexões legítimas não são
respondidas até que a memória seja liberada.
3. VULNERABILIDADES EM REDES
3.4. Ataque de SYN flood
SYN (seq=x)
SYN (seq=y) ACK=x+1 SYN
Host A Host B
SYN SYN SYN SYN SYN SYN
3. VULNERABILIDADES EM REDES
3.5. Ataque Smurf
● Mais um ataque de negação de serviço
● Grande tráfego de pacotes ping (ICMP echo) é
enviado para o endereço de IP broadcast da rede, com origem o endereço da vítima (IP spoofing);
● A rede utilizada é afetada, pois todos os hosts irão responder à requisição ICMP;
● A vítima, que teve seu IP falsificado, rece os pacoes de todos esses hosts, ficando impedida de executar suas funções normais.
3. VULNERABILIDADES EM REDES
3.5. Ataque Smurf
3. VULNERABILIDADES EM REDES
3.5. Ataque Smurf
● Mais um ataque de negação de serviço
● Grande tráfego de pacotes ping (ICMP echo) é
enviado para o endereço de IP broadcast da rede, com origem o endereço da vítima (IP spoofing);
● A rede utilizada é afetada, pois todos os hosts irão responder à requisição ICMP;
● A vítima, que teve seu IP falsificado, rece os pacoes de todos esses hosts, ficando impedida de executar suas funções normais.
4. BASES DE VULNERABILIDADES
● A medida que novas vulnerabilidades são descobertas, elas são
catalogadass em bases de dados públicas para consulta e correção por parte de administradores e desenvolvedores
● Dessas bases, podemos citar:
● National Vulnerability Database (NVD): http://nvd.nist.gov/
● Open Source Vulnerability Database (OSVDB):
http://www.osvdb.org/
● CERT Vulnerability Notes Database: http://www.kb.cert.org/vuls
● Security Focus: http://www.securityfocus.com/
● Essas bases podem utilizar o seguinte padrão:
● Common Vulnerabilities and Exposures (CVE):
http://cve.mitre.org/cve/