Mito o realidad: ¿SELinux puede limitar al usuario root?

20

Leí u oí en alguna parte (tal vez en el curso SELinux de LinuxCBT ; pero no estoy seguro) que hay servidores Linux en línea, para los cuales también se proporciona la contraseña del usuario raíz. El servidor Linux se fortalece utilizando las reglas de SELinux, de modo que todos puedan iniciar sesión con el usuario raíz, pero no pueden dañar el sistema operativo.

Me parece un mito, pero quería asegurarme: ¿Es posible fortalecer una caja de Linux (posiblemente con SELinux), de modo que incluso el usuario root no pueda realizar actividades maliciosas específicas en ella? (Ejemplos: eliminar archivos del sistema, borrar archivos de registro, detener servicios críticos, etc.)

Tal caja de Linux será un gran punto de partida para construir un honeypot .

Editar: según una respuesta (ahora eliminada) y un poco de Google, obtuve al menos dos enlaces que señalaban a servidores Linux tan duros. Desafortunadamente, ambos servidores están caídos. Para el registro, copiaré y pegaré las descripciones aquí:

1) De http://www.coker.com.au/selinux/play.html :

¡Acceso root gratuito en una máquina SE Linux!

Para acceder a mi máquina de juego Debian ssh a play.coker.com.au como root, la contraseña es ...

Tenga en cuenta que tales máquinas requieren mucha habilidad si quiere ejecutarlas con éxito. Si tiene que preguntar si debe ejecutar uno, la respuesta es "no".

El objetivo de esto es demostrar que SE Linux puede proporcionar toda la seguridad necesaria sin ningún permiso de Unix (sin embargo, todavía se recomienda que use los permisos de Unix también para servidores reales). También le da la oportunidad de iniciar sesión en una máquina SE y ver cómo es.

Cuando inicie sesión en una máquina de juego SE Linux, asegúrese de utilizar la opción -x para deshabilitar el reenvío X11 o establecer ForwardX11 no en su archivo / etc / ssh / ssh_config antes de iniciar sesión. También asegúrese de utilizar la opción -a para deshabilitar el reenvío del agente ssh o establecer el ForwardAgent no en su archivo / etc / ssh / ssh_config antes de iniciar sesión. Si no deshabilita correctamente esta configuración, iniciar sesión en la máquina de juego lo pondrá en riesgo de ser atacado a través de su cliente SSH.

Hay un canal IRC para discutir esto, es #selinux en irc.freenode.net .

Aquí hay un FAQ rápido

2) De http://www.osnews.com/comments/3731

El propósito de Harnto Endurecido es hacer que Gentoo sea viable para entornos de servidores de producción de alta seguridad y alta estabilidad. Este proyecto no es un proyecto independiente separado de Gentoo propiamente dicho; Está destinado a ser un equipo de desarrolladores de Gentoo que se centran en ofrecer soluciones a Gentoo que brinden una seguridad y estabilidad sólidas. Esta máquina es la máquina de demostración SELinux de Hardened Gentoo . El uso principal de este es probar y auditar la integración y la política de SELinux.

MS Dousti
fuente
2
También se ha reclamado aquí . Si bien es teóricamente posible, me parece difícil (a menos que confines tanto a ese usuario root que no pueda hacer nada útil). Escribir las reglas de SELinux que realmente hacen lo que se propuso hacer es difícil en el mejor de los casos.
Gilles 'SO- deja de ser malvado'
44
Con los núcleos recientes, los usuarios no root pueden crear espacios de nombres donde tienen UID 0. Como no son UID 0 en el espacio de nombres de nivel superior, no pueden dañar el sistema. Intrínsecamente no tienen ninguna oportunidad de daño, a diferencia del enfoque SELinux, donde todas esas oportunidades tienen que ser eliminadas. Consulte kernel: compatibilidad con espacios de nombres y separe completamente dos cuentas sin instalar sistemas operativos separados.
Gilles 'SO- deja de ser malvado'
Depende de su controlador de gráficos si es realmente seguro o no.
Joshua

Respuestas:

17

Realidad: sí, SELinux puede limitar al usuario root.

Esto es posible porque a SELinux en realidad no le importa el usuario actual de Unix: todo lo que ve es un metadato complementario llamado contexto (que incluye, entre otros campos, un campo de dominio ) y que le permite a SELinux decidir si la acción solicitada puede ser autorizada o no. no.

Lo que generalmente se concibe como el usuario raíz se mapearía en SELinux como un usuario raíz de Unix que ejecuta los dominios unconfined_to sysadm_tSELinux. Es el usuario root omnipotente clásico con plena potencia.

Sin embargo, uno podría configurar perfectamente su sistema para generar un shell raíz (me refiero al shell de usuario root de Unix) que ejecuta el user_tdominio SELinux de usuario restringido . Según las políticas de SELinux, dicho shell no sería diferente de los demás shells de usuarios restringidos y no tendría ningún privilegio especial en el sistema, lo que limitaría efectivamente al usuario root.

Aparte de un punto de vista experimental, hacer tal cosa literalmente es inútil, sin embargo, una práctica similar encuentra su camino en el mundo real. Un ejemplo clásico sería un administrador de base de datos que necesita poder detener / iniciar los daemons de la base de datos, editar archivos de configuración, etc. Sin SELinux, todas estas acciones requerirían que el usuario escale hacia privilegios de root (incluso si normalmente es para un solo línea de comando a través de la sudoherramienta, por ejemplo, sin embargo, incluso eso puede ser propenso a fugas).

Gracias a SELinux, podríamos darle a este usuario un shell raíz genuino, pero en lugar de ejecutar unconfined_to sysadm_tdominios, ejecutará el dbadm_tdominio. Esto significa que tendrá más privilegios que un usuario restringido, pero estos nuevos privilegios se limitarán a lo que se necesita para administrar el servidor de la base de datos: este usuario no podrá manipular otros servicios, archivos o ejecutar otros comandos administrativos que esos estrictamente requerido para hacer su trabajo.

Del mismo modo, el servidor web y otros administradores de servicios también podrían tener otros shells raíz ejecutándose en paralelo en el mismo sistema, cada uno verá que su usuario actual de Unix es root , pero gracias a SELinux cada uno tendrá privilegios efectivamente diferentes limitados a lo que es necesario para sus propios fines .

WhiteWinterWolf
fuente
1

Si es posible. Pero no muy útil.

Teóricamente, podría impedir que el usuario raíz ejecute archivos binarios que podrían usarse con fines maliciosos, aplicando políticas a través de algo como SELinux. Sin embargo, esto presenta un problema, que es que incluso si el usuario raíz no pudo hacer algo inicialmente, él o ella podrían usar otros métodos para cambiar o eliminar las políticas de SELinux. Debido a este problema, tendría que impedir que el usuario root realice cualquier acción, por lo que no es muy útil.

Strugee
fuente
Primero, era tan pesimista como tú. Pero, ganando más conocimiento, parece que no hay necesidad de "impedir que el usuario root realice ninguna acción". Verifique mi respuesta editada, que incluye enlaces e información a prueba de conceptos. Desafortunadamente, ya no están disponibles; pero parece que las implementaciones no fueron severamente restrictivas.
MS Dousti
-5

¿Es posible endurecer una caja de Linux (posiblemente con SELinux), de modo que incluso el usuario root no pueda realizar actividades maliciosas específicas en ella?

Esto puede sonar barato, pero es fácil: cambie el uid de la raíz del usuario a no cero. Simplemente vaya a / etc / passwd y / etc / shadow, modifique las entradas existentes uid = 0 de "root" a otra cosa, y luego agregue una cuenta llamada "root" cuyo uid no sea cero y no se use.

Logra el propósito sin. También es una forma de afirmar que cualquiera puede tener "acceso raíz" sin proporcionar realmente privilegios escalados.

Oteo
fuente
3
Bueno, sí, pero el rootusuario simplemente no es el usuario raíz. La pregunta es si el superusuario real puede estar limitado de esa manera.
terdon
Suena peligroso, excepto que crea otra cuenta con uid 0, por supuesto. Pero eso sería lo mismo que renombrar root y reutilizar el nombre "root".
Volker Siegel
La pregunta solo se refiere a "root", que no es necesariamente equivalente al superusuario, es decir, uid = 0. En raras ocasiones, esta es una distinción útil.
Oteo
2
Sin embargo, el contexto deja en claro que el OP pregunta si el superusuario, y no algún usuario aleatorio cuyo nombre de usuario es rootpuede ser limitado de esa manera.
terdon
1
OKAY. Al menos, edite su respuesta y muestre cómo se puede lograr lo que sugiere. Se sigue marcando como de baja calidad debido a su longitud. Es por eso que está recibiendo votos negativos.
terdon