Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Pentest - Fundamentos para realizar um teste de fogo

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Artigo 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):

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    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).

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    André S. Rosa Junior
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
    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.




    areax@hotmail.com



    Similar Threads

  • Font Size
    #2
    Isso não foi um buffer overflow.Que buffer foi estourado mesmo?
    Foi um ... imprimindo um valor da memória na tela.
    Um buffer overflow forçado seria:
    Código:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        char *string1 = calloc(3, sizeof(char));
        char *string2 = calloc(30, sizeof(char));
        //Enchendo a memoria de string1 até string2
        memset(string1, 'a', string2-string1);
        //Colocando em string2 a string que eu quero
        strcat(string1, "Buffer overflow de verdade");
        //PoC?
        printf("%s\n", string2);
        scanf("%*c");
        return 0;
    }
    Onde na realidade você encontraria algo como:
    Código:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        char *string1 = calloc(3, sizeof(char));
        char *string2 = calloc(30, sizeof(char));
        strcpy(string1, argv[1]);
        printf("%s\n", string2);
        scanf("%*c");
        return 0;
    }

    Comment


    • Font Size
      #3
      Cara, quando chama a array 5 (1,2,3,4,5) o número impresso é 5, certo.
      Já no outro há um estouro com o resultado de vários números impressos.

      att.



      areax@hotmail.com



      Comment


      • Font Size
        #4
        não areax, o exemplo do seu post é um Integer Array Overflow, o do pink rose é um Buffer Overflow ( Heap Overflow), também existe outro tipo de Buffer Overflow que é o Stack Overflow.
        E quando se chama o array 4 é que aparece o número 5, diferente do que você citou.
        Espero ter ajudado flww

        Comment


        • Font Size
          #5
          Não é nenhum tipo de overflow.A memória continua intacta,houve estouro exatamente no que se a memória continua exatamente igual?
          Você simplesmente imprimiu um endereço da memória,do mesmo jeito que eu poderia fazer:
          Código:
          #include <stdio.h>
          
          #define roundup(x,n) (x+(n-1))&(~(n-1))
          
          int main(int argc, char *argv[])
          {
              int array[] = {1,2,3};
              char str[] = "Que feio,fazer tutorial sem saber sobre o assunto...";
              int diff = roundup(sizeof(int)*3, 16);
              printf("Aproximacao da diferenca:%d\n\n", diff);
              puts("Print address based:");
              //Subtraimos ja que os valore da heap sao colocados na stack em ordem inversa
              printf("\t%p\n", array-diff);
              printf("\t%s\n", array-diff);
              puts("Print normal:");
              printf("\t%p\n", str);
              printf("\t%s\n", str);
              scanf("%*c");
              return 0;
          }

          Comment


          • Font Size
            #6
            Cara, realmente um dos meus inimigos é nao saber programação, porém n sou um tapado no assunto, sei algumas noções.

            O que o Dano disse está certo eu errei, não é array 5 e sim array 4.

            Postei o tutorial pq li, goste e achei interessante postar aqui no fórum e com certeza sei sobre o assunto a única coisa que me atrapalha é a programação.

            Uma observação eu não criei o tutorial, apenas compartilhei, e seus devidos créditos estão muito bem escritos logo no inferior do artigo.

            O ruim é usuários que apenas sugam e nunca postam nada. ;*

            att, areax.
            Last edited by areax; 29-04-2011, 15:50.



            areax@hotmail.com



            Comment


            • Font Size
              #7
              cara quis dizer que haveria integer array overflow se ele chamasse 5, sendo que o array vai até 4 (0 - 4 ). Pode haver sim um IAO quando se faz isso....

              Comment


              • Font Size
                #8
                Muito bom a explicação..

                Comment


                • Font Size
                  #9
                  Não,não pode.
                  Se acha que sim,prova.
                  Um PoC é bem simples de se fazer.

                  Comment


                  • Font Size
                    #10
                    legal estou começando agora estudar sobre pentest!!!
                    gostei do post.

                    abraços

                    Comment

                    X
                    Working...
                    X