Come posso curiosare su una connessione SSL autenticata?

1

La nostra azienda si collega a un servizio esterno tramite una libreria obsoleta (utilizzando un'estensione PHP per una versione precedente di PHP). Poiché questo richiede di avere una configurazione server isolata per questo servizio, ho contattato l'azienda per chiedere se ci sono possibilità di una versione più recente della loro estensione, ma sfortunatamente non in questa fase.

L'estensione utilizza un certificato client noto e condiviso (per tutti i client) con una password di certificato diversa per client.

Sono interessato a vedere come funziona il protocollo in modo che potremmo potenzialmente sviluppare la nostra libreria utilizzando le tecnologie moderne, tuttavia a causa dell'autenticazione reciproca non sono sicuro su come fare lo snooping nel traffico.

Per ragioni, diciamo che il servizio a cui ci stiamo connettendo è example.com (si noti che anche il server è autenticato SSL). Se ci è stato fornito un certificato client condiviso e una password specifica per il cliente, è possibile curiosare su questo traffico e in che modo possiamo farlo?

L'estensione richiede specificamente un SO Linux, quindi, ove possibile, sarebbe molto utile se la soluzione o i suggerimenti potessero essere adattati a quell'ambiente.

    
posta mitchdav 06.08.2017 - 16:09
fonte

1 risposta

2

Potresti dare un'occhiata a ReverseEngineering.SE in quanto potrebbero esserci altre informazioni pratiche lì. Ti consiglio anche di controllare la licenza del tuo prodotto e di ottenere qualche consiglio legale: mentre il reverse engineering è generalmente considerato una pratica leale (da un punto di vista legale) quando si tratta di garantire la compatibilità del software, è spesso un'area grigia e potresti non voler metti nei guai te o la tua azienda.

La tua applicazione utilizza l'autenticazione reciproca SSL, il che significa che il server si autenticherà sul client, che il client si autenticherà sul server e che la comunicazione tra entrambi è cifrata.

Quello che ti serve è chiamato intercettazione SSL.

Questo è fondamentalmente fatto usando una qualche forma di proxy che falsificherà l'identità del server al client, l'identità del client falso sul server e avrà accesso alla comunicazione in forma chiara tra.

Normal communication:

CLIENT >client_cert>---------------------------------<server_cert< SERVER


Communication intercepted by a proxy:

CLIENT >client_cert>------<fake_server_cert< PROXY >client_cert>------<server_cert< SERVER

Identità del server falso sul client

Di solito ciò avviene installando un certificato CA che controlli (cioè uno che hai creato tu stesso e per il quale hai la chiave privata associata) sul client.

Quindi installare questo certificato CA sul proxy con la chiave privata associata. Ora qualsiasi certificato che il proxy genererà e firmerà utilizzando questa CA verrà considerato attendibile dal client. In particolare, il proxy sarà in grado di generare nuovi certificati con il vero nome del server, falsificando efficacemente la sua identità.

Si noti che ci sono misure che il client può prendere per rilevare che il certificato inviato dal proxy non è il vero certificato del server, ma se si è fortunati (ad esempio se gli sviluppatori non hanno preso alcun passaggio specifico per rafforzare la propria applicazione ) tale misura non sarà implementata.

Identità client falsa sul server

Poiché non hai alcun controllo sul server, è quindi necessario un certificato client autentico con la sua chiave privata associata. Fortunatamente, secondo il tuo post sembra che tu li abbia, quindi dovrebbe essere possibile installare uno di questi certificati client sul proxy per renderlo in grado di identificarsi come un vero client contro il server remoto.

    
risposta data 06.08.2017 - 19:48
fonte