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