Um grupo de pesquisadores da Universidade Livre de Amsterdã publicou o kit de ferramentas Kasper, destinado a identificar no núcleo do Linux fragmentos de código que podem ser usados para explorar vulnerabilidades do tipo Spectre, causadas pela execução especulativa de código pelo processador. Os códigos-fonte do kit de ferramentas são distribuídos sob a licença Apache 2.0.
Lembramos que para realizar ataques como o Spectre v1, que permitem determinar o conteúdo da memória, é necessária a presença em código privilegiado de uma sequência específica de instruções (gadgets), que leva à execução especulativa de instruções. Para otimização, o processador começa a executar esses gadgets em modo especulativo, depois determina que a previsão de bifurcação não se concretizou e reverte as operações ao estado original, mas os dados processados durante a execução especulativa permanecem no cache e nos buffers microarquiteturais e estão disponíveis para extração por meio de vários métodos de determinação de dados remanescentes por canais laterais.
Ferramentas anteriormente disponíveis para escanear gadgets para a vulnerabilidade Spectre, baseadas na busca de padrões típicos, mostravam um alto nível de falsos positivos, enquanto deixavam passar muitos gadgets reais (experimentos mostraram que 99% dos gadgets identificados por essas ferramentas não podiam ser usados para ataques, e 33% dos gadgets funcionais, capazes de levar a um ataque, não foram detectados).
Para melhorar a qualidade da identificação de gadgets problemáticos, o Kasper modela as vulnerabilidades que um invasor pode explorar em cada etapa de execução de ataques do tipo Spectre — são modelados problemas que permitem controlar dados (por exemplo, inserção de dados do invasor em estruturas microarquiteturais para influenciar a execução especulativa subsequente por meio de ataques do tipo LVI), acessar informações confidenciais (como em casos de estouro de buffer ou ao utilizar memória após ela ter sido liberada) e facilitar a vazamento de informações confidenciais (por exemplo, analisando o estado do cache do processador ou utilizando o método MDS).

Durante os testes, o núcleo se conecta às bibliotecas de tempo de execução do Kasper e às verificações que operam no nível do LLVM. No processo de verificação, realiza-se a emulação da execução especulativa de código, implementada por meio do mecanismo de checkpoint-restore, que executa especificamente o ramo de código incorretamente previsto, e após isso, reverte ao estado inicial antes da ramificação. O Kasper também tenta modelar várias vulnerabilidades de software e hardware, analisa os impactos de efeitos arquiteturais e microarquiteturais, e realiza testes de fuzzing para avaliar possíveis ações de um atacante. Para analisar fluxos de execução, é utilizado o port DataFlowSanitizer para o núcleo Linux, e para os testes de fuzzing, uma versão modificada do pacote syzkaller.

Durante a digitalização do núcleo Linux com o auxílio do Kasper, foram identificados 1379 gadgets desconhecidos anteriormente, que potencialmente podem levar a vazamentos de dados durante a execução especulativa de instruções. Observa-se que apenas uma parte deles pode representar problemas reais, mas para demonstrar que há um perigo real e não apenas teórico, foi desenvolvido um protótipo funcional do exploit para um dos trechos problemáticos do código, resultando em vazamentos de informações da memória do núcleo.
Fonte: opennet.ru
