gildot

Topo
Sobre
FAQ
Tópicos
Autores
Preferências
Artigos
Sondagens
Propor artigo


8/3
gildicas
9/30
jobs
10/9
perguntas
10/25
press

 
O efeito dos Buffer-Overflows
Contribuído por Xmal em 01-05-02 11:33
do departamento until-\0
perguntas BlueRibbon escreve "[Quase] todos os dias ouvimos falar de exploits em programas que recorrem a Buffer-Overflows, sendo o mais recente o do winamp. No entanto, e para os entendidos gostava de deixar a seguinte pergunta: Além do possível "brecanço" que isso possa provocar num determinado programa, que problemas de segurança é que cria? Já ouvi falar que em certos casos se ganha permissão de root no sistema, entre outras consequências, mas como? Não queria que me explicassem detalhadamente, mas agradecia uma exposição simples e clara! "

Alan Cox fala sobre EUCD | I'ts the data, stupid  >

 

gildot Login
Login:

Password:

Referências
  • BlueRibbon
  • winamp
  • Mais acerca perguntas
  • Também por Xmal
  • Perguntas
  • Como se pode ter o seu próprio host ?
  • Linux preparado para 'enterprise'?
  • Produtividade: linha de comando vs IDE
  • Sistemas operativos: O que são?
  • linux distribuído nas revistas, sim ou não ?
  • Pergunte ao Gildot: qual o melhor codificador de mp3?
  • staroffice
  • Esta discussão foi arquivada. Não se pode acrescentar nenhum comentário.
    Buffer overflow (Pontos:1)
    por Myke em 01-05-02 12:02 GMT (#1)
    (Utilizador Info)
    Básicamente, o que isto significa é que estás a usar mais memória que aquela que te foi destinada. Se tiveres em atenção que a memória é uma coisa continua, apartir do momento em que escreves para além da tua área estás a escrever numa zona de memória de que nada conheces. Dependendo das permissões que tens, das permissões do processo que usa essa zona de memória que acedes que até pode ser o teu processo, tens resultados diferentes.

    Se calhar escreveres por cima do código do teu programa é fácil de perceber o que acontece, tudo que escreveres, será interpretado como código a executar.

    Agora, como explorar isso é que é mais complicado. Normalmente isso acontece quando guardas um tamanho fixo (por muito grande que possa parecer) para receber uma informação, como por exemplo 1000 bytes (ou letras) para guardar o primeiro nome de uma pessoa, deve chegar não achas? Mas, se alguém der conta que existe um limite e, que o que está depois desse bloco de dados é o bloco de código do teu programa, tudo que tem a fazer é escrever 1000 bytes de informação qualquer para preencher essa zona de dados que reservaste. Agora, se o programa for bem feito, não deixa ler mais dados, se tiver um erro (ou bug) vai deixar continuar a ler (pk provavelmente alguém nunca pensou na situação de ter mais de 1000 letras o nome de uma pessoa), e tudo que vier a seguir é código a ser executado, a ser executado com as permissões que este programa tem, o que se estiver como root ou, num sistema operativo sem distinção de privilégios (windows 9x) básicamente significa, poder fazer qualquer coisa.
    Google is king. (Pontos:2, Informativo)
    por leitao em 01-05-02 12:26 GMT (#2)
    (Utilizador Info) http://www10.brinkster.com/nunol/

    Nao percebo porque e' que o pessoal nao faz alguma pesquisa antes de ir perguntar coisas basicas para um forum geral:

    buffer+overflow+tutor ial


    echo '[dO%O+38%O+PO/d00]Fi22os0CC4BA64E418CE7l0xAP'|dc

    Re:Google is king. (Pontos:0, Interessante)
    por Anonimo Cobarde em 01-05-02 13:38 GMT (#5)
    O comentario anterior foi moderado como "despropositado" ? Nao sei porque! Ca em Portugal continua a alimentar-se a politica do facilitismo e do menor esforco - NINGUEM se da ao trabalho de fazer qualquer tipo de pesquisa ou ter qualquer tipo de trabalho, as coisas tem de aparecer miraculosamente 'a frente dos olhos. "eu nao quero trabalhar, quero e' que os outros facam a pesquisa por mim e me facam resumos sublinhados depois. E isso DEPRESSA, pq sou um gajo mto ocupado e nao tenho tempo a perder. Afinal de contas, e' para isso que o resto do mundo existe, nao e'? Para trabalhar por mim." Well... DUH!
    Re:Google is king. (Pontos:2)
    por leitao em 01-05-02 14:16 GMT (#6)
    (Utilizador Info) http://www10.brinkster.com/nunol/
    hammm... da proxima nao incluo o link com a pesquisa do google -- poupei o gajo de escrever o URL e a pesquisa ;-)

    echo '[dO%O+38%O+PO/d00]Fi22os0CC4BA64E418CE7l0xAP'|dc
    Re:Concordo plenamete (com o despropositado) (Pontos:0)
    por LostStar em 01-05-02 14:29 GMT (#9)
    (Utilizador Info)
    Concordo plenamente com o comentario ter sido despropositado pois revelaste a tua maravilhosa alma caridosa quando alguem te pergunta alguma coisa.
    Esse tipo de coisas pode ser banal para um programador comum, mas para um utilizador/programador principiante simplesmente não faz sentido.
    Acho que a pergunta "O que é um buffer overflow?" é uma pergunta perfeitamente valida e qualquer programador que se preze terá todo o prazer em explicar a quem pergunta, em português e trocado por miúdos; coisa que és capaz de não encontrar assim com tanta facilidade na net.
    Se não queres ajudar, não mandes abaixo só por gozo.

    ------------------------------------------
    "You got to make it right this time, 'cause this time is all you have."
    prot , in K-PAX
    Re:Concordo plenamete (com o despropositado) (Pontos:2)
    por leitao em 01-05-02 15:01 GMT (#10)
    (Utilizador Info) http://www10.brinkster.com/nunol/
    Se reparares ate' inclui o link com a pesquisa correcta no google -- tambem queres que o pessoal traduza as paginas para portuges ?

    echo '[dO%O+38%O+PO/d00]Fi22os0CC4BA64E418CE7l0xAP'|dc
    Re:Concordo plenamete (com o despropositado) (Pontos:2)
    por xeon em 01-05-02 15:24 GMT (#11)
    (Utilizador Info) http://pthelp.org
    Giro e' fazer essa pesquisa no Google, pedindo-a via translator do Babelfish.

    Um exemplo:
    Excesso Do Amortecedor: Impeça excessos sabidos e desconhecidos do amortecedor
    (original: Buffer Overflow: Prevent known and unknown buffer overflows)
    Link

    ehehehe :-)

    --
    Reading the FM

    Re:Concordo plenamete (com o despropositado) (Pontos:2)
    por leitao em 01-05-02 15:35 GMT (#12)
    (Utilizador Info) http://www10.brinkster.com/nunol/
    Boa... :-)

    echo '[dO%O+38%O+PO/d00]Fi22os0CC4BA64E418CE7l0xAP'|dc
    Re:Google is king. (Pontos:2)
    por jpgm em 02-05-02 9:43 GMT (#16)
    (Utilizador Info)
    Apesar de concordar que, muitas vezes, as pessoas não tentam recolher informação antes de disparar com perguntas, não me parece que se possa aplicar da mesma forma a este caso, por dois motivos principais:

    1 - não é trivial para alguem de fora da área informática compreender o principio de um buffer overflow, o problema das buscas, no google ou qq outro sitio, é a de obteres excesso de informação, não compilada. A partir do momento que se conhece por alto um assunto é extraordinariamente mais facil procurar coisas sobre ele em qq lado!

    2 - Uma pergunta sobre um assunto interessante como é o dos buffer overflows poderia/deveria degenerar numa interessante discussão sobre o caso, emq ue todos, até os que já sabem tudo, poderiam apreender. Apesar de utopico parece-me que é esse um dos grandes objectivos do gildot!

    Enfim, isto se calhar sou só eu que ainda não percebi para que serve esta coisa!!!
    Numa discussão de um assunto, apaixonante acho eu, como é o dos buffer overflows, temos 15 threads, 7 das quais (onde incluo a minha) não teem nada a haver com o assunto!
    Cumprimentos! zp
    Stack it || Stick it (Pontos:1)
    por HB em 01-05-02 12:49 GMT (#3)
    (Utilizador Info)
    Existem vários tipos de buffer overflows.
    Stack e Heap overflow por exemplo. O mais conhecido é mais fácil de "exploitar" são normalmente os Stack Overflows.

    O objectivo é alocar na memória reservada da variavél/função/you name it muita mais informação do que ele pode gerar.Por exemplo:
    Toma por exemplo o seguinte programa em C: ----- void main() { char big_string[100]; char small_string[50]; memset(big_string,0x41,100); strcpy(small_string,big_string); } ------ Caso compiles este programa e o corras irás obter o famoso erro "SEGMENTATION FAULT (Core dumped)" . E porque ? Porque copiamos (strcpy(small_string,big_string);) o buffer da variavel big_string cheia de 'A'(41 em hex) até 100(memset(big_string,0x41,100); ) para o vector small_string que apenas "aguenta" 50..e o erro segmentation fault ocorre.

    Devo admitir que secalhar isto poderá um bocado confuso,também nunca fui bom professor hehe :).Mas a beleza disto é transformar o lixo em shellcode que irá dar instruções a máquina sobre o que possamos querer fazer (entre aspas).
    Isto não é nenhum tutorial portanto não irei mais longe.
    No entanto já existem ferramentas bastantes boas , librarias para Linux e não só que impedem a ocorrência de utilização de exploits,normalmente estão a "vigiar" a memória para qualquer tentativa de execução de comandos arbitrários.

    Existe um bom artigo na www.phrack.com~nº 56 : http://www.phrack.org/show.php?p=56&a=14 para entrar em mais detalhes sobre este assunto.

    "..UNIX was not designed to stop you from doing stupid things, because that would also stop you from doing clever things..."

    off topic (Pontos:2)
    por bgravato em 01-05-02 14:27 GMT (#8)
    (Utilizador Info)
    A tradução correcta de "libraries" para português é "bibliotecas" e não "librarias" (que não existe sequer... quanto mais poderia ser "livrarias" o que também estaria errado).

    É frequente traduzir os termos em inglês para palavras do português parecidas foneticamente com as inglesas, e esquece-se o significado das palavras. Por um lado ajuda a associar mais facilmente os termos em portugues com os ingleses, mas por outro lado estamos a alterar o significado das palavras o que não é muito correcto...
    Um dos erros mais frequentes é a tradução de "default" para "por defeito", quando o mais correcto é "por omissão".

    Cumprimentos,
    Bruno Gravato.
    Re:off topic (Pontos:2)
    por mazevedo em 01-05-02 15:58 GMT (#13)
    (Utilizador Info) http://mazevedo.welcome.to
    Falando nisso, tb é off-topic, mas não há nenhum dicionário com os termos correctos por aí à solta? Por várias vezes, a comentar código recorro às palavras em inglês pq simplesmente algumas coisas são mesmo difíceis de traduzir.

    Só para me habituar a dizer disco rígido em vez de disco duro...
    ----
    //\anuel /|zevedo

    ORCA (Pontos:1)
    por ptome em 02-05-02 8:25 GMT (#15)
    (Utilizador Info)
    Este é o único que conheço e encontrei-o por acaso:

    http://quark.fe.up.pt/orca/index.pt.html

    My 2 cents (Pontos:4, Informativo)
    por ptome em 01-05-02 12:50 GMT (#4)
    (Utilizador Info)
    A linguagem C (e muitas outras) são fundamentalmente linguagens procedimentais. Permitem o uso de funções para decompor uma tarefa em várias tarefas mais simples.

    Quando um programa está a executar e chama uma função para executar uma tarefa, precisa de saber o sítio do programa para onde voltar após executar a função. Precisa também de passar parâmetros que sejam necessários para essa função realizar a sua tarefa.

    Uma das formas de o fazer é utilizar uma área da memória, que podemos chamar de stack, onde essas informações são guardadas. Acontece que o stack é também utilizado pelos programas como uma área de armazenamento de dados temporários (variáveis locais), que pode ser usada para tratamento de dados fornecidos pelo utilizador.

    Quando o programa não gere bem esse espaço e os dados do utilizador, estes podem sobrepôr-se aos dados com informação sobre o fluxo de controlo do programa (a tal informação que diz para onde o programa regressa após ter executado a função). Um utilizador pode introduzir dados com um formato que alteram essa informação, e indicam ao programa um local onde se deve continuar a executar. E pode ser qualquer local, inclusive a área do stack onde estão os dados introduzidos pelo utilizador :)

    Código e dados são basicamente o mesmo: informação. Os dados que o utilizador introduz e que aparentam ser lixo, podem representar um programa válido quando executados.

    Agora surge outro problema: quando esse código é executado corre com as permissões que o sistema operativo impõe, geralmente as permissões do utilizador. Tudo o que o utilizador pode fazer, o código malicioso também pode. As possibilidades são ilimitadas :)

    Isto foi uma explicação algo básica, porque existem várias formas de fazer o mesmo, variações entre arquitecturas de sistema, e vários detalhes que precisam de ser contornados para isto funcionar, mas acho que dá uma ideia geral de como funciona. Para uma explicação mais detalhada podes ler este texto, mas precisas de ter conhecimentos de programação e assembly.

    Re:My 2 cents (Pontos:2)
    por Gimp em 01-05-02 17:44 GMT (#14)
    (Utilizador Info)
    Alguém pode mandar este texto para a Microsoft?


    "No comments"

    Re:My 2 cents (Pontos:1)
    por soul em 03-05-02 4:26 GMT (#17)
    (Utilizador Info) http://projecto-oasis.cx/~sergio/
    Cumprimentos,

    O dia foi longo, e o sono aperta, mas penso que consegui ilustrar um pouco o que disseste, em https://mail.projecto-oasis.cx/Lists/seguranca/Message/241.html.

    Cordialmente,
    Sérgio Araújo

    3G - NetWorks
    Projecto Oásis
    "All things being equal, the simplest answer is the correct one."

     

     

    [ Topo | Sugerir artigo | Artigos anteriores | Sondagens passadas | FAQ | Editores | Preferências | Contacto ]