Skip to content

Commit

Permalink
Adds malware analysis series part 3 draft
Browse files Browse the repository at this point in the history
  • Loading branch information
ander94lakx committed Sep 11, 2022
1 parent 161b46f commit f2469dd
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions content/blog/XXXX-XX-XX-malware-analysis-3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
title: "Análisis de malware (III): análisis estático: formato de un binario PE32, entropía e indicadores de técnicas de ofuscación"
date: 2022-09-18T22:30:00+02:00
tags: ["análisis de malware", "ransomware", "vm", "pe32", "metadatos"]
draft: true
---



# Estructura de un binario PE32

Una muestra de malware que venga como .exe se trata de un archivo binario. Hay muchos tipos de binarios. Los binarios que contienen código los solemos ver con extensiones como .exe, .dll, .so, etc. Algunos de estos binarios de código se pueden ejecutar por si mismos (como los que vienen con extension .exe), mientras que otros sob librerías compiladas para ser usadas por otros programas (como los .so de *nix o los .dll de Windows).

Aunque he mencionado extensiones, esto no indica el formato del binario en sí. Hay que entender que, un binario va a tener sus bits organizados de cierta manera para que el sistema operativo pueda entender el archivo y ejecutar su código. Los formatos más comunes son los PE (Portable Executable) de Windows, los ELF de sistemas Linux y similares y los Mach-O de macOS.

En este caso, como es una muestra para Windows, usa el formato PE. El formato en sí es complejo de entender y tienen muchos campos diferentes.

[![Formato PE](/static/images/malware-3-pe-format.png "Formato de un PE")](https://en.wikipedia.org/wiki/Portable_Executable#/media/File:Portable_Executable_32_bit_Structure_in_SVG_fixed.svg)

La imagen es un caos, pero no es necesario entenderla. La idea general con la que hay que quedarse es que un binario tiene una estructura y que se divide en diferentes secciones. Las primeras secciones suelen ser headers que definen el archivo y contienen información para poder interpretarlo. Después contienen la tabla de secciones, que indica que secciones tiene el binario y, por ultimo, las diferentes secciones en sí. Para los PE, las secciones principales suelen ser las siguientes:

- `.text`: el nombre confunde, ya que es la sección donde se encuentra el código en si. Este código es código máquina que se puede ejecutar.
- `.data`: esta sección contiene datos para el binario. Pueden ser de todo tipo y se pueden modificar en ejecución.
- `.rdata`: como la sección data, pero solo de lectura.
- `.idata`: aunque a veces se incluye dentro de `.data`, esta sección contiene la IAT (Import Address Table), que es básicamente la tabla de funciones que utiliza el binario. Las funciones que importa pueden dar pistas sobre las capacidades que tiene el binario
- En ficheros .dll suele ser común encontrar la sección `.edata`, que es la tabla de funciones que exporta esa librería para ser utilizadas por otros binarios.
- `.rsrc`: los diferentes recursos. Pueden ser audio, iconos, fuentes, etc. Si el programa hace uso de algún recurso que no obtiene desde fuera, es porque está aquí dentro. También puede dar pistas del comportamiento.

Lo esencial es que, de esa estructura se puede sacar información sobre el tipo de archivo que es y lo que es capaz de hacer, sin tener que entrar en el detalle de su código. Hay aplicaciones, como PEStudio, que leen esta estructura y muestran información que recogen de estos campos y analizan esa información, por lo que se suelen usar para realizar este tipo de análisis.

![Info Básica PE](/static/images/malware-3-pe-basic.png "Información básica del PE")

PEStudio en particular no solo recoge información sobre la estructura del binario, sino también hace búsqueda de strings o recoge metadatos, entre otros. No solo eso, sino que, depende de lo que encuentre en este tipo de información (metadatos, strings, secciones del binario, etc.) da una serie de indicadores que nos dan información sobre el binario.

![Secciones del binario en PEStudio](/static/images/malware-3-info-sections.png "Secciones del binario en PEStudio")

Aquí ya podemos ver que estructura tiene. En efecto, no solo es un binario PE32 sino que además tiene las típicas secciones (`.text`, `.data`, `.rdata`, `rsrc`). PEStudio es capaz de sacar mas información de la tabla de secciones, como la entropía o las diferentes propiedades. Esto puede aportar información sobre la muestra que se analiza.

Una de las cosas mas interesantes a la hora de analizar malware consiste en ver si esta ofuscado de alguna manera. El malware no deja de ser software, y un malware compilado no deja de ser un puñado de código maquina que se puede desensamblar y decompilar. Cuando alguien desarrolla malware con motivos maliciosos, suele buscar evadir las medidas defensivas para infectar a sus objetivos. Para ello, siempre que se desarrolla malware se busca implementar algún tipo de técnica de ofuscación para que los sistemas de defensa no sean capaces de detectarlo y para dificultar su análisis.

Detectar si tiene mecanismos de ofuscación y cuales son es importante como paso previo a analizar su código. Si esta ofuscado, el código puede no tener sentido y su análisis puede dificultarse bastante. Detectar esto antes permite tomar decisiones sobre como realizar otras técnicas de análisis.

Pero a lo que iba. En este caso PEStudio nos muestra cosas interesantes. La primera de todas, y la más interesante, el el hecho de que la sección de código (`.text`) es "self-modifying". ¿Esto qué significa? Significa que el código que hay en esa sección modifica información de la misma sección.

Esto en si ya es sospechoso. Los binarios tienen varias secciones precisamente para diferenciar entre lo que es código y lo que son datos. Para datos hay diferentes secciones para diferenciar entre lo que es solo de lectura y lo que es modificable. Lo habitual es que, un programa, ejecute su código y vaya accediendo a las zonas de memoria de datos para obtener información, no a su propia sección de código. Si accede a la parte de la memoria donde se aloja su mismo código, es porque pretende modificarlo. Gran parte de los mecanismos de ofuscación se basan en esto, sistemas de empaquetado que se ejecutan, desempaquetan el código y sustituyen el código por la parte real que se quiere ejecutar. Así, desde fuera, parece un programa inocuo pero, cuando se ejecuta, ejecuta nuevo código que originalmente no se veía en el binario.

En este punto esto es solo un indicativo.

# Metadatos

Los metadatos pueden dar información contextual interesante sobre el archivo. Digo pueden porque puede darse el caso de que hayan sido eliminados, sobrescritos por otro sistema o incluso deliberadamente modificados para dificultar el análisis. Aun así, siempre conviene analizarlos para ver si se encuentra información.








Binary file added static/static/images/malware-3-info-sections.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/static/images/malware-3-pe-basic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/static/images/malware-3-pe-format.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit f2469dd

Please sign in to comment.