
bandada de bp Utilice eBPF para fortalecer la seguridad de Linux. Al restringir el acceso a varias funciones de Linux, bpflock reduce la superficie de ataque y bloquea algunas técnicas de ataque conocidas.
Solo los programas como administradores de contenedores, systemd y otros contenedores/programas que se ejecutan en el pid del host y el espacio de nombres de la red tendrán acceso a la funcionalidad completa de Linux, los contenedores y las aplicaciones que se ejecutan en su propio espacio de nombres estarán limitados.Si el programa bpflock bpf está en restricted
profile entonces se denegará el acceso a todos los programas/contenedores, incluidos los privilegiados.
bpflock protege las máquinas Linux aprovechando varias funciones de seguridad, incluido el módulo de seguridad Linux + BPF.
Notas de arquitectura y diseño de seguridad:
- bpflock no es una solución de etiquetado de control de acceso obligatoria, ni pretende reemplazar a AppArmor, SELinux y otras soluciones MAC. bpflock utiliza un perfil de seguridad declarativo simple.
- bpflock proporciona varios programas bpf pequeños que se pueden reutilizar en múltiples contextos, desde implementaciones nativas de la nube hasta dispositivos IoT de Linux.
- bpflock puede restringir el acceso de raíz a algunas funciones de Linux, pero no puede evitar la raíz maliciosa.
Resumen funcional
función de seguridad
bpflock proporciona una variedad de protecciones de seguridad, que se pueden categorizar como:
- protección de la memoria
- bloqueo de imagen del kernel
- Protección del módulo del kernel
- protección BPF
- Protección de procesos
- Ejecución de memoria sin archivos
- protección del espacio de nombres
- ataque de adición de hardware
- Seguimiento de sistemas y aplicaciones
- Seguimiento de la ejecución de la aplicación
- Realizar un seguimiento de las operaciones del sistema privilegiado
- protección del sistema de archivos
- Protección del sistema de archivos raíz de solo lectura
- protección de archivos del sistema
- protección de la red
- bpflock puede incluir una protección de red simple en el futuro para cargas de trabajo independientes o Linux-IoT, pero no incluirá protección nativa en la nube. Cilium y otras soluciones relacionadas con Kubernetes CNI son mucho mejores.
semántica
bpflock mantiene la semántica de seguridad simple.es compatible con tres Global Perfiles para cubrir ampliamente los perímetros de seguridad y restringir el acceso a funciones específicas de Linux.
profile
: Este es un archivo de configuración global que puede ser aplicado por cada programa bpf, toma uno de los siguientes:allow|none|privileged
: son lo mismo, definen el perfil menos seguro. En este archivo de configuración, todos los procesos se registran y se les permite el acceso. Se utiliza para registrar eventos de seguridad.baseline
: perfil restrictivo, se deniega el acceso a todos los procesos, excepto a las aplicaciones y contenedores privilegiados que se ejecutan en el espacio de nombres del host, o perfiles permitidos por cgroupbpflock_cgroupmap
mapa bpf.restricted
: Archivo de configuración estrictamente restringido, todos los procesos tienen acceso denegado.
Allowed
oblocked
Acción/Comando: enallow|privileged
obaseline
Un archivo de configuración que puede especificar una lista de comandos permitidos o bloqueados y aplicarlos.--protection-allow
: Lista separada por comas de operaciones permitidas.válido bajobaseline
profile, que es útil para aplicaciones que son demasiado específicas y realizan operaciones privilegiadas.reducirá el usoallow | privileged
archivo de configuración, por lo que en lugar de usarprivileged
archivo de configuración, podemos especificarbaseline
One y agregue un conjunto de comandos permitidos para proporcionar definiciones caso por caso para dichas aplicaciones.--protection-block
: Lista separada por comas de operaciones de bloqueo.válido bajoallow|privileged
ybaseline
archivos de configuración, que permiten restringir el acceso a ciertas funciones sin utilizar la totalidadrestricted
Puede romper archivos de configuración para algunas aplicaciones específicas.usarbaseline
oprivileged
Los archivos de configuración abren la puerta para acceder a la mayoría de las funciones de Linux, pero use--protection-block
Opciones para bloquear ciertos accesos.
Para ver un ejemplo de seguridad de bpf, consulte el ejemplo de configuración de bpflock
desplegar
requisitos previos
bpflock requiere lo siguiente:
- Linux kernel versión >= 5.13, la configuración es la siguiente:
CONFIG_BPF_SYSCALL=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_KPROBES=y
CONFIG_LSM=»…,bpf»
CONFIG_BPF_LSM=y
- Aparentemente, un kernel habilitado para BTF.
Habilitar la compatibilidad con BPF LSM
Si su núcleo está usando CONFIG_BPF_LSM=y
una examinacion /boot/config-*
Confirma, pero falla al ejecutar bpflock con:
Debe haber un kernel ‘CONFIG_BPF_LSM=y’ ‘CONFIG_LSM=\»…,bpf\»‘»
Luego tome la habilitación de BPF LSM en Ubuntu como ejemplo:
- Por supuesto, abra el archivo /etc/default/grub con privilegios.
- Adjunte lo siguiente a
GRUB_CMDLINE_LINUX
variable y guardar
«lsm=bloqueo, habilidad, yama, apariencia, bpf»
o
GRUB_CMDLINE_LINUX=”lsm=bloqueo,capacidad,yama,apariencia,bpf”
actualizar la configuración de grub
sudo update-grub2
Despliegue de ventana acoplable
ejecutar con valores predeterminados allow
o privileged
Perfil (perfil menos seguro):
ventana acoplable ejecutar –nombre bpflock -it –rm –cgroupns=host \
–pid=host –privilegio\
-v /sys/kernel/:/sys/kernel/\
-v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock
Archivos de configuración y entorno
La configuración se puede pasar como un montaje de enlace usando el siguiente comando.
Supongamos que los archivos de configuración bpflock.yaml y bpf.d están configurados en el directorio actual bpflock
directorio, entonces podemos usar:
ls bpflock/
bpf.d bpflock.d bpflock.yaml
docker run –name bpflock -it –rm –cgroupns=host –pid=host –privileged \
-v $(contraseña)/bpflock/:/etc/bpflock\
-v /sys/kernel/:/sys/kernel/\
-v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock
Pasar variables de entorno también se puede hacer usando un archivo --env-file
Todos los parámetros están disponibles como variables de entorno. BPFLOCK_$VARIABLE_NAME=VALUE
Formato.
Ejemplo de ejecución con variables de entorno en el archivo:
docker run –name bpflock -it –rm –cgroupns=host –pid=host –privileged \
–archivo env bpflock.env.list \
-v /sys/kernel/:/sys/kernel/\
-v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock
Hospedarse
bpflock usa docker BuildKit para construir y Golang para algunas comprobaciones y pruebas en ejecución. bpflock está integrado en el contenedor de Ubuntu para descargar paquetes estándar de golang.
Ejecute el siguiente comando para construir el contenedor acoplable bpflock:
actualización del submódulo git –init –recursive
hacer
Los programas bpf se construyen usando libbpf. La imagen acoplable utilizada es Ubuntu.
Si solo desea compilar el programa bpf directamente sin usar la ventana acoplable, entonces en Ubuntu:
sudo apt install -y pkg-config bison binutils-dev build-essential \
flex libc6-dev clang-12 libllvm12 llvm-12-dev libclang-12-dev \
zlib1g-dev libelf-dev libfl-dev gcc-multilib zlib1g-dev \
libcap-dev libiberty-dev libbfd-dev