Come inserire pacchetti personalizzati nell'handshake SSL?

1

Sto cercando di comunicare con un server SSL il cui protocollo non è standard. Voglio inserire pacchetti personalizzati nell'handshake. Sto usando diversi strumenti SSL, quindi cambiare il codice sorgente su ogni strumento è molto lavoro. Preferisci avere un filtro di rete che modifichi (inserisci un pacchetto personalizzato) in ogni handshake SSL.

Provato con reti. Non andare. Può modificare i pacchetti esistenti, ma non inserire un nuovo pacchetto.

Ho provato ncat. Non andare. Può inserire un pacchetto, ma quando lanciamo lo strumento SSL, viene impostata una sessione TCP secondo . Ho provato molte varianti. Questa è la radice del problema: come posso inserire i pacchetti nel mezzo di una sessione di handshake SSL (senza avviare una sessione TCP separata)?

    
posta dossa22 27.03.2013 - 19:49
fonte

1 risposta

2

In un handshake SSL, il client e il server scambiano messaggi di handshake che sono codificati in records . Se la tua variante di protocollo consiste in ulteriori messaggi di handshake allora hai un problema: alla fine della stretta di mano, vengono scambiati due% di messaggi di% di scambio e i loro contenuti sono calcolati come una funzione di hash su tutti i precedenti messaggi di handshake , inclusi quindi i messaggi extra. Corollario: se hai altri messaggi di handshake da inserire, DEVI modificare lo strumento client SSL, perché quello strumento calcola l'hash e calcolerà un valore errato se non è a conoscenza dei tuoi messaggi extra.

Se la tua variante di protocollo consiste in record extra di un tipo distinto da "record per i messaggi di handshake" (tipo 22 in lo standard ), e tale che i record extra non influiscano sui calcoli dell'handshake, quindi la strategia di filtro potrebbe funzionare. Dovresti:

  1. Intercetta connessioni ; ci sono diversi modi per farlo, ma il più semplice è cambiare la configurazione e / o il DNS in modo che il computer di origine si connetta non al server di destinazione, ma a un server proprio, che a sua volta si connette al server legittimo e trasmette i dati in entrambe le direzioni.

  2. Analizza i dati in modo da rilevare i record di handshake, per sapere dove e quando i messaggi aggiuntivi devono essere aggiunti nel flusso (e, analogamente, i messaggi aggiuntivi dal server devono essere analizzati e rimossi, in modo che lo strumento client SSL non li soffochi).

Quindi sei pronto per un po 'di programmazione. Il protocollo di registrazione di SSL non è complesso, a patto che si maneggi con i record non crittografati (quelli che precedono il completamento dell'handshake); guarda la sezione 6 dello standard . Inoltre, vedi questa risposta per un'introduzione dettagliata sul protocollo (che credo sia più facile da leggere rispetto allo standard ). Per il relaying, la strategia di implementazione più semplice dovrebbe probabilmente avviare due thread, ognuno dei quali scorre in un ciclo infinito di read-from-one-machine-write-to-other.

    
risposta data 27.03.2013 - 21:08
fonte

Leggi altre domande sui tag