Análisis de Archivos y Seguridad en Binarios

Relacionado: 12 Introduccion a la Criptografiaseguridad. Forense de memoria de sistema completo. Rootkits y Hooking. VirusTotal. Immunity debugger y Ghidra.

1. Análisis de la Estructura de un Archivo

  • Binwalk: Permite analizar la estructura de un archivo binario.

  • Extracción de datos con dd y gunzip:

    dd if=main.cvd bs=1 skip=512 count=100 | gunzip

    Esto extrae 100 bytes del archivo main.cvd, comenzando desde el byte 512, y los descomprime.

  • Uso de du para mostrar tamaño de archivos ordenados:

    du -sh | sort -h

    Muestra el tamaño de los archivos y los ordena de menor a mayor.

El tamaño de la muestra es un factor importante en el análisis.

  • Para extraer strings utilizamos rabin2 -z

    rabin2 -z archivo.bin
  • Decodificación en Base64 con Rabin2:

    RABIN2_DEBASE64=1 rabin2 --zz &


2. Extracción de Cadenas y Análisis de Texto en Binarios

  • Evitar problemas con binarios al usar grep:

    grep -aEo "patrón" archivo
    • La opción -a evita problemas al buscar en archivos binarios.
    • -r permite buscar en todos los archivos dentro de una carpeta.
    • grep busca byte por byte, lo que puede generar problemas con UTF-16 si no se usa correctamente.

  • Metadatos de imágenes (ExifTool):

    exiftool imagen.png
    • Extrae metadatos de archivos .png, .jpg, .mp3, entre otros.

3. Análisis de Entropía y Esteganografía

  • Entropía en archivos:
    • Si la entropía cambia dentro de un archivo, significa que tiene dos partes diferenciadas.
    • Una alta entropía sugiere que el contenido está cifrado o comprimido.
    • Es importante revisar si la entropía es natural.

Los archivos JPEG son imágenes comprimidas, por lo que suelen tener alta entropía, al igual que otros archivos comprimidos.

  • Esteganografía:
    • Se trata de ocultar información dentro de otro contenido sin ser detectado.
    • Rabin2 puede encontrar información oculta en Base64.
    • FLOSS solo analiza archivos PE.
    • UPX es un compresor de ejecutables PE que facilita su distribución.
    • FLOSS busca strings en distintas codificaciones.

4. Análisis de Malware y Clasificación

  • WannaCry (wnarypt0r):

    • Tiene una lista de archivos que cifra automáticamente.
    • WannaCrypt es el algoritmo de cifrado que utiliza el ransomware.
  • Políglotas (Polyglots):

    • Un polígloto es un archivo que se comporta de manera diferente dependiendo del software que lo interprete.
    • Ejemplo: Un archivo con cabecera HTML puede abrirse como una imagen en un visor gráfico, ignorando la cabecera HTML.
  • DNS Esteganografía:

    • Se pueden ocultar datos dentro de paquetes DNS para exfiltrar información.

5. Documentación y Clasificación

  • Registro de hallazgos en un README:

    • Se documenta el análisis de la muestra para referencia futura.
  • Codificación en Base64:

    • Base64 convierte datos de 8 bits a 6 bits, lo que disminuye su tamaño.
  • Clasificación de archivos con ssdeep:

    ssdeep archivo
    • Extrae el tamaño del archivo y su hash fuzzy para comparaciones.
  • PowerShell y ps1:

    • Un .ps1 puede contener una DLL dentro de una variable, permitiendo la ejecución sin necesidad de escribir un archivo DLL en disco.

YARA: Reglas y Uso en Análisis de Binarios

YARA es una herramienta diseñada para la identificación y categorización de archivos basándose en patrones y firmas. Se usa comúnmente en la detección de malware, análisis forense y clasificación de archivos binarios.

Uso básico de YARA

Para ejecutar YARA con una regla específica sobre un archivo, se usa el siguiente comando:

yara rule.yar archivo

Donde rule.yar es el archivo que contiene la regla YARA y archivo es el archivo a analizar.


1. Definición de Números Mágicos

  • Números mágicos son valores específicos dentro de un archivo que identifican su formato.
  • En YARA, se pueden definir patrones de números mágicos para reconocer diferentes tipos de archivos.
    • Ejemplo: 4D 5A (en hexadecimal) es la firma de los ejecutables PE en Windows.
    • Esto indica que el archivo tiene tanto parte binaria como textual.

Ejemplo de regla YARA para detectar archivos PE:

rule DetectPE {
    strings:
        $mz = { 4D 5A }  // Firma PE (MZ)
    condition:
        $mz at 0
}

Esta regla detectará cualquier archivo que contenga 4D 5A en los primeros bytes.


2. Endianness en YARA

  • YARA reconoce estructuras en Big Endian y Little Endian.

  • Ejemplo: 5A 4D en Little Endian significa que el archivo es PE porque en C los datos se almacenan en este orden.

  • Se puede especificar en YARA que el valor debe estar al principio con:

    uint16(0) == 0x5A4D

    Esto verifica que el archivo comienza con la firma MZ, asegurando que es un ejecutable PE.


3. Detección de Cifrado XOR en YARA

  • YARA puede detectar patrones en archivos cifrados con XOR.
  • El cifrado XOR es usado en malware para ocultar cadenas y evitar detección.

Ejemplo de regla para detectar datos en XOR:

rule XOR_Encoded {
    strings:
        $xor_pattern = "playgame" xor
    condition:
        $xor_pattern
}

Esto detecta la palabra playgame aunque haya sido cifrada con una operación XOR.


4. Uso de Base64 en YARA

  • Para detectar una cadena en Base64, se puede definir una variable con la representación codificada.

  • En PowerShell, una variable puede contener una cadena en Base64 como:

    $text = "playgame"
  • En YARA, se puede buscar directamente una representación en Base64:

    rule DetectBase64 {
      strings:
          $encoded = "cGxheWdhbWU=" base64  // "playgame" en Base64
      condition:
          $encoded
    }

5. Uso de Operadores en YARA

  • En YARA, el símbolo # indica cardinalidad, es decir, cuántas veces aparece un patrón.
  • Se puede combinar con uint16(0) == para verificar ubicaciones específicas.
  • entry_point en un PE define el punto de inicio real del código ejecutable.

Ejemplo de regla que detecta ejecutables PE con una entrada específica:

rule PE_EntryPoint {
    condition:
        uint16(0) == 0x5A4D and entry_point < filesize
}

Esto verifica que el archivo tiene la firma MZ y que el entry_point está dentro del tamaño válido del archivo.


6. Comandos Útiles en Análisis con YARA

  • Visualizar el contenido de un archivo en vi (Linux):

    vi archivo

    Permite inspeccionar manualmente un archivo sospechoso.

  • Eliminar las dos últimas líneas de un archivo de texto:

    head -n -2 texto > text.ps1

    Guarda el archivo sin las dos últimas líneas.


Conclusión

YARA es una herramienta poderosa para la detección de malware y la clasificación de archivos binarios. Con reglas bien diseñadas, se pueden detectar patrones específicos en archivos ejecutables, analizar cifrados XOR, identificar estructuras en Base64 y verificar entradas de código en PE.

Si necesitas más ejemplos o adaptación a un caso específico, dime y lo detallamos más.