In TCP, cosa succede quando due pacchetti di dati entrano con lo stesso identificatore sequenziale, ma dati diversi (falsificati)

3

Sto provando a verificare una risposta che ho postato a una domanda recente:

Client A with real IP has connected ... Now, the attacker machine M sends a [data] packet [with a correct sequential identifier] spoofing the IP address of A ... Will the ACK flag/field from server S be accepted by A?

Per gli attacchi passivi la risposta è no. Il client non accetterà il riconoscimento (dal server) per un pacchetto di dati che non ha inviato. (l'utente malintenzionato lo ha inviato invece)

Tuttavia, la connessione potrebbe continuare? Il client alla fine invierà un altro pacchetto di dati con lo stesso identificatore sequenziale (utilizzato dall'utente malintenzionato) che il server ha appena riconosciuto.

Presumo che il server non registri i dati precedentemente riconosciuti e semplicemente ripeterà il riconoscimento, lasciando cadere il nuovo pacchetto di dati (sulla base dell'identificatore sequenziale duplicato) senza rendersi conto che i nuovi dati sono diversi. È corretto? Oppure, questo dipende dall'implementazione?

    
posta George Bailey 12.10.2016 - 16:30
fonte

1 risposta

1

OK, sosterrò che questa affermazione non è abbastanza giusta. L'affermazione è corretta se assumiamo che non vengano inviate opzioni TCP. In teoria, un utente malintenzionato che può intercettare i pacchetti può iniettare un pacchetto correttamente predisposto nel server e confondere la connessione.

In pratica praticamente tutte le connessioni TCP oggi sono sintonizzate e usano ridimensionamento della finestra . Definiscono una dimensione della finestra per ricevere i dati più velocemente e non è necessario riconoscere ogni pacchetto.

Ora, questo dipende dall'implementazione ma tutti i dati in una finestra devono essere conservati in un buffer invece di essere passati all'applicazione perché potrebbe accadere che l'intera finestra non riesca a riconoscere correttamente.

Se un utente malintenzionato M intercetta la connessione invia solo un singolo pacchetto al server S con meno dati rispetto alla dimensione della finestra (molto probabilmente poiché Windows è spesso una manciata di megabyte), i dati del pacchetto terminano nel buffer con la sua posizione definita dal numero di sequenza.

Il client A ora invia un pacchetto al server S continuando la connessione, è probabile che il contenuto del pacchetto venga scaricato alla cieca nel buffer che contiene la finestra. E l'attaccante non riesce a confondere la connessione.

Quanto sopra non è strettamente vero neanche. Un ACK può essere inviato in qualsiasi momento durante la raccolta dei pacchetti per la finestra , non solo quando viene raggiunta la dimensione della finestra. In termini pratici, questo (molto probabilmente) significa che:

  • L'attaccante M può riuscire a inviare un singolo pacchetto per interferire con una connessione lenta (molto tempo per il server S per inviare ACK).
  • L'attaccante M avrà problemi ad interferire con una connessione a ritmo veloce in cui il server S decide di attendere il completamento della finestra invece di inviare ACK.

In una connessione a ritmo veloce, l'attaccante M dovrà riempire la finestra con i suoi dati prima che i dati del cliente arrivino. Questo è ancora possibile se l'autore dell'attacco M è più vicino al server S del client A .

Riferimenti

risposta data 12.10.2016 - 21:12
fonte

Leggi altre domande sui tag