Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
sandsifter — O fuzzer de processador x86 | Kitploit
Ferramentas/GitHubGitHub/xoreaxeaxeax/sandsifter
Análise de VulnerabilidadesEngenharia ReversaFuzzingSegurança de HardwareAnálise de Binários
GitHubxoreaxeaxeax/sandsifter

sandsifter

O fuzzer de processador x86

Ver Repositório
5.1k35531há 9 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

s a n d s i f t e r

: o fuzzer de processador x86

Visão Geral

O sandsifter audita processadores x86 em busca de instruções ocultas e bugs de hardware, gerando sistematicamente código de máquina para pesquisar o conjunto de instruções de um processador e monitorando a execução em busca de anomalias. O sandsifter descobriu instruções secretas de processadores de todos os principais fornecedores; bugs de software ubíquos em disassemblers, assemblers e emuladores; falhas em hypervisors empresariais; e bugs de hardware tanto benignos quanto críticos para a segurança em chips x86.

Com a multitude de processadores x86 existentes, o objetivo da ferramenta é permitir que os usuários verifiquem seus próprios sistemas em busca de instruções e bugs ocultos.

Para executar uma auditoria básica no seu processador:

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

demo_sandsifter

O computador é varrido sistematicamente em busca de instruções anômalas. Na metade superior, você pode ver as instruções que o sandsifter está testando atualmente no processador. Na metade inferior, o sandsifter relata as anomalias que encontra.

A pesquisa levará de algumas horas a alguns dias, dependendo da velocidade e complexidade do seu processador. Quando estiver concluída, resuma os resultados:

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

demo_summarizer

Normalmente, vários milhões de instruções não documentadas serão encontradas no seu processador, mas geralmente se enquadram em um pequeno número de grupos diferentes. Após agrupar as anomalias, a ferramenta de sumarização tenta atribuir cada instrução a uma categoria de problema:

  • Bug de software (por exemplo, um bug no seu hypervisor ou disassembler),
Baixar ferramenta
  • Bug de hardware (um bug na sua CPU), ou
  • Instrução não documentada (uma instrução que existe no processador, mas não é reconhecida pelo fabricante)
  • Pressione 'Q' para sair e obter um resumo baseado em texto da varredura do sistema:

    Os resultados de uma varredura às vezes podem ser difíceis para as ferramentas classificarem automaticamente, e podem exigir análise manual. Para obter ajuda na análise dos seus resultados, sinta-se à vontade para enviar o arquivo ./data/log para [email protected]. Nenhuma informação pessoal, além da marca, modelo e revisão do processador (de /proc/cpuinfo) está incluída neste log.

    Resultados

    A varredura com o sandsifter descobriu recursos de processador não documentados em dezenas de categorias de opcodes, falhas em hypervisors empresariais, bugs em quase todas as principais ferramentas de desmontagem e emulação, e bugs de hardware críticos que abrem vulnerabilidades de segurança no próprio processador.

    Detalhes dos resultados podem ser encontrados no whitepaper do projeto.

    (TODO: enumeração detalhada dos resultados aqui)

    Construção

    O Sandsifter requer a instalação prévia do disassembler Capstone: http://www.capstone-engine.org/. O Capstone normalmente pode ser instalado com:

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

    O Sandsifter pode ser construído com:

    root@kitploit:~
    make
    

    e é então executado com

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

    Flags

    As flags são passadas para o sifter com --flag, e para o injector com -- -f.

    Exemplo:

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

    Flags do sifter:

    root@kitploit:~
    --len
    	busca por diferenças de comprimento em todas as instruções (instruções que
    	executaram de forma diferente do esperado pelo disassembler, ou que não
    	existiam quando o disassembler as esperava)
    
    --dis
    	busca por diferenças de comprimento em instruções válidas (instruções que
    	executaram de forma diferente do esperado pelo disassembler)
    
    --unk
    	busca por instruções desconhecidas (instruções que o disassembler não
    	conhece, mas que executam com sucesso)
    
    --ill
    	o inverso de --unk, busca por desmontagens inválidas (instruções que não
    	executam com sucesso mas que o disassembler reconhece)
    
    --tick
    	escreve periodicamente a instrução atual no disco
    
    --save
    	salva o progresso da pesquisa ao sair
    
    --resume
    	retoma a pesquisa a partir do último estado salvo
    
    --sync
    	escreve os resultados da pesquisa no disco à medida que são encontrados
    
    --low-mem
    	não armazena resultados na memória
    

    Flags do injector:

    root@kitploit:~
    -b
    	modo: força bruta
    
    -r
    	modo: fuzzing aleatório
    
    -t
    	modo: fuzzing tunelado
    
    -d
    	modo: fuzzing dirigido externamente
    
    -R
    	modo de saída bruta
    
    -T
    	modo de saída de texto
    
    -x
    	escreve progresso periódico no stderr
    
    -0
    	permite dereferência nula (requer sudo)
    
    -D
    	permite prefixos duplicados
    
    -N
    	sem suporte a bit NX
    
    -s seed
    	em pesquisa aleatória, valor da semente
    
    -B brute_depth
    	em pesquisa de força bruta, profundidade máxima de pesquisa
    
    -P max_prefix
    	número máximo de prefixos a pesquisar
    
    -i instruction
    	instrução na qual iniciar a pesquisa (inclusive)
    
    -e instruction
    	instrução na qual terminar a pesquisa (exclusive)
    
    -c core
    	núcleo no qual realizar a pesquisa
    
    -X blacklist
    	inclui na lista negra a instrução especificada
    
    -j jobs
    	número de trabalhos simultâneos para executar
    
    -l range_bytes
    	número de bytes base de instrução em cada subfaixa
    

    Teclas

    m: Modo - altera o modo de pesquisa (força bruta, aleatório ou tunelado) para o sifter

    q: Sair - sai do sifter

    p: Pausar - pausa ou retoma a pesquisa

    Algoritmos

    A varredura suporta quatro algoritmos de pesquisa diferentes, que podem ser definidos na linha de comando ou alternados via teclas de atalho.

    • A pesquisa aleatória gera instruções aleatórias para testar; geralmente produz resultados rapidamente, mas não consegue encontrar instruções ocultas complexas e bugs.
    • A pesquisa de força bruta tenta instruções incrementalmente, até um comprimento especificado pelo usuário; em quase todas as situações, tem desempenho pior do que a pesquisa aleatória.
    • A pesquisa dirigida ou dirigida por mutação é projetada para criar instruções novas e cada vez mais complexas através de algoritmos genéticos; embora promissora, essa abordagem nunca foi totalmente realizada, e é deixada como um esboço para pesquisas futuras.
    • O tunelamento é a abordagem descrita na apresentação e no white paper, e em quase todos os casos oferece o melhor equilíbrio entre abrangência e velocidade.

    Dicas

    • sudo

      Para melhores resultados, a ferramenta deve ser executada como usuário root. Isso é necessário para que o processo possa mapear na memória uma página no endereço 0, o que requer permissões de root. Esta página evita que muitas instruções causem seg-fault em acessos à memória, o que permite uma análise de falhas mais precisa.

    • Prefixos

      A principal limitação para a profundidade de uma pesquisa de instrução é o número de bytes de prefixo a explorar, com cada byte de prefixo adicional aumentando o espaço de pesquisa em cerca de um fator de 10. Limite os bytes de prefixo com a flag -P.

    • Cores

      A interface do sifter é projetada para um terminal de 256 cores. Embora os detalhes variem muito dependendo do seu terminal, isso pode ser aproximadamente feito com:

      root@kitploit:~
      export TERM='xterm-256color'
      
    • Interface Gráfica

      A interface assume que o terminal tem pelo menos um determinado tamanho; se a interface não estiver renderizando corretamente, tente aumentar o tamanho do terminal; isso geralmente pode ser feito diminuindo o tamanho da fonte do terminal.

      Em alguns casos, pode ser desejável ou necessário executar a ferramenta sem a interface gráfica. Isso pode ser feito executando o injector diretamente:

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

      Para filtrar os resultados de uma invocação direta do injector, o grep pode ser usado. Por exemplo,

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

      procura instruções para as quais o processador e o disassembler discordaram sobre o comprimento da instrução (grep '.r'), mas a instrução foi executada com sucesso (grep -v sigill).

    • Fuzzing direcionado

      Em muitos casos, é valioso direcionar o fuzzer para um alvo específico. Por exemplo, se você suspeitar que um emulador tem falhas em torno de prefixos 'lock' repetidos (0xf0), você pode direcionar o fuzzer para pesquisar esta região do espaço de instruções com as flags -i e -e:

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

      Para varredura de sistemas muito antigos (processadores classe i586, sistemas com pouca memória), passe a flag --low-mem para o sifter e a flag -N para o injector:

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

      Se você observar que suas varreduras estão concluindo muito rapidamente (por exemplo, uma varredura termina em segundos), geralmente é porque essas flags são necessárias para o processador que você está usando.

    • 32 vs. 64 bits

      Por padrão, o sandsifter é construído para atingir a arquitetura de bits do sistema operacional hospedeiro. No entanto, algumas instruções têm comportamentos diferentes quando executadas em um processo de 32 bits em comparação com quando executadas em um processo de 64 bits. Para explorar esses cenários, às vezes é valioso executar um sandsifter de 32 bits em um sistema de 64 bits.

      Para construir um sandsifter de 32 bits em um sistema de 64 bits, o Capstone deve ser instalado como 32 bits; as instruções para isso podem ser encontradas em http://www.capstone-engine.org/.

      Em seguida, o sandsifter deve ser construído para uma arquitetura de 32 bits:

      root@kitploit:~
      make CFLAGS=-m32
      

      Com isso, o espaço de instruções de 32 bits pode ser explorado em um sistema de 64 bits.

    Referências

    • Uma discussão sobre as técnicas e resultados pode ser encontrada na apresentação do Black Hat.
    • Detalhes técnicos são descritos no whitepaper.
    • Os slides da apresentação do Black Hat estão aqui.

    Autor

    sandsifter é um esforço de pesquisa de Christopher Domas (@xoreaxeaxeax).