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/battelle/sandsifter
Análise de VulnerabilidadesEngenharia ReversaFuzzingSegurança de HardwareAnálise de BináriosPapers e PesquisaAprendizado e Educação
GitHubbattelle/sandsifter

sandsifter

O fuzzer de processador x86

Ver Repositório
5314124há 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 processadores 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 percorrer o conjunto de instruções de um processador e monitorando a execução em busca de anomalias. O sandsifter já revelou instruções secretas de processadores de todos os principais fornecedores; bugs de software onipresentes em desmontadores, montadores e emuladores; falhas em hipervisores 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 ocultas e bugs.

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 é sistematicamente varrido 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 busca levará de algumas horas a alguns dias, dependendo da velocidade e da complexidade do seu processador. Quando terminar, resuma os resultados:

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

demo_summarizer

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

  • Bug de software (por exemplo, um bug no seu hipervisor ou desmontador),
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 em texto da varredura do sistema:

    Os resultados de uma varredura às vezes podem ser difíceis de classificar automaticamente pelas ferramentas, 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 revelou recursos não documentados de processadores em dezenas de categorias de opcodes, falhas em hipervisores empresariais, bugs em quase todas as principais ferramentas de desmontagem e emulação, e bugs críticos de hardware 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)

    Compilação

    O sandsifter exige primeiro a instalação do desmontador 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 compilado 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 injetor com -- -f.

    Exemplo:

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

    Flags do sifter:

    root@kitploit:~
    --len
    	search for length differences in all instructions (instructions that
    	executed differently than the disassembler expected, or did not
    	exist when the disassembler expected them to
    
    --dis
    	search for length differences in valid instructions (instructions that
    	executed differently than the disassembler expected)
    
    --unk
    	search for unknown instructions (instructions that the disassembler doesn't
    	know about but successfully execute)
    
    --ill
    	the inverse of --unk, search for invalid disassemblies (instructions that do
    	not successfully execute but that the disassembler acknowledges)
    
    --tick
    	periodically write the current instruction to disk
    
    --save
    	save search progress on exit
    
    --resume
    	resume search from last saved state
    
    --sync
    	write search results to disk as they are found
    
    --low-mem
    	do not store results in memory
    

    Flags do injetor:

    root@kitploit:~
    -b
    	mode: brute force
    
    -r
    	mode: randomized fuzzing
    
    -t
    	mode: tunneled fuzzing
    
    -d
    	mode: externally directed fuzzing
    
    -R
    	raw output mode
    
    -T
    	text output mode
    
    -x
    	write periodic progress to stderr
    
    -0
    	allow null dereference (requires sudo)
    
    -D
    	allow duplicate prefixes
    
    -N
    	no nx bit support
    
    -s seed
    	in random search, seed value
    
    -B brute_depth
    	in brute search, maximum search depth
    
    -P max_prefix
    	maximum number of prefixes to search
    
    -i instruction
    	instruction at which to start search (inclusive)
    
    -e instruction
    	instruction at which to end search (exclusive)
    
    -c core
    	core on which to perform search
    
    -X blacklist
    	blacklist the specified instruction
    
    -j jobs
    	number of simultaneous jobs to run
    
    -l range_bytes
    	number of base instruction bytes in each sub range
    

    Teclas

    m: Mode - altera o modo de busca (força bruta, aleatório ou túnel) para o sifter

    q: Quit - sai do sifter

    p: Pause - pausa ou retoma a busca

    Algoritmos

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

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

    Dicas

    • sudo

      Para obter 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 exige permissões de root. Essa página impede 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 busca de instruções é o número de bytes de prefixo a explorar, sendo que cada byte de prefixo adicional aumenta o espaço de busca 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 bastante dependendo do seu terminal, isso pode ser aproximadamente feito com:

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

      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 muitas vezes 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 injetor diretamente:

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

      Para filtrar os resultados de uma invocação direta do injetor, 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 desmontador discordaram quanto ao comprimento da instrução (grep '.r'), mas que foram executadas 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 relação a prefixos 'lock' repetidos (0xf0), você pode direcionar o fuzzer para procurar nessa 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 varrer sistemas muito mais antigos (processadores classe i586, sistemas com pouca memória), passe a flag --low-mem para o sifter e a flag -N para o injetor:

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

      Se você observar que suas varreduras terminam rápido demais (por exemplo, uma varredura termina em segundos), normalmente é porque essas flags são necessárias para o processador que você está varrendo.

    • 32 vs. 64 bits

      Por padrão, o sandsifter é compilado para atingir a arquitetura de bits do sistema operacional host. No entanto, algumas instruções têm comportamentos diferentes quando executadas em um processo de 32 bits em comparação com 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 compilar 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 compilado 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 os resultados pode ser encontrada na apresentação da Black Hat.
    • Detalhes técnicos são descritos no whitepaper.
    • Os slides da apresentação da Black Hat estão aqui.

    Autor

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