El 26 de febrero publicamos el Desafío ESET #44 en el cual para descubrir la flag, había que analizar un código malicioso y descubrir qué intenta distribuir la amenaza. Además, presentamos a los ganadores del desafío, que fueron los tres primeros que publicaron la flag correcta junto con la explicación en la sección comentarios, los cuales ahora están públicos.
Los ganadores obtienen una licencia para ESET Mobile Security para Android y el primero en resolverlo obtiene además la posibilidad de realizar uno de los cursos disponibles en nuestra plataforma Academia ESET.
Ganadores:
1 - @rextco
2 – Lucho
3 - Anthony López Tinoco
Los tres ganadores deberán comunicarse por mensaje privado a través de alguna de nuestras redes sociales, como Facebook, Twitter o Instagram, indicando su nombre y dirección de correo para que podamos hacer entrega del premio. Desde ya, agradecemos a todos los que participaron y esperamos hayan disfrutado intentando resolverlo.
Solución al desafío #44
El desafío comienza con la descarga y descompresión del archivo “antibugs-v2.0.zip”:
Antes de correr el archivo, lo primero que hacemos es un análisis estático. Para ello utilizamos la herramienta PE-Bear.
Como se puede ver en el recuadro rojo donde dice “Sections”, tenemos las strings UPX0 y UPX1, que nos dan el indicio de que el archivo ha sido empaquetado con el compresor UPX. Por lo tanto, nuestro próximo paso va a ser desempaquetar este archivo.
Ahora que tenemos el archivo desempaquetado, una buena práctica es revisar las strings antes de ejecutarlo para ver de esta manera si podemos obtener algún tipo de información importante. Para ello, utilizaremos la herramienta pestudio.
En las strings podemos ver palabras como “PyInstaller”, “PySys”,”PyModule”, entre otras. Esto nos da la pauta de que el malware fue desarrollado en Python, y como ya se ha visto en el siguiente post sobre cómo descompilar .exe malicioso escrito en Python, es posible decompilarlo y obtener su código fuente.
Analizando el código de este malware podemos ver código ofuscado, métodos y variables que no utiliza, pero hay algo interesante en la función “sMf9f9e530”, la cual posee un método llamado “infect_anyway” que contiene el método “get_the_payload” (Este método puede encontrarse en otras funciones).
Parece ser que el payload generado en esa función es lo que está tratando de distribuir, entonces, ¿qué contiene ese payload?
A partir de este punto en adelante, hay dos formas de seguir:
- Poner un print en el código malicioso y ejecutarlo para mostrar el contenido del payload.
- Extraer toda la lógica que es utilizada por ese método, ponerla en un nuevo archivo y ejecutarlo.
Optaremos por la opción 1. Vamos a poner un print luego de la generación de ese payload y luego ejecutamos el archivo, con el cual se nos va a imprimir el payload por pantalla.
FLAG: w3_L1v3_secUriTy_{pytH0n_ch$Lleng3}
Solo a modo informativo, para aquellos que tengan curiosidad, se utilizó el algoritmo RC4 para el cifrado de la FLAG.
Gracias por participar y los esperamos para el próximo desafío.