Desafío ESET #30: ¿Se animan a usar Ingeniería Reversa?

En esta oportunidad vengo a traerles un nuevo Desafío ESET. Es el primero que hacemos relacionado a Ingeniería Reversa de un caso real, por lo que estoy ansioso por ver cómo atacan el problema.

La consigna es muy sencilla: deben descargar este archivo, el cual es un archivo de base de datos de IDA que contiene el análisis y desensamblado de un archivo ejecutable. Luego, lo único que deben hacer es responder a la siguiente pregunta en la sección de comentarios, detallando el procedimiento seguido para llegar a la respuesta:

  • ¿A qué URLs intenta conectarse este archivo ejecutable?

Y considerando esta novedad en la consigna del Desafío, es que también decidimos hacer un ajuste en el premio: el primero en responder correctamente ganará un libro de seguridad informática que se enviará a través de Amazon al domicilio que nos indiquen, con todos los gastos de envío cubiertos por ESET Latinoamérica. No, no le vamos a enviar un cheque con el equivalente en dólares. Tampoco bitcoins, pero buen intento.

Para poder resolver el desafío necesitan tener instalada alguna versión licenciada de IDA, o utilizar la versión Freeware, que es gratuita y pueden descargar desde el sitio oficial. No podrán utilizar la versión de evaluación de IDA, ya que no permite abrir la base de datos de nuestro desafío.

Dado que este es un poco distinto a los que veníamos ofreciendo, esta vez cualquiera puede participar y ser declarado ganador, independientemente de si ya ha sido ganador de algún otro desafío. Además, quien primero responda las siguientes preguntas de forma correcta (y creativa) ganará una licencia de la última versión de la más completa solución de seguridad, ESET Smart Security:

  • ¿Por qué crees que el archivo de IDA se llama calc.idb? ¿Por qué IDA nos dice que la base de datos está corrupta?
  • ¿Qué hace el ejecutable? ¿Es malicioso o no?

Tienen dos semanas para resolver el reto, pero tengan en cuenta que los comentarios con la solución correcta (o partes de ella) no serán publicados hasta que se termine el plazo, para no desalentar a los que todavía no lo han resuelto.

Estén atentos a los comentarios, ya que allí estaré respondiendo a sus inquietudes y ofreciendo valiosas pistas, si es necesario. Pueden comentar lo que deseen, incluso también ofrecer pistas (reales o falsas) para el resto de los participantes. Si nadie resuelve el reto, los premios quedan para mí. Aún así, prometo que mis pistas serán todas verdaderas.

¡Happy reversing y a divertirse!

SHA-1 del archivo
e5d00eaae36849070e0c94378eebe096df70dbff– calc.idb

Autor , ESET

  • Dario Ale

    Buenas a todos! Hasta ahora tengo muchas ideas pero nada me cierra, es muy pronto, no comprendo la mayoría del código y nunca usé IDA, mhhh a ver qué sale de todo esto ¿?

    • proli

      Hola Dario! Quizás puedas localizar la parte interesante del código y llevarla a otra herramienta con la que te sientas más comodo.

      • cesar

        Creo que vi algo de foro o url open.net, igual falta, tambien veo que apunta a calc.exe y la ruta C:Documents and SettingsSteveDesktop

  • Daniel Correa

    Hola, el archivo ejecutable contiene las siguientes cadenas cifradas:

    004099B8154884AD: roaming
    5AAC24D57296C9042F: Desk.exe
    174DF72EADD13324DD60E15687DA70EF669532A228B5658DCB1BBEA93C9D4D3EE161D47FDC054282DE073C58F55CCE78DC799F35AA5FF367EF5FA1F91E0B3796CD001FB212468CB826A1E80229DE0EB0200B4A8EB3: http://www.adelantemeninas.com.br/includes/js/jscalendar-3.2/flex/documen/Qft_x_.png
    D82FA2548C8B8BB669FB: Desk1.exe
    A1389A4D8EFE1C0DC61DB059FD558EDC77A8365180CA7BB3144F4CE866EC1039E96F904542ED53B723D50F0D4486B167ED2422B71130AE11402CA22DA0: http://saintfiacre.groupe-antilopes.fr/css/fonts/Cliente.exe

    Los dominios a los cuales intenta conectarse a través del uso de InternetOpenUrlA son:
    http://www.adelantemeninas.com.br y saintfiacre.groupe-antilopes.fr

    Mi procedimiento fue reconstruir el binario a partir del archivo IDB, con lo cual pude depurar parte de la funcionalidad del archivo ejecutable original.

    El archivo es sin duda alguna malicioso debido a su comportamiento (descarga y ejecución de archivos en Internet, uso de cadenas cifradas, uso de funciones comunes encontradas en Malware).

  • Ulises U. Cuñé

    ¿Por qué crees que el archivo de IDA se llama calc.idb? ¿Por qué IDA nos dice que la base de datos está corrupta? Se llama calc.idb porque es el formato en que lo guarda IDA cuando se analiza un archivo, es la base de datos del archivo analizado por IDA, en este caso, calc.exe.

    ¿Qué hace el ejecutable? ¿Es malicioso o no? El archivo es la calculadora de Windows. No es malicioso.

    Al abrirlo con IDA, en el header informaba el MD5, lo busque en virustotal por el MD5

    829E4805B0E12B383EE09ABDC9E2DC3C y bueno, aca esta el resultado, no es malicioso y es la calculadora de Windows.

    https://www.virustotal.com/es/file/37121ecb7c1e112b735bd21b0dfe3e526352ecb98c434c5f40e6a2a582380cdd/analysis/

    El archivo original, calc.exe al momento de analizarlo estaba en C:Documents and SettingsSteveDesktop y el usuario Steve es quien analizo el archivo por IDA y debe haber sido en Windows XP por el “Documents and Settings”

  • hola,

    al menos una de las urls donde el cebo pretende conectar creo que es:

    http://www.adelantemeninas.com.br/includes/js/jscalendar-3.2/flex/documen/Qft_x_.png

    Y creo que de aquí pretende descargar un ejecutable que copiará a un subdirectorio en %PROGRAMDATA% con nombre desk.exe.

    Para llegar a esto lo que he me hecho ha sido volcar a partir del idc los contenidos de las secciones CODE, DATA, BSS e idata. Después me he preparado un pequeño loader en C que ha cargado cada sección en sus correspondientes posiciones para poder depurar. El loader llama a DllEntryPoint para que inicialize objetos y demás. Antes de finalizar el DllEntryPoint fuerzo a que la ejecución salte a 0x44E9D4 (a esta función he llegado mediante análisis estático al ver que manejaba cadenas hexadecimales y tenía toda la pinta de que su intención era descifrarlas). Osea que la función parecía sospechosa.

    Depurando en 0x44E9D4 es donde he visto que descifra esas cadenas, da con la url que he puesto arriba, y llama a InternetOpenA e InternetOpenUrlA pasando dicha url.

    Sigo depurando intentando encontrar otras posibles URLs.

    Sobre el IDA, los metadatos que contiene parece que se refieren a una calc.exe de windows (el md5 es el de una calc.exe normal), pero el contenido de las secciones es otro. Ha podido ser trucado y debido a eso dice que está corrupta.

  • Carlos Zeledón

    ¿A que URLs Intenta conectarse?

    El ejecutable no intenta conectarse a ningún URL

    ¿Por qué crees que el archivo de IDA se llama calc.idb? ¿Por qué IDA nos dice que la base de datos está corrupta?

    El Archivo se llama calc.idb por que es un proyecto de desensamblado de IDA el cual trabaja con las extenciones “.idb”, IDA nos dice que es corrupto por que el archivo fue generado en otro ordenador y no tiene referencia sobre un ejecutable dentro de la dirección del archivo .exe.

    ¿Qué hace el ejecutable? ¿Es malicioso o no?

    El archivo es la calculadora de Windows XP de acuerdo a su entrada MD5 y análisis de virus
    “Input MD5 : 829E4805B0E12B383EE09ABDC9E2DC3C”, y no es malicioso por que no realiza nada malo en nuestro ordenador.

    • proli

      Hola Carlos!
      La respuesta de por qué la base de datos de IDA está corrupta no es correcta, porque ello significaría que los archivos idb no son portables, y justamente esa es la idea de tener un archivo idb: poder compartirlo con otros analistas sin necesidad de enviar archivos potencialmente peligrosos. Que un archivo esté corrupto significa que sus bytes se han alterado.
      ¿Puedes identificar la parte (o partes) del archivo que se alteraron o dañaron?

      • Carlos Zeledón

        Según en archivo del desensamblado IDA del desafió hay código que no es normal verlo en el desensamblado normal de la calculadora original de windows xp. al final del código el ejecutable interactua con varias librerías del sistema como son: kernel32.dll, gdi32.dll, shell32.dll, comctl32.dll y wininet.dll esta ultima librería es la que se encarga de crear conexiones a Internet y según el código de ensamble inicia una conexión a Internet y esto no es normal en el código original de la calculadora de windows.

        psd: adjunto parte del código en una imagen.

  • Hola,

    en el otro comentario que dejé no contesté a la pregunta si es malicioso. El cebo parece tener comportamiento de downloader: intenta descargar un .exe desde una URL para guardarlo en una subcarpeta en %PROGRAMDATA%. Además la url parece que fuera de una imagen, aunque realmente parece que quiere descargar un exe.

    Así que en mi opinión sí es malware.

  • Parece que el bicho tiene un error al descargar desk.exe y crear el path lo compone así:

    C:Documents and SettingsAdministradorDatos de programaDesk.exe

    No mete barra tras “Datos de Programa”.

    Después de descargar desk.exe intenta ejecutarlo con ShellExecuteA.

    Ahora le veo acceder a otra url para descargar desk1.exe. Con la nueva ya tenemos dos:

    http://saintfiacre.groupe-antilopes.fr/css/fonts/Cliente.exe
    http://www.adelantemeninas.com.br/includes/js/jscalendar-3.2/flex/documen/Qft_x_.png

    Hace el mismo proceso, descargar ejecutable y lanzarlo con ShellExecute.

  • Dario Ale

    Buen día, gracias Proli por el consejo.

    Coincido contigo respecto de que IDA dice que está corrupto porque el PE ha perdido su integridad, se puede observar que junto algunos cierres de procedimientos (ENDP) está instanciado un índice de pila SP negativo, este debería de usarse junto con SS para poder establecer la dirección del último elemento introducido en la pila, por lo que intuyo que quizás sea algo de esto el problema. Falta código me parece o se ha modificado, no sé si IDA calcula el hash de calc.exe y lo compara con alguna BD de hashes.

    Entiendo que IDA agregue en azul un encabezado y el hash coincida con calc.exe de Windows, pero que pertenezca a Windows no quiere decir que no sea malicioso, podría haber sido infectado y su código modificado, por lo que el hash nuevo calculado sería diferente del original, por eso quizás IDA dice que está corrupto.

    Se llama calc.idb para poder ser portado de un analizador a otro sin inconvenientes, y es la extensión original de los archivos BD IDA.

    No puedo decir concretamente que es malicioso, pero me llama la atención que calc.exe importe librerías de Windows como wininet.dll que contienen procedimientos como InternetOpenUrlA. Funciones de Internet en calc.exe?, me suena raro, si algún virus (virus como un tipo de malware que puede infectar un archivos, sabemos que el virus requiere de un archivo para poder vivir y poder reaplicarse) realizó una intrusión podría también explicar porque IDA dá error y dice que está corrupto.

    Luego, hay un procedimiento sub_44E7C0 que pareciera establecer una conexión con un Proxy, parte del comportamiento del malware podría ser que realiza un hook a alguna función de navegación y proxea todos los accesos HTTP, o accede a una lista de páginas guardadas en un archivo para o bien bajarse más malware o no sé =), todavía no lo he definido. Quizás ese archivo contenga url de bancos y lo que esté haciendo sea monitoreando el acceso para robar credenciales, ese procedimiento tiene un SP = -44h. Son muchas las posibilidades, podría ser un generador de visitas, o sino un bot que recibe órdenes y una funciones de Proxy para realizar DDoS de sitios web.

    Muchas preguntas pocas respuestas, pero creo que me estoy encamiando, espero me alcance los días que restan =)

    Saludos!

    • proli

      ¡Buenos días Dario!
      Me ha parecido muy interesante tu análisis; de hecho, este tipo de preguntas nos hacemos en el Laboratorio cuando empezamos a estudiar una amenaza. Vas por buen camino, y te recomiendo que, sabiendo que la aplicación analizada tiene funciones de wininet.dll, trates de responder la pregunta de las URLs. Busca las rutinas que se utilizan de wininet.dll que descargan algo de una URL y trata de encontrarlas en el código.

      ¡Saludos!

  • Dario Ale

    Hola a todos de nuevo!

    Qué poco que queda y no he decodificado las URLs! =)

    Pero voy a dar mi opinión por lo que he estado analizando, revisé bastante el código (hacía mucho que no leía ensamblador) y no encontré rutinas de calculadora, por lo que me lleva a pensar que no es la calculadora de Windows infectada por un virus, me parece que el código es complejo y extenso, observé rutinas que a mi entender principiante son de captura de pantalla, teclado, posicionamiento de mouse, etc., de hecho hay un par de rutinas de timer al igual que las de posición de mouse que intuyo es ofuscación de AV o entornos de Sanbox (no las revisé).

    Pego una captura de pantalla de lo que a mi entender es el código que se baja un archivo de Internet llamando a InternetOpenUrlA con los parámetros de sesión establecida más arriba (hInternet), encabezados y flags (dwFlags, lpszHeaders), URL (lpszUrl), lo guarda en la zona de datos ds:hfile, luego lo lee en call InternetReadFile, hay un bucle test ebx, ebx, lo almacena?, y cuando termina lo saca de memoria? (pop edx, ecx), luego cierra la conexión InternetCloseHandle.

    Este análisis no se si está del todo bien, pero es lo que comprendí, más allá de eso no logré unir estas rutinas al ShellExecuteA (0044EB6C) entonces me arriesgo a decir que leyó un archivo de configuración ¿? mhhh ya perdí los premios jaja

    Hace un tiempo en la certificación CEH por USiglo21 y Deloitte ví código similar en Zeus y Conficker, estoy muy errado? Me fuí por cualquier lado?

    Sea lo que sea, es la mejor parte del análisis de malware, o al menos la que más me gusto =).

    Saludos!

    • proli

      ¡Hola Dario!

      Es interesante ver cómo vas avanzando =)
      En tu imagen apenas se alcanza a ver, pero InternetOpeUrlA es la rutina de la API de Windows que intenta establecer una conexión con una URL. Por lo tanto, uno de sus argumentos debe ser una cadena con la URL. Deberías tratar de determinar cuál es ese argumento (psst, MSDN! ;p) y ver qué valor tiene.

      Es importante tener en mente que si se le pasa la URL en una variable (cuyo valor no podemos determinar mediante análisis estático), podríamos sospechar que quizás la cadena con la URL venga de otra función que llama a la función donde estamos parados. Si eso es cierto, entonces te recomiendo que busques las cross references.

      Luego de que encuentres lo que buscabas, te sugiero que le des una leída rápida a mis últimos posts de strings =)

      Y, de paso, te recomiendo que uses el modo gráfico para seguir el flujo de ejecución de manera más visual.

      ¡Saludos!

  • Dario Ale

    Hola Proli, buen día!

    Seguí tus consejos, la rutina sub_44E7C0 recibe parámetros por lo que he leído:

    CODE:0044E7C0 sub_44E7C0 proc near ; CODE XREF: sub_44E9D4+9Fp
    CODE:0044E7C0 ; sub_44E9D4+136p
    CODE:0044E7C0
    CODE:0044E7C0 var_18 = dword ptr -18h
    CODE:0044E7C0 var_14 = dword ptr -14h
    CODE:0044E7C0 var_10 = dword ptr -10h
    CODE:0044E7C0 var_8 = dword ptr -8
    CODE:0044E7C0 var_4 = dword ptr -4

    Hice el jump a xref para poder ver quién la llamaba, encontré 2 sub-rutinas, imagino que el loc_ es por local y ese string debe de ser la URL codificada:

    CODE:0044EAE6 loc_44EAE6: ; CODE XREF: sub_44E9D4+CBj
    ……
    CODE:0044EAFA mov eax, offset aA1389a4d8efe1c ; “A1389A4D8EFE1C0DC61DB059FD558EDC77A8365″…
    CODE:0044EAFF call sub_44E5A0
    CODE:0044EB04 mov eax, [ebp+var_2C]
    CODE:0044EB07 xor edx, edx
    CODE:0044EB09 pop ecx
    CODE:0044EB0A call sub_44E7C0
    CODE:0044EB0F mov eax, offset aA1389a4d8efe1c ; “A1389A4D8EFE1C0DC61DB059FD558EDC77A8365″…
    CODE:0044EB14 lea edx, [ebp+var_34]
    …….

    y

    CODE:0044E9DD loc_44E9DD: ; CODE XREF: sub_44E9D4+Ej
    …….
    CODE:0044EA6D mov eax, [ebp+var_14]
    CODE:0044EA70 xor edx, edx
    CODE:0044EA72 pop ecx
    CODE:0044EA73 call sub_44E7C0
    CODE:0044EA78 mov eax, offset a174df72eadd133 ; “174DF72EADD13324DD60E15687DA70EF669532A”…
    CODE:0044EA7D lea edx, [ebp+var_1C]

    Observe el patrón que describís en los otros post que se repite lo que indicaría el descifrado de la URL, voy a intentar hoy de seguir este post http://www.welivesecurity.com/la-es/2014/07/31/luchando-contra-strings-cifradas/ a ver si este string es la URL y puedo decodificarla.

    Gracias!
    …….

  • Daniel Correa

    Parte del procedimiento de formas más detallada:

    1. Abrir el IDB en IDA
    2. Localizar las cadenas usadas por el software, entre ellas se pueden identificar unas cadenas hexadecimales de las cuales sospeche que son usadas por el malware
    3. Identificar la función que descifra las cadenas: sub_44E5A0
    4. Identificar la función que se encarga de abrir las URIs: sub_44E7C0
    5. Entenderel funcionamiento de la función que descifra las cadenas y reconstruirla en lenguaje C, en este paso ahora es posible automatizar el descifrado de datos (se extrae el bloque longitud cadena cifrada + cadena cifrada del hex view de IDA)
    6. Descifrar las cadenas que son pasadas como parámetro a la función sub_44E7C0

    El algoritmo de descifrado está mejor detallado y entendible en la solución oficial.

Síguenos

Últimos Cursos