lunes, 9 de marzo de 2015

SEGURIDAD BASICA EN LINUX

La progresiva disminución de costes del hardware, así como la constante mejora de su funcionalidad, ha generado un aumento considerable de instalación de redes tanto a nivel empresarial como doméstico.
Por otra parte, la conexión de dichas redes a Internet ha experimentado en estos últimos años un crecimiento exponencial debido, igualmente, al bajo coste de las tarifas de conexión. Este acceso masivo de redes interconectadas provoca un grave problema de seguridad y es a partir de finales de los años '80 cuando comienzan a aparecer los primeros gusanos de Internet

De esta forma salta la alarma respecto de la seguridad de los sistemas informáticos y comienzan a aparecer organizaciones cuya misión es ofrecer soluciones frente a problemas de seguridad.


Respecto de un sistema informático se puede decir que es seguro si está 'fuera de peligro', es decir está protegido. Pero, conseguir llegar a esta situación es prácticamente imposible. No existe un sistema completamente seguro. Todos los sistemas tienen sus vulnerabilidades, bien del propio sistema operativo o de las aplicaciones ejecutadas sobre él. Y todo lo que se puede hacer es aumentar la dificultad para que el sistema quede comprometido.

Otro punto que hay que tener en cuenta es que, en la medida en que el sistema es mas seguro se pierde funcionalidad. Hay que encontrar, por tanto, un equilibrio entre seguridad y funcionalidad. Desactivar todos aquellos servicios que no sean necesarios y proteger el sistema en todo aquello que sea básico es imprescindible.
Como es sabido, en un sistema Linux el usuario root es el que tiene el control total sobre el sistema. Puede hacer lo que quiera. Lógicamente, a un pirata informático lo que le interesa es obtener ese estatus de usuario root y a partir de ahí utilizar la máquina para los fines que el persiga, como utilizarla como pasarela para dejar falsas pistas sobre sus 'malas acciones', o junto con otras máquinas llevar a cabo un ataque distribuido de denegación de servicio (DDoS) , o ejecutar sus programas con la CPU de la máquina atacada, obtener datos para luego comercializar con ellos,...
La ventaja que tiene Linux frente a otros sistemas operativos es que es libre (Open Source) y su código fuente esta disponible para todo aquel que quiera verlo, estudiarlo, probarlo y corregirlo.Cualquier versión beta que se publique del núcleo de Linux es probada por una gran cantidad de programadores que hacen de banco de pruebas, bajo las mas diversas condiciones y que de esa forma colaboran a que el producto final sea de calidad.
La seguridad en un sistema se basa en los mecanismos de protección que ese sistema proporciona. Estos mecanismos deben permitir controlar qué usuarios tienen acceso a los recursos del sistema y qué tipo de operaciones pueden realizar sobre esos recursos.
Todo mecanismo de protección debe manejar 2 conceptos:

  • Recursos: son las partes del sistema utilizadas por los procesos.

  • Dominios de protección: son el conjunto de recursos y operaciones sobre estos recursos que podrán utilizar todos aquellos procesos que se ejecuten sobre él.

En general, en un sistema LINUX, el conjunto de recursos está formado por todos los archivos del sistema, y el dominio será un usuario y los procesos que el ejecuta y que, por tanto, tengan el mismo UID efectivo.
Para controlar el acceso de los dominios a los recursos se utilizan las Listas de Control de Acceso por cada recurso.
En Linux, para conseguir Listas de tamaño constante, se utilizan 2 técnicas:

  • Reducir el numero de operaciones posibles sobre un recurso (archivo): podemos controlar 3 operaciones sobre los archivos, que son la lectura (r), escritura (w) y la ejecución (x).

  • Reducir el número de dominios que aparecen en la lista. Esto se consigue mediante el concepto de grupos de usuarios.

Todos los usuarios de un sistema Linux deben pertenecer, al menos, a un grupo. Existen 3 grupos o categorías en la relación entre un dominio ( usuario ) y un recurso (archivo ):

  • Propietario: indica quién creó el archivo

  • Grupo del propietario: reúne a todos los usuarios que pertenecen al grupo del propietario.

  • Resto de usuarios: los que no crearon el archivo y no pertenecen al grupo del propietario.

Cuando encendemos el ordenador se ejecuta un software, llamado BIOS (Basic Input/Output System) cuya función es determinar la configuración de la máquina y proporcionar un sistema básico de control sobre los dispositivos. Este software se suele almacenar en memoria ROM (Read o­nly Memory) o FLASH que permite la actualización de la BIOS sin cambiar el chip.


LILO acepta una serie de opciones en línea cuando se ejecuta. En concreto, el argumento single es el más peligroso, ya que arranca Linux en modo monousuario y por defecto, la mayoría de las distribuciones vuelcan a un prompt de root en una shell de comandos sin pedir ningún tipo de contraseña. Es una puerta de entrada al sistema que se debe de cerrar.
GRUB es un gestor multiarranque de carga directa. No tiTambién se puede conseguir una shell para cambiar la password del root introduciendo en las opciones en línea del LILO lo siguiente:

linux init=/bin/bash rw

Estos agujeros de seguridad se puede minimizar añadiendo al archivo de configuración de LILO /etc/lilo.conf las opciones siguientes:

  • delay = 0 que controla la cantidad de tiempo (en décimas de segundo) que LILO espera a que el usuario introduzca datos antes de arrancar la opción por defecto.

  • prompt fuerza al usuario a introducir algo y LILO no arranca el sistema automáticamente. Puede ser útil en servidores para eliminar los reinicios desatendidos.

  • restricted, situada en la imagen/es a proteger, pide una contraseña si se pasan opciones en tiempo de arranque (como linux single).

  • password=CLAVE (contraseña no cifrada). Junto con la opción anterior y situadas dentro de la sección de la partición Linux a proteger evitan el acceso en modo 'single' desde el prompt del LILO. Si no se añade la opciónrestricted, la password se pedirá en cualquier caso.


Es importante eliminar el permiso de lectura sobre /etc/lilo.conf para el grupo y los otros, y de esa forma que no se pueda 'ver' la contraseña de LILO.
El comando chattr permite transformar el archivo /etc/lilo.conf en invariable, lo cual significa que, tenga los permisos que tenga, el archivo no se puede borrar, renombrar, escribir en él, o crearle enlaces. Solo el root puede hacerlo.

# chattr +i /etc/lilo.conf

Para luego introducir cualquier modificación en este archivo habrá que quitar el flag de invariable:

# chattr -i /etc/lilo.conf

Nada de lo dicho tiene sentido si no hemos desactivado desde la BIOS la opción de arranque desde diskette, ya que en él puede haber un LILO completamente distinto. O también se puede arrancar con un disco de una distribución y a continuación arrancar el núcleo como Linux single.
Si el gestor de arranque utilizado es el GRUB GNU el nivel de seguridad introducido es mayor.
ene un numero limitado de núcleos arrancables (bootables) y permite arrancar cualquier tipo de sistema operativo sin necesidad de conocer la posición física de su núcleo en el disco, solo la partición correspondiente.
GRUB presenta varias ventajas respecto de LILO, como, por ejemplo, no es necesario instalarlo cada vez que hacen modificaciones en su archivo de configuracion. Si que es necesario ejecutar la orden grub-install cuando se ha ejecutado un apt-get upgrade, para cargar la nueva version del paquete grub.
Para crear un diskette de arranque de GRUB hay que copiar los archivos 'stage1' y 'stage2' (etapas de ejecución del GRUB) del directorio /boot/grub/ en el primero y segundo bloque del diskette:

# dd if=stage1 of=/dev/fd0 bs=512 count=1

# dd if=stage2 of=/dev/fd0 bs=512 seek=1

Es importante disponer de este diskette por si hay algún fallo en el MBR y no arranca el equipo. Otra forma mas sencilla de obtener este diskette es, sin montar la unidad floppy, ejecutar la orden:

# cat /boot/grub/stage1 /boot/grub/stage2 > /dev/fd0

De la misma forma, es tambien interesante hacer una copia del MBR a diskette (o cualquier otro medio), sobre todo si se tienen varios sistemas operativos instalados.

# dd if=/dev/hda of=/floppy/arranque.mbr count=1

Si, por seguridad, se quieren suprimir las operaciones interactivas desde GRUB, añadir la directiva password en el archivo de configuración de GRUB /boot/grub/menu.lst de la forma:
password --md5 PASSWORD

GRUB de esta forma desactiva cualquier control interactivo hasta que se pulse p y se introduzca la contraseña correcta. El argumento md5 indica a GRUB que almacene la password encriptada. Si no se indica estará en texto plano. Ejecutar

# grub

grub> md5crypt

pide la password y la devuelve encriptada. Se debe copiar en /boot/grub/menu.lst.
Otra medida de control de acceso al sistema puede consistir en provocar rearranques sucesivos del sistema cuando se intente entrar en el en modo 'single'. Para ello habrá que añadir, en el archivo de configuración /etc/inittab, alguna de las líneas siguientes:

ls:S:wait: shutdown -t0 -r now

ls:S:off:/sbin/sh

ls:S:once:/shutdown -r now

ls:S:once:/bin/sh -c `exec login`

Todas ellas impiden, de formas diversas, la entrada al sistema en modo single root (S).


La palabra de protección contiene 16 bits cuyo contenido se interpreta según se muestra en la figura siguiente:



La palabra de protección forma parte del contenido del nodo-i del archivo, que es la estructura que almacena información relativa a dicho archivo, como son el propietario, grupo, fechas de creación-modificación-acceso, tamaño, etc. Parte de los contenidos del nodo-i son visibles con la orden ls y la opción -l.

-rwxr--r-- 1 root root 512 Nov 24 17:59 arranque.mbr

Es conveniente que el administrador asigne al sistema, por defecto, una máscara de permisos umask restrictiva. Por ejemplo 077 e incluirla en /etc/profile. La orden umask establece los permisos que no se asignaran a los archivos. En el caso de 077 (---rwxrwx) al crear un archivo tendrá los permisos rw-------. Ejecución no se asigna por defecto.
Dentro de la palabra de protección del archivo, en la que se reflejan los diferentes permisos para los diferentes tipos de usuarios, existen unos bits que ocupan las posiciones 10, 11, y 12 cuyo estado puede comprometer de alguna forma la seguridad del sistema. Estos bits son:
  1. Sticky-bit (bit t/T sobre other) que activado sobre un directorio indica que un archivo de ese directorio solo puede ser borrado por: el propietario del archivo, el propietario del directorio o el root. Si aparece t, el bit sticky está a uno y el bit de ejecución de otros (other) está también a 1. Si aparece T el bit sticky está a uno y el bit de ejecución de otros está a 0. La orden que activa el sticky-bit sobre el directorio /home/usuario1/ es la siguiente:

# chmod +t /home/usuario1/

# ls -l /home

drwxr-xr-t 13 usuario1 usuario1 4096 Apr 16 2004 usuario1

Esta opción está activada por defecto en los directorios del sistema /tmp y /var/tmp/, que son utilizados por muchos programas. Estos programas presuponen que nadie puede borrar sus archivos una vez que han sido creados. Si se elimina de ellos el sticky-bit pueden quedar expuestos a ataques symlink. Este tipo de ataque aprovecha la creación de archivos temporales, por parte de algunos programas, en estos directorios y si dichos archivos tienen los permisos adecuados es posible crear enlaces simbólicos entre ellos y archivos del sistema, como /etc/passwd, y conseguir el permiso de escritura sobre él al ejecutar dicho script.

  • Bit SGID (bit s/S sobre group) que activado sobre un archivo, da los derechos del grupo a quien lo ejecuta, y solo durante la ejecución. Si aparece s el bit de setgid está a uno y el bit de ejecución del grupo está a 1. Si aparece Sel bit de setgid está a uno y el bit de ejecución del grupo está a 0.

  • Bit SUID (bit s/S sobre owner) que activado en un archivo ordinario, asigna los derechos del propietario del archivo a quien lo ejecuta, y solo durante el tiempo de ejecución. El sentido de s/S es el mismo que en SGID. La orden que activa el bit SUID sobre un archivo es la siguiente:

# chmod +s /home/archivo

El clásico ejemplo de archivo setuidado es el comando /usr/bin/passwd. Y es necesario que sea asi, ya que el usuario que cambia su password debe poder escribir sobre el archivo /etc/shadow cuya propiedad es del root y necesita temporalmente los privilegios del root.

-rwsr-xr-x 1 root root 26616 May 10 2004 /usr/bin/passwd

Si alguno de los programas con el bit SUID activado presenta algún agujero de seguridad, a través de ellos un potencial atacante puede adquirir privilegios de root. Por lo tanto es importante comprobar qué archivos en el sistema son SUID y vigilar si aumentan en número. Las ordenes siguientes permiten conocer qué archivos del sistema tienen activado el bit SGID y el bit SUID:

# find / -type f ( -perm -2000 -o -perm -4000 )

donde 2000 y 4000 son números en octal.

Es importante que el administrador impida la ejecución de archivos con el bit SUID activado en aquellos directorios en los que los usuario tienen permiso de escritura, como es el caso de /home. La primera medida sera aislar /home en una partición de disco independiente y a continuación, en el archivo /etc/fstab, activar la opción nosuid para dicha partición.

No hay comentarios:

Publicar un comentario

analytics