sábado, 7 de julho de 2012

Pentest - Fundamentos para realizar um teste de fogo

Introdução

Todo profissional de segurança, além de saber proteger um sistema, deve também saber atacar um sistema, o pentest (penetration test ou teste de penetração).

Mas... o que é um pentest?

O pentest é um teste onde o profissional de segurança de uma determinada empresa ataca esta mesma entidade (empresa), para descobrir as falhas, brechas onde os usuários maliciosos possam ter entrado e feito todo tipo de dano. É muito comum o roubo e a destruição dos arquivos.

Um especialista em pentest deve conhecer algumas coisas para realizar tais ataques, tais como:
  • A cabeça de um cracker
  • programação (avançado)
  • ferramentas
  •   sites de busca
  • engenharia social
  • sistema operacional
  • redes e servidores
  • etc
Vamos explicar agora o porque de conhecer isso tudo:

Porque conhecer a cabeça de um cracker?

O cracker quer penetrar no sistema não é mesmo?! Ele usa as suas ferramentas para realizar o ataque, o que geralmente é um scanner de portas, um scanner de vulnerabilidades, um exploit, etc. O especialista de pentest deve conhecer estas mesmas metodologias e ter a mesma lógica do cracker, pois ele terá que agir da mesma forma para penetrar no sistema.

Porque ter conhecimentos ainda mais avançados em programação?

Às vezes o especialista em pentest não encontra a ferramenta que precisa, e por isso ele mesmo terá de desenvolver as suas. Seja em uma linguagem simples, como o Object Pascal (Dephi), até linguagens de médioa alto nível, como C e Assembly. Essas ferramentas podem variar desde um exploit até um scanner de vulnerabilidades, que tem como função procurar vulnerabilidades e falhas em um determinado sistema e aplicação.

Porque ter conhecimento em "ferramentas" e que ferramentas seriam essas?

Eu estou me referindo a ferramentas de segurança, que podem ser utilizadas para penetrar em um sistema. Essas ferramentas são bastante comuns em ataques. Podemos chamar de ferramenta um exploit, um scanner ou uma ferramente que auxilie ao efetuar o ataque. Existem ferramentas que realizam os testes em aplicações WEB tais como:
  • dirb
  • MySqloit
  • webroot
  • e muitos outros
Porque ter conhecimento em sites de busca?

Os sites de busca podem ser utilizados para fazer um footprinting, que é aonde o especialista em pentest faz a busca a procura de informações do alvo.

Porque conhecer a engenharia social?

Simplesmente para enganar funcionários mal treinados que fornecem informações confidenciais não autorizadas.

Porque ter conhecimento em sistemas operacionais?

Para você trabalhar com pentest, você terá que saber explorar falhas, correto?! E para explorar um buffer overflow ou stack overflow, você precisa conhecer um sistema operacional Unix ou Windows e outros a fundo, concorda?! Este é um dos motivos para citarmos o conhecimento em sistemas operacionais, como fundamental ao realizar um pentest.

Porque ter conhecimento em redes e servidores?

Você deve conhecer a que serviço pertence cada porta, saber para que serve isso, aquilo, etc. Estes conhecimentos são de importância fundamental para se realizar um ataque. O especialista de pentest deve conhecer bem um firewall, um honeypot, IDS etc. Isso são alguns exemplos da área, que um profissional de segurança deve conhecer.

Como as vulnerabilidades são exploradas

Vamos começar vendo como funciona o buffer overflow.

Analisemos o seguinte código, escrito na linguagem C:

Código:
#include<stdio.h>
 #include<string.h>
 int main()
{
, , , int, array[5], =, {1,2,3,4,5};
, , , printf("%d\n",array[5]);
}
Ao executarmos este programa temos:

134513728

O que aconteceu?

Este nosso programa houve um buffer overflow. Neste código eu tinha um array de 5, e chamei esse array na tela, chamei o 5. Só que tem um problema, a contagem começa do zero. Então, eu passei do limite do buffer, daí, tivemos um estouro de pilha.

Agora se o usuário quisesse mesmo ter o resultado esperado, ele teria que utilizar o código:

Código:
#include<stdio.h>
 #include<string.h>
 
int main()
{
   int array[5] = {1,2,3,4,5};
   printf("%d\n",array[4]);
}
Compilando e executando, teríamos:

5

5, neste caso é o ultimo valor da array ;)

Esse tipo de erro é muito encontrado! É nisso que um ataque buffer overflow é explorado. O exploit tenta passar do buffer definido para causar o buffer overflow (estouro de pilha).

Só para vocês terem ideia de como pode-se achar vulnerabilidades em aplicações devido ao buffer overflow, vou mostrar a vocês duas imagens:

Imagem do milw0rm, com busca por "buffer overflow". (Reparem na quantidade do conteúdo de exploits):



Imagem do exploit-db com busca por "buffer overflow" (reparem na quantidade de exploits para exploração de buffer overflow, e reparem também na quantidade de páginas disponíveis).



André S. Rosa Junior
http://www.juniorlinux.com.br
NOTA DO AUTOR: Todas as informações apresentadas neste artigo foram obtidas na Internet, sendo assim, não ofereço nenhum tipo de garantia ou suporte. Não nos responsabilizamos por qualquer dano ocorrido, tanto na máquina (computador) quanto no software. Siga por sua conta e risco.
← Postagem mais recente Postagem mais antiga → Página inicial

0 comentários:

Postar um comentário

Copyright © Hacking & Security | Powered by Xandao Design by Xandao86 | Xandao86