El lado oscuro de WebAssembly

Carlos Ávila    16 septiembre, 2020
El lado oscuro de WebAssembly

Hoy en día, las tecnologías para desarrollar software para web se multiplican de manera vertiginosa, al tiempo que introducen, en algunos casos, nuevas formas de ataque o ventajas inesperadas para los atacantes. Veamos qué es WebAssembly (WASM) y qué potenciales beneficios puede tener para los atacantes.

Este relativamente nuevo estándar abierto (anunciado en 2015 pero comenzado a usarse en 2017) nos permite la ejecución de código binario, compilado con lenguajes como C, C++ o Rust en navegadores web modernos, con todas las nuevas funcionalidades y rendimiento que puede conllevar.

Arquitectura general de Aplicación WebAssembly
Arquitectura general de Aplicación WebAssembly

WASM no se creó como reemplazo de JavaScript, sino para complementarse. De hecho es el motor JavaScript quien se encarga de ejecutarlo. Este estándar disfruta de múltiples casos de uso, como indica su sitio web: desarrollo/ejecución de juegos, aplicaciones CAD, plataformas de simulación, contratos inteligentes (blockchain), entre otros. Si quieres echar un vistazo sobre cómo ejecutan un binario de un juego en WASM puedes ver esta web que emula la famosa Gameboy o cómo AutoCAD comienza a ejecutarse desde cualquier navegador.

Así como las nuevas tecnologías y lenguajes de programación nos ofrecen múltiples mejoras, es cuestión de tiempo que los atacantes encuentren los vectores de ataque para usarlos en su propio beneficio, y las aplicaciones WebAssembly no son una excepción. Veamos, a través del ejemplo a continuación, cómo se podría compilar un simple código malicioso para simular un ciberataque de ingeniería social.

Ejemplo de compilación y ejecución de WASM (PoC Fraude)
Ejemplo de compilación y ejecución de WASM (PoC Fraude)
Ejemplo de compilación y ejecución de WASM (PoC Fraude)

Este tipo de ataque simulado se conoce como “estafa de servicio técnico”, donde un estafador se hace pasar por un técnico de una compañía de tecnología usando tácticas intimidatorias e ingeniería social para engañar a las personas y hacer que paguen por servicios de soporte innecesarios. Cuando la víctima llama al número de soporte técnico, los estafadores piden dinero para solucionar el problema o piden accesos para instalar software malicioso (backdoor) en el dispositivo de la víctima. Este hilo de Twitter de Sergio de los Santos es un buen ejemplo de la sofisticación alcanzada.

Caso de estafa de servicio técnico

En estos casos, el beneficio para el atacante sería la ofuscación del código a la hora del análisis, más velocidad, etc. De hecho, el código WASM compilado se ha usado ya para campañas de minado de bitcoins mediante la infección de navegadores a través de código malicioso en sitios comprometidos. Entre los casos más conocidos están los de Coinhive y Cryptonight. Ambos ataques (mediante JavaScript generado por WASM) aprovecharon el poder computacional para “minar” criptomonedas a través del navegador. De forma general, cuando navegamos por Internet podemos encontrarnos con sitios que han sido comprometidos por los estafadores comúnmente con código JavaScript puro o WASM y, a partir de aquí, si nuestros navegadores no tienen controles adecuados, se puede consumar el ataque.

Si WebAssembly está siendo utilizado como apoyo para ataques de criptominado, es posible que los atacantes sigan sacando provecho desde otros frentes. Otras fórmulas de uso malintencionado de WASM son:

  • Redirección a URLs maliciosas: existen campañas para infectar dispositivos mediante redirecciones maliciosas (a través de código WebAssembly) de sitios comprometidos a las mismas estafas de soporte técnico, minado de criptomonedas, etc.
  • Keyloggers, registrar el pulsado de teclas para robar contraseñas y cualquier otra información confidencial de los visitantes de sitios web comprometidos, aprovechando que mediante WebAssembly se está generando código que evade las detecciones típicas de controles externos o de navegadores.
  • Explotación de navegadores: explotar vulnerabilidades en el navegador casi siempre involucra JavaScript. Por lo tanto, WebAssembly puede desempeñar un papel importante en la explotación del navegador al ofuscar el código de explotación.

Las tecnologías ofrecen muchas posibilidades, WebAssembly no es la excepción y podrían ser un aliado o un enemigo. Está muy claro que presenta muchas ventajas, pero puede proporcionar nuevas vías para explotar debilidades en diferentes casos. Si bien los desarrolladores se esfuerzan por integrar características de seguridad, nosotros como usuarios debemos tomar nuestras precauciones, teniendo actualizandos nuestros navegadores con complementos que bloqueen ejecución dinámica de JavaScript, como NoScript. Desde ElevenPaths hemos aportado herramientas como AMSIext para evitar ejecuciones no deseadas en los navegadores.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *