.
Vídeo Boffins da ETH Zurich desenvolveu um novo fuzzer para encontrar bugs em chips RISC-V e o usou para encontrar mais de três dúzias.
Fuzzing é uma técnica que envolve fornecer informações aleatórias ao software ou hardware para ver como ele responde. É comumente usado para identificar erros de código ou falhas arquitetônicas e é amplamente utilizado na comunidade de segurança.
Mas os atuais fuzzers de CPU têm limitações que os tornam menos eficazes. Por exemplo, eles podem não cobrir toda a arquitetura do conjunto de instruções (ISA) ou podem não gerenciar controle de fluxo bem, o que significa que os bugs são perdidos. Portanto, uma nova abordagem está sendo posta à prova.
Flavien Solt e Katharina Ceesay-Seitz, estudantes de doutorado da ETH Zurique, e Kaveh Razavi, professor assistente da ETH Zurique, chamam o projeto Cascata.
“Flavien começou observando os casos de teste gerados por outros fuzzers e rapidamente percebeu que eles eram muito simples ou falhavam precocemente, o que tornava os fuzzers existentes amplamente ineficazes”, explicou Razavi ao Strong The One. “Então ele começou a pensar em como fazer programas arbitrariamente longos e complexos? Foi isso que o levou ao design do Cascade.”
Ao contrário de outros fuzzers de CPU, o Cascade pode construir longos programas aleatórios que gerenciam o fluxo de controle durante a execução. Isso permite que o fuzzer investigue o silício mais detalhadamente. A técnica é descrita em um papel [PDF] que está programado para ser apresentado no próximo ano na USENIX Security ’24.
O que separa o Cascade de ferramentas semelhantes é que ele depende de uma técnica chamada pré-simulação ISA assimétrica.
“A ideia básica é usar o simulador ISA para descobrir como entrelaçar o fluxo de controle aleatório com o fluxo de dados aleatório”, explicou Razavi.
“Esse emaranhamento oferece algumas propriedades interessantes: o programa sempre termina corretamente em uma CPU que executa tudo corretamente, apesar do controle aleatório e dos fluxos de dados. Portanto, se isso não acontecer, significa que desencadeou um bug na CPU. O emaranhamento também permite Cascade para construir programas de teste arbitrariamente grandes, mas altamente complexos, que podem confundir a CPU com muita eficiência.”
Razavi explicou que o Cascade gera inicialmente um programa intermediário no qual o fluxo de controle é independente do fluxo de dados, mas inclui espaços reservados para adicionar essa dependência posteriormente.
“O Cascade então usa o simulador ISA para descobrir como atualizar esses espaços reservados e torna o fluxo de controle dependente do fluxo de dados, gerando o programa de teste definitivo”, disse ele. Você pode vê-lo em ação abaixo.
Quando aplicado a seis CPUs RISC-V reais – VexRiscv, PicoRV32, Kronos, CVA6, Rocket e BOOM – Cascade encontrou 37 novos bugs (traduzindo-se em 29 CVEs) em cinco desses seis designs. Estas falhas, que os autores dizem terem sido divulgadas de forma responsável, têm consequências como permitir a fuga de informações, negação de serviço, sequestro de fluxo de controlo, falta de verificações e exceções espúrias que quebram os limites de isolamento de níveis de privilégio mais elevados.
Os cientistas da computação da ETH Zurich afirmam que, em comparação com outros fuzzers como TheHuzz e DifuzzRTL, o Cascade alcançou cobertura semelhante, mas 28 a 97 vezes mais rápido. Eles também relatam ter encontrado um bug crítico no Yosys estrutura para síntese Verilog RTL que resulta em um erro lista de rede.
Razavi disse que o RISC-V ISA funciona bem com o Cascade porque não é muito complicado. “RISC-V é um ISA simples por construção”, explicou ele. “É daí que vem o R no RISC (R = Reduzido). Essa simplicidade tornou fácil a construção de um fuzzer que exercita uma grande fração das funcionalidades fornecidas pelo ISA e implementadas pelas CPUs.”
“Fazer algo como o Cascade para um ISA como o x86, que é um CISC (C=Complex), embora conceitualmente semelhante, será um empreendimento de engenharia mais massivo. Acho que alguém deveria fazer isso!” ®
.