Clave de certificado de clave pública y ataque MITM

4

Así que estaba viendo un ejemplo de cómo implementar la fijación de claves públicas para cuando su aplicación se conecta a su servicio web y quiere que su aplicación se asegure de que realmente esté hablando con su servidor.

enlace

Realizan una solicitud de prueba HTTPS y luego verifican la huella digital del certificado:

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;
}

Ahora mi pregunta es: con este enfoque, ¿no podría un atacante permitir selectivamente que su aplicación se autentique por primera vez en su servidor web y establecer que es confiable, y luego cambiar inmediatamente a su servidor HTTPS malicioso? Parece que sí, ya que solo se valida la solicitud inicial "Hello World" ...

    
pregunta John 29.10.2015 - 15:50
fuente

1 respuesta

1

Durante el saludo inicial de TLS , se crea un "secreto maestro"

  

El cliente y el servidor luego usan los números aleatorios y PreMasterSecret   para calcular un secreto común, llamado el "secreto maestro". Todas las demás claves   los datos para esta conexión se derivan de este secreto maestro (y la   valores aleatorios generados por el cliente y el servidor), que se pasa a través de un   Función pseudoaleatoria cuidadosamente diseñada.

Dado que este secreto se usa en toda la comunicación, un MiTM que intente suplantar al cliente o al servidor a mitad de la conversación necesitaría tener el secreto principal (y probablemente otros secretos) para cifrar y descifrar la comunicación. Pero dado que este secreto solo es conocido por el cliente y el servidor original, un MiTM es imposible (o al menos muy difícil).

    
respondido por el Neil Smithline 29.10.2015 - 16:50
fuente

Lea otras preguntas en las etiquetas