Steam, plataforma de videojuegos, objetivo de phishing y malware

 

Resumen

Durante los últimos meses, los usuarios de la popular plataforma de distribución de videojuegos Steam se han visto afectados por varios sitios falsos de inicio de sesión y mensajes de chat con enlaces que redirigen a la descarga de malware y que, al ser ejecutados, roban el archivo que le permite a los atacantes acceder a la cuenta sin necesidad de tener las credenciales de inicio de sesión.

 

 

Introducción

Ahora que la gran venta de verano en Steam ha comenzado, es importante que estés enterado de los riesgos a los que estás expuesto si das clic en enlaces provenientes de desconocidos. 

Ya que, de lo contrario, podrías caer en los engaños de individuos malintencionados que buscan acceder a tu cuenta para robar tus objetos raros y venderlos, adquirir juegos con los fondos que tienes en tu Cartera de Steam, jugar tus videojuegos, modificar tus datos o deshabilitar Steam Guard, entre otras cosas.

 

 

Sitio Phishing

Después de que un colega mencionara lo fácil que es encontrarse con enlaces de descarga de malware enviados por medio del chat de la plataforma, decidimos investigar al respecto. De acuerdo con este reporte, al autor le enviaron un mensaje por chat pidiéndole agregar un amigo en un sitio phishing de Steam. Este sitio falso, con una URL muy parecida a la original, redirigía a lo que parecía ser el perfil de un usuario. Al dar clic al botón “Add Friend” para añadirlo como amigo, el usuario era redirigido a una forma, muy parecida a la original, con campos de inicio de sesión.

 

 

 

Una vez que se introducen el usuario y la contraseña, se muestra una ventana pidiendo un código que fue enviado al correo electrónico del usuario por la aplicación real de Steam.

 

Como en otros sitios web, como por ejemplo Facebook, si el usuario inicia sesión desde una red o equipo desconocido, la plataforma mostrará un mensaje indicando que la actividad es inusual, e incluso puede que le pida al usuario verificar su identidad antes de acceder. Steam cuenta con un mecanismo similar, donde al usuario se le pide un código numérico que le fue enviado por correo electrónico, sin este código, el usuario no puede iniciar sesión. A esta característica se le conoce como Steam Guard y proporciona seguridad adicional a las cuentas de los usuarios, de tal forma que, aún si las credenciales son robadas, los atacantes no podrán acceder a las cuentas sin el código.

 

Por último, para no levantar sospechas, se muestra un mensaje indicando que la invitación para agregar al “amigo” ha sido enviada por correo y que éste aparecerá en el perfil del usuario una vez que haya aceptado.

 

También es posible que, después de ingresar el usuario y la contraseña, la ventana le pida al usuario subir su archivo ssfn*. El archivo ssfn* contiene datos relacionados con las credenciales de la cuenta, de tal forma que el usuario pueda autenticarse automáticamente y ya no tenga que escribir su usuario y contraseña cada vez que quiera iniciar sesión en la aplicación de Steam instalada en la computadora.

 

El reporte sobre este caso puede ser consultado en Malwarebytes.

En otros casos, en vez de pedir el código de seguridad, la ventana contiene un botón que supuestamente descarga e instala SteamGuard.exe. Como se mencionó anteriormente, Steam Guard es mecanismo de seguridad adicional en el sitio web por lo que, hasta el momento, no existe ningún ejecutable legítimo con este nombre.

 

 

El reporte de Virus Total de este dominio phishing se puede consultar en este enlace

En algunos casos, se registran múltiples dominios falsos utilizando el mismo correo electrónico, como se puede observar en la siguiente imagen, obtenida de whoismind. Esto da una idea del interés que tienen los atacantes en esta plataforma y de lo fácil que es engañar a las personas cambiando o agregando una o dos letras, por ejemplo: steamcommunmity o steamcornmunity.

 

 

Malware

Para este reporte, no fue posible encontrar un enlace de descarga del programa malicioso que aún estuviera activo; sin embargo, se logró obtener una muestra que estaba almacenada en una cuenta de Google Docs desde finales del año pasado.

 

MD5: 7FDCFDAB72C64DCDC45D7EC6BDD2ABFC

SHA1: 47229D9552C0E729427096B4F83940C699AC101C

Reporte de Virus Total

 

Como se puede observar, el ícono de la muestra es parecido al que tiene la aplicación original. En sus propiedades hace referencia a Valve Corporation, compañía que desarrolló la plataforma Steam.

 

 

Y también muestra detalles de un certificado supuestamente firmado por Valve y Symantec.

 

 

Utilizando Exeinfo PE se obtuvo que el ejecutable no estaba protegido con algún empaquetador conocido; sin embargo, se sabe que fue compilado en .NET y que posiblemente fue ofuscado con SmartAssembly.

 

 

La herramienta de4dot también indica que la muestra fue ofuscada con SmartAssembly e incluso indica que la versión es la 6.8.0.121.

 

De acuerdo con su documentación, SmartAssembly provee varios tipos de ofuscación, entre los que se encuentran:

-          Name mangling: Cambia los nombres de las clases y métodos por caracteres no imprimibles e incluso renombra múltiples objetos con la misma cadena ofuscada.

-          Control flow obfuscation: Cambia el control de flujo del programa a algo complejo e incomprensible (código espagueti).

-          Resources compression and encryption: Comprime o cifra los recursos utilizados por el código.

-          Encoding strings: Cifra todas las cadenas del ejecutable.

 

 

Para desofuscar la muestra se utilizó la herramienta de4dot, especificando una ruta para que el programa desofuscado se genere sin sobrescribir el original.

 

 

En la siguiente imagen se puede observar la diferencia entre ambos ejecutables. A la izquierda se encuentra la muestra ofuscada, donde las clases parecen no tener nombres aunque en realidad se trata de caracteres no imprimibles, y con la referencia a SmartAssembly. A la derecha se tiene el ejecutable después de haber sido desofuscado por de4dot, que asigna nombres genéricos a las clases para facilitar el análisis.

 

 

También convierte el “código espagueti” en código fácil de entender:

 

 

 

Análisis Estático y Dinámico

En este reporte el análisis estático y el análisis dinámico se van a mostrar en la misma sección para explicar mejor lo que hace el código.

Una vez que el código ha sido desofuscado, se procede con el análisis estático. La función Main() manda llamar a lo que llamaremos método 0 de la clase Class2.

 

·         Class2

El método 0 crea un hilo para ejecutar el método 1 en segundo plano. También se puede observar que la variable string_0 contiene una URL, cuyo uso se explica más adelante.

 

El método 1 abre la llave SOFTWARE\Valve\Steam y almacena el valor de “InstallPath”. Después manda llamar al método 3. En caso de que algo falle durante la ejecución y no se pueda obtener la ruta de instalación desde las llaves de registro, manda llamar al método 2.

 

 

El método 2 obtiene la ruta de instalación de otra forma. Para cada proceso llamado Steam, se va a reemplazar la cadena “Steam.exe” por una cadena vacía. Posteriormente, y al igual que en el método anterior, llama al método 3.

 

 

En el método 3, DirectoryInfo.GetFiles regresa una lista de los archivos que se encuentran en el directorio de instalación de Steam y obtiene los que coincidan con el patrón “ssfn*”. Si el archivo tiene atributos “hidden” o “archive”, se agrega a una lista. Después manda llamar a los métodos 4 y 5.

 

 

 

En el método 4 se leen todas las líneas del archivo loginusers.vdf, que también se encuentra en la ruta de instalación de Steam.

 

 

En el método 5 se crea una instancia de la clase Class0 y se le pasa como parámetro la cadena hxxp://catalogs.sellexpo.net”. Se manda llamar a Class0.method_1, pasando como parámetros la cadena “userid” y el contenido del archivo. Después se llama a método 2, pasando como parámetros la ruta del archivo cuyo nombre inicia con “ssfn”. Por último se termina la aplicación.

 

·         Class0

El método 1 de esta clase crea una tabla de hashes utilizando la cadena “userid” y las líneas del archivo loginusers.vdf.

El método 2 recibe la ruta del archivo ssfn* y crea la petición POST con la que se enviará el archivo a la URL “catalogs.sellexpo.net”.

 

 

Puesto que la petición contiene no sólo el archivo sino el ID del usuario, obtenido del archivo loginusers.vdf, y el nombre del archivo ssfn, el tipo de contenido está especificado como “multipart/form-data”. Para que el servidor pueda diferenciar los distintos datos que se envían en la petición, se requiere de un separador. Como se observa en la imagen, la cadena “ou812--------------8c405ee4e38917c” es el separador o boundary. Este separador está formado de la siguiente manera:

·         BeginBoundary = Le especifica al servidor que recibirá la petición cuál es la cadena que va a separar los datos, en este caso es: ou812--------------8c405ee4e38917c.

·         ContentBoundary = Es la cadena "--" que se agrega al inicio del BeginBoundary para separarlo de los datos que se quiere enviar en la petición: "--" + BeginBoundary.

·         EndingBoundary = Es otra cadena "--" que se añade al final: ContentBoundary + "--".

 

 

 

Al final se pueden observar las primeras líneas del archivo ssfn.

 

 

 

¿Cómo evitarlo?

·         No des clic a los enlaces que te envíen por el chat de Steam, Facebook, Skype o cualquier otra red social, aún si fueron enviados por conocidos. Toma en cuenta que ese amigo pudo haber perdido su cuenta y que ahora está siendo utilizada para robar otras.

·         Verifica que la URL esté bien escrita, en especial si te pide tu código de seguridad.

·         No descargues ejecutables con nombres parecidos a SteamGuard.exe, no son legítimos.

·         No subas a ningún sitio web el archivo cuyo nombre empieza con “ssfn”.

·         Sigue los consejos de seguridad que se encuentran en la página oficial de Steam.

 

 

Enlace recomendado

Para obtener más información sobre esto, se recomienda leer el siguiente reporte:

Netcraft. Steam Community phishing attacks continue unabated.