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.
No hay comentarios:
Publicar un comentario