Container security Flashcards
Diferencia entre hardware y software
Hardware:
Representa las partes físicas del sistema, como la CPU, la RAM y el almacenamiento (HDD/SSD). Es la base sobre la que opera el software.
Software:
Es el conjunto de instrucciones y datos que permite operar el hardware.
Incluye:
Sistema Operativo (OS): Administra los recursos y actúa como intermediario.
Aplicaciones: Ejecutan tareas específicas.
Componentes del OS:
Componentes del OS:
Se divide en Kernel y User-space:
Kernel:
Es la capa fundamental que gestiona directamente el hardware.
Realiza funciones como:
Gestión de procesos: Manejo de hilos, concurrencia y comunicación entre procesos.
Gestión de memoria: Implementación de paginación, segmentación y memoria virtual.
Gestión de entrada/salida (I/O): Control de interrupciones, almacenamiento, redes, interfaces gráficas, energía, entre otros.
User-space:
Es donde operan las aplicaciones y bibliotecas que interactúan con el kernel.
Incluye bibliotecas estáticas y compartidas para soportar las aplicaciones.
CONTENEDORES:
CONTENEDORES:
Agrupan aplicaciones y dependencias.
Comparten el kernel del sistema operativo (más ligeros que VMs).
Aislamiento:
Usuarios, red, procesos, sistema de archivos.
Características Kernel:
cgroups: Controlan recursos (CPU, memoria).
namespaces: Aíslan red y procesos.
Copy-on-write: Optimiza almacenamiento.
Ventajas:
Ligeros, rápidos y portables.
Ideales para despliegues modernos (Docker, Kubernetes)
Desventajas:
Seguridad: Menos aislamiento, comparten el kernel del sistema anfitrión.
Compatibilidad: Limitados a kernels compatibles (ej. Linux).
Rendimiento: No ideales para procesos intensivos en hardware.
CGroups
Los Control Groups (cgroups) son una funcionalidad del kernel que permite gestionar y restringir recursos asignados a grupos de procesos. Sus características principales son:
Gestión de recursos: Permiten controlar CPU, memoria, red, I/O y PIDs para grupos de procesos.
Sistema jerárquico: Organizan los recursos y aplican límites de forma estructurada.
Controladores dedicados: Garantizan la asignación y cumplimiento de límites para cada tipo de recurso.
Membresía de procesos: Cada proceso pertenece a un cgroup y tiene asignados límites y prioridades.
Herencia: Los procesos hijos heredan configuraciones de cgroups de los procesos padres.
Namespaces en el Kernel:
Namespaces en el Kernel:
Proveen aislamiento controlando qué elementos del sistema puede ver y manipular un proceso.
Mount Namespace (2002):
Aísla el sistema de archivos, permitiendo puntos de montaje separados.
UTS Namespace (2006):
Aísla el nombre de host y el dominio.
IPC Namespace (2006):
Aísla recursos de comunicación entre procesos (colas, memoria compartida).
Network Namespace (2008):
Aísla recursos de red (IP, sockets, tablas de enrutamiento).
PID Namespace (2008):
Aísla IDs de procesos, permitiendo PIDs duplicados en distintos namespaces.
User Namespace (2013):
Aísla IDs de usuario/grupo, permitiendo separación de privilegios.
Cgroup Namespace (2016):
Aísla y gestiona límites de recursos (CPU, memoria) dentro de un namespace.
Time Namespace (2020):
Aísla la percepción del tiempo del sistema entre namespaces.
Capabilities:
Capabilities:
Las capabilities en el kernel dividen los privilegios de superusuario (root) en permisos más pequeños y específicos. Esto permite que los procesos ejecuten acciones privilegiadas sin necesitar acceso completo como root, mejorando la seguridad y el control.
Características principales:
Dividen privilegios root en unidades manejables.
Permiten que procesos ejecuten acciones específicas sin permisos elevados.
Se asignan a nivel de hilo o archivo para control granular.
Syscalls:
Syscalls:
Son la interfaz principal a través de la cual las aplicaciones se comunican con el kernel.
Características:
Permiten a las aplicaciones acceder a servicios del kernel.
Hay alrededor de 400 llamadas al sistema en Linux.
Seccomp-BPF:
Seccomp-BPF:
Es un mecanismo de seguridad que restringe las llamadas al sistema permitidas por un proceso.
Características:
Aplica filtros para monitorear y restringir syscalls.
Reduce la superficie de ataque en aplicaciones contenedorizadas.
Herramientas: strace, falco2seccomp, Tracee.
Docker incluye un perfil que bloquea más de 40 syscalls por defecto.
Chroot:
Chroot:
Cambia el directorio raíz de un proceso al especificar una nueva ruta.
Características:
Aísla el sistema de archivos de un proceso.
Afecta también a los procesos hijos del proceso que llama a chroot.
Facilita la creación de entornos restringidos.
Copy-on-Write (COW) Filesystems:
Copy-on-Write (COW) Filesystems:
Son sistemas de archivos diseñados para optimizar el almacenamiento y el rendimiento al implementar snapshots.
Características:
Los snapshots almacenan solo los datos modificados desde su creación.
Conservan espacio y mejoran la eficiencia.
Ejemplos: Btrfs, ZFS, OverlayFS.
OverlayFS:
OverlayFS:
Es un sistema de archivos que combina un árbol de directorios escribible con uno de solo lectura.
Características:
Los archivos aparecen como un único sistema de archivos unificado.
Las modificaciones se dirigen a la capa superior (escribible), preservando la capa inferior (solo lectura).
Introducido en la versión 3.18 del kernel de Linux.
Estos sistemas de archivos son fundamentales para escenarios donde la eficiencia en la gestión del almacenamiento es crucial, como en contenedores y snapshots.
eBPF (Extended Berkeley Packet Filter):
eBPF (Extended Berkeley Packet Filter):
Tecnología originada en el kernel de Linux que permite ejecutar programas en un entorno privilegiado dentro del kernel.Extiende las capacidades del kernel de manera segura sin necesidad de modificar el código fuente o cargar módulos del kernel.
Características:
Permite ejecutar programas en un entorno controlado y seguro.
Utiliza un compilador Just-In-Time (JIT) y un motor de verificación para garantizar seguridad y eficiencia.
Casos de Uso:
Redes de alto rendimiento.
Balanceo de carga en entornos modernos.
Seguridad de aplicaciones y contenedores en tiempo de ejecución.
Observabilidad y trazabilidad de datos.
Hook, kprobe y uprobe:
Hook: Los programas eBPF se ejecutan en puntos específicos de eventos (llamadas al sistema, entrada/salida de funciones, eventos de red).
kprobe: Instrumentación en el código del kernel para depuración o monitoreo.
uprobe: Instrumentación en espacio de usuario para interactuar con el kernel.
Carga de Programas eBPF:
Compilados en bytecode utilizando LLVM.
Verificación asegura que el programa es seguro.
La compilación JIT optimiza el rendimiento.
Mapas de eBPF:
Almacenan y comparten datos.
Tipos de mapas: tablas hash, LRU, buffers de anillo, trazas de pila, etc.
Llamadas Helper:
Proporcionan funciones predefinidas para acceder a datos, generar números aleatorios, manipular paquetes de red, etc.
Llamadas de Función y Tail:
Llamadas de función permiten definir y ejecutar funciones dentro de programas eBPF.
Tail calls ejecutan otro programa eBPF, reemplazando el contexto.
Herramientas de Desarrollo:
bcc (Python): Framework para trabajar con programas eBPF.
bpftrace: Lenguaje para crear scripts de trazabilidad en entornos basados en eBPF.