Estoy intentando implementar la vinculación de la aplicación de escritorio con la contraparte móvil para mi proyecto. El supuesto es que la aplicación móvil es segura y la aplicación de escritorio simplemente necesita vincular la sesión con el móvil para mayor comodidad.
En mi investigación encontré el exploit de QRLjacking . Es un exploit de ingeniería social que no es muy diferente de hacer que los usuarios revelen sus contraseñas.
Lo interesante es que la aplicación Signal no parece ser vulnerable a la explotación de QRLjacking, a pesar de que también vinculan el escritorio con el móvil a través del código QR.
Estoy tratando de averiguar cuál es la salsa secreta que aplica la Señal. Afortunadamente, el código está aquí: enlace
Según mi análisis, esto es lo que creo que hacen:
- El usuario registra dispositivo móvil. El dispositivo envía pre-claves firmadas. al servidor de señales
- El usuario puede chatear con otros usuarios de Signal utilizando el protocolo cifrado de extremo a extremo, pero lo que me parece más interesante es cómo previenen la vulnerabilidad de QR al vincularse al escritorio.
- El usuario instala la aplicación de escritorio. Lo primero que se debe tener en cuenta es que es una aplicación de JavaScript empaquetada con electron. Esto dificulta su uso en técnicas de ingeniería social. El paquete de instalación se puede firmar y verificar para que sea confiable.
- Tras la instalación, la aplicación de escritorio genera las claves previas y las envía al servidor.
- El escritorio usa su propia clave pública para verificar con el servidor si está vinculado a un dispositivo móvil. Si no es así, continúe con el paso 6.
- Envíe la clave pública al servidor bajo una clave UUID. El servidor lo almacena. El UUID se utiliza para el código QR.
- El usuario levanta su dispositivo móvil y escanea el código QR con la aplicación de señal.
- La aplicación móvil utiliza el código QR para descargar la clave pública de la aplicación de escritorio.
- La aplicación móvil envía un mensaje de confirmación cifrado a la aplicación de escritorio, que la aplicación de escritorio verifica mediante su clave privada.
- La aplicación de aplicación de escritorio le pide al usuario que nombre esta aplicación de escritorio, por lo general, este es el nombre del host en el que se está ejecutando. La aplicación de escritorio envía este mensaje al móvil (cifrado, por supuesto).
- En el móvil, el dispositivo vinculado ahora aparece. En cualquier momento, el usuario puede eliminar el dispositivo vinculado, que se conoce de inmediato en el escritorio.
- No creo que el servidor se use para retener mensajes. Creo que el escritorio se sincroniza con el móvil a pedido.
En resumen, el exploit QRLjacking está mitigado por Signal de la siguiente manera:
- La aplicación no está basada en el navegador y en su lugar está instalada. El paquete de instalación se puede firmar y verificar con un certificado.
- La aplicación de escritorio también puede almacenar de forma segura las claves localmente, no en el servidor. Eso hace que sea difícil realizar un ataque de ingeniería social, ya que eso requeriría hacerse cargo físicamente de la máquina en la que se está ejecutando la aplicación de escritorio.
¿Mi análisis es correcto?