¿Cómo sé que el malware en la computadora cliente no modifica los datos transmitidos a mi aplicación web?

2

Estoy trabajando en una aplicación web y he tenido una idea de una nueva función que me gustaría agregar. La función incluye obtener datos del usuario en su sistema abierto y recibirlos en mi servidor. En aras del concepto, asumo que mi servidor es 100% seguro y está protegido por un millón de brujos de nivel 80 y mi perro dachshund Kevin. Por lo tanto, nuestra parte no puede verse comprometida y es totalmente segura para esta pregunta.

El usuario va a decir una biblioteca y usa la computadora allí. Desde esa computadora solicitan una página web de nuestro servidor. Luego en esta página web ingresan algunos datos. Estos datos se envían a mi servidor y se procesan. Mi preocupación es cómo puedo verificar que lo que el usuario escribió desde el teclado con sus dedos es lo que realmente se envió a mi servidor.

Digamos que utilizo HTTPS para servir mi contenido, por lo que, en teoría, estos datos no se pueden leer / modificar mientras están en tránsito. Pero, ¿qué pasaría si en la máquina de la biblioteca pública el día anterior, Todd no se comprometió con la computadora al poner algo de código malicioso dentro del navegador web que cambia de forma secreta y discreta los datos enviados al servidor? Así que nuestro usuario escribe la palabra 'PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS' y ve que esto se escribe en la pantalla. Luego presiona enviar, pero cuando lo hace, el código malicioso en el navegador modifica los datos para cambiar los datos a "ToddIsAwesome" y muestra al usuario que su mensaje ha sido enviado con los datos que él cree que se enviaron, pero en realidad los datos han sido enviados. ha sido modificado y el servidor obtiene datos del usuario, pero no son los datos que el usuario quería enviar. ¿Hay técnicas para verificar este tipo de cosas? El usuario no tiene que enviar los datos desde un sitio web, también se puede instalar el software en una computadora. Mi principal preocupación es obtener los datos que el usuario pretende enviar y detectar si se ha producido una modificación desde el momento en que el usuario escribe algo hasta el momento en que el servidor recibe la solicitud.

    
pregunta user2924127 19.05.2016 - 19:35
fuente

2 respuestas

2

La respuesta corta es: No puedes.

Todo lo que ve tu servidor es lo que envía la computadora en la biblioteca. Es imposible saber qué programas o procesos en esa computadora que generaron los datos. Desde la perspectiva de los servidores, también podría haber sido un pidgeon con un telégrafo como su usuario legítimo.

El hecho de que el usuario ingresó una contraseña no mitiga esto. La autenticación de dos factores con un teléfono celular no mitiga esto. El software malicioso en la computadora podría conectarse al navegador y modificar las solicitudes HTTP después de haber ingresado la (s) contraseña (s).

Sin embargo, hay una pequeña cosa que puedes hacer. Haga que el usuario firme digitalmente parte del mensaje en otra computadora que no sea la computadora de la biblioteca, y luego ingrese esa firma digital en la aplicación web de la computadora de la biblioteca. Este podría ser su teléfono celular o un producto como un digipass . Dado que esa computadora está fuera del alcance de cualquier malware en la computadora de la biblioteca, es seguro. La parte trasera es que el usuario tendrá que ingresar el mensaje que está firmando en ese dispositivo, lo cual no es muy práctico para mensajes largos. He visto a los bancos usar esto para firmar la cantidad en una transferencia, pero no la cuenta a la que se transfiere porque eso sería para el usuario hostil.

Esa es solo una solución parcial que solo vale la pena el esfuerzo para objetivos de valor realmente alto como el banco. La solución más sencilla es simplemente enseñar a sus usuarios a no hacer transacciones confidenciales desde una computadora pública.

    
respondido por el Anders 19.05.2016 - 20:32
fuente
1

Realmente no hay manera de validar la entrada si la computadora del usuario está comprometida. Hay demasiadas variables.

Cuando su navegador envía un formulario, se ve algo así antes de que esté cifrado y enviado al servidor:


POST /login.php HTTP/1.1
Host: www.example.com
User-Agent: mycoolbrowser
Content-Length: 34
Content-Type: application/x-www-form-urlencoded

username=Bob&password=bobspassword

Nada complicado. No hay nada aquí que el navegador no pueda fabricar. Y si Todd ha comprometido la computadora, puede hacer lo que quiera. Incluso puede reemplazar el navegador con un parecido que hace lo que quiere. Por ejemplo, si uso Google Chrome, él podría reemplazarlo con Chromium, agregar su código malicioso (relativamente fácil ya que es de código abierto) y cambiar el icono.

Ahora, si Todd se olvida de cambiar la cadena User-Agent y el usuario dice que está usando Google Chrome, es posible que detecte la disparidad. O si el formulario solo permite la entrada numérica y el navegador envía palabras, es posible que detecte la disparidad. O si el cuadro de entrada del formulario ha sido validado por el lado del cliente para contener 45 caracteres, y el navegador envía 13 caracteres, es posible que detecte disparidad.

Ahora que lo pienso, Todd ni siquiera tiene que comprometer el navegador directamente; simplemente podría activar un complemento del navegador que lee el html, detecta la entrada del formulario y lo cambia.

En realidad hay demasiadas variables. Es posible que pueda detectar algo en muy escenarios específicos, pero realmente no hay nada que pueda hacer en el caso general. No existe la seguridad del lado del cliente.

    
respondido por el Azeezah M 19.05.2016 - 20:30
fuente

Lea otras preguntas en las etiquetas