Parece que o FineIBT combinando o melhor da tecnologia de aplicação de fluxo de controle da Intel e integridade de fluxo de controle como uma implementação de integridade de fluxo de controle (CFI) alternativa aprimorada pode estar pronta para a linha principal com o próximo ciclo do Linux 6.2.
O suporte FineIBT foi adicionado à ramificação x86/core do TIP, onde as alterações do núcleo x86 normalmente residem até serem enviadas como parte da janela de mesclagem do próximo ciclo do kernel. Dado o momento e impedindo que quaisquer problemas sejam levantados com o FineIBT, agora que atingiu o TIP x86/core, é provável que seja enviado para a janela de mesclagem do Linux 6.2 em dezembro.
Os engenheiros da Intel trabalharam neste código”Fine Indirect Branch Tracking”. Conforme explicado no o patch:
Implemente um esquema CFI alternativo que mescla tanto a natureza refinada do kCFI, mas também aproveita ao máximo o CFI de hardware de granulação grossa fornecido pelo IBT.
Para contrastar:
kCFI é um esquema CFI de software puro e depende da capacidade de ler texto–especificamente a instrução *antes* do símbolo de destino e faz a validação de hash *antes* de fazer o call (caso contrário, o fluxo de controle já está comprometido).
FineIBT é um esquema híbrido de software e hardware; garantindo que cada destino de ramificação comece com uma validação de hash, é possível colocar a validação de hash após a ramificação. Isso tem várias vantagens:
o carregamento (hash) é evitado; nenhum memorando; nenhum requisito de RX.
o estado IBT WAIT-FOR-ENDBR é uma parada de especulação; colocando a validação de hash na instrução imediata após o alvo da ramificação, há uma janela de especulação mínima e o todo é uma defesa viável contra o SpectreBHB.
o Kees se sente obrigado a mencionar que é um pouco mais vulnerável quando o invasor pode escrever código.
Obviamente, este patch depende do kCFI, mas também depende do preenchimento dos patches de rastreamento de profundidade de chamadas. Ele usa esse preenchimento para colocar a validação de hash enquanto os sites de chamada são reescritos para modificar o destino indireto para ficar 16 bytes na frente do destino original, atingindo esse novo preâmbulo.
Notavelmente, não há hardware que precise de rastreamento de profundidade de chamada (Skylake) e suporte IBT (Tigerlake em diante).
A opção de configuração para este recurso do kernel está em”FINEIBT”.