Ya sabéis que un ataque man-in-the-middle (MiTM) el atacante intercepta el tráfico de la víctima, lo que le permite robar la información no protegida y manipular las respuestas. Sin embargo hoy vamos a ver los ataques man-in-the-browser (MitB) que se sitúan entre la víctima y su navegador. Normalmente lo suele implementar malware bancario y extensiones del navegador maliciosas ya que las protecciones como TLS y el segundo factor de autenticación no tienen ningún efecto contra ellos.
El agente de MitB espera hasta que la víctima visite un sitio web relevante y, cuando envía un formulario para realizar un nuevo pago, el agente cambia los valores enviados. Esto significa que en lugar de enviar, digamos, $1000 a un amigo, la víctima termina enviando $10,000 al atacante.
La principal mitigación contra estos ataques MiTB es utilizar mecanismos de autenticación "fuera de banda" en inglés out-of-band (OOB), es decir, utilizar otro medio externo al propio navegador del usuario como un SMS, si bien hay que tener en cuenta que también existe malware man-in-the-mobile (MitMo) en el teléfono móvil... xD
Un ejemplo práctico de un troyano que utiliza MitB
Una cadena de infección típica que incorpora un troyano que intentará realizar transacciones fraudulentas manipulando DOM es la siguiente:
- El troyano infecta el software de la computadora, ya sea el sistema operativo o la aplicación.
- El troyano instala una extensión en el navegador maliciosa para que se cargue la próxima vez que se inicie el navegador.
- Más tarde, el usuario reinicia el navegador.
- El navegador carga la extensión.
- La extensión registra un controlador para cada carga de página.
- Siempre que se carga una página, la extensión busca la URL de la página en una lista de sitios conocidos que son objeto de un ataque.
- El usuario inicia sesión de forma segura en, por ejemplo, https://www.banco.site/.
- Cuando el controlador detecta una carga de página para un patrón específico en su lista de destino (por ejemplo, https://www.banco.site/cuenta/FormularioPago), registra un controlador de eventos de botón.
- Cuando se presiona el botón enviar, la extensión extrae todos los datos de todos los campos del formulario a través de la interfaz DOM en el navegador y recuerda los valores.
- La extensión modifica los valores a través de la interfaz DOM.
- La extensión le dice al navegador que continúe enviando el formulario al servidor.
- El navegador envía el formulario, incluidos los valores modificados, al servidor.
- El servidor recibe los valores modificados en el formulario como una solicitud normal. El servidor no puede diferenciar entre los valores originales y los valores modificados, ni detectar los cambios.
- El servidor realiza la transacción y genera un recibo.
- El navegador recibe el recibo de la transacción modificada.
- La extensión detecta la URL https://www.banco.site/cuenta/confirmar, escanea el HTML en busca de los campos del recibo y reemplaza los datos modificados en el recibo con los datos originales que recordaba en el HTML.
- El navegador muestra el recibo modificado con los detalles originales.
- El usuario cree que la transacción original fue recibida por el servidor intacta y autorizada correctamente.