Kernel Control Flow Integrity (KCFI) é uma técnica de segurança que visa garantir a integridade do fluxo de controle de programas em execução no kernel do sistema operacional. O fluxo de controle é a ordem em que as instruções são executadas pelo processador, e pode ser alterado por chamadas de função, retornos de função, saltos condicionais ou incondicionais, exceções e interrupções. Se um atacante consegue modificar o fluxo de controle de forma maliciosa, ele pode executar código arbitrário no contexto do kernel, comprometendo a segurança e a estabilidade do sistema.
O KCFI é uma implementação de Control Flow Integrity (CFI) para o kernel Linux, baseada no compilador LLVM modificado e que atualmente suporta o kernel a partir da versão 3.19. O KCFI utiliza uma abordagem de instrumentação estática, que insere verificações de integridade nas arestas de fluxo de controle (forward edges e backward edges) do grafo de chamadas do programa. As forward edges são as chamadas de função, que devem respeitar um conjunto de destinos válidos para cada chamador. As backward edges são os retornos de função, que devem corresponder ao endereço armazenado na pilha pelo chamador. O KCFI utiliza um mecanismo de shadow stack para proteger os endereços de retorno na pilha, e uma tabela de destinos válidos para verificar as chamadas de função.
O KCFI é projetado para o RISC-V, uma arquitetura aberta e reduzida de conjunto de instruções (RISC) desenvolvida principalmente para sistemas embarcados e em tempo real. O RISC-V tem algumas vantagens para a implementação do KCFI, como a disponibilidade de registradores reservados para uso do compilador, a simplicidade do conjunto de instruções e a modularidade da arquitetura. No entanto, o RISC-V também apresenta alguns desafios, como a falta de suporte nativo para instruções indiretas, a limitação do tamanho das instruções e a diversidade das extensões opcionais.
O KCFI é um projeto multi-licença, que depende de diferentes tecnologias, como o LLVM, o kernel Linux e o GCC. Para mais informações técnicas sobre o KCFI, consulte os documentos disponíveis aqui.