Desafío 23 de ESET Latinoamérica: el ejecutable misterioso

Para continuar con los desafíos propuestos desde el Laboratorio de Investigación de ESET Latinoamérica, presentamos un nuevo reto relacionado con el análisis del comportamiento de algunos códigos maliciosos.

En este caso tenemos un ejecutable que emula parte del comportamiento de un código malicioso. Se trata de un archivo encontrado por los analistas de seguridad de una empresa en algunas de sus computadoras. Una vez que se ejecutaba el archivo, no pudieron determinar qué era lo que pasaba en la máquina afectada, a pesar de saber que efectivamente el archivo estaba intentando realizar alguna petición a la red.

El desafío consiste en determinar precisamente cuál es el comportamiento del ejecutable y que es lo que hace una vez que logra ejecutarse. Además hay que explicar porque los analistas de seguridad de la empresa no pudieron determinar cómo funcionaba esta aplicación. El archivo está comprimido en formato zip y la contraseña es desafio23.

Para solucionar el desafío se debe obtener información sobre:

  • Cómo funciona el ejecutable.
  • Qué está realizando en la máquina desde la cual se ejecuta (tener en cuenta que lo que se obtiene es algo comprensible).

Condiciones del concurso

La respuesta a este desafío debe brindarse a través de un comentario y consiste en describir cuál fue el hallazgo realizado con una explicación de cómo llegó a ella. El desafío está abierto para que pueda participar cualquier persona y la primera persona que conteste correctamente, y que no haya sido ganador de los últimos 5 desafíos publicados, se ganará una licencia válida por 1 año para la última versión de nuestra solución de seguridad integral: ESET Smart Security.

El jueves de la próxima semana, se publicará la solución con los pasos necesarios para resolver el desafío y el listado de aquellos que respondieron correctamente. Además en el transcurso de la semana estaremos actualizando este post con algunas pistas de que debería tenerse en cuenta para llegar a solucionar el desafío. Finalmente, recordamos que no brindaremos información adicional por redes sociales durante esta semana para darle tiempo a aquellos que están realmente intentando resolver el desafío.

¡Disfruten del desafío y éxitos!


Actualización 2 de Julio – Pista para resolver el Desafio.

Es importante para aquellos que estén tratando de resolver el desafío, utilizar una herramienta para monitorear el tráfico de red que genera el archivo al ser ejecutado. Luego de identificar que tipo de conexión trata de hacer, crear un servidor con una herramienta como XAMPP que permita simular la acción que está intentando realizar el ejecutable. Finalmente se debería encontrar un archivo cuyo contenido está cifrado, ¿podrías determinar como esta cifrado e identificar el contenido?

H. Camilo Gutiérrez Amaya
Especialista de Awareness & Research

Autor , ESET

  • Daniel García

    Muy buenas, ésta es mi solución:

    – El ejecutable trata de realizar una conexión a http://www.servidormalicioso.com

    – Como no puede resolver dicho nombre (motivo por el cual los analistas no pudieron determinar cómo funcionaba la aplicación), devuelve el error:

    Reason: [Errno 11001] getaddrinfo failed
    Key.txt not found

    – Tras ello, modificamos el fichero “hosts” de nuestra máquina para que pueda resolver de forma correcta el nombre, añadiendo la línea:

    127.0.0.1 http://www.servidormalicioso.com

    – Después de esto, vemos que el ejecutable trata de hacer una petición HTTP GET a “http://www.servidormalicioso.com/Key.txt”, pero como no existe tal fichero, nuestro servidor web devuelve un error 404.

    – Una vez creado “Key.txt” en la raíz, el ejecutable se ejecuta correctamente sin mostrarnos ningún mensaje ni error.

    – A la vez, podemos apreciar que en la carpeta donde está siendo ejecutado se nos ha creado un fichero llamado “Key.txt”, cuyo contenido se corresponde a códigos ASCII HTML.

    – Obteniendo la cadena en claro, vemos que se trata de un texto codificado en base64, que decodificado es:

    Muchos años después, frente al pelotón de fusilamiento, el coronel Aureliano Buendía había de recordar aquella tarde remota en que su padre lo llevó a conocer el hielo. Macondo era entonces una aldea de 20 casas de barro y cañabrava construidas a la orilla de un río de aguas diáfanas que se precipitaban por un lecho de piedras pulidas, blancas y enormes como huevos prehistóricos. El mundo era tan reciente, que muchas cosas carecían de nombre, y para mencionarlas había que señalarlas con el dedo

    – Por último, para asegurarnos que el ejecutable no realiza ninguna otra tarea, hice otro pequeño análisis, y tras ver referencias a Python, ví que se trataba de un script Python convertido a “exe” con la herramienta “pyinstaller”.

    – Después de buscar algo más de información, encontré que la misma herramienta (pyinstaller), contiene un útil llamado “ArchiveViewer.py”, con el cual pude extraer el código fuente completo del desafio:

    —– source —–

    import urllib2
    import urllib

    req = urllib2.Request(‘http://www.servidormalicioso.com/Key.txt’)
    msnd=0

    try:
    urllib2.urlopen(req)

    except urllib2.URLError, e:
    print ‘Reason: ‘, e.reason
    print “Key.txt not found”
    msnd=1

    if msnd!=1:

    itu=open(‘Key.txt’,’a’)
    itu.write(‘TXVjaG9zIGHxb3MgZGVzcHXpcywgZnJlbnRlIGFsIHBlbG90824gZGUgZnVzaWxhbWllbnRvLCBlbCBjb3JvbmVsIEF1cmVsaWFubyBCdWVuZO1hIGhhYu1hIGRlIHJlY29yZGFyIGFxdWVsbGEgdGFyZGUgcmVtb3RhIGVuIHF1ZSBzdSBwYWRyZSBsbyBsbGV28yBhIGNvbm9jZXIgZWwgaGllbG8uIE1hY29uZG8gZXJhIGVudG9uY2VzIHVuYSBhbGRlYSBkZSAyMCBjYXNhcyBkZSBiYXJybyB5IGNh8WFicmF2YSBjb25zdHJ1aWRhcyBhIGxhIG9yaWxsYSBkZSB1biBy7W8gZGUgYWd1YXMgZGnhZmFuYXMgcXVlIHNlIHByZWNpcGl0YWJhbiBwb3IgdW4gbGVjaG8gZGUgcGllZHJhcyBwdWxpZGFzLCBibGFuY2FzIHkgZW5vcm1lcyBjb21vIGh1ZXZvcyBwcmVoaXN083JpY29zLiBFbCBtdW5kbyBlcmEgdGFuIHJlY2llbnRlLCBxdWUgbXVjaGFzIGNvc2FzIGNhcmVj7WFuIGRlIG5vbWJyZSwgeSBwYXJhIG1lbmNpb25hcmxhcyBoYWLtYSBxdWUgc2XxYWxhcmxhcyBjb24gZWwgZGVkbw==’)
    itu.close()

    —– source —–

    Y esto ha sido todo. Un saludo,

    Daniel

  • Neo

    EL VIRUS BLOQUEA EL CMD… Y NO ME PERMITE VISUALIZARLO EN EL ADMINISTRADOR DE TAREAS. ESO ES BUENO? O MALO.
    UNA CONSULTA MÁS ESTE EXE NO NECESITA DESINFECTAR NO?

  • Jonathan B. V.

    * Cómo funciona el ejecutable

    Necesita que Python esté instalado en el equipo víctima. Una manera de darse cuenta es con las cadenas del archivo ejecutable como “PySys_SetObject”, “Error detected starting Python VM” y “PYTHONPATH=”

    * Qué está realizando en la máquina desde la cual se ejecuta (tener en cuenta que lo que se obtiene es algo comprensible)

    Intenta resolver el dominio “www.servidormalicioso.com” por el puerto 80. Se puede saber al monitorear el tráfico de red con un sniffer y resolviendo el dominio desde el archivo hosts del equipo infectado.
    La petición por método GET es para solicitar el archivo “Key.txt”. Lo anterior se puede observar en la conexión de red al brindarle el servicio web.

  • Cómo funciona el ejecutable.
    – El Ejecutable tiene asociados muchos archivos de cualquier extensión incluyendo ejecutables llevando a a ejecutar cosas que no se pretenden ejecutar.
    Qué está realizando en la máquina desde la cual se ejecuta (tener en cuenta que lo que se obtiene es algo comprensible).
    – Ocultar un archivo malicioso en un archivo cualquiera.
    – Crear varios Flujos de Datos alternativos por todo el sistema para ocupar espacio en el disco e accionar un ataque DOS.

  • Al observar el icono del ejecutable este nos dá una pista de que puede ser
    una aplicación hecha con python que después fué convertida en exe( Cosa que despúes confirmaremos ).

    Al ejecutar el fichero Desafio23.exe y analizarlo con SysAnalizer vemos que el ejecutable intenta establecer
    conexión con:

    http://www.servidormalicioso.com
    http://www.servidormalicioso.com.localdomain

    Además al observar los ficheros que crea el ejecutable durante su ejecución vemos que es una aplicación
    elaborada en Python 2.7 y convertida a exe con alguna herramienta como py2exe o similares.

    bz2.pyd
    Desafio23.exe.manifest
    Microsoft.VC90.CRT.manifest
    msvcm90.dll
    msvcp90.dll
    msvcr90.dll
    python27.dll
    select.pyd
    unicodedata.pyd
    _hashlib.pyd
    _socket.pyd
    _ssl.pyd

    Cuando el ejecutable puede establecer la conexión con el servidor en el puerto 80 (HTTP) intenta obtener el archivo Key.txt:

    GET /Key.txt HTTP/1.1
    Accept-Encoding: identity
    Host: http://www.servidormalicioso.com
    Connection: close
    User-Agent: Python-urllib/2.7

    Tal vez la razón por la cual los analistas de seguridad de la empresa no pudieron determinar lo que hacía el ejecutable es porque nunca se
    resolvian las direcciones de:
    http://www.servidormalicioso.com
    http://www.servidormalicioso.com.localdomain
    Y no se establecia la conexión.

    Para ver que ocurre si el programa obtiene el fichero, podemos hacerle creer que el fichero existe, de la siguiente manera:

    Cambiando las entradas en el fichero %windir%sYSTEM32driversetchosts agregando http://www.servidormalicioso.com.
    para después responder a la petición del archivo Key.txt, por ejemplo:
    127.0.0.1 http://www.servidormalicioso.com
    Y responder a la petición HTTP con herramientas como nc(escuchando en el puerto 80), o creando el fichero Key.txt con cualquier contenido
    en la raiz de nuestro servidor web.

    Una vez que el programa Desafio23.exe puede obtener el fichero Key.txt desde el servidor, crea el fichero Key.txt en el mismo directorio donde fué ejecutado.
    Podemos renombrar el fichero Key.txt agregando la extensión .html para ver su contenido desde un navegador

    Obtenemos una cadena de texto que parece estar codificada en base64 que queda de la siguiente manera al decodificarla:

    Muchos años después, frente al pelotón de fusilamiento, el coronel Aureliano Buendía había de recordar aquella tarde remota en que su padre lo llevó a conocer el hielo. Macondo era entonces una aldea de 20 casas de barro y cañabrava construidas a la orilla de un río de aguas diáfanas que se precipitaban por un lecho de piedras pulidas, blancas y enormes como huevos prehistóricos. El mundo era tan reciente, que muchas cosas carecían de nombre, y para mencionarlas había que señalarlas con el dedo

  • Daniel

    Hola amigos, pues bueno llevo varias horas intentando sacar este desafio y bueno el archivo no consigue ejecutarse y realizar los cambios en una maquina virtual por eso tal ves no lo consiguieran analizar, entonces saque mi viejo disco duro de 20 gb que uso para estas pruebas y lo infecte con ese archivo y utilizando varias herramientas tales como varias de sysinternals Suite, Rite25, SysAnalizer (de indetectables.net) wireshark y alguna otra mas he conseguido sacar esta información:

    Durante el proceso de infección va modificando o creando lo siguiente:
    – msvcr90.dll
    – unicodedata.pyd
    – socket.pyd
    – bz2.pyd
    – msvcm90.dll
    – select.pyd
    – python27.dll
    – _ssl.pyd
    – hashlib.pyd

    Se crean el el directorio TEMP del usuario en el que se ejecuto el archivo.

    Modifica estas claves del registro:
    HKEY_LOCAL_MACHINESoftwarePythonPythonCore2.7PythonPath
    HKEY_CURRENT_USERSoftwarePythonPythonCore2.7PythonPath
    SOFTWAREMicrosoftCryptographyProvidersType 001
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyDefaultsProvider TypesType 001
    HKEY_LOCAL_MACHINESOFTWAREMicrosoftCryptographyDefaultsProviderMicrosoft Strong Cryptographic Provider
    HKEY_LOCAL_MACHINESoftwareMicrosoftCryptography
    HKEY_LOCAL_MACHINESoftwareMicrosoftCryptographyOffload
    HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings

    Y apunta a esta url:
    http://www.servidormalicioso.com

    Espero no haberme dejado nada atrás un saludo amigos y espero respuestas!!!!

  • Agustín

    Por lo que veo yo en la captura de paquetes, el programa se conecta a su servidor de destino, manda un broadcast a la red para ver que equipos estan levantados, consigue el nombre de la red y se fija si las maquinas levantadas tienen algún servicio corriendo para indicar en su respuesta a “www.servidormalicioso.com” los nombres de los equipos, que servicios utilizan y que sistema operativo poseen…

    Por otro lado, no se dieron cuenta porque no deja registro en el sistema, le pase el installrite y no se guarda en run ni en ninguna otra parte, se ejecuta una vez y punto, sin efectuar cambios en el equipo.

    Saludos.

  • Santi

    La frase de Gabriel Garcia Márquez le da un toque humano al desafío :P

    “Muchos años después, frente al pelotón de fusilamiento, el coronel Aureliano Buendía había de recordar aquella tarde remota en que su padre lo llevó a conocer el hielo. Macondo era entonces una aldea de 20 casas de barro y cañabrava construidas a la orilla de un río de aguas diáfanas que se precipitaban por un lecho de piedras pulidas, blancas y enormes como huevos prehistóricos. El mundo era tan reciente, que muchas cosas carecían de nombre, y para mencionarlas había que señalarlas con el dedo.”

  • A ver, no tuve tiempo de volver a tratar de resolverlo hasta recien, pero ahí va la respuesta:

    Como dijeron más arriba, levanta el archivo Key.txt del servidormalicioso y su contenido (CON EL CUAL NO HACE NADA.), hasta ahí todo bien, use el procmon para ver que hacia por atrás y descubrí que generaba un key.txt en la carpeta del usuario, ese key.txt tenia encodeado en HTML un código que, luego de desencodearlo, me di cuenta que era otro código en base64… Una vez hecho esto, desencodee el codigo en base64 y me apareció esto:

    Muchos aos despus, frente al pelotn de fusilamiento, el coronel Aureliano Buenda haba de recordar aquella tarde remota en que su padre lo llev a conocer el hielo. Macondo era entonces una aldea de 20 casas de barro y caabrava construidas a la orilla de un ro de aguas difanas que se precipitaban por un lecho de piedras pulidas, blancas y enormes como huevos prehistricos. El mundo era tan reciente, que muchas cosas carecan de nombre, y para mencionarlas haba que sealarlas con el dedo

    Obviamente, como verán, no aparecen las tildes porque use una página en inglés, pero bueno jajaja.

    En fin, saludos

Síguenos