Tutoriales

Seguridad impulsada por eBPF para bloquear y auditar máquinas Linux

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 cgroup bpflock_cgroupmap mapa bpf.
    • restricted : Archivo de configuración estrictamente restringido, todos los procesos tienen acceso denegado.
  • Allowed o blocked Acción/Comando: en allow|privileged o baseline 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 bajo baseline profile, que es útil para aplicaciones que son demasiado específicas y realizan operaciones privilegiadas.reducirá el uso allow | privileged archivo de configuración, por lo que en lugar de usar privileged archivo de configuración, podemos especificar baseline 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 bajo allow|privileged y baseline archivos de configuración, que permiten restringir el acceso a ciertas funciones sin utilizar la totalidad restricted Puede romper archivos de configuración para algunas aplicaciones específicas.usar baseline o privileged 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-fileTodos 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

LEER  Espero con interés todas las mejoras que obtendrá KDE Plasma con Steam Deck

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba