View Comments



openDoS.c
Sun Mar 20 15:42 2005



meter águaFaz hoje uma semana, ou seja, no Domingo passado que numa das minhas navegações cibernáuticas me deparei com esta discussão que tratava do tema Linux vs OpenBSD.
Não gosto muito de discutir sobre SO's porque normalmente a conversa é infrutífera pois no fim todos continuam com a mesma opinião apesar dos argumentos expostos, é um bocado como tentar convencer um Benfiquista que o Sporting é melhor. Apesar disso, é obvio que tenho uma opinião bem formada sobre o assunto, apenas não a gosto de expressar.

Mas daquela discussão tomei conhecimento de um bug no kernel do OpenBSD que bem explorado podia resultar num DoS remoto. O OpenBSD é famoso pelos seus padrões de segurança e o seu fundador "Theo de Raadt" nao esconde o orgulho que sente ao ponto de colocar na página do projecto a frase "Only one remote hole in the default install, in more than 8 years!".
Há quem ache a atitude arrogante o que faz com que o Theo não seja das pessoas mais amadas no mundo UNIX e portanto tentam ridiculariza-lo quando os seus produtos apresetam bugs, estou a lembrar particularmente do episódio do GOBBLES com o "sshutuptheo". De qualquer forma a comunidade sabe do valor do Theo e este ano ele recebeu o prémio atribuído pela FSF para a promoção do Software Livre.

Fui ver então de que bug se tratava através do patch disponabilizado, e basicamente a stack TCP/IP do OpenBSD crachava quando esta recebe-se um pacote TCP onde o valor do TIMESTAMP fosse negativo ou então muito grande. Criar um programa que enviasse este tipo de pacote não me pareceu dificil e então comecei a codar um exploit para o bug. Tudo era trivial até á parte que interessava, como mudar o timestamp do pacote. Nada que ao ver no RFC 1323 não se dissecasse.

+-------+-------+---------------------+---------------------+
|Kind=8 | 10 | TS Value (TSval) |TS Echo Reply (TSecr)|
+-------+-------+---------------------+---------------------+
1 1 4 4

Passado 30m tinha o exploit acabado, o resultado podem vê-lo aqui.
Como actualmente nao administro nenhum OpenBSD não pude testar se realmente conseguia crachar o SO remotamente, mas a julgar pelo output do tcpdump o valor do timestamp vai alterado com o que se pretende:

15:27:23.867035 origin2.microsoft.com.26437 > xenon.paradigma.pt.50723: . ack 1934111590 win 1024 <nop,nop,timestamp 4294967295 0>(DF)

De qualquer das formas é so afinar a constante TIMESTAMP e ele crachará, e como o objectivo não é proporcionar scripts para os kid´s, o exploit vai ficar assim, semi broken.
Curiosamente dois dias depois de fazer o programa deparei-me com outro feito pela a equipa Rush que explora o mesmo bug, e pela visualização da source, eles tambêm lançaram o exploit broken.
Está na altura do Theo mudar a frase para:

"Only two remote hole in the default install, in more than 9 years!