PDA

Ver la versión completa : Microsoft reparchea el ping de la muerte dos décadas después de su primera aparición



LUK
22-08-2011, 09:00
El conocido como ping de la muerte vuelve a reaparecer en Windows casi dos décadas después de su primera versión. Microsoft publica un parche para inmunizar a Windows Vista y 7.

El ping of death (http://es.wikipedia.org/wiki/Ping_de_la_muerte) se hizo famoso en los noventa, ya que se trataba de una vulnerabilidad que afectaba a numerosos sistemas operativos y que resultaba muy fácil explotar. El efecto era un cuelgue del sistema, que en la plataforma Windows se mostraba con la llamada pantalla azul de la muerte.


http://bandaancha.eu/shadow/story/66k/content/flooder.83v.cxllvc7r1b.jpeg

Sólo hacia falta conocer la IP de un usuario, obtenida por ejemplo a través del IRC, para, utilizando herramientas diseñadas para script kiddies, lanzar una serie de paquetes ICMP de un tamaño más grande de lo habitual, que dejaban fuera de línea al oponente. Era la época del IRC War (http://www.rs-labs.com/papers/tacticas/).

Esto era posible porque la mayoría de usuarios se conectaban a Internet mediante módem RTB o con un ADSL monopuerto, en el que la IP pública correspondía directamente con la del ordenador. Con la llegada de los router multipuerto, que realizan NAT y la popularización de los firewall ejecutar el ataque resultaba mucho más complicado, aunque posible dentro de la red local o WiFi.

Aunque Microsoft supuestamente corrigió este problema en 1997, el pasado 8 de agosto, publicó el boletín de seguridad MS11-064 (http://www.microsoft.com/technet/security/Bulletin/MS11-064.mspx) en el que corrige un bug similar en la pila TCP/IP de Windows. De nuevo, un paquete ICMP, como lo que genera el comando ping, puede provocar una denegación de servicio (http://www.computerworld.com/s/article/9219022/Microsoft_patches_1990s_era_Ping_of_Death_?taxonom yId=17&pageNumber=2).

El problema afecta a a Windows Vista y Windows 7, pero no a Windows XP.

Fuente: bandaancha

LUK
22-08-2011, 09:01
...Sólo hacia falta conocer la IP de un usuario, obtenida por ejemplo a través del IRC, para, utilizando herramientas diseñadas para script kiddies, lanzar una serie de paquetes ICMP de un tamaño más grande de lo habitual, que dejaban fuera de línea al oponente. Era la época del IRC War (http://www.rs-labs.com/papers/tacticas/)....

Que tiempos aquellos... :0=

clarinetista
22-08-2011, 10:37
No te pongas romántico.... :D :D

Atreides
22-08-2011, 13:08
Este tema sin exploit no vale nada!!!

chewarrior
22-08-2011, 15:48
Alguien sabe como se tendria que componer la cabezera ICMP ? en el boletin no dice nada.

RaidMan
22-08-2011, 16:02
Para esto era necesario mandar el paquete dividido en trozos. Si al reensamblar el paquete, este fuera mayor de 65535 bytes provocaria un desbordamiento.

http://es.wikipedia.org/wiki/Ping_flood

Creo que con el hping puede hacerse. Todo es editar las cabeceras ICMP.



Un saludo

chewarrior
25-08-2011, 20:01
Alguien me podia explicar como hay que hacer para fragmentar el paquete, parece que no puedo enviar paquetes mayores a 1500 bytes aproximadamente, a ver si me podeis exar una manita gracias.




#include <stdio.h>
#include <windows.h>
#include <Winsock2.h>
#define ECHO_REQUEST 8


typedef struct icmp_hdr
{
unsigned short type; // ICMP Error type
unsigned short code; // Type sub code
unsigned short checksum;
unsigned short id;
unsigned short seq;
//unsigned long icmp_timestamp;
}ICMP_HDR;


int main(){


unsigned char *data = (char *)malloc(7500);
unsigned char *Buffer = (char *)malloc(7500);
char ip2[20]="209.85.148.105",ip[20]="192.168.1.66";
int sock,optval,tamano=1380;
struct sockaddr_in sin;
WSADATA wsa;

if (WSAStartup(MAKEWORD(2,2), &wsa) != 0)
{
printf("fallo lol");
exit(0);
}

sock = socket(AF_INET, SOCK_RAW,IPPROTO_ICMP);


ICMP_HDR *icmp=(ICMP_HDR *)Buffer;
data = sizeof(ICMP_HDR)+Buffer;
memset(data, '!',tamano);



icmp->type = ECHO_REQUEST; // echo request type
icmp->code = 0;
icmp->id = 13;
icmp->checksum =0;
icmp->seq = 0;
icmp->checksum=checksum(Buffer, sizeof(ICMP_HDR)+tamano);





sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr = inet_addr(ip2);

sendto(sock,Buffer,sizeof(ICMP_HDR)+tamano,0,(SOCK ADDR *)&sin, sizeof(sin));

return 0;
}
void checksum(unsigned short *addr, int len)
{
unsigned short answer = 0;
register int sum = 0;
register unsigned short *w = addr;
register int nleft = len;

while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}


if (nleft == 1)
{

*(u_char *) (&answer) = *(u_char *) w;

sum += answer;
}

sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);/* add carry
answer = ~sum;/* truncate to 16 bits

}

Atreides
25-08-2011, 20:28
Eso tiene pinta de copypaste de lo que has pillado de mil sitios. No me extraña que no funcione.

chewarrior
25-08-2011, 21:21
Eso tiene pinta de copypaste de lo que has pillado de mil sitios. No me extraña que no funcione.


Quien a dixo que no funcione ? funciona perfectamente y manda un echo request y google responde con un echo replay, el problema es que el sistema parece no dar salida a paquetes mayores de 1500 bytes, estos tienen que ir fragmentados y no se como se deve hacer, tu tampoco por lo que veo, es mas dudo que entiendas el algoritmo.....


Otra cosa yo puedo usar el algoritmo de checksum que me de la gana, codigo libre nene....

Atreides
25-08-2011, 23:32
Yo soy el puto amo de la programación, he programado aproximadamente el 93% del kernel de Linux, y cuando quieras te lo demuestro.

chewarrior
26-08-2011, 00:47
bla bla bla bla aporta algo que sea interesante o alguna solucion en vez de ir diciendo que mi codigo es copypaste o que el codigo no funciona porque yo no tengo ni idea de lo que estoy haciendo, asi solo te desvirtuas tu mismo demostrando que eres un ignorante, que habla por hablar bla bla bla...

Atreides
26-08-2011, 01:11
Discutiría contigo pero ya me he puesto mi traje de Armani, ahora mismo me dirijo a mi garaje donde mi espera mi Lamborghini Aventador, con éste iré a una fiesta en mi chalet de 1000 metros cuadrados con grandes personalidades como Emilio Botín, Zapatero o Paquirrín.

Nos vemos mañana.

hckr
26-08-2011, 03:05
Atreides, otra vez tú? :D

Atreides
26-08-2011, 10:59
Discutiría contigo pero tengo una resaca de tres pares de cojones.

clarinetista
26-08-2011, 14:56
Sencillamente increbile :D

RaidMan
26-08-2011, 16:29
Mala hierba...

hckr
26-08-2011, 21:47
Mala hierba...

Hazme caso xDDDDD

Eureka
27-08-2011, 23:23
que vaina tan loca es esta?