Come è stato (è?) il ping di death attack possibile con IPv4?

12

Mentre leggevo su Internet Protocol, mi sono trovato a leggere degli attacchi ping of death: la cosa che attirava la mia curiosità era il fatto che questi attacchi avrebbero mai funzionato!

Voglio dire, perché il pacchetto IPv4 non è stato rilasciato (per pacchetti più grandi di 56 byte + header) immediatamente implementato sui sistemi informatici? Era / esiste un motivo per cui un host riceve un pacchetto più grande di 84 byte in totale?

    
posta Nomerandom1 10.11.2015 - 22:53
fonte

4 risposte

11

Ci sono molti motivi per cui il packet dropping non è implementato. Un esempio è che esiste una tecnologia nota come frame jumbo, che consente fino a 9000 byte di payload. Questi sono principalmente supportati su LAN in cui vengono spostate grandi quantità di dati e dove la natura ripetitiva delle intestazioni non è necessaria.

Vale anche la pena notare che la maggior parte dei pacchetti è più grande di 56 byte + intestazione. La dimensione del frame Ethernet standard è 1500 byte. Se ti riferisci esclusivamente ai pacchetti ICMP, sarebbe possibile implementare tale restrizione, ma perché? Esistono casi d'uso validi per volere pacchetti ICMP più grandi. Avere uno stack di rete che gestisca correttamente i pacchetti non standard è generalmente più desiderabile che avere uno stack di rete che limiti arbitrariamente la funzionalità.

    
risposta data 10.11.2015 - 23:17
fonte
6

Was/is there a reason for a host to receive a packet larger than 84 byte total?

Ci sono diversi livelli coinvolti qui, e questa è la prima parte del problema. Gli 84 byte di ICMP per l'intestazione di un messaggio ping (il carico utile può essere maggiore ... puoi inserire tutto ciò che desideri nel campo del payload) significa che i pacchetti devono essere ricevuti dal sistema sul protocollo filo, riassemblati nel più grande pacchetto sul protocollo IP se c'è frammentazione, passato al livello ICMP che poi controllerà il tipo di protocollo e solo dopo tutto sarà possibile controllarlo.

Ci sono molti posti in cui scrivere codice per allocare memoria che puoi commettere errori lungo il percorso. Ad esempio, poiché non è possibile ottenere più di 64k di dati in un pacchetto IPv4 valido, è possibile allocare un buffer di memoria da 64k. Quindi quando assemblate i frammenti, potreste avere problemi se non controllate che la somma dei frammenti sia inferiore alla dimensione della memoria allocata. Un errore specifico è stato affidamento sull'intestazione della lunghezza dell'ultimo frammento possibile come sempre valido all'interno dell'intero pacchetto riassemblato anche se il pacchetto di offset massimo non poteva essere a dimensione intera senza rompere le cose.

Quindi non è possibile eliminare immediatamente la maggior parte dei pacchetti senza riassemblarli. È possibile aggiungere un controllo di corrispondenza sull'ultima dimensione del pacchetto ( if offset > x and offset * 8 + len(y) > 64k ), ma ciò richiederebbe il controllo di bit aggiuntivi nel pacchetto che è realmente adatto solo ai livelli del firewall e dell'host.

    
risposta data 10.11.2015 - 23:48
fonte
3

Internet funziona solo perché tutti hanno accettato di seguire gli standard di TCP / IP. I pacchetti di ping più grandi di 56 byte + l'intestazione sono consentiti da TCP / IP, e semplicemente eliminarli perché l'implementazione non può gestirli potrebbe spezzare il protocollo TCP / IP.

Il problema con Ping of Death non era il design di TCP / IP, ma un problema di implementazione. Non si cambiano le regole dei pacchetti IP validi perché un fornitore non ha scritto correttamente il proprio codice.

Per quanto riguarda gli usi validi di pacchetti ping di grandi dimensioni, può essere utile nell'inseguire altri problemi di rete. Un semplice esempio sta determinando il MTU tra te e un altro host impostando la dimensione del pacchetto più in basso e più in basso fino a non è frammentato.

    
risposta data 10.11.2015 - 23:18
fonte
3

Ci sono già un paio di buone risposte qui.

Volevo aggiungere che i filtri di pacchetto, i firewall e gli IPS possono gestire questo tipo di cose. Questi tipi di dispositivi sono spesso configurati per ignorare le normali regole del TCP / IP per essere in grado di eliminare il traffico corretto, ma dannoso. Gli esempi includono pacchetti ICMP di grandi dimensioni, pacchetti TCP frammentati, intestazioni di pacchetti creati e molti altri formati correttamente, ma problematici per tutti gli stack di protocollo TCP / IP o app troppo frequenti.

Regole come questa non possono essere inserite in tutti i dispositivi in quanto renderebbero TCP / IP non funzionale in generale per ragioni che le altre risposte hanno descritto: 1) necessità di formati di pacchetti specializzati nella diagnostica 2) necessità di pacchetti grandi / jumbo per l'efficienza (es .: throughput SAN con overhead inferiore)

    
risposta data 10.11.2015 - 23:33
fonte

Leggi altre domande sui tag