BPF busca aprimorar a segurança do Linux com “storage” de credenciais, mas a comunidade debate a melhor implementação

Escrito por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...

BPF quer colar “post-its” nas credenciais — e o kernel debate como fazer isso sem perder performance.

Uma nova proposta para o Kernel Linux visa fortalecer o BPF como ferramenta de segurança, introduzindo um novo tipo de mapa chamado BPF_MAP_TYPE_CRED_STORAGE. A ideia é permitir que programas BPF LSM anexem dados de estado diretamente às credenciais de um processo (struct cred), com o kernel gerenciando automaticamente o ciclo de vida desses dados. Em outras palavras: quando as credenciais “nascem”, o storage nasce junto; quando elas morrem, o storage é limpo — tudo de forma automática. A série de patches (v2), enviada por David Windsor em 12 de setembro de 2025, traz a implementação do mapa, novas kfuncs (bpf_cred_storage_get/delete) e selftests cobrindo o ciclo de vida das credenciais. É trabalho em andamento, mirando uma janela de merge futura (provavelmente 6.18 ou posterior), não algo aceito no mainline.

Para visualizar o benefício, pense que cada processo no sistema carrega um “crachá” (struct cred) com suas permissões. O novo mapa permite que um programa de segurança BPF “cole um post-it” nesse crachá com informações extras — por exemplo, “este processo acessou um arquivo sensível às 14:32”. Quando o processo termina e o crachá é destruído, o post-it é automaticamente descartado. Esse local storage sob medida promete reduzir vazamentos de estado e simplificar políticas mais sofisticadas, como rastrear atividades ao longo do tempo ou detectar padrões que se estendem por múltiplas chamadas de LSM. Os selftests do patch verificam justamente isso: criação, acesso e persistência dos dados ao longo dos eventos de preparo/commit e liberação de credenciais.

O debate da comunidade: local storage vs. hash maps

A proposta, porém, não passou sem questionamentos — e é aqui que a história fica interessante para quem acompanha Linux BPF security. Em respostas públicas, Song Liu pediu que o patch explicite por que um novo tipo de local storage é realmente necessário. O argumento de Song: sistemas normalmente não criam um número explosivo de struct cred, então um hash map “pequeno” indexado por ponteiro de credencial poderia ser suficiente — e até mais rápido — desde que o programa BPF remova as entradas no momento certo (por exemplo, em cred_free).

47MkEQZS image 1
BPF busca aprimorar a segurança do Linux com “storage” de credenciais, mas a comunidade debate a melhor implementação 3

Alexei Starovoitov, mantenedor do BPF, foi mais direto: “tecnicamente possível, mas assim não”. Para ele, cred não justifica acesso ultrarrápido nem requer gerenciamento automático de ciclo de vida; a orientação é usar um hash map com struct cred * como chave. Além disso, Alexei revelou um ponto crucial: os mapas de local storage existentes sofrem hoje de um “performance cliff” — um degrau de performance — que precisa ser resolvido antes de expandir essa técnica para mais objetos do kernel. Em suma, mesmo que a ideia faça sentido conceitual, há uma dívida técnica de performance que impede “copiar e colar” o padrão para novas estruturas como credenciais.

Windsor, por sua vez, defendeu que o local storage traz uma vantagem de correção difícil de replicar com hash maps: o gerenciamento automático evita “entradas obsoletas” — um risco real porque struct cred pode ser clonada em prepare_creds e trocada em commit_creds antes da liberação da original. Em cenários em que a política precisa “seguir” a credencial ao longo desse vai-e-vem, a cola automática do local storage parece mais confiável (e menos propensa a vazios temporais) do que um hash map manualmente higienizado. Ainda assim, diante da preocupação com performance e das diretrizes do mantenedor, o autor reconheceu que alternativas — como embrulhar rhashtable em um novo tipo de mapa — podem ser um caminho pragmático enquanto a comunidade investiga e corrige o tal “cliff”.

O que isso significa na prática para políticas de LSM baseadas em BPF

Para quem escreve políticas com BPF LSM, a proposta acena com um modelo mais limpo de estado por processo: vincular decisões e “históricos” diretamente às credenciais, que são a identidade de execução do processo em chamadas sensíveis (acesso a arquivos, mudanças de UID, operações de rede protegidas etc.). Em termos práticos, o BPF_MAP_TYPE_CRED_STORAGE permitiria:

  • associar um valor por credencial — por exemplo, um carimbo de tempo da última ação sensível — sem gerenciar manualmente o nascimento e a morte dessa entrada;
  • inicializar dados durante cred_prepare e validar ou consolidar durante cred_free, com selftests já exercitando esse fluxo;
  • reduzir as chances de “vazamento” de entradas de mapa quando processos têm credenciais de vida curta ou se reautenticam com frequência.

Ao mesmo tempo, o debate deixa duas mensagens claras. Primeiro: não é feature aceita — é uma proposta (v2) que depende de consenso técnico; a discussão de arquitetura (e performance) vai guiar os próximos passos. Segundo: mesmo quem simpatiza com o design precisa encarar o custo/benefício na realidade atual do BPF — especialmente à luz do performance cliff nos local storages e da alternativa relativamente simples de um hash map com limpeza em hooks como cred_free. Em outras palavras, o futuro do cred storage vai depender tanto do “por quê” (correção e ergonomia) quanto do “como” (custos e efeitos colaterais).

Panorama e próximos passos

Como toda boa mudança no kernel, a proposta nasceu em patches, ganhou selftests e agora vive no escrutínio da lista — com feedback de quem mantém e perfila o BPF diariamente. Há um fio condutor: LSMs clássicos (como SELinux, AppArmor, Landlock) sempre dependeram de blobs ligados a objetos-chave (credenciais, inodes, arquivos). O esforço do BPF é alcançar essa mesma capacidade de maneira segura e performática, sem reinventar rodas que já giram no kernel. A questão central — local storage versus hash map para struct cred — é menos sobre “poder” e mais sobre “dever”: qual abordagem equilibra correção, simplicidade e performance hoje? O consenso ainda não chegou, mas a conversa está andando — que é exatamente como o Linux evolui.

Compartilhe este artigo