Attacco del pin chiave pubblica e attacco MITM

4

Quindi stavo guardando un esempio di come implementare il blocco della chiave pubblica per quando la tua app si connette al tuo servizio web e vuoi che la tua app si assicuri che stia davvero parlando al tuo server.

link

Eseguono una richiesta HTTPS di test e quindi controllano l'identificazione personale del certificato:

private async Task DemoSSLRoot()
{
    // Send a get request to Bing
    HttpClient client = new HttpClient();
    Uri bingUri = new Uri("https://www.bing.com");
    HttpResponseMessage response = await client.GetAsync(bingUri);

    // Get the list of certificates that were used to validate the server's identity
    IReadOnlyList<Certificate> serverCertificates = response.RequestMessage.TransportInformation.ServerIntermediateCertificates;

    // Perform validation
    if (!ValidCertificates(serverCertificates))
    {
        // Close connection as chain is not valid
        return;
    }

    PrintResults("Validation passed\n");
    // Validation passed, continue with connection to service
}

private bool ValidCertificates(IReadOnlyList<Certificate> certs)
{
    // In this example, we iterate through the certificates and check that the chain contains
    // one specific certificate we are expecting
    for(int i=0; i<certs.Count; i++)
    {
        PrintResults("Cert# " + i + ": " + certs[i].Subject + "\n");
        byte[] thumbprint = certs[i].GetHashValue();

        // Check if the thumbprint matches whatever you are expecting
        // ‎d4 de 20 d0 5e 66 fc 53 fe 1a 50 88 2c 78 db 28 52 ca e4 74
        byte[] expected = new byte[] { 212, 222, 32, 208, 94, 102, 252, 83, 254, 26, 80, 136, 44, 120, 219, 40, 82, 202, 228, 116 };

        if (ThumbprintMatches(thumbprint, expected))
        {
            return true;
        }
    }

    return false;
}

Ora la mia domanda è: con questo approccio, non è possibile che un utente malintenzionato autorizzi la tua app a autenticare per la prima volta il tuo server web e stabilisca che è attendibile, quindi passa immediatamente al loro server HTTPS dannoso? Sembra così, dal momento che solo la richiesta iniziale "Hello World" è convalidata ...

    
posta John 29.10.2015 - 15:50
fonte

1 risposta

1

Durante l' iniziale handshake TLS , viene creato un "segreto principale"

The client and server then use the random numbers and PreMasterSecret to compute a common secret, called the "master secret". All other key data for this connection is derived from this master secret (and the client- and server-generated random values), which is passed through a carefully designed pseudorandom function.

Dato che questo segreto è usato in tutta la comunicazione, un MiTM che tenta di impersonare il client o il server a metà conversazione dovrebbe avere il master secret (e probabilmente altri segreti) per crittografare e decrittografare la comunicazione. Ma poiché questo segreto è conosciuto solo dal client e dal server originali, un MiTM è impossibile (o almeno molto difficile).

    
risposta data 29.10.2015 - 16:50
fonte

Leggi altre domande sui tag