Administración de Seguridad
Administración de Seguridad
Administración de Seguridad
de seguridad
Josep Jorba Esteve
P07/M2103/02288
© FUOC • P07/M2103/02288 2 Administración de seguridad
© FUOC • P07/M2103/02288 Administración de seguridad
Índex
Introducció ............................................................................................... 5
4. SELinux ................................................................................................ 29
4.1. Arquitectura .................................................................................... 32
4.2. Crítica ............................................................................................. 35
Actividades .............................................................................................. 59
Introducció
El salto tecnológico de los sistemas de escritorio aislados, hasta los sistemas ac-
tuales integrados en redes locales e Internet, ha traído una nueva dificultad a las
tareas habituales del administrador: el control de la seguridad de los sistemas.
Los ataques pueden provenir de muchas fuentes y afectar desde a una aplicación
o servicio hasta a algún usuario, o a todos, o al sistema informático entero.
Una idea clara que hay que tener en mente es que es imposible poder
conseguir una seguridad al 100%.
Las técnicas de seguridad son un arma de doble filo, que fácilmente pueden
darnos una falsa impresión de control del problema. La seguridad actual es un
problema amplio, complejo, y lo que es más importante, dinámico. Nunca po-
demos esperar o decir que la seguridad está garantizada, sino que con bastante
probabilidad será una de las áreas a la cual el administrador tendrá que dedicar
más tiempo y mantener actualizados sus conocimientos sobre el tema.
En esta unidad examinaremos algunos tipos de ataques con los que podemos
encontrarnos, cómo podemos verificar y prevenir partes de la seguridad local,
y también en entornos de red. Asimismo, examinaremos técnicas de detección
de intrusos y algunas herramientas básicas que nos pueden ayudar en el con-
trol de la seguridad.
También es preciso mencionar que en esta unidad sólo podemos hacer una
mera introducción a algunos de los aspectos que intervienen en la seguridad
de hoy en día. Para cualquier aprendizaje real con más detalle, se recomienda
consultar la bibliografía disponible, así como los manuales asociados a los pro-
ductos o herramientas comentados.
© FUOC • P07/M2103/02288 6 Administración de seguridad
© FUOC • P07/M2103/02288 7 Administración de seguridad
Con respecto a los intrusos, hay que establecer algunas diferencias, que no
suelen estar muy claras en los términos coloquiales. Normalmente nos referi-
mos a hacker [Him01], como aquella persona con grandes conocimientos en
informática, más o menos apasionada por los temas de programación y segu-
ridad informática, y que, normalmente sin finalidad malévola, utiliza sus co-
nocimientos para protegerse a sí mismo, o a terceros, introducirse en redes
para demostrar sus fallos de seguridad, y, en algunos casos, como reconoci-
miento de sus habilidades.
Un ejemplo sería la propia comunidad GNU/Linux, que debe mucho a sus hac-
kers, ya que hay que entender el término hacker como experto en unos temas
(más que como intruso en la seguridad).
Por otro lado encontraríamos a los crackers. Aquí es cuando se utiliza el térmi-
no de manera más o menos despectiva, hacia aquellos que utilizan sus habili-
dades para corromper (o destrozar) sistemas, ya sea sólo por fama propia, por
motivos económicos, por ganas de causar daño o simplemente por molestar;
por motivos de espionaje tecnológico, actos de ciberterrorismo, etc. Asimis-
mo, se habla de hacking o cracking, cuando nos referimos a técnicas de estudio,
detección y protección de la seguridad, o por el contrario, a técnicas destina-
das a causar daño rompiendo la seguridad de los sistemas.
© FUOC • P07/M2103/02288 8 Administración de seguridad
Los posibles ataques son una amenaza constante a nuestros sistemas y pueden
Nota
comprometer su funcionamiento, así como los datos que manejamos; ante
Las amenazas afectan a la con-
todo lo cual, siempre tenemos que definir una cierta política de requisitos de fidencialidad, integridad o ac-
cesibilidad de nuestros
seguridad sobre nuestros sistemas y datos. Las amenazas que podemos sufrir sistemas.
podrían afectar a los aspectos siguientes:
• Integridad: la información sólo podrá ser modificada por aquellos que es-
tén autorizados: ¿qué se podrá hacer con ella?
Los métodos utilizados y las técnicas precisas pueden variar mucho (es más,
cada día se crean novedades), y nos obligan, como administradores, a estar en
contacto permanente con el campo de la seguridad para conocer a qué nos po-
demos enfrentar diariamente.
Respecto a dónde se produzca el ataque, hemos de tener claro qué puede ha-
Nota
cerse o cuál será el objetivo de los métodos:
Los ataques pueden tener fina-
lidades destructivas, inhabilita-
• Hardware: a este respecto, la amenaza está directamente sobre la accesibi- doras o de espionaje, de
nuestros componentes, ya sea
lidad, ¿qué podrá hacer alguien que tenga acceso al hardware? En este caso hardware, software o sistemas
de comunicación.
normalmente necesitaremos medidas “físicas”, como controles de seguri-
dad para acceder a los locales donde estén las máquinas para evitar proble-
mas de robo o rotura del equipo con el fin de eliminar su servicio. También
puede comprometerse la confidencialidad y la integridad si el acceso físico
a las máquinas permite utilizar algunos de sus dispositivos como las dis-
queteras, o el arranque de las máquinas, o el acceso a cuentas de usuario
que podrían estar abiertas.
• Canal de comunicación (en la red, por ejemplo): para los métodos que
afecten a la accesibilidad, nos puede provocar destrucción o eliminación de
mensajes, e impedir el acceso a la red. En confidencialidad, lectura y obser-
vación del tráfico de mensajes, desde o hacia la máquina. Y respecto a la
integridad, cualquier modificación, retardo, reordenación, duplicación o
falsificación de los mensajes entrantes y/o salientes.
Los sistemas GNU/Linux están protegidos casi totalmente contra estos me-
canismos por varias razones: en los programas ejecutables, tienen un acce-
so muy limitado al sistema, en particular a la cuenta del usuario. Con
excepción del usuario root, con el que hay que tener mucho cuidado con
lo que ejecuta. El correo no suele utilizar lenguajes de macros no verifica-
dos (como en el caso de Outlook y Visual Basic Script en Windows, que es
un agujero de entrada de virus), y en el caso de los documentos, estamos
en condiciones parecidas, ya que no soportan lenguajes de macros no ve-
rificados (como el VBA en Microsoft Office).
En todo caso, habrá que prestar atención a lo que pueda pasar en un futuro,
ya que podrían surgir algunos virus específicos para GNU/Linux aprove-
chando algunos bugs o exploits. Un punto que sí que hay que tener en cuen-
ta es el de los sistemas de correo, ya que si bien nosotros no generaremos
virus, sí que podemos llegar a transmitirlos; por ejemplo, si nuestro sistema
funciona como router de correo, podrían llegar mensajes con virus que po-
drían ser enviados a otros. Aquí se puede implementar alguna política de
detección y filtrado de virus. Otra forma de azote de plagas que podría en-
trar dentro de la categoría de virus son los mensajes de spam, que si bien
no suelen ser utilizados como elementos atacantes, sí que podemos consi-
derarlos como problemas por su “virulencia” de aparición, y el coste eco-
nómico que pueden causar (pérdidas de tiempo y recursos).
• Scanner (escaneo de puertos): más que un ataque, sería un paso previo, que
consistiría en la recolección de posibles objetivos. Básicamente, consiste en
utilizar herramientas que permitan examinar la red en busca de máquinas
con puertos abiertos, sean TCP, UDP u otros protocolos, los cuales indican
la presencia de algunos servicios. Por ejemplo, escanear máquinas buscan-
do el puerto 80 TCP, indica la presencia de servidores web, de los cuales po-
demos obtener información sobre el servidor y la versión que utilizan para
aprovecharnos de vulnerabilidades conocidas.
• Denial of Service (‘ataque DoS’): este tipo de ataque provoca que la máqui-
na caiga o que se sobrecarguen uno o más servicios, de manera que no sean
utilizables. Otra técnica es la DDoS (Distributed DoS), que se basa en utili-
zar un conjunto de máquinas distribuidas para que produzcan el ataque o
sobrecarga de servicio. Este tipo de ataques se suelen solucionar con actua-
lizaciones del software, ya que normalmente se ven afectados aquellos ser-
vicios que no fueron pensados para una carga de trabajo determinada y no
se controla la saturación. Los ataques DoS y DDoS son bastante utilizados
en ataques a sitios web, o servidores DNS, que se ven afectados por vulne-
rabilidades de los servidores, por ejemplo, de versiones concretas de Apa-
che o BIND. Otro aspecto que cabe tener en cuenta es que nuestro sistema
también podría ser usado para ataques de tipo DDoS, mediante control, ya
sea de un backdoor o un troyano.
por ejemplo php o perl) son utilizados directamente para construir las consul-
tas (en SQL), que atacarán una determinada base de datos (a la que en princi-
pio no se tiene acceso directo). Normalmente, si existen las vulnerabilidades y
poco control de los formularios, se puede inyectar código SQL en el formula-
rio, de manera que se construyan consultas SQL que proporcionen la informa-
ción buscada. En casos drásticos podría obtenerse la información de seguridad
(usuarios y contraseñas de la base de datos), o incluso tablas o la base de datos
entera, cuando no podrían producirse pérdidas de información, o borrados in-
tencionados de datos. En particular esta técnica en ambientes web puede ser
grave, debido a las leyes que protegen la privacidad de datos personales que un
ataque de este tipo puede provocar. En este caso, más que una cuestión de se-
guridad de sistema, supone un problema de programación y control con tipa-
do fuerte de los datos esperados en la aplicación, además del adecuado control
de conocimiento de vulnerabilidades presentes del software usado (base de da-
tos, servidor web, API como php, perl...).
• Controlar un factor problemático: los usuarios. Uno de los factores que puede
afectar más a la seguridad es la confidencialidad de las contraseñas, y ésta se
ve afectada por el comportamiento de los usuarios; esto facilita a posibles ata-
© FUOC • P07/M2103/02288 16 Administración de seguridad
cantes las acciones desde dentro del propio sistema. La mayoría de los ataques
suelen venir de dentro del sistema, o sea, una vez el atacante ha ganado acceso
al sistema.
• Entre los usuarios, está aquel que es un poco olvidadizo (o indiscreto), que
bien olvida la contraseña cada dos por tres, la menciona en conversaciones, la
escribe en un papel que olvida, o que está junto (o pegado) al ordenador o so-
bre la mesa de trabajo, o que simplemente la presta a otros usuarios o co-
nocidos. Otro tipo es el que coloca contraseñas muy predecibles, ya sea su
mismo id de usuario, su nombre, su DNI, el nombre de su novia, el de su
madre, el de su perro, etc., cosas que con un mínimo de información pue-
den encontrarse fácilmente. Otro caso son los usuarios normales con un
cierto conocimiento, que colocan contraseñas válidas, pero siempre hay
que tener en cuenta que hay mecanismos que pueden encontrarlas (crac-
king de passwords, sniffing, spoofing...). Hay que establecer una cierta “cultu-
ra” de seguridad entre los usuarios, y mediante técnicas obligarles a que
cambien las contraseñas, no utilicen palabras típicas, las contraseñas de-
ben ser largas (tener más de 2 o 3 caracteres), etc. Últimamente, en muchas
empresas e instituciones se está implantando la técnica de hacer firmar un
contrato al usuario de manera que se le obliga a no divulgar la contraseña
o cometer actos de vandalismo o ataques desde su cuenta (claro que esto
no impide que otros lo hagan por él).
Estas medidas pueden ser poco productivas, pero si no hemos asegurado el sis-
tema, no podemos tener ningún control sobre lo que puede pasar, y aun así,
© FUOC • P07/M2103/02288 17 Administración de seguridad
nadie asegura que no se pueda colar algún programa malicioso que burle la se-
guridad si lo ejecutamos con los permisos adecuados. O sea, que en general he-
mos de tener mucho cuidado con todo este tipo de actividades que supongan
accesos y ejecución de tareas de formas más o menos privilegiadas.
1.2. Contramedidas
Respecto a las medidas que se pueden tomar sobre los tipos de ataques presen-
tados, podemos encontrar algunas preventivas, y de detección de lo que suce-
de en nuestros sistemas.
Veamos algunos tipos de medidas que podríamos tomar en los ámbitos de pre-
vención y detección de intrusos (se mencionan herramientas útiles, algunas
las examinaremos más adelante):
Aunque la contraseña esté bien elegida, ésta puede ser insegura si se utiliza
en servicios no seguros. Por lo tanto, se recomienda reforzar los servicios
mediante técnicas de encriptación que protejan las contraseñas y los men-
sajes. Y por el contrario, evitar (o no utilizar) todos aquellos servicios que
no soporten encriptación, y consecuentemente, susceptibles de ser ataca-
dos con métodos, por ejemplo de sniffers; entre éstos podríamos incluir ser-
vicios telnet, ftp, rsh, rlogin (entre otros).
• Backdoor (o trap door, puerta trasera): hay que obtener de los proveedores
o vendedores del software la certificación de que éste no contiene ningún
tipo de backdoor escondido no documentado, y por supuesto aceptar el
software proveniente sólo de sitios que ofrezcan garantías. Cuando el soft-
ware sea de terceros, o de fuentes que podrían haber modificado el software
original, muchos fabricantes (o distribuidores) integran algún tipo de veri-
ficación de software basado en códigos de suma o firmas digitales (tipo
md5 o gpg) [Hatd]. Siempre que éstas estén disponibles, sería útil verificar-
las antes de proceder a la instalación del software. También puede probarse
el sistema intensivamente, antes de colocarlo como sistema de producción.
• Bombas lógicas: en este caso suelen ocultarse tras activaciones por tiempo
o por acciones del usuario. Podemos verificar que no existan en el sistema
trabajos no interactivos introducidos de tipo crontab, at, y otros procesos
(por ejemplo, de tipo nohup), que dispongan de ejecución periódica, o es-
tén en ejecución en segundo plano desde hace mucho tiempo (comandos
w, jobs). En todo caso, podrían utilizarse medidas preventivas que impidie-
ran trabajos no interactivos a los usuarios, o que solamente los permitiesen
a aquellos que lo necesitasen.
© FUOC • P07/M2103/02288 19 Administración de seguridad
• Escáner (escaneo de puertos): los escaners suelen lanzar sobre uno o más
Nota
sistemas bucles de escaneo de puertos conocidos para detectar los que que-
La herramienta chrootkit pue-
dan abiertos y aquellos servicios que están funcionando (y obtener infor- de encontrarse en: http://
www.chrootkit.org
mación de las versiones de los servicios) y que podrían ser susceptibles de
ataques.
• Buffer overflows: suelen ser comunes como bugs o agujeros del sistema, suelen
solucionarse por actualización del software. En todo caso, pueden observarse
por logs situaciones extrañas de caída de servicios que deberían estar funcio-
nando. También pueden maximizarse los controles de procesos y accesos a re-
cursos para aislar el problema cuando se produzca en entornos de acceso
controlado, como el que ofrece SELinux ver más adelante en el módulo.
• Denial of Service (‘ataque DoS’), y otros como SYN flood, o correos bom-
bing tomar medidas de bloqueo de tráfico innecesario en nuestra red (por
ejemplo, por medio de firewalls). En aquellos servicios que se pueda, habrá
que controlar tamaños de buffer, número de clientes por atender, timeouts
de cierre de conexiones, capacidades del servicio, etc.
Para la prevención local, hay que examinar los diferentes mecanismos de au-
tentificación y permisos de accesos a los recursos para definirlos correctamente
y poder garantizar la confidencialidad y la integridad de nuestra información.
En este caso, nos estaremos protegiendo de atacantes que hayan obtenido ac-
ceso a nuestro sistema, o bien de usuarios hostiles que quieran saltarse las
restricciones impuestas en el sistema.
Respecto a la seguridad en red, tenemos que garantizar que los recursos que
ofrecemos (si proporcionamos unos determinados servicios) tienen los pará-
metros de confidencialidad necesarios y que los servicios no pueden ser usa-
dos por terceros no deseados, de modo que, un primer paso será controlar que
los servicios ofrecidos sean los que realmente queremos, y que no estamos
ofreciendo además otros servicios que no tenemos controlados. En el caso de
servicios de los que nosotros somos clientes, también habrá que asegurar los
mecanismos de autentificación, en el sentido de que accedemos a los servido-
res correctos y no existen casos de suplantación de servicios o servidores (nor-
malmente bastante difíciles de detectar).
3. Seguridad local
3.1. Bootloaders
El siguiente paso es proteger el bootloader, ya sea lilo o grub, para que el ata-
cante no pueda modificar las opciones de arranque del kernel o modificar di-
rectamente el arranque (caso de grub). Cualquiera de los dos puede protegerse
también por contraseñas.
password = contraseña
image = /boot/vmlinuz-version
password = contraseña
restricted
© FUOC • P07/M2103/02288 23 Administración de seguridad
En este caso restricted indica además que no se podrán cambiar los paráme-
tros pasados al kernel desde línea de comandos. Hay que tener cuidado de
poner el fichero /etc/lilo.conf protegido a sólo lectura/escritura desde el
root (chmod 600).
user:sndb565sadsd:...
Pero el problema está en que este fichero es legible por cualquier usuario, con
lo que un atacante podía obtener el fichero y utilizar un ataque de fuerza bru-
ta, hasta que desencriptase los passwords contenidos en el fichero, o bien me-
diante ataques de fuerza bruta por medio de diccionarios.
Una cuestión que debe tenerse en cuenta siempre es hacer estas pruebas sobre
nuestros sistemas. No hay que olvidar que los administradores de otros siste-
mas (o el proveedor de acceso o ISP) tendrán sistemas de detección de intrusos
habilitados y podemos ser objeto de denuncia por intentos de intrusión, ya sea
ante las autoridades competentes (unidades de delitos informáticos) o en
nuestro ISP para que se nos cierre el acceso. Hay que tener mucho cuidado con
el uso de herramientas de seguridad, que están siempre al filo de la navaja en-
tre ser de seguridad o de intrusión.
Otro problema importante son algunos permisos especiales que son utilizados
sobre ficheros o script.
bit se coloca mediante chmod +s, ya sea aplicándolo al propietario (se llama
entonces suid) o al grupo (se llama bit sgid); puede quitarse con -s. En el caso
de visualizar con ls, el fichero aparecerá con -rwSrw-rw (fijaos en la S), si es sólo
suid, en sgid la S aparecería tras la segunda w.
En caso de utilizar chmod con notación octal, se usan cuatro cifras, donde las
tres últimas son los permisos clásicos rwxrwxrwx (recordad que hay que sumar
en la cifra 4 para r, 2 w, y 1 para x), y la primera tiene un valor para cada permiso
especial que se quiera (que se suman): 4 (para suid), 2 (sgid), y 1 (para sticky).
servicios como ssh, de login gráfico de X Window System, como xdm, gdm,
kdm, xscreensaver... o, por ejemplo, del login del sistema (la entrada por iden-
tificador de usuario y contraseña). En las antiguas versiones de PAM, se utili-
zaba un archivo (típicamente en /etc/pam.conf), que era donde se leía la
configuración PAM si el directorio /etc/pam.d no existía.
La línea típica de estos ficheros (en /etc/pam.d) tendría este formato (si se uti-
liza /etc/pam.conf habría que añadir el servicio a que pertenece como primer
campo):
donde se especifica:
@include servicio
© FUOC • P07/M2103/02288 27 Administración de seguridad
Un pequeño ejemplo del uso de módulos PAM (en una distribución Debian),
puede ser su uso en el proceso de login (se han listado también las líneas in-
cluidas provenientes de otros servicios):
Otros controlan su sesión para ver cuándo ha entrado por última vez, o guar-
dan cuándo entra y sale (para el comando lastlog), también hay un módulo
que se encarga de verificar si el usuario tiene correo por leer (también hay que
autentificarse), y otro que controla que cambie la contraseña (si está obligado
a hacerlo en el primer login que haga) y que tenga de 4 a 8 letras, y puede uti-
lizarse md5 para la encriptación.
Un caso típico es la posibilidad de forzar el root para que ejecute comandos fal-
sos de sistema; por ejemplo, si el root incluyese el “.” en su variable de PATH,
esto permitiría la ejecución de comandos desde su directorio actual, lo que ha-
bilitaría para colocar archivos que sustituyesen comandos del sistema y que se-
rían ejecutados en primer término antes que los de sistema. El mismo proceso
© FUOC • P07/M2103/02288 28 Administración de seguridad
puede hacerse con un usuario, aunque por ser más limitados sus permisos,
puede no afectar tanto al sistema, cuanto más a la propia seguridad del usua-
rio. Otro caso típico es el de las pantallas de login falsas, pudiéndose sustituir
el típico proceso de login, passwd, por un programa falso que almacene las
contraseñas introducidas.
4. SELinux
Por otro lado las técnicas MAC (mandatory access control), desarrollan políticas
de seguridad (definidas por el administrador) donde el sistema tiene control
completo sobre los derechos de acceso que se conceden sobre cada recurso. Por
ejemplo, con permisos (de tipo Unix) podemos dar acceso a ficheros, pero me-
diante políticas MAC tenemos control extra para determinar a qué ficheros ex-
plícitamente se permite acceso por parte de un proceso, y qué nivel de acceso
queremos conceder. Se fijan contextos, en los cuales se indican en qué situa-
ciones un objeto puede acceder a otro objeto.
NOTA
SELinux fue desarrollado por la agencia US NSA, con aportaciones de diversas com-
pañías para sistemas UNIX y libres, como Linux y BSD. Se liberó en el año 2000 y Algunos recursos sobre
SELinux:
desde entonces se ha ido integrando en diferentes distribuciones GNU/Linux. http://www.redhat.com/docs/
manuals/enterprise/
RHEL-4-Manual/selinux-guide/
Disponemos en SELinux de un modelo de dominio-tipo, donde cada proceso co-
http://www.nsa.gov/selinux/
rre en un denominado contexto de seguridad, y cualquier recurso (fichero, direc- http://fedora.redhat.com/
torio, socket, etc.) tiene un tipo asociado con él. Hay un conjunto de reglas que docs/selinux-faq/
http://selinux.sourceforge.net/
indican qué acciones pueden efectuarse en cada contexto sobre cada tipo. Una
© FUOC • P07/M2103/02288 30 Administración de seguridad
ventaja de este modelo contexto-tipo es que las políticas que se definan pueden
ser analizadas (existen herramientas) para determinar qué flujos de información
están permitidos, por ejemplo, para detectar posibles vías de ataque, o si la políti-
ca es lo suficientemente completa para cubrir todos los accesos posibles.
root:sysadm_r:sysadm_t
Por ejemplo, en una máquina con SELinux activado (una Fedora en este caso)
podemos ver con la opción -Z del ps los contextos asociados a los procesos:
# ps ax –Z
LABEL PID TTY STAT TIME COMMAND
system_u:system_r:init_t 1 ? Ss 0:00 init
system_u:system_r:kernel_t 2 ? S 0:00 [migration/0]
system_u:system_r:kernel_t 3 ? S 0:00 [ksoftirqd/0]
system_u:system_r:kernel_t 4 ? S 0:00 [watchdog/0]
system_u:system_r:kernel_t 5 ? S 0:00 [migration/1]
system_u:system_r:kernel_t 6 ? SN 0:00 [ksoftirqd/1]
system_u:system_r:kernel_t 7 ? S 0:00 [watchdog/1]
system_u:system_r:syslogd_t 2564 ? Ss 0:00 syslogd -m 0
system_u:system_r:klogd_t 2567 ? Ss 0:00 klogd -x
system_u:system_r:irqbalance_t 2579 ? Ss 0:00 irqbalance
system_u:system_r:portmap_t 2608 ? Ss 0:00 portmap
system_u:system_r:rpcd_t 2629 ? Ss 0:00 rpc.statd
user_u:system_r:unconfined_t 4812 ? Ss 0:00 /usr/libexec/gconfd-2 5
user_u:system_r:unconfined_t 4858 ? Sl 0:00 gnome-terminal
user_u:system_r:unconfined_t 4861 ? S 0:00 gnome-pty-helper
user_u:system_r:unconfined_t 4862 pts/0 Ss 0:00 bash
user_u:system_r:unconfined_t 4920 pts/0 S 0:01 gedit
system_u:system_r:rpcd_t 4984 ? Ss 0:00 rpc.idmapd
system_u:system_r:gpm_t 5029 ? Ss 0:00 gpm -m /dev/input/mice -t exps2
user_u:system_r:unconfined_t 5184 pts/0 R+ 0:00 ps ax -Z
user_u:system_r:unconfined_t 5185 pts/0 D+ 0:00 Bash
© FUOC • P07/M2103/02288 31 Administración de seguridad
y con ls con la opcion -Z podemos ver los contextos asociados a ficheros y di-
rectorios:
# ls -Z
drwxr-xr-x josep josep user_u:object_r:user_home_t Desktop
drwxrwxr-x josep josep user_u:object_r:user_home_t proves
-rw-r--r-- josep josep user_u:object_r:user_home_t yum.conf
$ id -Z
user_u:system_r:unconfined_t
Con respecto a la política usada, SELinux soporta dos tipos diferentes: targered
y strict. En targered la mayoría de procesos operan sin restricciones, y solo ser-
vicios (ciertos daemons) específicos son puestos en diferentes contextos de se-
guridad que son confinados a la política de seguridad. En strict todos los
procesos son asignados a contextos de seguridad, y confinados a políticas de-
finidas, de manera que cualquier acción es controlada por las políticas defini-
das. En principio éstos son los dos tipos de políticas definidas generalmente,
pero la especificación está abierta a incluir más.
4.1. Arquitectura
• Herramientas
– Y ficheros que sirven para etiquetar los contextos de los ficheros y di-
rectorios durante la carga, o en determinados momentos.
Veamos de este último apartado las herramientas típicas de que solemos disponer:
Nombre Utilización
– cron: Modificado para incluir los contextos para los trabajos en ejecución
por cron.
– login: Modificado para que coloque el contexto de seguridad inicial para el
usuario cuando entra en el sistema.
– logrotate: Modificado para preservar el contexto de los logs cuando estén
recopilados.
– pam: Modificado para colocar el contexto inicial del usuario y para usar la
API SELinux y obtener acceso privilegiado a la información de passwords.
– ssh: Modificado para colocar el contexto inicial del usuario cuando éste entra
en el sistema.
– Y varios programas adicionales que modifiquen /etc/passwd o /etc/shadow.
4.2. Crítica
5. Seguridad en red
La configuración de los servicios de red [Mou01], tal como hemos visto, se rea-
liza desde varios lugares [Ano99][Hat01][Peñ]:
Otros ficheros de apoyo (con información útil) son: /etc/services, que está for-
mado por una lista de servicios locales o de red conocidos, junto con el nom-
bre del protocolo (tcp, udp u otros), que se utiliza en el servicio, y el puerto
que utiliza; /etc/protocols es una lista de protocolos conocidos; y /etc/rpc es
una lista de servidores RPC, junto con los puertos usados. Estos ficheros vie-
nen con la distribución y son una especie de base de datos que utilizan los co-
mandos y herramientas de red para determinar los nombres de servicios,
protocolos, o rpc y sus puertos asociados. Cabe destacar que son ficheros más
o menos históricos, que no tienen por qué contener todas las definiciones de
protocolos y servicios, pueden asimismo buscarse diferentes listas en Internet
de puertos conocidos.
b) rsh, rexec, rcp además presentan el problema de que bajo algunas condi-
ciones ni siquiera necesitan contraseñas (por ejemplo, si se hace desde sitios
validados en fichero .rhosts), con lo cual vuelven a ser inseguros, y dejan gran-
des puertas abiertas.
Respecto a SSH, también hay que tener la precaución de usar ssh version 2. La
primera versión tiene algunos exploits conocidos; hay que tener cuidado al ins-
talar OpenSSH, y si no necesitamos la primera versión, instalar sólo soporte
para ssh2 (ver opción Protocol en fichero de configuración /etc/ssh/
ssh_config).
6. Detección de intrusiones
Con los sistemas de detección de intrusos [Hat01] (IDS) se quiere dar un paso
Nota
más adelante. Una vez hayamos podido configurar más o menos correctamen-
Los sistemas IDS nos permiten
te nuestra seguridad, el paso siguiente consistirá en una detección y preven- la detección a tiempo
ción activa de las intrusiones. de intrusos, usando nuestros
recursos o explorando
nuestros sistemas en busca
de fallos de seguridad.
Los sistemas IDS crean procedimientos de escucha y generación de alertas al
detectar situaciones sospechosas, o sea, buscamos síntomas de posibles acci-
dentes de seguridad.
Los hay desde sistemas basados en la información local, por ejemplo, recopi-
lan información de los log del sistema, vigilan cambios en los ficheros de sis-
tema o bien en las configuraciones de los servicios típicos. Otros sistemas
están basados en red e intentan verificar que no se produzcan comportamien-
tos extraños, como por ejemplo los casos de spoofing, donde hay falsificaciones
de direcciones conocidas; controlar tráfico sospechoso, posibles ataques de de-
negación de servicio, detectando tráfico excesivo hacia determinados servi-
cios, controlando que no hay interfaces de red en modo promiscuo (síntoma
de sniffers o capturadores de paquetes).
Ejemplos
Los TCP wrappers [Mou01] son un software que actúa de intermediario entre
las peticiones del usuario de servicio y los daemons de los servidores que ofre-
cen el servicio. Muchas de las distribuciones vienen ya con los wrappers acti-
vados y podemos configurar los niveles de acceso. Los wrappers se suelen
utilizar en combinación con inetd o xinetd, de manera que protejan los servi-
cios que ofrecen.
de manera que, cuando llegue una petición, será tratada por el daemon tcpd que
se encargará de verificar el acceso (para más detalles, ver página man tcpd).
servicio y un posible cliente (usuario, y/o host), y nos dice qué haría el sis-
tema ante esta situación.
7.1. Firewalls
Este tipo de firewall suele combinarse con un router para enlazar los paquetes
de las diferentes redes. Otra configuración típica es la de firewall hacia Inter-
net, por ejemplo con dos tarjetas de red: en una obtenemos/proporcionamos
trafico a Internet y en la otra enviamos o proporcionamos el tráfico a nuestra
red interna, pudiendo así eliminar el tráfico que no va destinado a nosotros, y
también controlar el tráfico que se mueve hacia Internet, por si no queremos
que se tenga acceso a algunos protocolos, o bien sospechamos que hay posibi-
lidades de fugas de información por algunos ataques. Una tercera posibilidad
es la máquina individual conectada con una única tarjeta de red hacia Inter-
net, directa o bien a través de un proveedor. En este caso, sólo queremos pro-
teger nuestra máquina de ataques de intrusos, de tráfico no deseado o de que
se vea comprometida al robo de datos.
La interfaz del comando IPtables permite realizar las diferentes tareas de con-
Nota
figuración de las reglas que afectan al sistema de filtrado: ya sea generación de
IPTables aporta diferentes ele-
logs, acciones de pre y post routing de paquetes, NAT, y forwarding (reenvío) de mentos como las tablas,
chains, y las propias reglas.
puertos.
El comando iptables -L lista las reglas activas en ese momento en cada una de
las cadenas (chains). Si no se han configurado previamente, suelen ser por de-
fecto aceptar todos los paquetes de las cadenas (o chains) de input (entrada),
output (salida) y forward (reenvío).
El sistema de IPTables tiene como nivel superior las tablas. Cada una contiene
diferentes cadenas, que a su vez contienen diferentes reglas. Las tres tablas que
existen son: Filter, NAT y Mangled. La primera sirve para las propias normas
© FUOC • P07/M2103/02288 43 Administración de seguridad
Al poner la regla, también puede usarse la opción -I (insertar) para indicar una
posición, por ejemplo:
que nos dice que se coloque la regla en la cadena input en tercera posición; y
se van a aceptar paquetes (-j) que provengan (con fuente, o source, -s) de la su-
bred 10.0.0.0 con netmask 255.0.0.0. Con -D de forma parecida podemos bo-
rrar o un número de regla, o la regla exacta, como se especifica a continuación,
borrando la primera regla de la cadena o la regla que mencionamos:
iptables -D INPUT 1
iptables -D INPUT -s 10.0.0.0/8 -j ACCEPT
También hay reglas que permiten definir una “política” por defecto de los pa-
quetes (opción -P); se va a hacer con todos los paquetes lo mismo. Por ejem-
plo, se suele decir que se pierdan todos los paquetes por defecto, y se habilitan
luego los que interesan, y muchas veces también se evita que haya forwarding
de paquetes si no es necesario (si no actuamos de router), esto podría ponerse:
Todo lo cual establece unas políticas por defecto que consisten en denegar la
entrada de paquetes, no permitir salir y no reenviar paquetes. Ahora se podrán
añadir las reglas que conciernen a los paquetes que deseemos utilizar, dicien-
do qué protocolos, puertos y orígenes o destinos queremos permitir o evitar.
Esto puede ser difícil, ya que tenemos que conocer todos los puertos y proto-
colos que utilicen nuestro software o servicios. Otra táctica sería dejar sólo ac-
tivos aquellos servicios que sean imprescindibles y habilitar con el firewall el
acceso de los servicios a las máquinas deseadas.
Donde:
2) Rechazamos los paquetes tcp con destino al puerto 113, emitiendo una res-
puesta de tipo tcp-reset.
© FUOC • P07/M2103/02288 45 Administración de seguridad
/etc/init.d/iptables save
Y se guardan en:
/etc/sysconfig/iptables
Con (/etc/init.d/iptables load) podemos cargar las reglas (en Debian hay que
dar el nombre del fichero de reglas), aunque Debian soporta unos nombres por
defecto de ficheros, que son active para las reglas normales (las que se usarán
en un start del servicio) e inactive para las que quedarán cuando se desactive el
servicio (se haga un stop). Otra aproximación comúnmente usada es la de co-
locar las reglas en un fichero script con las llamadas iptables que se necesiten
y llamarlas por ejemplo colocándolas en el runlevel necesario, o con enlace ha-
cia el script en /etc/init.d.
vicios que se ven afectados y podemos dejar, o no, pasar al servicio cam-
biando la configuración por defecto. El mecanismo utilizado por debajo
es iptables. Puede verse la configuración final de reglas que realiza /etc/
sysconfig/iptables que, a su vez, es leído por el servicio iptables, que se car-
ga en arranque, o bien por parada o arranque mediante /etc/init.d/iptables
con las opciones start o stop. En Debian también es posible instalarlo,
pero deja la configuración de las reglas en /etc/defaults/lokkit-l, y un
script en /etc/init.d/lokkit-l. También existe una versión gráfica llamada gno-
me-lokkit.
• fwbuilder: una herramienta que permite construir las reglas del firewall de
Nota
forma gráfica. Se puede utilizar en varios operativos (GNU/Linux tanto
Ver:
Fedora como Debian, OpenBSD, MacOS), con diferentes tipos de firewalls http://www.fwbuilder.org/
(iptables incluido).
• Los códigos móviles por web (ActiveX, Java, y JavaScript), cruzan los firewalls,
y por lo tanto es difícil proteger los sistemas si éstos son vulnerables a los
ataques contra agujeros descubiertos.
Así, aunque los firewalls son una muy buena solución a la mayor parte de la
seguridad, siempre pueden tener vulnerabilidades y dejar pasar tráfico que se
considere válido, pero que incluya otras fuentes posibles de ataques o vulne-
rabilidades. En seguridad nunca hay que considerar (y confiar en) una única
solución, y esperar que nos proteja absolutamente; hay que examinar los di-
versos problemas, plantear soluciones que los detecten a tiempo y políticas de
prevención que nos curen en salud, por lo que pueda pasar.
© FUOC • P07/M2103/02288 48 Administración de seguridad
8. Herramientas de seguridad
Puede servir como sistema IDS preventivo. Nos sirve para “tomar” una foto
del sistema, poder comparar después cualquier modificación introducida y
comprobar que éste no haya sido corrompido por un atacante. El objetivo
aquí es proteger los archivos de la propia máquina, evitar que se produzcan
cambios como, por ejemplo, los que podría haber provocado un rootkit.
Así, cuando volvamos a ejecutar la herramienta, podemos comprobar los
cambios respecto a la ejecución anterior. Hay que elegir un subconjunto de
archivos que sean importantes en el sistema, o fuentes de posibles ataques.
TripWire es propietario, pero hay una herramienta libre equivalente llama-
da AIDE.
9. Análisis logs
Observando los ficheros de log [Ano99][Fri02], podemos hacernos una idea rá-
pida del estado global del sistema, así como de las últimas ocurrencias, y de-
tectar accesos (o intentos) indebidos. Pero también cabe tener presente que los
logs, si ha sucedido una intrusión real, pueden haber sido limpiados o falsea-
dos. La mayoría de archivos de log residen en el directorio /var/log.
Muchos de los servicios pueden poseer logs propios, que normalmente se esta-
blecen en la configuración (mediante el correspondiente fichero de configura-
ción). La mayoría suelen utilizar las facilidades de log incorporadas en el
sistema Sys log, mediante el demonio Syslogd. Su configuración reside en /etc/
syslog.conf. Esta configuración suele establecerse por niveles de mensajes:
existen diferentes tipos de mensajes según su importancia. Normalmente sue-
len aparecer niveles debug, info, err, notice, warning, err, crit, alert, emerg, en
que más o menos ésta sería la ordenación de importancia de los mensajes (de
menor a mayor). Normalmente, la mayoría de los mensajes se dirigen al log
/var/log/messages, pero puede definirse que cada tipo vaya a ficheros diferen-
tes y también se puede identificar quién los ha originado; típicamente el ker-
nel, correo, news, el sistema de autentificación, etc.
Comentamos en los siguientes puntos algunos ficheros de log que habría que
tener en cuenta (quizás los más utilizados):
está dentro del sistema. El comando who utiliza este fichero para propor-
cionar esta información.
En el sistema de logs, otra cosa que habría que asegurar es que el directorio de
logs /var/ log, pueda ser sólo escribible por el root (o deamons asociados a servi-
cios). De otro modo, cualquier atacante podría falsificar la información de los
logs. Aun así, si el atacante consigue acceso a root, puede, y suele, borrar las pis-
ta de sus accesos.
© FUOC • P07/M2103/02288 53 Administración de seguridad
Primero examinaremos qué ofrece nuestra máquina a la red. Para ello, utiliza-
remos la herramienta nmap como escaneador de puertos. Con el comando
(desde root):
obtenemos:
(The 3079 ports scanned but not shown below are in state: closed)
Ahora tenemos que reiniciar inetd para que vuelva a leer la configuración que
hemos cambiado: /etc/init.d/inetd restart.
Volvemos a nmap:
De lo que nos queda, tenemos el servicio ssh, que queremos dejar, y el servidor
de web, que lo pararemos de momento:
/etc/init.d/apache stop
Los servicios RPC que se ofrecen se pueden ver con el comando rpcinfo:
root@maquina:˜# rpcinfo -p
donde observamos los servicios RPC con algunos de los puertos que ya se ha-
bían detectado. Otro comando que puede resultar útil es lsof, que, entre otras
funciones, permite relacionar puertos con los servicios que los han abierto
(por ejemplo: lsof -i | grep 731).
© FUOC • P07/M2103/02288 56 Administración de seguridad
/etc/init.d/nfs-common
/etc/init.d/nfs-kernel-server
/etc/init.d/portmap
dándoles el parámetro stop para parar los servicios RPC (en este caso NFS).
sshd: 1.2.3.4
nos dice que sería concedido el acceso. Un detalle es que nos dice que sshd no
está en el inetd.conf, y si lo verificamos, vemos que así es: no se activa por el
servidor inetd, sino por daemon en el runlevel que estemos. Además (en De-
bian), éste es un caso de demonio que está compilado con las bibliotecas de
wrappers incluidas (y, por lo tanto, no necesita tcpd para funcionar). En De-
bian hay varios daemons así: ssh, portmap, in.talk, rpc.statd, rpc.mountd, en-
tre otros. Esto permite asegurar estos daemons mediante wrappers.
Otra cuestión por verificar son las conexiones actuales existentes. Con el co-
mando netstat -utp, podemos listar las conexiones tcp, udp establecidas con
el exterior, ya sean entrantes o salientes; así, en cualquier momento podemos
detectar los clientes conectados y a quién estamos conectados. Otro comando
importante (de múltiples funciones) es lsof, que puede relacionar ficheros
abiertos con procesos o conexiones por red establecidas mediante lsof -i, pu-
diéndose así detectar accesos indebidos a ficheros.
root@aopcjj:˜# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
En este punto, podríamos añadir un firewall que nos permitiese una gestión
más adecuada de paquetes que recibimos y enviamos, y que sería un control
previo para mejorar la seguridad. Dependiendo de nuestras necesidades, esta-
bleceríamos las reglas necesarias de modo parecido a las que comentamos en
los ejemplos de firewalls de la unidad.
Actividades
1) Supongamos que colocamos en nuestra máquina un sitio web, por ejemplo con Apache.
Nuestro sitio está pensado para diez usuarios internos, pero no controlamos este número.
Más adelante nos planteamos poner en Internet este sistema, ya que creemos que puede ser
útil para los clientes, y lo único que hacemos es poner el sistema con una IP pública en In-
ternet. ¿Qué tipo de ataques podría sufrir este sistema?
2) ¿Cómo podemos detectar los ficheros con suid en nuestro sistema? ¿Qué comandos serán
necesarios? ¿Y los directorios con SUID o SGID? ¿Por qué es necesario, por ejemplo, que /usr/
bin/passwd tenga bit de SUID?
3) Los ficheros .rhosts, como hemos visto, son un peligro importante para la seguridad. ¿Po-
dríamos utilizar algún método automático que comprobase su existencia periódicamente?
¿Cómo?
4) Supongamos que queremos deshabilitar un servicio del cual sabemos que tiene el
script /etc/init.d/servicio que lo controla: queremos desactivarlo en todos los runlevels en los
que se presenta. ¿Cómo encontramos los runlevels en los que está? (por ejemplo, buscando
enlaces al script).
5) Examinar los servicios en activo en vuestra máquina. ¿Son todos necesarios? ¿Cómo ha-
bría que protegerlos o desactivarlos?
6) Practicar el uso de algunas de las herramientas de seguridad descritas (nmap, nessus, etc.).
7) ¿Qué reglas IPtables serían necesarias para una máquina en la que sólo queremos acceso
por SSH desde una dirección concreta?
[Peñ] Imprescindible para Debian, muy buena descripción para seguir paso a paso la confi-
guración de seguridad, [Hatb] sería equivalente para Fedora/Red Hat.
[Mou01] Excelente referencia de seguridad para Red Hat (aplicable también para Debian).
[Sei] Guía paso a paso identificando los puntos clave que hay que verificar y los problemas
que puedan surgir.
[Proa] [Sno] [Insb] [Nes] Algunas de las herramientas de seguridad más usadas.
[NSAb] Versión de Linux con miras a la seguridad, producida por la NSA. Referencia para SE-
Linux.