Hay muchos aspectos involucrados en el complicado tema de las Redes SELinux, por lo que en primer lugar se realizó una introducción a la charla comentando aspectos del propio conferenciante, James Morris, desarrollador del kernel durante mucho tiempo y actualmente trabajando para Red Hat en el desarrollo de SE Linux.
or su interés, La Flecha recogió dicha conferencia retransmitida a través de IRC en el canal #linux del nodo irc.uninet.edu que les ofrecemos a continuación, a cargo de James Morris de Red Hat, Estados Unidos:
James Morris: " Hola a todos. Esta introducción será sobre
redes bajo SELinux, pero primero voy a ofrecer una pequeña
introducción sobre SELinux
SELinux es un sistema de seguridad desarrollado por la agencia
nacional de seguridad estadounidense provee un sistema linux con
MAC security la mayor parte de las decisiones de seguridad son
echas de manera transparente al usuario por ejemplo si un usuario
quiere compartir un fichero, lo único que debe de hacer es un chmod
664 al fichero para que se pueda leer por los demás usuarios bajo
un sistema de seguridad MAC, el kernel es el que realmente decide
que fichero se puede o no compartir, en vez del usuario una
política de seguridad será usada para especificar las reglas de
seguridad del sistema SELinux usa un modelo generalizado de
seguridad, donde los objetos del kernel (ej, procesos, ficheros)
están cada uno identificados y etiquetados en un contexto de
seguridad.
Un contexto de seguridad puede contener un numero de atributos de
seguridad para el objeto ej.- el rol es un atributo, y puede ser
sysadmin. Cuando una decisión de seguridad debe ser tomada, SELinux
comprueba el contexto de seguridad de cada objeto y despues se hace
una consulta a la política se seguridad para determinar los
recursos disponibles. Por ejemplo, un proceso etiquetado con el rol
sysadmin se le puede permitir el acceso en /etc/shadow
Afortunadamente, esto introduce dos ideas en SELinux: Control de
acceso obligatorio (MAC) y contextos de seguridad esta es una
visión simplificada
Más información sobre SELinux disponible en http://www.nsa.gov/selinux/docs.html
http://sourceforge.net/docman/display_doc.php?docid=15285&group_id=21266
SELinux extiende seguridad MAC al coontexto de redes. Esto es
importante y práctico ya que hoy en día un grán número de sistemas
están conectados
por RED. SELinux permite a sistemas conectados en red ser
endurecidos contra la mayor parte de las vulnerabilidades y errores
de usuario primeramente, todas las socket system call son
controladas por SELinux ej.- un proceso debe tener permisos para
usar socket(), bind(), listen(), accept(), sendmsg(), rcvmsg(),
etc..
Esto efectivamente permite a SELinux controlar que aplicaciones
pueden hacer uso de recursoso de red
Si no puedes usar las socket system call, tendrás problemas
intentado hacer cualquier aplicación que haga uso de recursos de
red
Algunos de estos permisos estan aun mas atomicos, por protocolo:
TCP, UDP y Raw IP
Asi que por ejemplo, SElinux es capaz de imponer una politica donde
cierta aplicacion, como apache, solo puede realizar llamadas a
sockets en TCP.
Si apache fuera comprometido, el kernel no dejaria que Apache
trabajase con sockets en UDP. Aun mas permisos son proveidos para
bind(), donde el numero de puerto es especificado (por ejemplo solo
escuchar en puerto 80), asi como cuales direcciones de IP local
puedan ser usadas.
(notemos que ningun cambio se debe de realizar en la aplicacion
para llevar a cabo esto, todo esta controlado con politicas de
seguridad hechas cumplir a nivel del kernel/nucleo).
Tambien se proveen permisos para que con las politicas
especifiquemos que trafico de que interfaz de red puedan ser
recibido o enviado. Esto tambien es aplicado a nivel de protocolo.
Por ejemplo, se podria escribir una politica que dice que Apache
solo puede enviar y recibir trafico de TCP en la interfaz eth1.
El tráfico de RED puede ser controlado también por direcciones IP
para un proceso o protocolo. Combinando estos controles proveen un
potente y flexible vía para contener aplicaciones que aceptan
concexiones de red.
Poniendolo todo junto, un ejemplo simple seria especificar que sshd
tiene permitido hacer llamadas de socket para TCP, utilizar el
puerto 22, enviar y recibir trafico de TCP sobre una interfaz
interna solo a direcciones de intranet.
Aplicaciones como ssh, sshd, bind, etc. pueden ser limitadas de
igual forma.
Una pregunta que se estaran haciendo es, como es esto difirente a
iptables?
Primeramente, el tráfico de red está asociado con un proceso
específico (esto se puede hacer de forma limitada con iptables y
está sólo presenta en la capa de red)
Los controles de SELinux son parte de un esquema más general donde
las apliciones son reducidas a lo que pueden hacer, por ejemplo
hacer uso del sistema de ficheros
Nurb: ¿puede un filtro basado en roles de SELinux funcionar con
netfilter/iptables (añadido a las propias políticas de SELinux)
Si, puedes escribir una regla de iptables para el contexto de
seguridad, pero sólo funcionará para los paquetes de salida
generados localmente
para los paquetes entrantes, iptables se cuelga de de la capa de
red y no puede saber como el paquete está eventualmente asociado
con el espacio de usuario (en el caso de que exista)
Riell: hay planes para transferir el contexto de seguridad atravez
de la red (con ipsec), para que tambien se puedan filtrar los
paquetes basandose en el contexto de seguridad tambien?
si, miraremos eso dentro de poco
Lo que tenemos con SELinux en red actualmente, es una forma de
hacer nuestros sistemas mas dificil de ser atacados (de manera
interna y externa), en contra de errorers de configuracion,
integrados con un sistema de MAC.
Muchas (si no todas) de esas vulnerabilidades vistas recientemente
han sido contenidas por SELinux, aunque SELinux no puede proteger
de los fallos (bugs) del propio kernel (ej.- el fallo con do_brk())
o una mala política de seguridad
Por tanto no es una bala mágica. SElinux está aún en desarrollo
(trabajando en habilidades que puedan ser continuadas cuando
después de que el kernel 2.6.0 sea lanzado)
aahlih pregunta: ¿ Cuál es el consumo de todas las comprobaciones
de SELinux ?
Por mis propias medidas, entre un 5%-15% dependiendo de lo que
estés probando. Cuantas más habilidades sean implementadas, la red
irá más lenta, pero de todas formas el mayor trabajo en rendimiento
y escalabilidad se harán en los próximos 6 meses.
Por ejemplo, parece haber una cerradura que se lleva la mitad del
consumo, esto es algo que puede ser parcheado
pero siempre habrá algo de consumo por parte de SELinux
pregunta Hanna: Que lock es ese?
es el avc_lock en avc_has_perm(), el cual es llamado en todo
chequeo de permisos de acceso. Este parece como un cadidato para
RCU (read copy update / leer copiar actualizar)
pregunta feistel: diferencias entre systrace de openbsd y
selinux?
yo no estoy muy familiarizado con systrace, aunque parece que
proporciona un control sobre como utilizan las syscall
SELinuux puede controlar el uso de syscall, como parte de una
politica integrada de seguridad. Algunas caracteristicas de red
planeadas por SELinux incluyen
-add control para enviar/recibir trafico por un puerto ( yo estoy
trabajando en eso hoy)
- mejorar los sockets locales de Unix para que las aplicaciones se
puedan autenticar utilizando credenciales de SELinux. (esto esta
implementado y bajo revision de otros desarrolladores)
- El mejoramiento del socket UNIX sera util para integrar al X,
y a los procesos locales IPC tal como el DBUS pero eso son topicos
ya mas profundos
- Hacer los controles de red, mas expresivos (son poderosos) pero
no de tan facil uso como iptables las reglas de iptables
- Modelo de red etiquetado (esto extiende el modelo de seguridad a
traves de la red)
-Mejor soporte para NFS
- Integracion con IPSEC (ej , la politica de seguridad puede
espeficar requerimientos de proteccion para el trafico de la
red)
- Esto se implemento usando opciones IP, en una version previa de
SELinux
Una version mas actual se ha implementado antes de SELinux, usando
la arquitectura predecesora Flask
Pero en lugar de etiquetar cada paquete, se etiquetan las
conexiones IPSec
entonces, cada paquete fluyendo en una conexion IPSec dada (mas
tecnicamente, cada asociacion de seguridad) tiene una etiqueta
implicita
El etiquetado de seguridad fue negociado via una extension a ISAKMP
(el protocolo de manejo de llave/key).
Futuros etiquetados de paquetes pueden revertirse al metodo basado
en IPSec.
El Metodo de Etiquetado de Red puede ser util probablemente solo en
ambientes muy seguros donde los sistemas estan bajo estrictos
controles de administracion (ej: telcos)
pregunta sysbd: ¿ Porqué las cerraduras LSM no son incluidas en la
línea principal de desarrollo del kernel (o han sido
silenciosamente rechazados) Tiene el método IPSEC muchas
desventajas ?
Las cerraduras LSM para el modelo de red etiquetado han sido
rechazadas por el mantenedor ya que se introducen demasiado. Han
sido puestas básicamente dentro de los protocolos de red, hemos
tenido que implementar básicamente casi todo usando otros medios
(Por ejemplo, via Netfilter), así que la decisión para ruidosa.
El método IPSec tiene dos desventajas (desde mi punto de vista)
1) Hace que IPSec sea más complicado, lo que es malo para la
seguridad.
2) Combina el etiquetado con la protección dentro del mismo
mecanismo.
Esto siginifica que si tu quieres etiquetado, debes de tener IPSec,
pienso que esto es probablemente lo que la mayoría de la gente
quiere (pero algunos entornos deben tener métodos de encriptación
en el cable, por ejemplo)
Aparte de todo eso, después de ver los dos esquemas, el sistema
IPSec tiene algunas interesantes simplicidades de tal forma que
sólo tengas que mirar en el SA (Security Association) al cual el
paquete pertenece, en vez de identificar las opciones IP.
Y las opciones IP, probablemente, no funcionen en la internet real
ya que la mayoría de los firewall/router lo bloquearán.
pregunta cdub: en paquetes de entrada (digamos tcp accept) es
posible que más de un proceso (o ninguno) esté esperando para
sincronizar. Ya que el proceasamiento ocurre en contexto de
interrupciones, ¿ Has tenido problemas tomando el contexto correcto
a identificar ?
si, hay algunos casos que necesitamos revisar, debido a que no hay
ganchos en el codigo de TCP
esto talvez podria ser resuelto haciendo un lookup (operacion de
busqueda), pero necesita mas investigacion
bueno, he terminado con el material que planee para la
presentacion, hay mas preguntas?
pregunta cdub: he tenido problemas con procesos que pueden cambiar
de contexto de seguridad, y accesando informacion que no deberian
de tener acceso a
en SELinux o solo con LSM?
para SELinux, se puede cambiar el contexto de seguridad en
ejecucion, asi que talvez estas heredando el socket?
pregunta riel: como van ipsec & selinux beneficiar
administradores de sistemas normales, quienes no pueden poner
reglas complejas de seguridad ellos mismos?
Buena pregunta. Primero que nada, para ipsec, deberia de ser
posible simplificar la configuracion para usos comunes, por ejemplo
VPN's creo que es manejable, ya que IPSec es bastante usado hoy
en dia para SELinux, sera mas dificil creo. Esperemos que las
distribuciones provean buenas politicas para las aplicaciones, para
que no sean cambiadas regularment y actualizaciones a las politicas
como agregar usuarios, etc. seran implementadas en aplicaciones
faciles para el usuario, pero creo que esta es la gran incognita
para SELinux, y un gran desafio para Red Hat, Debian, Gentoo etc.
¿alguna otra pregunta?
pregunta nurbs: que quieres decir por mejor soporte para NFS?
Esto podria ser simplemente manteniendo el contexto de seguridad de
los archivos sobre NFS, o mas complicado, que el server de NFS
imponga las politicas de seguridad en el sistema de archivos remoto
como si fuera local esto necesita ser implementado usando
extensiones para NFSv2/3
NFSv4 tiene una vision mas grande respecto a esto ( se necesitan
que los atributos extendidos sean enviados por el canal: asi es
como el contexto de seguridad de SELinux esta implementado para
archivos) pero igual se necesita hacer trabajo en NFS y SELinux
para que esto funcione bien
El soporte actual para NFS es minimo: un sistema de archivos
montado via nfs aparece con todos los archivos y directorios
teniendo el mismo contexto de seguridad, y ningun contexto de
seguridad es alamacenado remotamente.
Ok, parece que terminamos :-)"
Si quieres recibir cada semana las noticias más interesantes suscríbete a nuestro boletín.
Hola, he leido el articulo y es muy bueno.
En este momento me encuentro recopilando informacion ya que mi proyecto de tesis lo realizare sobre la creacion de alguna politica de seguridadSELinux.
Ud, me podrian decir la forma de contactarme con estas personas, para relacionarme y complementar mas el tema!?
esperando una buena acogida, me despido atte.,
__
Ma. Alejandra Castillo M.
acastillo@condorweb.net
hacer TÓPICOS en la flecha