
Ferramenta de segurança baseada em eBPF para travar e auditar máquinas Linux. Restringe recursos do kernel, bloqueia execução sem arquivos, protege a memória e endurece contêineres e dispositivos IoT por meio de perfis declarativos.

bpflock - segurança orientada por eBPF para bloquear e auditar máquinas Linux.
Nota: bpflock está atualmente em estágio experimental, pode quebrar, opções e semânticas de segurança podem mudar, alguns programas BPF serão atualizados para usar a biblioteca Cilium ebpf.
bpflock usa eBPF para fortalecer a segurança do Linux. Ao restringir o acesso a uma variedade de recursos do Linux, o bpflock é capaz de reduzir a superfície de ataque e bloquear algumas técnicas de ataque bem conhecidas.
Apenas programas como gerenciadores de contêineres, systemd e outros contêineres/programas que rodam nos namespaces de PID e rede do host têm acesso total aos recursos do Linux; contêineres e aplicações que rodam em seus próprios namespaces serão restringidos.
Se os programas bpf do bpflock forem executados sob o perfil restricted, então todos os programas/contêineres, incluindo os privilegiados, terão seu acesso negado.
bpflock protege máquinas Linux aproveitando múltiplos recursos de segurança, incluindo Linux Security Modules + BPF.
Notas de arquitetura e design de segurança:
bpflock oferece múltiplas proteções de segurança que podem ser classificadas como:
Rastreamento de Sistema e Aplicação
Proteções de Sistema de Arquivos
Proteções de Rede
bpflock mantém a semântica de segurança simples. Ele suporta três perfis globais para cobrir amplamente o espectro de segurança e restringir o acesso a recursos específicos do Linux.
profile: este é o perfil global que pode ser aplicado por programa bpf, ele assume um dos seguintes:
allow|none|privileged : são os mesmos, definem o perfil menos seguro. Neste perfil, o acesso é registrado e permitido para todos os processos. Útil para registrar eventos de segurança.baseline : perfil restritivo onde o acesso é negado para todos os processos, exceto aplicações privilegiadas e contêineres que rodam nos namespaces do host, ou perfis permitidos por cgroup no mapa bpf bpflock_cgroupmap.restricted : perfil fortemente restrito onde o acesso é negado para todos os processos.Operações/comandos Permitidos ou Bloqueados:
Sob os perfis allow|privileged ou baseline, uma lista de comandos permitidos ou bloqueados pode ser especificada e será aplicada.
--protection-allow : lista separada por vírgulas de operações permitidas. Válido sob o perfil baseline, útil para aplicações muito específicas que realizam operações privilegiadas. Isso reduz o uso do perfil allow | privileged, então, em vez de usar o perfil privileged, podemos especificar o baseline e adicionar um conjunto de comandos permitidos para oferecer uma definição caso a caso para tais aplicações.--protection-block : lista separada por vírgulas de operações bloqueadas. Válido sob os perfis allow|privileged e baseline, permite restringir o acesso a alguns recursos sem usar o perfil completo restricted que pode quebrar algumas aplicações específicas. Usar os perfis baseline ou privileged abre a porta para acessar a maioria dos recursos do Linux, mas com a opção --protection-block parte desse acesso pode ser bloqueado.Para exemplos de segurança bpf, veja exemplos de configuração do bpflock
bpflock precisa do seguinte:
Versão do kernel Linux >= 5.13 com a seguinte configuração:
CONFIG_BPF_SYSCALL=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_KPROBES=y
CONFIG_LSM="...,bpf"
CONFIG_BPF_LSM=y
Obviamente um kernel com BTF habilitado.
Se seu kernel foi compilado com CONFIG_BPF_LSM=y, verifique /boot/config-* para confirmar, mas ao executar o bpflock ele falha com:
must have a kernel with 'CONFIG_BPF_LSM=y' 'CONFIG_LSM=\"...,bpf\"'"
Então, para habilitar BPF LSM como exemplo no Ubuntu:
GRUB_CMDLINE_LINUX e salve.
"lsm=lockdown,capability,yama,apparmor,bpf"
ou
GRUB_CMDLINE_LINUX="lsm=lockdown,capability,yama,apparmor,bpf"
sudo update-grub2
Para executar usando o perfil padrão allow ou privileged (o perfil menos seguro):
docker run --name bpflock -it --rm --cgroupns=host \
--pid=host --privileged \
-v /sys/kernel/:/sys/kernel/ \
-v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock
Para registrar e restringir execução de binário sem arquivo execute com: