Come si può falsificare una connessione TCP a un dispositivo che utilizza lo stesso numero di sequenza iniziale per ogni esecuzione di un handshake TCP?

1

Quindi supponendo che l'implementazione TCP su un dispositivo utilizzi sempre lo stesso numero di sequenza iniziale, come potreste voi, in qualità di attacker off-path, sfruttarlo per falsificare una connessione a questo dispositivo?

Quindi, per fare ciò, è necessario che il dispositivo configuri un handshake TCP con te. Per garantire che il dispositivo non invii un messaggio RST, presumo che sia necessario spoofare sia il messaggio SYN che ACK (ciò richiederebbe la conoscenza dell'indirizzo IP del dispositivo, quindi? Come attaccante fuori percorso, come si può ottenere ciò?).

Oppure ...

Dovresti solo spoofare il messaggio SYN, inviare un SYN / ACK con ciò che il dispositivo riterrà valido dato che ha un numero di sequenza valido? Il dispositivo non avrebbe semplicemente inviato un messaggio RST in risposta a un messaggio SYN / ACK?

Qualche idea?

    
posta ellefc 13.04.2016 - 15:21
fonte

1 risposta

1

"Spoofing" normalmente riguarda l'uso di un indirizzo di origine falso. Vuoi connetterti alla destinazione, senza rivelare il tuo vero indirizzo IP, utilizzando invece un altro indirizzo IP. Nel tuo caso, tu (l'attaccante) conosci perfettamente l'indirizzo IP del dispositivo; quello che non vuoi rivelare è il tuo indirizzo IP. Si desidera aprire una connessione con il dispositivo in modo tale che il dispositivo ritenga di parlare con un client con un indirizzo IP completamente distinto.

Il problema principale con lo spoofing è che mentre puoi inviare pacchetti arbitrari con un indirizzo IP di origine falso, non ricevi nessuna risposta, perché le risposte saranno inviate all'indirizzo falso, non tuo. Questo, in particolare, rende molto difficile completare TCP handshake perché ogni parte deve inviare s +1 come riconoscimento del numero di sequenza s inviato dal peer. Se sei il cliente e stai cercando di spoofing, non riceverai il pacchetto SYN + ACK dal server, e quindi non saprai quale valore inserire nel tuo ACK. Potresti "essere fortunato" ma dal momento che questi sono numeri interi a 32 bit, la probabilità di successo è solo 1 su 4294967296.

Ora, se il server di destinazione utilizza un generatore casuale povero, la probabilità di indovinare il numero di sequenza scelto dal target potrebbe aumentare. In particolare, se il server di destinazione utilizza sempre lo stesso valore (un generatore molto scarso in effetti), allora puoi indovinarlo con probabilità 1, cioè avere successo ogni volta. È quindi possibile inviare un SYN, non ricevere SYN + ACK (perché è inviato all'indirizzo falso), ma inviare comunque l'ACK con il valore corretto, in base alla propria "ipotesi" del numero di sequenza scelto dal server. Il server si accontenterà di tale ACK. A quel punto, puoi inviare dati arbitrari attraverso la connessione. Ovviamente non vedrai nessuna risposta, ma se il problema è quello di emettere comandi, allora questo è sufficiente (situazione esemplificativa: vuoi inviare spam attraverso un server SMTP che rifiuta l'invio di e-mail eccetto da alcuni specifici indirizzi IP dei client) .

In tutto questo, tutti i tuoi pacchetti devono recare l'indirizzo IP falso (falsificato).

    
risposta data 13.04.2016 - 15:53
fonte

Leggi altre domande sui tag