0Pricing
Cyber Security Academy · Lección

Threat hunting con cadenas y hexadecimal

Encuentre artefactos de malware.

Threat hunting con cadenas y hexadecimal es una lección gratuita de Cyber Security Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cyber Security Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cyber Security Academy incluye 4 lecciones en total.

De la muestra a la regla

La búsqueda comienza con una muestra. Extraiga artefactos distintivos, determine cuáles son duraderos y codifíquelos en una regla que detecte la familia sin marcar archivos legítimos.

El flujo de trabajo es el siguiente: clasificar la muestra, extraer cadenas y características estructurales, separar la señal del ruido, redactar la regla y probarla tanto con muestras de la familia como con un corpus limpio antes de implementarla.

Extracción de cadenas candidatas

Comience con la utilidad strings para enumerar secuencias imprimibles, capturando tanto texto ASCII como UTF-16 (wide). El malware de Windows suele almacenar las cadenas en formato wide.

Revise la salida en busca de URL de C2, nombres de mutex, rutas del registro, mensajes de error personalizados, rutas PDB y texto inusualmente específico. Ignore las cadenas genéricas del entorno de ejecución y del compilador.

strings -a sample.bin > ascii.txt
strings -e l sample.bin > wide.txt   # UTF-16LE
grep -iE 'http|mutex|\\\\pipe\\\\|\.pdb' ascii.txt wide.txt

Selección de cadenas duraderas

No todas las cadenas deben incluirse en una regla. Dé prioridad a los artefactos que el autor no pueda cambiar sin esfuerzo:

  • Nombres de mutex o pipes codificados de forma fija y exclusivos de la familia
  • Marcadores de protocolo o claves de configuración personalizados
  • Mensajes inusuales de depuración o de pánico
  • Rutas PDB incrustadas que revelen el entorno de compilación

Evite el código genérico de las bibliotecas, los nombres de API comunes y las cadenas de versión compartidas por software legítimo, ya que generan falsos positivos.

strings:
  $mutex = "Global\\Zx7yQ_lock" wide
  $cfgkey = "x0r_cfg_begin" ascii
  $pdb = "C:\\build\\loader\\release\\loader.pdb"

Cómo superar una ofuscación simple

Muchas familias aplican XOR u otra codificación ligera a las cadenas. Si hay pocas cadenas legibles, busque la forma codificada o la rutina de decodificación.

Puede calcular los bytes codificados mediante XOR de un texto plano conocido y buscar coincidencias con ellos, o utilizar el modificador xor de YARA para buscar automáticamente una cadena con cualquier clave XOR de un solo byte.

strings:
  // matches "http://" under any single-byte XOR key
  $u = "http://" xor
  // or a fixed key range
  $k = "config" xor(0x01-0xff)

Búsqueda con patrones hexadecimales

Cuando las cadenas están ofuscadas, pero el código no, busque patrones de bytes de la propia lógica del malware: un stub de descifrado, un bucle de desempaquetado o una constante única.

Desensamble la muestra, encuentre una secuencia de instrucciones distintiva y traduzca los códigos de operación a una cadena hexadecimal. Convierta en comodines los bytes que varían (direcciones e inmediatos) para que el patrón sobreviva a una recompilación.

strings:
  // XOR decrypt loop with wildcarded counter/address
  $decrypt = { 8A ?? 34 ?? 88 ?? 4? 4? 75 ?? }

Uso práctico de comodines y saltos

El arte de buscar con hexadecimal consiste en elegir qué convertir en comodín. Si el patrón es demasiado rígido, una recompilación rompe la regla; si es demasiado flexible, coincide con todo.

  • Convierta en comodines los desplazamientos relativos y los inmediatos que cambia el compilador
  • Mantenga fijos los códigos de operación, ya que el algoritmo es estable
  • Utilice saltos [n-m] cuando varíe la longitud de las instrucciones

Procure que el patrón sea lo bastante largo para resultar único (a menudo, más de 8 bytes significativos), pero flexible donde sea necesario.

strings:
  $stub = { 55 8B EC 83 EC [1-4] E8 ?? ?? ?? ?? 33 C0 }

Indicadores estructurales y de PE

Las características estáticas que van más allá de los bytes sin procesar permiten crear condiciones sólidas y con pocos falsos positivos. Con el módulo pe puede buscar:

  • imphash — hash de la tabla de importaciones, a menudo estable entre las compilaciones de una familia
  • nombres de sección — los packers personalizados añaden secciones reveladoras
  • importaciones específicas — VirtualAllocEx + WriteProcessMemory + CreateRemoteThread indican una inyección
import "pe"
condition:
  pe.imphash() == "4e3a9f..." or
  for any s in pe.sections : ( s.name == ".x0rsec" )

La entropía como indicador

Las regiones empaquetadas o cifradas tienen entropía alta. El módulo math la mide, lo que permite marcar muestras cuya sección de carga útil parece cifrada, una característica distintiva de los packers.

La entropía por sí sola genera ruido (los instaladores comprimidos también tienen entropía alta), por lo que debe combinarla con otros indicadores en lugar de generar alertas basadas únicamente en ella.

import "math"
condition:
  math.entropy(0, filesize) >= 7.2 and $loader_stub

Combinación de indicadores

Las reglas más sólidas exigen múltiples indicadores independientes, para que ninguna coincidencia aislada active una detección. Combine una cadena, un patrón de código y una característica estructural.

Esta condición por capas resiste tanto los falsos positivos (todas las partes deben coincidir) como la evasión (el autor debe cambiar varias características a la vez).

condition:
  uint16(0) == 0x5A4D and
  filesize < 800KB and
  $mutex and
  $decrypt and
  pe.imports("kernel32.dll", "CreateRemoteThread")

Nombres, metadatos y versiones

Una regla de búsqueda solo es útil si otras personas pueden confiar en ella y mantenerla. Asigne a cada regla un nombre claro y con espacio de nombres, y complete sus meta.

  • Registre los hashes de las muestras a partir de las cuales se creó la regla
  • Indique la familia, el autor, la fecha y una referencia
  • Incremente el campo de versión cuando perfeccione la lógica

Cuando la regla se active meses después, estos metadatos indican al responsable de la respuesta qué significa y cuánto puede confiar en ella, convirtiendo una búsqueda puntual en una detección duradera y compartible.

meta:
  family = "X0rLoader"
  author = "ir-team"
  date = "2026-06-04"
  hash = "9f1c...e2"
  version = "2"

Pruebe antes de confiar

Valide siempre una regla nueva contra dos corpus:

  • Verdaderos positivos — todas las muestras conocidas de la familia deben coincidir
  • Software legítimo — un conjunto grande y limpio (binarios del sistema y aplicaciones comunes) NO debe producir coincidencias

Un solo falso positivo en una DLL de Windows puede poner en cuarentena archivos críticos de toda una infraestructura. Ejecute el análisis, cuente, revise las omisiones y las coincidencias, y perfeccione la regla antes de implementarla de forma generalizada.

yara -r family.yar /malware_corpus/   # expect all to hit
yara -r family.yar /clean_corpus/     # expect zero hits

Comprobación rápida

Elija el indicador más resistente.

Resumen

Búsqueda práctica con YARA, de principio a fin:

  • Extraiga cadenas ASCII y wide; conserve los artefactos duraderos (mutexes, claves de configuración y rutas PDB)
  • Supere la ofuscación ligera con el modificador xor o con patrones codificados
  • Busque patrones de bytes de código (stubs de descifrado o desempaquetado) cuando las cadenas estén ocultas
  • Convierta en comodines los bytes volátiles, mantenga fijos los códigos de operación y use saltos para las longitudes variables
  • Use imphash, secciones e importaciones de PE y la entropía como indicadores estructurales
  • Combine varios indicadores para resistir los falsos positivos y la evasión
  • Pruebe siempre con corpus de la familia y de software legítimo antes de implementar

A continuación: ejecutar estas reglas en toda la infraestructura.

Preguntas frecuentes

¿La lección «Threat hunting con cadenas y hexadecimal» es gratis?

Sí — el texto completo de «Threat hunting con cadenas y hexadecimal» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cyber Security Academy, actualiza a CoddyKit PRO. El curso de Cyber Security Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Threat hunting con cadenas y hexadecimal»?

Encuentre artefactos de malware. Practicas Cyber Security Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cyber Security Academy?

No se requiere experiencia previa. Cyber Security Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Threat hunting con cadenas y hexadecimal»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cyber Security Academy?

Sí. Cada lección de Cyber Security Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Para qué sirve YARA
  2. Sintaxis de reglas YARA
  3. Threat hunting con cadenas y hexadecimal
  4. Escalado y automatización de escaneos
← Volver a Cyber Security Academy