¿Es posible implementar una implementación segura de ssl pinning sin la validación del lado del servidor?

1

Se sabe que, en Android, hay un par de herramientas que pueden omitir la fijación de SSL, como Justtrustme, Android-SSL-TrustKiller. En iOS hay ios-SSL-Killswitch.

Tenía 3 opciones para implementar pins ssl en mi aplicación.

  1. Usando un HttpsURLConnection simple con un PinningTrustManager
  2. Usar un HttpClient simple con un PinningTrustManager
  3. Trabajar con PinningTrustManager y PinningSSLSocketFactory más directamente

Probé las 3 opciones, sin embargo, fue posible omitir estos mecanismos. Descubrí que la última opción era poco segura en comparación con otras dos, ya que pocas herramientas no podían omitir pero una sí.

Aquí está mi ejemplo de pseudo código para la fijación.

           // Get an instance of the Bouncy Castle KeyStore format
           KeyStore trusted = KeyStore.getInstance("BKS");
           // Get the raw resource, which contains the keystore with
           // your trusted certificates (root and any intermediate certs)
           InputStream   in = getResources().openRawResource(R.raw.key);
           try {
               // Initialize the keystore with the provided trusted certificates
               // Provide the password of the keystore
               trusted.load(in, KEYSTORE_PASSWORD);
           } finally {
               in.close();
           }

           String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
           TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
           tmf.init(trusted);

¿Existe alguna solución segura de al menos la mejor solución disponible para la implementación?

    
pregunta FrOgY 06.09.2016 - 13:30
fuente

1 respuesta

5

No, no hay una solución segura. Todas las herramientas mencionadas que omiten la fijación de certificados SSL según el acceso de la raíz.

Si el teléfono está enraizado / desbloqueado, no hay forma de que una aplicación haga cumplir nada. Como su aplicación es solo una parte del software que se ejecuta en ese sistema, la persona que posee el sistema (y ese es el usuario en dispositivos con jailbreak / rooteado) siempre puede pasar por alto sus mecanismos de seguridad. Lo único que puede hacer es hacer que la persona que desea deshabilitar el certificado SSL sea más difícil. Una forma es usar la detección de jailbreak / root y bloquear dispositivos jailbreak / rooted.

    
respondido por el sven.to 06.09.2016 - 14:11
fuente

Lea otras preguntas en las etiquetas