Cómo utilizar la función de capacidad para mejorar la seguridad de los sistemas Linux

  
 

Resumen: El modelo de control de acceso de los sistemas UNIX tradicionales es muy simple: de usuarios ordinarios a superusuarios. En este modelo, un proceso o cuenta tiene un privilegio pequeño o todos los privilegios del sistema. Obviamente, esto no es bueno para la seguridad del sistema. Comenzando con el kernel Linux-2.1, se introdujo el concepto de capacidad para lograr un control de acceso más preciso.

1. Introducción

UNIX es una caja fuerte y sistema operativo
, que ofrece a los usuarios permisos ordinarios lo más bajo posible, y poner todos los privilegios del sistema dado a una sola cuenta --root La cuenta raíz se usa para administrar el sistema, instalar software, administrar cuentas, ejecutar ciertos servicios, instalar /desmontar sistemas de archivos, administrar usuarios, instalar software y más. Además, muchas operaciones de usuarios ordinarios también requieren privilegios de root, lo que se logra mediante setuid.

Esta dependencia de una sola cuenta para realizar operaciones privilegiadas la manera de aumentar el riesgo del sistema, y ​​el programa puede necesitar privilegios de root sólo para una sola operación, por ejemplo: se unen a un puerto privilegiado, abrir una raíz única Los permisos pueden acceder a los archivos. Algunos programas pueden tener vulnerabilidades de seguridad, y si el programa no se ejecuta como root, es posible que sus vulnerabilidades no supongan una amenaza para el sistema.

A partir de la versión 2.1, los desarrolladores de kernel han agregado el concepto de capacidades al kernel de Linux. El objetivo es eliminar la dependencia del programa que necesita realizar ciertas operaciones en la cuenta raíz. Comenzando con el núcleo 2.2, estas generaciones son básicamente utilizables, aunque todavía existen algunos problemas, pero la dirección es correcta.

2.Linux capacidad central
detallada

tradicional modelo de credenciales UNIX es muy simple, es y " súper usuario para los usuarios y " ordinarios modelo. En este modelo, un proceso puede hacer cualquier cosa o casi nada, dependiendo del UID del proceso. Se requieren privilegios de raíz completos si un proceso necesita realizar operaciones como el enlace a un puerto privado, la carga /descarga de módulos del kernel y la administración de sistemas de archivos. Obviamente, esto representa una gran amenaza para la seguridad del sistema. El problema de SUID en los sistemas UNIX es causado por este modelo de confianza. Por ejemplo, un usuario normal necesita usar el comando ping. Este es un comando SUID que se ejecutará con privilegios de root. De hecho, este programa solo necesita sockets RAW para establecer los paquetes ICMP necesarios, y otros privilegios de raíz no son necesarios para este programa. Si el programa no está bien escrito, puede ser explotado por el atacante para obtener el control del sistema.

La capacidad puede reducir este riesgo. El administrador del sistema puede privar al usuario root de la seguridad del sistema, de modo que incluso el usuario root no podrá realizar ciertas operaciones. Este proceso es irreversible, lo que significa que si se elimina una capacidad, el usuario root no puede volver a agregar la capacidad eliminada a menos que se reinicie el sistema.

2.1. El concepto de capacidades

El concepto de capacidades utilizado en el kernel de Linux es muy confuso. Una amplia variedad de capacidades se definen en la informática. Una capacidad es una operación que un proceso puede realizar en un objeto, marca el objeto y las operaciones permitidas en ese objeto. descriptor de archivo es un tipo de habilidad, se utiliza la llamada de sistema abierto para solicitar permiso para leer o escribir, si tiene éxito la llamada al sistema abierto, repentina División Zheng Qiao del sistema ⒁ Huan Xin Colmillo levantó desnudo lenta con una lombriz intestinal H atado en un plátano copa de la liga Liang Yang silbante soplarlo Naxizhengsi Tuiguamisun Xinmufangzi Chihuanmouqi Maogounaitao Menxianghuidi Mu Tong pesadilla Qianbishidui T línea flexible sistema de pluma Х Jiaojianshicong Wei Huizhihujin ㄏ delicado y Ficus La llamada es, el kernel establece la estructura de datos necesaria al mismo tiempo, y luego la verificación de la operación, como la lectura y la escritura, solo debe estar en la estructura de datos. Las operaciones sobre capacidades incluyen: capacidades de replicación, capacidad de moverse entre procesos, modificación de una capacidad y deshacer una capacidad. Modificar una capacidad es similar a cambiar un descriptor de archivo que se puede leer o escribir en solo lectura. En la actualidad, el grado de aplicación de capacidades a varios sistemas no es el mismo.

POSIX 1003.1e también propone una definición de capacidad, comúnmente denominada capacidad POSIX, que no es la misma que la definida en Linux. El kernel usa estas capacidades para dividir los privilegios de root porque los permisos de root son demasiado poderosos en los sistemas tradicionales * NIX.

2.2.Linux cómo utilizar las capacidades POSIX
en lugar del modelo tradicional de credenciales

Hay tres y cada proceso relacionado con la capacidad de un mapa de bits: heredable (I), permitida (P) y eficaz (E), que se corresponde con el proceso descrito en task_struct carácter cap_effective (incluya /Linux /sched.h), cap_inheritable, cap_permitted. Cada capacidad está representada por uno, con 1 indicando alguna habilidad y 0 indicando no. Cuando un proceso es ser una operación privilegiada, los controles del sistema operativo cap_effective bit correspondiente es válido, pero ya no es proceso de UID de cheques válida es 0. Por ejemplo, si un proceso es establecer el reloj del sistema, núcleo de Linux comprobará cap_effective de CAP_SYS_TIME bits (bit 25) es válida, España

cap_permitted capacidad para expresar el proceso puede ser utilizado. En cap_permitted puede contener no cap_effective capacidad, que es el proceso de su propia capacidad de renunciar temporalmente, se puede decir cap_effective es un subconjunto de cap_permitted. El proceso de abandonar capacidades innecesarias es una gran ayuda para mejorar la seguridad. Por ejemplo, sólo se necesita de ping CAP_NET_RAW, si se renuncia a otras capacidades, además de esta capacidad, incluso si hay un fallo de seguridad, no sería causar demasiado daño al sistema. Cap_inheritable representa la capacidad de ser heredado por un programa ejecutado por el proceso actual.

capacidades de soporte 3.Linux

Linux para lograr las disposiciones POSIX 1003.1e 7 de habilidad, así como 21 (a partir de la versión del kernel 2.4.7-10) específico de Linux Estas capacidades se definen en el archivo /usr/src/linux/include/linux/capability.h. Los detalles son los siguientes:

capacidad digital a la descripción del nombre CAP_CHOWN 0 CAP_DAC_OVERRIDE permitido cambiar la propiedad de un archivo de ignorar todas las restricciones de acceso a archivos CAD CAP_DAC_READ_SEARCH 2 ignorar todas las restricciones CAP_FOWNER leen, las operaciones de búsqueda 3 UID si el archivo pertenece al proceso , restricciones cancelados CAP_FSETID de archivo de 4 permite que la señal de transmisión CAP_KILL bit setuid 5 permite CAP_SETGID al proceso no pertenece a su 6 permite cambia el ID de grupo la capacidad CAP_SETUID 7 permite cambiar el CAP_SETPCAP ID de usuario 8 permite ninguna a otros procesos de metástasis y eliminar otros procesos capacidad CAP_LINUX_IMMUTABLE 9 permitido modificar el archivo no se puede modificar (inmutable) y sólo añadir (sólo anexo) CAP_NET_BIND_SERVICE propiedad 10 permite que se una a CAP_NET_BROADCAST puerto 11 menos de 1024 permite la difusión de la red y el acceso de multidifusión CAP_NET_ADMIN 12 permitido para realizar tareas de administración de red: Interfaz, enrutamiento y cortafuegos, por favor véase el documento /usr/src/linux/include/linux/capability.h CAP_NET_RAW 13 permiten crudo (RAW) CAP_IPC_LOCK casquillo 14 permite que los segmentos de memoria compartida de bloqueo CAP_IPC_OWNER 15 ignoradas cheques propiedad IPC CAP_SYS_MODULE 16 inserciones y eliminaciones módulo del núcleo CAP_SYS_RAWIO 17 permite CAP_SYS_CHROOT ioperm /acceso iopl 18 permite el uso de chroot () llamada al sistema CAP_SYS_PTRACE 19 permite el seguimiento de cualquier CAP_SYS_PACCT proceso 20 le permite configurar cuentas de proceso (contabilidad de procesos) CAP_SYS_ADMIN 21 permisos Realice las tareas de administración del sistema: cargue /descargue sistemas de archivos, establezca cuotas de disco, encienda /apague los dispositivos y archivos, y más. Consulte el archivo /usr/src/linux/include/linux/capability.h para obtener más información.

Copyright © Conocimiento de Windows All Rights Reserved