Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
¿que le falta, que le sobra al kernel?

ridiculum's Diary
Por ridiculum
departamento desvarios , Sección Diarios
Puesto a las Fri Oct 3rd, 2003 at 07:27:42 PM CET
Aprovechando que estoy un poco aburrido ahora mismo, vamos a ver si se me ocurren que cosas que me gustaria ver en el kernel de linux en futuro mas o menos proximo.

 


Una de las cosas que me gustaria ver es grsecurity.

¿Que es eso? Pues es un parche la mar de chulo para el tema de la seguridad. Permite, entre otras cosas:

  • Socket ACLs
  • Eso es bastante interesante. Apache, bind, INN, y un monton de procesos tiene que tener un parte ejecuntandose como root, por que sino no pueden abrir el puerto que necesitan (para abrir un puerto menos que el 1024 necesias ser root). Con listas de control de acceso, esto no seria necesario. Podriamos darle al usuario www-data permiso para abrir el puerto 80, y listo.

  • Chroot restrictions
  • Chroot es una llamada curiosa. Permite enjaular un proceso de tal forma que se ejecute en un entorno controlado y cerrado. Esto a primera vista estaria muy bien, sino fuera por que hay algunos flecos en la defincion de chroot en el estandar. Uno de ellos, es que se debe permitir una salida a root. Esto es mortal. Con alguien consiga root dentro de un chroot, no sirve de nada la jaula, motivo por el cual, en FreeBSD a parte de chroot, tienen jail.

    Pues bien, con estas opciones del grsecurity podemos limitar bastante las posibilidades de escape de la jaula.

    Por ejmeplo, tiene la opcion de no poder ejecutar ptrace sobre un proceso fuera de la jaula por que se puede inyectar codigo sobre ese proceso y conseguir salirse.

  • PID, puertos TCP y numeros de secuencia de TCP aleatorios
  • Bueno, estas caracteristicas necesitan poca explicacion.Quiza el "mas raro" sea el de los PID. Tener PID aletorios nos permite dificultar algunos ataques que requiere conocer el PID de un proceso (como el del ptrace anterior).

  • No kernel modification via /dev/mem, /dev/kmem, or /dev/port
  • Esos dispositivos tienen como permisos 640 root.kem asi que podriamos pensar que estamos a salvo, no?. Que yo sepa, el motivo de ese parche es evitar troyanizar el kernel incluso si tenemos el soporte de modulos desactivado.
  • Pax
  • PaX permite a las arquitecturas que no tiene la posibilidad de limitar de forma fina los permisos sobre las paginas el poder saltarse esa limitacion.Así, de esta forma podemos tener la pila no ejecutable (que nos salvaria el culo algunas veces,aunque no siempre). En la seccion de PaX de grsecurity ponen mas cosas, pero como no estoy seguro de algunas cosas aun, pues no las comento.

Otro parche interesante es LIDS. Este parche creo que lo empeceron a crear debido al excesivo poder que tiene root en una maquina. Si alguien se hacia root, estabas perdido. Pues bien, una de las caracteristicas de este parche, es que incluso root puede tener el poder limitado Ojeando un poco la pagina web, se puede intuir que LIDS esta basando en el sistema de capabilities del kernel y en un par de aplicaciones en espacio de usuario (lidsadm y lidsconf) que se usan para configurar todo. Lids permite cosas como:

  • Esconder directorios
  • Limitar la lectura de archivos/directorios
  • Limitar a que puertos puede abrir un proceso
  • Configurar alertas de seguridad
  • Solo poder añadir informacion a los logs, nunca borrar y nada similar

En la Faq de LIDS hay ejemplos de configuracion para diversas situaciones (qmail, exim, posftix, mysql, ssh, etc, etc).

Para termiar mis notas sobre LIDS, acaba de salir un libro que pinta muy bien, aunque esta en aleman. Intrusion Linux Detection für Linux server

Tambien seria interesante tener un sistema de archivos cifrado. Si, ya se que esta el cryptoloop, pero que pasa si queremos tener los $HOME's en remoto?

OpenBSD sino recuerdo mal incorpora TCFS. En esa web podemos encontrar tambien parches para Linux, pero que yo sepa, solo estan probados para i386 y no parece que haya parche para 2.4.

Tambien tenemos StegFS aunque por los comentarios leidos en slashdot en esta noticia

Eso era en cuanto a sistemas de archivos cifrados, pero tambien hay un par de sistemas de archivos distribuidos bastante interesantes. Lustre y PFVS.

PVFS fue una opcion que estuvimos tanteando en Lilo para tener acceso a los $HOME independientemente de la maquina en la que hicieramos login. La otra opcion era poner NFS.

La idea de PVFS es justamente la contraria a NFS. En lugar de tener un unico nodo donde se almacenan los datos, se tienen una serie de nodos, que bien pueden ser las mismas maquinas con las que trabajas de forma habitual, en donde se reparte de cierta manera los datos del usuario. De esta forma se intenta paliar los cuellos de botella que suelen ser los sistemas tradicionales de I/O. No pudimos probar el rendimiento de esta solucion por que el parche tenia cierta dependencia de 80x86.

Sobre lustre, poco puedo decir, por que me lo he encontrado hoy mientras buscaba el nombre del sistema de archivos basado en esteanografia, que no recordaba como se llamaba.

Bueno, supongo que me he dejado muchas cosas por ahi, pero esto es lo que ma venido a la cabeza en el rato que me he pegado escribiendo esto.

< Usuario número 1000. Y el ganador es... (11 comments) | Abierta la inscripción para el I Congreso javaHispano (0 comments) >
Enlaces Relacionados
· Slashdot
· grsecurity
· PaX
· LIDS
· Faq de LIDS
· Intrusion Linux Detection für Linux server
· TCFS
· StegFS
· noticia
· Lustre
· PFVS
· More on ridiculum's Diary
· Also by ridiculum

Encuesta
Que te gustaría veren el kernel de linux
· 1.-Grsecurity 44%
· 2.-LIDS 0%
· 3.-Sistemas de archivos cifrados como TCFS 11%
· 4.-Sistemas de archivos distribuidos como PVFS 22%
· 5.-Otra cosa (indica que cosa) 22%

Votos: 9
Resultados | Otras Encuestas

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
¿que le falta, que le sobra al kernel? | 8 comentarios (8 temáticos, editoriales, 0 ocultos)
Estupendo artículo (none / 0) (#1)
por amphora (amphora@ecol.org) a las Fri Oct 3rd, 2003 at 10:42:03 PM CET
(Información Usuario) http://sistematica.es

¿Porque no le haces una revisión y lo pones para portada?



Si además le añades unas líneas refentes a los parches que andan por ahí para mejorar la parte del desktop (preemtive, lowlatency, etc) te podría quedar un artículo la mar de chulo





 
Las "capabilities" de Linux (none / 0) (#2)
por jorginius ("jorginius" en Google Mail) a las Fri Oct 3rd, 2003 at 11:13:57 PM CET
(Información Usuario) http://www.rodriguezmoreno.com

En realidad, una parte de lo que pides sí está (más o menos) incluido en el kernel de serie. En concreto:

Podriamos darle al usuario www-data permiso para abrir el puerto 80, y listo.

Si el proceso tiene la capacidad cap_net_bind_service activa, podrá conectarse a un puerto por debajo del 1024, sin importar su *id (sea root o no).

[grsecurity] tiene la opcion de no poder ejecutar ptrace sobre un proceso fuera de la jaula por que se puede inyectar codigo sobre ese proceso y conseguir salirse.

Eso le será imposible si hemos retirado la capacidad cap_ptrace del proceso.

Las capacidades se manejan con las llamadas al sistema cap_init(), cap_get_proc(), cap_set_proc(), etc. Todas ellas conforme al borrador POSIX.1e.

Entonces, qué bien, ¿no?. ¿Qué queremos correr un servidor que se enlace a un puerto privilegiado pero que corra como nobody?, pues nada: desde un pequeño programita lo enjaulamos, cambiamos el uid y el gid, ajustamos las capabilities según lo que necesite, reemplazamos la imagen del proceso con el servidor y ya lo tenemos corriendo de forma segura... El problema es que esto no funciona: aunque cambies las capacidades del proceso con cap_*() y las definas como heredables por los procesos hijos, éstas se perderán en cuanto hagas execv() y creemos una nueva imagen de proceso: las capabilities se resetean. Si haces un fork(), el hijo tiene las capacidades del padre (si las definimos como heredables, por supuesto) pero si hacemos un execv() las capacidades se pierden.

No sé muy bien por qué lo han hecho así. Sospecho que es el comportamiento que describe el estándar. El caso es que si haces un execv() y no eres en ese momento uid 0 (si eres root sí que se conservan) o un setuid() previo, tus capacidades se resetean. Para el caso del setuid() hay una syscall específica de Linux que permite que el proceso las conserve después del cambio de uid, se trata de prctl() con el valor de opción PR_SET_KEEPCAPS, pero esto no afecta a execv(). El parche que haga que execv() conserve las capacidades igual que setuid() si el proceso tiene activa la bandera PR_SET_KEEPCAPS debería ser trivial y no entiendo por qué no está hecho así ya.

Por otro lado, lo del TCFS:

OpenBSD sino recuerdo mal incorpora TCFS. En esa web podemos encontrar tambien parches para Linux, pero que yo sepa, solo estan probados para i386 y no parece que haya parche para 2.4.

Creo que era CFS a secas pero de todos modos, el problema que teníamos con TCFS en las Sparc no era porque el parche no fuera multiplataforma, sino porque el compilador que incluía Debian para el kernel de 64 bits patinaba, indicando un fallo al intentar compilar un código con operaciones con reales cuando éstas estaban deshabilitadas por línea de órdenes, lo cual es bastante sorprendente porque:
  1. No está permitidas las operaciones con reales dentro del kernel, en ninguna arquitectura.
  2. El parche de TCFS no incluye operaciones de este tipo
Vamos, que tenía toda la pinta de que el compilador estaba escupiendo código erróneo, y sabiendo como se las gasta el gcc que empaqueta Debian en la estable... Pues es bastante plausible. Habría que probar con una versión más modernita del gcc, a ver si hay más suerte.



Creo que deberias echar un vistazo a RSBAC (none / 0) (#7)
por iarenaza a las Sun Oct 5th, 2003 at 09:41:06 PM CET
(Información Usuario) http://www.escomposlinux.org/

El proyecto RSBAC se ajusta bastante bien a muchas de las cosas que pides.

La verdad es que no se muy bien porque no se intenta incorporar en el nucleo estandar, porque aparte de ser muy estable (llevan varios años en produccion con el en algunos sitios) tiene caracteristicas propias de sistemas B1 y B2, lo cual lo hace especialmente atractivo.

Saludos. Iñaki.



¿que le falta, que le sobra al kernel? | 8 comentarios (8 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda