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
sandsifter — El fuzzer de procesador x86 | Kitploit
Herramientas/GitHubGitHub/xoreaxeaxeax/sandsifter
Análisis de VulnerabilidadesIngeniería InversaFuzzingSeguridad de HardwareAnálisis de Binarios
GitHubxoreaxeaxeax/sandsifter

sandsifter

El fuzzer de procesador x86

Ver Repositorio
5.1k35531hace 9 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

s a n d s i f t e r

: el fuzzer de procesadores x86

Resumen

El sandsifter audita procesadores x86 en busca de instrucciones ocultas y errores de hardware, generando sistemáticamente código máquina para explorar el conjunto de instrucciones de un procesador y monitoreando la ejecución en busca de anomalías. Sandsifter ha descubierto instrucciones secretas de procesador de todos los fabricantes importantes; errores de software ubicuos en desensambladores, ensambladores y emuladores; fallos en hipervisores empresariales; y tanto errores de hardware benignos como críticos para la seguridad en chips x86.

Con la multitud de procesadores x86 existentes, el objetivo de la herramienta es permitir a los usuarios verificar sus propios sistemas en busca de instrucciones ocultas y errores.

Para ejecutar una auditoría básica en su procesador:

root@kitploit:~
sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t

demo_sandsifter

El ordenador se escanea sistemáticamente en busca de instrucciones anómalas. En la mitad superior, puede ver las instrucciones que el sandsifter está probando actualmente en el procesador. En la mitad inferior, el sandsifter informa las anomalías que encuentra.

La búsqueda tomará desde algunas horas hasta algunos días, dependiendo de la velocidad y complejidad de su procesador. Cuando termine, resuma los resultados:

root@kitploit:~
./summarize.py data/log

demo_summarizer

Normalmente, se encontrarán varios millones de instrucciones no documentadas en su procesador, pero generalmente caen en un pequeño número de grupos diferentes. Después de agrupar las anomalías, la herramienta de resumen intenta asignar cada instrucción a una categoría de problema:

Descargar herramienta
  • Error de software (por ejemplo, un error en su hipervisor o desensamblador),
  • Error de hardware (un error en su CPU), o
  • Instrucción no documentada (una instrucción que existe en el procesador, pero no es reconocida por el fabricante)
  • Presione 'Q' para salir y obtener un resumen basado en texto del escaneo del sistema:

    Los resultados de un escaneo a veces pueden ser difíciles de clasificar automáticamente por las herramientas, y pueden requerir análisis manual. Para obtener ayuda analizando sus resultados, no dude en enviar el archivo ./data/log a [email protected]. En este registro no se incluye información personal, aparte de la marca, modelo y revisión del procesador (de /proc/cpuinfo).

    Resultados

    El escaneo con sandsifter ha descubierto características de procesador no documentadas en docenas de categorías de opcodes, fallos en hipervisores empresariales, errores en casi todas las principales herramientas de desensamblado y emulación, y errores críticos de hardware que abren vulnerabilidades de seguridad en el propio procesador.

    Los detalles de los resultados se pueden encontrar en el whitepaper del proyecto.

    (TODO: enumeración detallada de resultados aquí)

    Construcción

    Sandsifter requiere instalar primero el desensamblador Capstone: http://www.capstone-engine.org/. Capstone normalmente se puede instalar con:

    root@kitploit:~
    sudo apt-get install libcapstone3 libcapstone-dev
    sudo pip install capstone
    

    Sandsifter se puede construir con:

    root@kitploit:~
    make
    

    y luego se ejecuta con

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t
    

    Banderas

    Las banderas se pasan al sifter con --flag, y al inyector con -- -f.

    Ejemplo:

    root@kitploit:~
    sudo ./sifter.py --unk --dis --len --sync --tick -- -P1 -t
    

    Banderas del sifter:

    root@kitploit:~
    --len
    	buscar diferencias de longitud en todas las instrucciones (instrucciones que
    	se ejecutaron de manera diferente a lo esperado por el desensamblador, o que no
    	existían cuando el desensamblador las esperaba)
    
    --dis
    	buscar diferencias de longitud en instrucciones válidas (instrucciones que
    	se ejecutaron de manera diferente a lo esperado por el desensamblador)
    
    --unk
    	buscar instrucciones desconocidas (instrucciones que el desensamblador no
    	conoce pero que se ejecutan exitosamente)
    
    --ill
    	el inverso de --unk, buscar desensamblados no válidos (instrucciones que no
    	se ejecutan exitosamente pero que el desensamblador reconoce)
    
    --tick
    	escribir periódicamente la instrucción actual en disco
    
    --save
    	guardar el progreso de la búsqueda al salir
    
    --resume
    	reanudar la búsqueda desde el último estado guardado
    
    --sync
    	escribir los resultados de la búsqueda en disco a medida que se encuentran
    
    --low-mem
    	no almacenar resultados en memoria
    

    Banderas del inyector:

    root@kitploit:~
    -b
    	modo: fuerza bruta
    
    -r
    	modo: fuzzing aleatorio
    
    -t
    	modo: fuzzing por túneles
    
    -d
    	modo: fuzzing dirigido externamente
    
    -R
    	modo de salida sin procesar
    
    -T
    	modo de salida de texto
    
    -x
    	escribir progreso periódico en stderr
    
    -0
    	permitir desreferencia nula (requiere sudo)
    
    -D
    	permitir prefijos duplicados
    
    -N
    	soporte de bit NX desactivado
    
    -s semilla
    	en búsqueda aleatoria, valor de semilla
    
    -B profundidad_bruta
    	en búsqueda de fuerza bruta, profundidad máxima de búsqueda
    
    -P prefijo_max
    	número máximo de prefijos a buscar
    
    -i instrucción
    	instrucción por la que comenzar la búsqueda (inclusive)
    
    -e instrucción
    	instrucción por la que terminar la búsqueda (exclusiva)
    
    -c núcleo
    	núcleo en el que realizar la búsqueda
    
    -X lista_negra
    	poner en lista negra la instrucción especificada
    
    -j trabajos
    	número de trabajos simultáneos a ejecutar
    
    -l bytes_rango
    	número de bytes base de instrucción en cada subrango
    

    Teclas

    m: Modo - cambiar el modo de búsqueda (fuerza bruta, aleatorio o túnel) para el sifter

    q: Salir - salir del sifter

    p: Pausa - pausar o reanudar la búsqueda

    Algoritmos

    El escaneo admite cuatro algoritmos de búsqueda diferentes, que se pueden establecer en la línea de comandos o cambiar mediante teclas de acceso rápido.

    • La búsqueda aleatoria genera instrucciones aleatorias para probar; generalmente produce resultados rápidamente, pero no puede encontrar instrucciones ocultas y errores complejos.
    • La búsqueda de fuerza bruta prueba instrucciones incrementalmente, hasta una longitud especificada por el usuario; en casi todas las situaciones, funciona peor que la búsqueda aleatoria.
    • La búsqueda dirigida o dirigida por mutación está diseñada para crear instrucciones nuevas y cada vez más complejas mediante algoritmos genéticos; aunque prometedor, este enfoque nunca se realizó completamente y se deja como un esqueleto para futuras investigaciones.
    • El túnel es el enfoque descrito en la presentación y el documento técnico, y en casi todos los casos proporciona el mejor equilibrio entre exhaustividad y velocidad.

    Consejos

    • sudo

      Para obtener los mejores resultados, la herramienta debe ejecutarse como usuario root. Esto es necesario para que el proceso pueda mapear en memoria una página en la dirección 0, lo que requiere permisos de root. Esta página evita que muchas instrucciones fallen con seg-fault en accesos a memoria, lo que permite un análisis de fallos más preciso.

    • Prefijos

      La limitación principal para la profundidad de una búsqueda de instrucciones es la cantidad de bytes de prefijo a explorar; cada byte de prefijo adicional aumenta el espacio de búsqueda en aproximadamente un factor de 10. Limite los bytes de prefijo con la bandera -P.

    • Colores

      La interfaz del sifter está diseñada para un terminal de 256 colores. Aunque los detalles varían mucho según su terminal, esto se puede lograr aproximadamente con:

      root@kitploit:~
      export TERM='xterm-256color'
      
    • GUI

      La interfaz asume que el terminal tiene al menos un cierto tamaño; si la interfaz no se renderiza correctamente, intente aumentar el tamaño del terminal; esto a menudo se puede lograr disminuyendo el tamaño de la fuente del terminal.

      En algunos casos, puede ser deseable o necesario ejecutar la herramienta sin la interfaz gráfica. Esto se puede hacer ejecutando el inyector directamente:

      root@kitploit:~
      sudo ./injector -P1 -t -0
      

      Para filtrar los resultados de una invocación directa del inyector, se puede usar grep. Por ejemplo,

      root@kitploit:~
      sudo ./injector -P1 -r -0 | grep '\.r' | grep -v sigill
      

      busca instrucciones para las cuales el procesador y el desensamblador discreparon en la longitud de la instrucción (grep '.r'), pero la instrucción se ejecutó exitosamente (grep -v sigill).

    • Fuzzing dirigido

      En muchos casos, es valioso dirigir el fuzzer a un objetivo específico. Por ejemplo, si sospecha que un emulador tiene fallos relacionados con prefijos 'lock' repetidos (0xf0), podría dirigir el fuzzer para buscar en esta región del espacio de instrucciones con las banderas -i y -e:

      root@kitploit:~
      sudo ./sifter.py --unk --dis --len --sync --tick -- -t -i f0f0 -e f0f1 -D -P15
      
    • Sistemas heredados

      Para escanear sistemas mucho más antiguos (procesadores clase i586, sistemas con poca memoria), pase la bandera --low-mem al sifter y la bandera -N al inyector:

      root@kitploit:~
      sudo ./sifter.py --unk --dis --len --sync --tick --low-mem -- -P1 -t -N
      

      Si observa que sus escaneos se completan demasiado rápido (por ejemplo, un escaneo se completa en segundos), normalmente se debe a que se requieren estas banderas para el procesador que está escaneando.

    • 32 vs. 64 bits

      Por defecto, sandsifter se construye para la arquitectura de bits del sistema operativo anfitrión. Sin embargo, algunas instrucciones tienen comportamientos diferentes cuando se ejecutan en un proceso de 32 bits en comparación con cuando se ejecutan en un proceso de 64 bits. Para explorar estos escenarios, a veces es valioso ejecutar un sandsifter de 32 bits en un sistema de 64 bits.

      Para construir un sandsifter de 32 bits en un sistema de 64 bits, Capstone debe instalarse como 32 bits; las instrucciones para esto se pueden encontrar en http://www.capstone-engine.org/.

      Luego, sandsifter debe construirse para una arquitectura de 32 bits:

      root@kitploit:~
      make CFLAGS=-m32
      

      Con esto, se puede explorar el espacio de instrucciones de 32 bits en un sistema de 64 bits.

    Referencias

    • Se puede encontrar una discusión de las técnicas y resultados en la presentación de Black Hat.
    • Los detalles técnicos se describen en el whitepaper.
    • Las diapositivas de la presentación de Black Hat están aquí.

    Autor

    sandsifter es un esfuerzo de investigación de Christopher Domas (@xoreaxeaxeax).