¿Podría una clave privada de JavaScript WebCrypto resistir un ataque de malware?

4

La reciente API de WebCrypto puede generar claves privadas / públicas . Para evitar que la clave privada sea extraíble con JavaScript, el objeto CryptoKey podría almacenarse así en IndexedDB.

Supongo que si lo almacenamos así, un malware podría leerlo fácilmente, seguramente es por eso que la API de WebCrypto puede envolver la clave con otra clave , para que la clave privada se pueda almacenar en IndexedDB encriptada. La clave de ajuste se almacena en el lado del servidor y se envía al cliente después de una autenticación exitosa.

Entonces, si el navegador está cerrado, el malware debería poder obtener la clave privada, pero está encriptada y en teoría es inútil (excepto para ataques de fuerza bruta).

Pero si se abre el navegador y el usuario inicia sesión, el servidor envía la clave secreta para desenvolver la clave privada. Entonces, en este momento, ¿es posible que un malware lea el tráfico de la red, la RAM, los archivos, los cachés, la lectura / extracción de la clave privada sin cifrar?

Sobre el tráfico de red, asumo que todo está en HTTPS, TLS 1.2 mínimo con un conjunto de cifrado sólido, con HSTS establecido en la edad máxima, incluidos los subdominios, y con HPKP para evitar ataques MITM.

    
pregunta lakano 21.10.2017 - 15:10
fuente

2 respuestas

2

El malware extremadamente inteligente con permisos de root (en un cliente * nix) puede hacer casi cualquier cosa, incluyendo redireccionando /dev/random o /dev/urandom a algo que controlan. Si el malware puede controlar la generación de números aleatorios que usa su computadora para crear claves TLS, entonces puede interrumpir la comunicación HTTPS.

Si el navegador está abierto y el usuario ha iniciado sesión, el malware con la capacidad de realizar volcados de memoria en bruto podría encontrar la clave.

En resumen, si un usuario puede hacerlo, entonces un programa de malware teórico puede hacerlo .

Sugiero que la pregunta no debe ser si es posible que el malware ... , ya que el malware con poder ilimitado puede hacer cualquier cosa que pueda hacer. En cambio, la pregunta es, ¿qué se necesitaría para que el malware ...? Desde esta perspectiva, no estamos midiendo lo que es posible , sino lo que es probable .

La metodología que describe suena tan bien como puede ser (además de usar la contraseña del usuario para bloquear la clave privada / secreto compartido para que el servidor no tenga que recibirla, almacenarla y transmitirla). No existe la seguridad perfecta.

    
respondido por el cegfault 21.10.2017 - 17:37
fuente
0

Depende de la computadora, el sistema operativo y el agente de usuario que ejecute Javascript y el sitio web. Si alguno de estos está comprometido, el malware puede obtener la información enviada por el servidor al cliente. Por ejemplo, los ataques XSS pueden comprometer el sitio web, y el proveedor del navegador puede, en teoría, hacerse pasar por usted en cualquier sitio web, solo está confiando en que su software no les permitirá hacerlo.

Así que sí, esto es lo mejor que puedes conseguir. Cuantas más claves se requieran, mejor.

El problema es, lakano, una vez que una clave almacenada se desenvuelve en Web Crypto, no creo que haya una manera de marcar el resultado como "no extraíble". Me gustaría que hubiera una manera de combinar las teclas de envoltura y "no extraíbles". ¿Has encontrado un camino?

He estado preguntando durante un año y nadie sabe realmente: enlace

    
respondido por el Gregory Magarshak 22.11.2018 - 07:45
fuente

Lea otras preguntas en las etiquetas