Seguridad en las Zonas

mar 05 de febrero del 2008

Viernes Técnicos Hace unos días se realizó el primer viernes técnico en las oficinas de Sun, se trataba de una presentación general de OpenSolaris y sus tecnologías asociadas. Como es lógico, se habló brevemente de las zonas. Uno de los aspectos que despertó más interés fue el modelo de seguridad aplicado para aislar unos procesos de otros.

Así pues, previendo una lluvia de preguntas al respecto cuando demos la charla de virtualización, he decidido profundizar un poco en el tema. Como siempre tomando algunos apuntes.

Como Álvaro, genialmente, introdujo en la charla, el modelo de seguridad de OpenSolaris va más allá del tradicional en *nix, root (id =0) todos los privilegios, los demás usuarios ninguno. En su lugar tenemos un modelo m´s granular, donde podemos asignar a los procesos/usuarios un set de privilegios específicos para realizar las tareas que necesiten.

Por ejemplo, ya no es necesario arrancar un servidor web como root, en su lugar podemos dar a un usuario privilegios para que sus procesos puedan hacer un bind al puerto 80. El hecho que cada proceso pueda ejecutarse con los mínimos privilegios necesarios, en contra del todo o nada tradicional, favorece enormemente la seguridad global del sistema.

Aquí tenemos los privilegios que tiene el demonio sshd:

7194:   /usr/sbin/sshd
flags = <none> 
    E: basic,contract_event,contract_observer,file_chown,
       file_chown_self,fil e_dac_execute,file_dac_read,
       file_dac_search,file_dac_write,file_owner,file_setid,
       ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,
       net_icmpaccess,net_mac_aware,net_privaddr,proc_audit,
       proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_t
       askid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource
   I:  basic
   P:  basic,contract_event,contract_observer,file_chown,
       file_chown_self,fil e_dac_execute,file_dac_read,
       file_dac_search,file_dac_write,file_owner,file_setid,
       ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,
       net_icmpaccess,net_mac_aware,net_privaddr,proc_audit,
       proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_t
       askid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource
   L:  basic,contract_event,contract_observer,file_chown,
       file_chown_self,fil e_dac_execute,file_dac_read,
       file_dac_search,file_dac_write,file_owner,file_setid,
       ipc_dac_read,ipc_dac_write,ipc_owner,net_bindmlp,
       net_icmpaccess,net_mac_aware,net_privaddr,proc_audit,
       proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_t
       askid,sys_acct,sys_admin,sys_audit,sys_mount,sys_nfs,sys_resource


Los privilegios que tienen los procesos dentro de una zona no global están prefijados y no pueden ser alterados por el administrador, este set está diseñado de manera que evita la interacción de los threads entre zonas , así como el uso de algún privilegio para conseguir otros adicionales. Incluso los hilos que se ejecutan con id 0 tienen este set. Estas restricciones no se aplican en la zona global.

Como consecuencia hay una serie de privilegios no podrán adquirir los procesos ejecutándose en una zona no global:

Privilege 			Description
PRIV_NET_RAWACCESS  		Allows a process to have direct access to the 
				network layer.
PRIV_PROC_CLOCK_HIGHRES 	Allows process to create high-resolution timers.
PRIV_PROC_LOCK_MEMORY 		Allows process to lock pages in physical memory.
PRIV_PROC_PRIOCNTL 		Allows process to change scheduling priority or 
				class.
PRIV_PROC_ZONE 			Allows process to control/signal other processes 
				in different zones.
[...]
De esta manera los procesos se hallan aislados de forma efectiva de aquellos que no se están ejecutando en su misma zona.

Obviamente, a parte de la restricción nivel de privilegios, es vital para la seguridad de las zonas, que los derechos de acceso a los distintos recursos sean correctos. Es decir, los privilegios nos indican que "acciones" podemos realizar (p. ej. Un chown), pero donde realizarlas está controlado a nivel de objetos (p. ej. Usando zonecfg damos acceso a los filesystem que nos interesa.).

Es la combinación de ambas cosas, privilegios y restricciones de acceso , lo que finalmente garantiza la seguridad entre zonas.

Espero que esta aburrida entrada ayude un poco a aclarar como funciona la seguridad en las zonas... :)


Posted by Roger Jordan | Categories: Opensolaris
Add comment here
name:
e-mail:
website:
spam-protection, please enter code: captcha, sorry
comment: