Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
SigFlip — SigFlip es una herramienta para parchear archivos PE firmados con Authenticode (exe, dll, sys, etc.) sin invalidar ni romper la firma existente. | Kitploit
Herramientas/GitHubGitHub/med0x2e/sigflip
Herramientas DefensivasMecanismos de PersistenciaAnálisis de CódigoExplotaciónMovimiento LateralAnálisis de BinariosRed TeamingDesarrollo de Payloads
GitHubmed0x2e/sigflip

SigFlip

SigFlip es una herramienta para parchear archivos PE firmados con Authenticode (exe, dll, sys, etc.) sin invalidar ni romper la firma existente.

Ver Repositorio
1.3k2096hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

¿Qué es?

SigFlip es una herramienta para modificar archivos PE firmados con authenticode (exe, dll, sys, etc.) de forma que no afecte ni rompa la firma authenticode existente; en otras palabras, puedes cambiar el checksum/hash del archivo PE incrustando datos (por ejemplo, shellcode) sin romper la firma del archivo, las comprobaciones de integridad ni la funcionalidad del PE.

SigInject cifra e inyecta shellcode en la tabla de certificados [WIN_CERTIFICATE] de un archivo PE; la clave de cifrado se imprime para su uso con un cargador básico BOF/C/C# (SigLoader). SigInject guarda los cambios en un archivo PE modificado y mantiene intacta su firma y la validez del certificado.

SigLoader es un cargador básico que toma como parámetros la ruta de un archivo PE modificado creado por SigInject y la clave de descifrado, luego extrae y descifra el shellcode incrustado para usarlo con una inyección de shellcode de elección.

SigFlip verificará si el hash del PE se cambió exitosamente y también comprobará y saldrá de forma ordenada en caso de que los endpoints estén endurecidos contra esta configuración incorrecta común (consulta la sección "Detalles").

Nota rápida: SigFlip, SigInject y SigLoader están disponibles como scripts BOF y ensamblados .NET; la única diferencia es que la funcionalidad de SigInject está implementada como parte de SigFlip (-i) en caso de que elijas usar artefactos .NET en lugar de BOFs.

¿Por qué?

Se puede usar principalmente para persistencia, movimiento lateral o ejecución de código/comandos y puede ayudar con:

  • Evasión de listas blancas de aplicaciones, cambiando el hash del archivo PE (por ejemplo, msbuild.exe) sin romper la firma.
  • Evasión de EDRs que dependen de los hashes de LOLBINs específicos para detectar ejecución de código/comandos maliciosos.
  • Cargar controladores firmados usando un hash diferente; podría ayudar a evadir EDRs que vigilen controladores firmados vulnerables comunes usando una lista predefinida de hashes.
  • Incrustar shellcode cifrado en un archivo PE firmado y usar un stager (sigloader) de tu preferencia para analizar, descifrar, cargar y ejecutarlo.
  • Los proveedores de seguridad de endpoints tienden a clasificar los archivos PE firmados como benignos la mayoría de las veces; incrustar tu código sin firmar (shellcode, etc.) en un archivo PE firmado dificulta un poco su detección/marcado.
  • Evasión de proveedores de seguridad de endpoints que dependen principalmente de WinVerifyTrust predeterminado para la validación de firmas.
  • Mejorar OPSEC y desafiar a los defensores que dependen únicamente de utilidades de verificación de firmas típicas como signtool, sigcheck, Get-AuthenticodeSignature, etc., para validar la firma authenticode de archivos PE.
  • Uso y ejemplos:

    Compilar/Construir:

    En este proyecto no se proporcionan BOFs precompilados; se pueden compilar usando Mingw-w64. Para .NET usa VS o csc.exe para compilar proyectos .NET (SigFlip, SigLoader); para BOF consulta los pasos a continuación;

    • ➜ i686-w64-mingw32-gcc -c sigflip.c -o sigflip.x86.o
    • ➜ x86_64-w64-mingw32-gcc -c sigflip.c -o sigflip.x64.o
    • ➜ x86_64-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x64.o
    • ➜ i686-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x86.o

    Asegúrate de que todos los archivos objeto estén ubicados en el mismo directorio que sigflip.cna, luego carga el script sigflip.cna en Cobalt Strike.

    Nota rápida: los BOFs precompilados fueron probados y son compatibles con mingw-64 v8.0.0_3; usar mingw-64 >= v9 podría funcionar pero podría bloquear beacons activos, consulta https://github.com/med0x2e/SigFlip/issues/2 para más detalles.

    Cobalt Strike:

    1. Execute-Assembly

      • execute-assembly SigFlip.exe -h
      • execute-assembly SigLoader -h
    2. BOF

      • Para usar con Cobalt Strike, una vez que cargues el script SigFlip.cna, se registrarán dos nuevos comandos: SigFlip y SigInject; luego úsalos como se indica a continuación:
        • SigFlip: Cambia el hash de un archivo PE (DLL, EXE, SYS, OCX, etc.) sin romper la firma ni la validez del certificado:

          • SigFlip "<RUTA_DEL_PE>" "<RUTA_DEL_PE_SALIDA (con extensión)>"
        • SigInject: Cifra e inyecta shellcode en la tabla de certificados [WIN_CERTIFICATE] de un archivo PE; la clave de cifrado se imprime para usarla con un cargador básico C/C# y mantiene intacta la firma y validez del certificado:

          • SigInject "<RUTA_DEL_PE> <RUTA_DEL_PE_SALIDA (con extensión)>" "<RUTA_DEL_SHELLCODE>"
        • SigLoader: Carga shellcode cifrado desde archivos PE creados por SigInject, luego usa Early Bird queueuserapc para generar/inyectar el shellcode en un proceso sacrificial; la lógica de inyección de shellcode se puede personalizar o reemplazar con cualquier otra técnica de inyección de código de elección:

          • SigLoader <RUTA_DEL_PE_CON_SH> <CLAVE_DESCIFRADO> <RUTA_DEL_PROCESO_DESTINO> <ID_DEL_PROCESO_PADRE>
    3. Ejemplos

      • BOF:

        • Inyectar datos aleatorios en msbuild.exe (es decir, bit flip msbuild.exe):
          • SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"
        • Inyectar shellcode en kernel32.dll (el orden de los argumentos es diferente; asegúrate de tomar nota de la clave de descifrado):
          • SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"
          • Sigloader "C:\random\modified-kernel32.dll" "CLAVE_DESCIFRADO" "C:\Windows\System32\werfault.exe" 6300
      • Execute-Assembly:

        • Inyectar datos aleatorios en msbuild.exe:
          • execute-assembly SigFlip.exe -b C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe -o C:\Temp\MSBuild.exe
        • Inyectar shellcode en kernel32.dll (el orden de los argumentos es diferente; asegúrate de tomar nota de la clave de descifrado):
          • execute-assembly SigFlip.exe -i C:\Windows\System32\kernel32.dll -s C:\Temp\x86shellcode.bin -o C:\Temp\kernel32.dll -e TestSecretKey
          • execute-assembly SigLoader.exe -f C:\Temp\modified-kernel32.dll -e TestSecretKey -pid 2354

    Detalles:

    Esta es una técnica conocida utilizada por APT#10 en múltiples campañas o conjuntos de intrusiones.

    ¿Firmas digitales Authenticode?

    Authenticode es una tecnología de firma de código de Microsoft que identifica al editor de software firmado con Authenticode. Authenticode también verifica que el software no haya sido manipulado desde que se firmó y publicó.

    ¿Cómo funciona?

    Microsoft se basa principalmente en el formato de firma Authenticode para verificar la integridad y el origen de los binarios PE. Según la especificación del formato PE de Authenticode, las firmas Authenticode pueden estar "incrustadas" en un archivo PE de Windows, en una ubicación especificada por la entrada de la tabla de certificados en los directorios de datos del encabezado opcional. Cuando se usa Authenticode para firmar un archivo PE de Windows, el algoritmo que calcula el valor hash Authenticode del archivo excluye ciertos campos PE. Al incrustar la firma en el archivo, el proceso de firma puede modificar estos campos sin afectar el valor hash del archivo. Estos campos son los siguientes: **el checksum, RVA de la tabla de certificados, tamaño de la tabla de certificados y la tabla de certificados de atributos. La tabla de certificados de atributos contiene una estructura PKCS#7 SignedData que contiene el valor hash del archivo PE, una firma creada con la clave privada del editor del software y los certificados X.509 v3 que vinculan la clave de firma del editor del software con una entidad legal.

    En términos simples, podemos modificar o incrustar datos en campos excluidos del cálculo hash authenticode sin preocuparnos por romper la firma authenticode y las comprobaciones de integridad del archivo.

    Más detalles sobre dichos campos excluidos:

    • RVA y Tamaño de la tabla de certificados: La estructura del encabezado opcional de un PE firmado contiene un array de directorios de datos que incluye la entrada del directorio de seguridad IMAGE_DIRECTORY_ENTRY_SECURITY, la cual tiene dos campos: RVA y Tamaño.

      • RVA: un desplazamiento de archivo (no un desplazamiento de memoria) a la tabla de certificados de atributos.
      • Tamaño: tamaño de la tabla de certificados de atributos.
    • Tabla de certificados de atributos: una estructura de datos WIN_CERTIFICATE que encapsula la firma y los certificados y tiene los siguientes campos:

      • dwLength: tamaño de la tabla de certificados.
      • wRevision: la "revisión" del WIN_CERTIFICATE.
      • wCertificateType: el tipo de datos de certificado encapsulados.
      • bCertificate: los datos reales del certificado. Para WIN_CERT_TYPE_PKCS_SIGNED_DATA, esta es la estructura PKCS#7 SignedData mencionada anteriormente (que contiene el valor hash del PE, la firma y el certificado X.509); este es exactamente el lugar donde SigFlip incrusta datos aleatorios o shellcode.

    Con todo esto en mente, ahora SigFlip hace lo siguiente:

    1. Verificar la configuración del sistema.
    2. Cargar el archivo PE y verificar su firma y calcular el hash SHA1.
    3. Obtener el desplazamiento "e_lfanew" (que apunta al encabezado del archivo PE -> IMAGE_NT_HEADERS).
    4. Obtener IMAGE_OPTIONAL_HEADER desde IMAGE_NT_HEADERS.
    5. Obtener IMAGE_DATA_DIRECTORY desde IMAGE_OPTIONAL_HEADER.
    6. Obtener el campo IMAGE_DIRECTORY_ENTRY_SECURITY y recuperar el RVA y el TAMAÑO de la tabla de certificados de atributos (WIN_CERTIFICATE).
    7. Modificar el blob del archivo PE rellenando la tabla de certificados con bytes extra (aleatorios/shellcode) a elección.
    8. Actualizar el tamaño del directorio de datos IMAGE_DIRECTORY_ENTRY_SECURITY en el encabezado opcional.
    9. Actualizar dwLength de WIN_CERTIFICATE (tabla de certificados).
    10. Generar el nuevo checksum del PE y actualizarlo (checksum del encabezado opcional).
    11. Guardar el PE final con el nuevo tamaño.
    12. Verificar la firma del archivo PE modificado.

    El primer paso es esencial para confirmar si el sistema está mal configurado de manera que permita el relleno y la inyección de shellcode en archivos PE firmados con authenticode; por lo tanto, se realizan las siguientes comprobaciones de cordura:

    1. Verificar si la corrección MS13-098 (KB2893294) no está instalada. Ten en cuenta que PUEDE ESTAR INSTALADA PERO LAS CLAVES DEL REGISTRO NO ESTÁN CONFIGURADAS CORRECTAMENTE, LO QUE HACE QUE EL PARCHE SEA INÚTIL.
    2. Verificar las claves del registro:
      1. X86:
        • Verificar si la clave de registro "HKLM:\Software\Microsoft\Cryptography\Wintrust\Config" no está disponible.
          • -> Si está disponible, verificar si el valor de registro "EnableCertPaddingCheck" no está disponible.
      2. X64:
        • Verificar si la clave de registro "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config" no está disponible.
          • -> Si está disponible, verificar si el valor de registro "EnableCertPaddingCheck" no está disponible.

    ¿Por qué no se pueden leer los datos inyectados cuando el PE modificado se carga como módulo en su propio espacio de direcciones o en el de otros procesos?

    El cargador de Windows no carga los datos del certificado en el espacio de direcciones del proceso; por eso necesitas un cargador personalizado para extraer datos como shellcode y usarlos (por ejemplo, SigLoader). Esto también explica por qué la entrada del directorio de datos IMAGE_DIRECTORY_ENTRY_SECURITY tiene un RVA que es un desplazamiento de archivo en lugar de un desplazamiento de memoria típico.

    Detectar/Prevenir:

    • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
    • Una vez instalado el parche y configuradas las claves de registro adecuadas, no se requieren reinicios del sistema; solo necesitas reiniciar el servicio Cryptographic Services. El servicio Applocker también se reiniciará, ya que depende de los servicios criptográficos. (@p0w3rsh3ll)
    • Regla Yara de Adrien: https://twitter.com/Int2e_/status/1330975808941330432

    Referencias

    • https://docs.microsoft.com/en-us/security-updates/SecurityBulletins/2013/ms13-098?redirectedfrom=MSDN
    • https://docs.microsoft.com/en-us/security-updates/SecurityAdvisories/2014/2915720?redirectedfrom=MSDN
    • http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/authenticode_pe.docx
    • https://msrc-blog.microsoft.com/2013/12/10/ms13-098-update-to-enhance-the-security-of-authenticode/
    • https://www.specterops.io/assets/resources/SpecterOps_Subverting_Trust_in_Windows.pdf
    • https://p0w3rsh3ll.wordpress.com/2014/05/24/testing-ms13-098-certificate-padding-check/
    • http://jsac.jpcert.or.jp/archive/2021/pdf/JSAC2021_202_niwa-yanagishita_en.pdf
    Descargar herramienta