2008/5/5 Renato Frederick <[EMAIL PROTECTED]>:
> Senhores, isto de programa que analisa furo de segurança é furado por si só.

Eu não diria que é furado, mas o resultado deve ser sempre analisado
com cautela.

>  Ex, o famoso nessus. Ele é ótimo, ajuda muito a vida do administrador, mas
>  pensem o seguinte:
[...]

Coverity Prevent e Nessus abordam o problema de modos diferentes. O
primeiro faz análise estática, ou seja, verifica a lógica do programa
e detecta possíveis erros decorrentes dela. O segundo faz análise
dinâmica, exercitando o software sob teste em busca de casos este não
se comporte como deveria.

Eis um exemplo. Suponhamos que eu tenha um código em C assim:

#include <sys/types.h>
#include <sys/socket.h>
#define MAX_LISTENERS 10
[...]
struct {
    int fd;
    struct sockaddr addr;
} listeners[MAX_LISTENERS];
[...]
int i, nlisteners;
[...]
if (nlisteners > MAX_LISTENERS) {
    nlisteners = MAX_LISTENERS;
}
for (i = 1; i <= nlisteners; i++) {
    bind(listeners[i].fd, &listeners[i].addr, sizeof(struct sockaddr));
}

Uma ferramenta de análise estática é capaz de detectar que existe um
erro "off-by-one" [1] no "for" *antes* da execução do programa. Uma
ferramenta de análise dinâmica faria esse erro aparecer se passasse
para o programa parâmetros que o fizessem tentar criar 10 sockets nos
quais escutar. Mesmo assim este resultado seria inconclusivo pois o
programa poderia morrer devido a um SIGSEGV [2] ou continuar rodando,
erroneamente, dependendo dos dados que estivessem na memória logo em
seguida do array "listeners".

>  O mesmo vale para análise de código C. uma variável usada de um jeito pode
>  ser perigosa, mas no seu cenário não. Então quem vai afirmar o quão perigoso
>  é o código alarmado pelo software é a equipe de segurança da empresa.

Todo código errado é potencialmente perigoso. Somente uma equipe de
segurança muito relapsa estaria disposta a ignorar um possível cenário
sob a premissa de que "isso não vai acontecer". Se pode acontecer
então o software está errado e deve ser consertado imediatamente.

>  Usar a resposta de um software simplesmente é ser muito simplista e
>  incompetente.

Sim, se o software for simplista e incompetente. Este não é o caso do
Coverity Prevent. Ele é uma ferramenta excelente cujos resultados, se
bem utilizados, ajudam a tornar o software muito mais robusto e
seguro.


Referências

1. http://en.wikipedia.org/wiki/Off-by-one_error
2. man 3 signal
-- 
Carlos A. M. dos Santos
-------------------------
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd

Responder a