[FUG-BR] Me ajudem a entender essa notícia (FreeBSD)
Carlos A. M. dos Santos
unixmania em gmail.com
Segunda Maio 5 23:07:16 BRT 2008
2008/5/5 Renato Frederick <frederick em dahype.org>:
> 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
Mais detalhes sobre a lista de discussão freebsd