World of Warcraft: cuando una simple línea de código puede resultar muy cara
6 minutos

World of Warcraft: cuando una simple línea de código puede resultar muy cara

Hace algunas semanas se ha descubierto un nuevo tipo de ataque que podría afectar al juego World of Warcraft, uno de los mayores éxitos de la compañía Blizzard. El ataque en cuestión es un tipo de engaño (en inglés, scam) que permitiría a un atacante tomar el control de la interfaz de usuario de su víctima a placer.

Este tipo de técnicas en los MMORPG suele utilizar la ingeniería social (por ejemplo, el atacante vende un código falso de un objeto por dinero del juego a otro jugador). En juegos online masivos de este estilo en el que la gente crea personajes y los sube de nivel es común encontrar personas que prometen mejores objetos o incluso características de pago del juego sin coste alguno. Para ello, engañan a otros jugadores para que les proporcionen acceso a sus cuentas (ya sea dándose de alta en algún portal online usando su usuario y contraseña oficial) o pidiéndoles que les dejen su equipo, para ellos clonarlos y devolvérselo en un futuro próximo.

Un nuevo tipo de ataque en World of Warcraft

Imaginemos la siguiente situación: mientras jugamos se nos acerca un personaje controlado por un jugador que parece ser de un clan muy popular. Este nos promete darnos buenos objetos como monturas raras, armas, etc. La trampa consiste en que el atacante nos persuade para introducir la siguiente línea de texto en la ventana de chat:

/run RemoveExtraSpaces=RunScript

La interfaz del WoW (compuesta por la barra de acción, el chat y todos los elementos gráficos que no son 3D) y los add-ons (pequeños scripts adicionales que se añaden para mejorar la interfaz del juego) están escritos en un lenguaje de script llamado Lua.

Tanto la palabra clave RemoveExtraSpaces como RunScript son funciones legítimas del lenguaje y parte de la API Lua del WoW. En concreto, el comando anterior haría lo siguiente:

  • /run es un comando que interpreta lo siguiente que escribamos como un script Lua.
  • RemoveExtraSpaces es una función que elimina los espacios innecesarios del texto.
  • RunScript es una función que ejecuta texto como código Lua.

La función RemoveExtraSpaces es llamada cada vez que recibimos algo en el chat. El comando mencionado reemplazaría la función RemoveExtraSpaces con la función RunScript (en desarrollo software esta técnica se llama hooking). Por tanto, como el propio intérprete ahora ejecuta RunScript en lugar de RemoveExtraSpaces, esto nos permitiría ejecutar código Lua directamente usando nuestro chat.

Vamos a explicarlo con un ejempo. Supongamos que introducimos el comando anterior porque un jugador nos ha prometido objetos raros para el juego. Como ya hemos explicado, esto haría que la función RunScript reemplace la ejecución de la función RemoveExtraSpaces. Por tanto, si el otro jugador nos envia un mensaje privado e incluye código Lua (por ejemplo, el código message['Test'] que muestra un mensaje de alerta con un texto), veremos como en nuestra pantalla nos aparecerá el mencionado cuadro de diálogo.

Cuadro de diálogo mostrado en el cliente por el atacante usando lenguaje Lua

Lo que ha conseguido este atacante es ejecutar código propio en nuestro cliente. Esto implica que el atacante ahora es capaz de controlar remotamente nuestra interfaz del juego. Este comportamiento es similar al que utilizan los caballos de Troya en los ordenadores (se hacen pasar por código útil, pero en realidad esconden código malicioso). En un caso real, esto dejaría expuesta nuestra cuenta a la ejecución de cualquier tipo de script Lua.

Persistencia y comandos ocultos

Después de que la víctima haya activado este backdoor en su interfaz, un atacante podría enviar el siguiente chat (las partes sensibles están ocultas por seguridad):

Código malicioso en lenguaje Lua

Tras ejecutarlo, el mensaje no sería visible en el chat de la víctima. Sin embargo, sería ejecutado inmediatamente. Para entender este código, primero debemos saber que los add-ons del WoW permiten la comunicación usando un canal oculto (remota o localmente). Este canal se establece usando los eventos CHAT_MSG_ADDON.

El script crea un frame configurado con distintas propiedades, y registra el evento CHAT_MSG_ADDON para un prefijo específico. Ahora solamente el que conozca el prefijo será capaz de controlar la interfaz de la víctima (algo así como si la protegiéramos por contraseña); por tanto cada vez que la interfaz reciba un evento CHAT_MSG_ADDON con el prefijo secreto, el código se ejecutará de manera transparente a la víctima.

¿Qué podría hacer el atacante?

En el WoW los jugadores tienen la posibilidad de comerciar objetos entre ellos. Para que esto sea posible, ambos jugadores deben están próximos físicamente en el mundo. Como el atacante tiene acceso completo a la interfaz de su víctima, éste podría comprobar la localización del personaje en el mundo virtual. Como sabe donde está, podría ir donde está su víctima, abrir remotamente la ventana de comercio, añadir objetos y oro de su víctima y pulsar el botón de "Aceptar comercio". El atacante ha conseguido robar virtualmente objetos y dinero a su víctima sin necesidad de interactuar con él directamente.

Este escenario combina ingeniería social (el atacante convence a su víctima de que ejecute el comando) con un ataque más técnico (mediante el conocimiento del lenguaje Lua y su ejecución en el WoW).

¿Cómo protegerme ante estos ataques?

La protección más simple es no ejecutar código script en la ventana de chat bajo ninguna condición. Utilizar add-ons actualizados, conocidos y de sitios de confianza también nos ayudará a mantener nuestra cuenta segura.

El problema en realidad sólo lo puede arreglar Blizzard blindando este tipo de hooks entre funciones de alguna forma. Con uno de los últimos parches muestran un aviso al respecto.

Advertencia introducida por Blizzard al descubrirse este tipo de ataques

Así que cuidado con ejecutar comandos y scripts directamente en el chat.

Enlaces relacionados