18 noviembre 2011

Buscando el país de origen de un malware

Cuando aparece un nuevo malware muchas veces leemos en documentos técnicos de compañías antivirus en qué país se ha creado, pero ¿cómo lo saben?, con esta entrada pretendo explicar de dónde sale esta información. Para entender el ejercicio, se va a utilizar una muestra del malware Noppuca.

Lo primero y más importante es saber que existen varias formas de detectarlo, la más sencilla es buscar cadenas de texto y del idioma sacar la procedencia. Estos datos pueden ser falsos, pero ayudan a tener una  aproximación.

Otra opción inmediata es ver si con el propio explorador de ficheros muestra los detalles en la pestaña Versión.

Propiedades del binario
Estos datos realmente son obtenidos de uno de los recursos del ejecutable. Si recordamos la estructura de un binario PE, estos contienen una sección denominada recursos (.rsrc) donde  en forma de árbol se almacenan algunos elementos como bitmaps, iconos o diálogos. Cada uno de estos elementos tiene que estar identificado por un nombre, el tipo y su lenguaje.

Estructura de .rsrc
Muchos ejemplares de malware no disponen del recurso Version y cuando se muestran sus propiedades, todos los campos están vacíos (Vista/7) o ni si quiera hay pestaña Versión (XP):

Propiedades de malware sin recurso Version
Volviendo al bicho original, si se abre el malware con alguna aplicación para analizar archivos PE , como  CFF Explorer  y se recorre los recursos desde "Resource Editor", bajo la estructura de "Version Info", se encuentra la información mostrada por Explorer en su pestaña Versión.

CFF Explorer 
En la imagen superior se observa que tras la cadena Translation, hay cuatro bytes 0904 (0409) y 04b0, que en decimal equivale a 1033 y 1200. Estos números son el código de lenguaje y el código de página. Si se consulta la referencia de MSDN, se encontrará de donde sale el English/United States que se mostró inicialmente.

Tabla de Locales ID
Hasta aquí todo perfecto pero esta información se puede editar y si se compara el lenguaje con el que se identifica (1033) con el que este y otros recursos han sido creados, estos no concuerdan. 

Comparando el Lenguaje de Version (1033) con el de un Recurso (2052)
Ya que tal y como se ha explicado anteriormente todos los recursos se forman por un nombre, un tipo y un lenguaje y esta información es añadida por el compilador que genera el binario utilizando la configuración local del equipo. Usando la misma tabla anterior, se observa que 2052 corresponde con lenguaje chino. Esto mismo se puede consultar en las propiedades del recurso desde el propio CFF, que ya lo identificará como tal.

Propiedades de recurso
Como prueba final, el binario es subido a una sandbox online como la de ThreadExpert, que lo identifica con el mismo origen: China.


Por supuesto, estos datos también podrían haber sido modificados o incluso algo mucho más común, que no dispusiera de ningún recurso o el lenguaje fuera "0" que significa que se utilice el lenguaje local.


8 comments :

drijo dijo...

Me ha encantado la entrada de hoy! Es muy original y no tenía ni idea :)

Madrikeka dijo...

Para mi también ha sido muy buena entrada!
Gracias por la info!

fossie dijo...

Es decir, que finalmente no se puede asegurar que el bicho sea del país que dice ser a no ser que ponga el típico "made in china" :D

Pero aún así es interesante conocer la estructura del PE y saber donde (y como) se guardan esos datos.

Gracias.

Alejandro Ramos dijo...

Drijo, Madrikeka: gracias!

fossie: exacto, pero se tienen indicios. Incluso el Made in China, lo ha podido poner un polaco en Suecia utilizando un proxy koreano y con un sistema operativo que tenga lenguaje ruso.

A esto se le suele sumar la información que tienen las compañías antivirus de dónde se hacen más detecciones. 

Un saludo!

fossie dijo...

Si es que los creadores de bichos tienen la mente muy enrevesada pero es lo que indicas Alejando, finalmente las compañías antivirus supongo que podrán ir afinando su identificación en función de los países donde se ha ido detectando.

Gracias Alejandro, buen artículo!.

Larestinga dijo...

Creo que en realidad viene de la Restinga (isla del Hierro):

http://pc-novato.blogspot.com/2011/11/se-vende-piso-en-la-restringa-isla-del.html

Barbol_001 dijo...

gracias esta muy bueno, esperamos mas tutoriales de este tipo y temas gracias nuevamente.

Miguel Bernabeu dijo...

Y yo que me pregunto: Soy el único que se instala el SO donde desarrolla en Inglés EEUU y los comentarios, nombres de variables, etc. en inglés?

Menos la zona horaria, habitualmente lo tengo todo en inglés, así que creo que no siempre se puede uno fiar de ésos datos aunque no hubiesen sido alterados.



Alejandro Ramos  gracias por el comentario sobre las zonas de detección.