OpenBSD terá um novo Kernel a cada reinicialização do sistema!

OpenBSD 6.9 lançado com suporte ao SoC M1 da Apple
openbsd

Uma grande novidade surge no OpenBSD, pois é, ele ainda esta em teste e agora a cada vez que o OpenBSD for reiniciado ele terá um novo Kernel, de forma particular eu nunca imaginaria que isso fosse possível, afinal, quando vamos compilar um Kernel ou até subir um módulo demoramos algum tempo e certamente muito superior a segundos.

Mas,  antes que isso pareça algo do mundo do Bob, vamos entender como tudo acontece!

Um novo Kernel a cada reinicialização do OpenBSD!

Esse novo recursos é chamado de KARL (Kernel Address Randomized Link) ou em nosso idioma Link Aleatório de endereço do Kernel, a função dele é reciclar arquivos internos do Kernel em ordem aleatória, e o resultado disso é que ele vai gerar um blob binário do kernel exclusivo sempre que o sistema for reiniciado.

O Kernel do OpenBSD atualmente vem com um ordem já definida, ele carrega tudo de forma sequencial e aí todo mundo tem o mesmo Kernel, mas isso esta mudando.

O que muda no KARL em relação ao ASLR ?

O grande idealizador do KARL foi o desenvolvedor Theo de Raadt, ele explica que o novo Kernel vai gerar um novo binário tanto na instalação, atualização e na inicialização. Mas há um lógica aí que mata um pouco aquela desconfiança de que não vai dar certo.

Bom, a lógica é que durante a instalação será gerado um novo kernel, em seguida também será gerado um novo binário que será usado na próxima atualização, inicialização ou reinicialização do sistema. Sendo assim, ele não pode ser comparado ao ASLR (Address Space Layout Randomization) ou em nosso idioma Aleatorização do Layout do Espaço de Endereçamento, neste caso, é gerado um endereço aleatório de memória aonde o código do aplicativo é executado.

Como resultado, cada novo Kernel é único!

Esclarece Raadt

E quando as idéias sobre o KARL começaram ?

As idéias sobre o KARL começaram a poucos meses, em maio, e aí surgiram os primeiros testes, que foram discutidos na lista do OpenBSD em junho, e aí o primeiro lançamento do KARL foi feito para o OpenBSD 6.1, mas que os usuários vão precisar instalar, porque ainda não é um padrão. Theo Raadt diz que outras mudanças adicionais foram implementadas com a ajuda do Robert Peichaer como o do novo Kernel a cada reinicialização e que espera que possa lançar o KARL no OpenBSD 6.2 já instalado.

Fazendo pesquisas na Internet, e de forma particular, não encontramos nada parecido com o KARL o que certamente é um recurso exclusivo do OpenBSD, esse assunto ainda não chegou as listas públicas do Linux Kernel até o momento da escrita deste artigo.

Nada impede que este novo recurso seja implementado no Linux Kernel, afinal o KASLR que citamos acima, foi lançado na versão 4.12 do Linux Kernel, acreditamos que seja uma questão de tempo, até a Microsoft usou o KASLR por muito tempo, mas o Kernel do Windows não é compatível com o KARL “até agora”, e sabemos tudo pode mudar.

Esse novo recursos é de fato um grande aprimoramento em torno tanto de novas tecnologias, quanto segurança, pois mesmo que você use o KASLR onde você soubesse o endereço de memória aonde o Kernel é iniciado, mesmo ele sendo aleatório, se conseguisse descobrir este endereço o usuário mau intencionado conseguiria ter acesso as funções relativas a inicialização do Kernel, claro, ainda não há como descobrir, mas vamos supondo.

Em termos de segurança como fica o KARL ?

No KARL a coisa fica mais difícil, o cracker teria que descobrir o endereço de memória, e teria que descobrir o outro endereço aonde estão localizadas as funções de inicialização do Kernel, e ainda piora, cada usuário teria um endereço diferente, cada sistema vai gerar uma localização diferente sempre, então uma vulnerabilidade neste quesito iria valer somente para 1 único usuário até a próximo reinicialização, ou seja, assim que a vítima reiniciar o computador, o cracker perdeu todo o trabalho e terá que fazer tudo de novo, e seria vencido pelo cansaço a cada inicialização.

Bom, se você quiser saber todos os detalhes técnico sobre cada item, clique nos botões correspondentes:

KARL em Junho KARL em Julho – OpenBSD 6.1 KASLR no Linux Kernel

Continuaremos acompanhando as novidades do recurso!