Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Rastreamento de Entrada

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

  • Font Size
    #1

    Matéria Rastreamento de Entrada

    O rastreamento de entrada é um método bastante completo. Primeiro, você identifica os pontos de entrada no código. Os pontos de entrada são lugares onde os dados fornecidos pelo usuário são entregues ao programa. Por exemplo, uma chamada de WSARecvFrom() recupera um pacote de rede. Essa chamada basicamente aceita dados fornecidos pelo usuário a partir da rede e os coloca em um buffer. Você pode configurar um breakpoint (ponto de interrupição) no ponto de entrada e fazer um rastreamento passo a passo no programa. Naturalmente, as ferramentas de depuração devem sempre incluir lápis e papel. Você deve anotar cada detalhe do caminho do código. Essa abordagem é muito tediosa, mas também é muito abrangente.
    Embora seja muito demorado determinar todos os pontos de entrada quando se faz isso à mão, você tem a oportunidade de anotar cada local de código que toma decisões baseadas nos dados fornecidos pelo usuário. Utilizando esse método você pode localizar problemas muito complexos.
    Uma das linguagens que protege contra esse tipo de ataque que "enxerga através das entradas" é o Perl. O Perl tem um modo especial de segurança chamado taint mode (modo de execução segura de códigos Perl). O taint mode utiliza uma combinação de verificações estáticas e dinâmicas para monitorar todas as informações que vêm de fora do programa (como entradas do usuário, argumentos de programa e variáveis de ambiente) e emite advertências quando o programa tenta fazer algo potencialmente perigoso com informações não-confiáveis. Considere o seguinte script:

    #!/usr/bin/perl -T
    $username = <STDIN>;
    chop $username;
    system ("cat /usr/stats/$username");


    Ao executar esse script, o Perl entra no taint mode por causa da opção -T passada na linha de chamada, na parte superior (geralmente na primeira linha do script). Em seguida, o Perl tenta compilar o programa. O taint mode irá notar que o programador não inicializou explicitamente a variável PATH, mas tenta mesmo assim chamar um programa que utiliza o shell, que pode ser explorado facilmente. Ele emite um erro como o apresentado a seguir, antes de abortar a compilação:

    Insecure $ENV{PATH} while running with -T switch at
    ./catform.pl line 4, <STDIN> chunk 1.


    Podemos modificar o script para definir o caminho do programa de modo explícito com algum valor seguro na inicialização:

    #!/usr/bin/perl -T
    use strict;
    $ENV{PATH} = join ':' => spliit (" ",<< '__EOPATH__');
    /usr/bin
    /bin
    __EOPATH__
    my $username = <STDIN>;
    chop $username;
    system ("cat /usr/stats/$username");


    Agora o taint mode determina que a variável $username seja controlada externamente e não seja confiável. Ele determina que, já que $username pode ser envenenada, a chamada para system pode ser envenenada. Portanto, ele dá outro erro:

    Insecure dependency in system while running whith
    -T switch at ./catform.pl line 9, <STDIN> chunk 1.


    Mesmo se fôssemos copiar $username para outra variável, o taint mode detectaria o problema da mesma forma.
    No exemplo anterior, o taint mode "reclama" porque a variável pode utilizar um shell mágico para executar o comando. Porém, o taint mode não detecta todas as possíveis vulnerabilidades de entrada e, portanto, um invasor esperto ainda pode ter sucesso utilizando o nosso método baseado em entrada.
    A análise avançada de fluxo de dados também é útil para ajudar a proteger contra o nosso método de ataque (ou ajudar a executá-lo). As ferramentas de análise estática podem ajudar o analista (ou invasor) a identificar todos os possíveis pontos de entrada e determinar quais variáveis são afetadas a partir de fora. A literatura de pesquisa sobre segurança é cheia de referências sobre o "fluxo seguro de informações" que utiliza a análise de fluxo de dados para determinar a segurança do programa.

    Criado por hkvit0r.
    Last edited by Bruno_menor; 30-06-2010, 18:56.
X
Working...
X