Um engenheiro da Microsoft está propondo o Trampoline File Descriptor “TRAMPFD” como uma nova API do kernel para lidar com segurança com o código ‘trampoline‘ nos sistemas. Já existem preocupações sobre as possíveis implicações no desempenho. No entanto, parece haver algum interesse nessa abordagem. Portanto, com essas medidas, a Microsoft quer melhorar segurança do Linux.
O TRAMPFD visa proteger melhor o código usado como funções nested do GCC e a biblioteca Foreign Function Interface (libffi), onde as páginas com as instruções tendem a ser mapeadas com permissões de execução.
Embora existam módulos de segurança Linux e SELinux que tentam se proteger de páginas que possuem permissões de gravação e execução, Madhavan Venkatarama, da Microsoft, tem como objetivo fornecer uma maneira de executar os chamados trampolines com segurança, sem abrir exceções de segurança e reduzir ainda mais a superfície potencial de ataque.
Microsoft quer melhorar segurança do Linux
O TRAMPFD visa fornecer uma API do kernel apoiada por descritores de arquivos anônimos que podem ser usados para criar e executar trampolines.
O kernel cria o mapeamento de trampolim sem nenhuma permissão. Quando o trampoline é executado pelo código do usuário, ocorre uma falha na página e o kernel assume o controle. O kernel reconhece que esta é uma chamada de trampoline. Ele configura os registros do usuário com base no contexto de registro especificado e/ou envia valores na pilha do usuário com base no contexto de pilha especificado e define o PC do usuário para o PC de destino solicitado. Quando o kernel retorna, a execução continua no PC de destino. Portanto, o kernel faz o trabalho do trampoline em nome do aplicativo.
Um hacker pode atacar um aplicativo com uma vulnerabilidade e pode modificar o buffer de contexto. Portanto, quando o contexto de registro ou stack é definido para um trampoline, os valores podem ter sido adulterados. Do ponto de vista da superfície de ataque, isso é semelhante à emulação de trampoline. Mas com o trampfd, o código do usuário pode recuperar o contexto de um trampoline do kernel e adicionar verificações defensivas para saber se o contexto foi violado.
O Trampoline File Descriptor tem como objetivo ser personalizável, fornecer uma estrutura para futuros tipos de trampolines e fornecer outras funcionalidades do kernel.
Mais detalhes sobre o trabalho proposto no kernel do TRAMPFD e a discussão que se seguiu até o momento, através deste thread de lista de discussão do kernel.