ÍNDICE
La seguridad dentro de cualquier sistema operativo debería ser de especial atención, tanto de cara a empresas como a particulares, pues el resultado de un deficiente nivel de seguridad puede repercutir en serios problemas en caso de intrusión no autorizada.
Para alcanzar la seguridad dentro del sistema operativo, éste
tendrá que hacerlo ya sea por medio de "passwords" (para restringir
el acceso al sistema), utilizando las opciones de configuración
pertinentes de cada SO, u otros.
Identificación
y autenticación. Passwords
Antes de poder entrar a nuestro sistema, será conveniente cerciorarnos de la identidad del usuario que intenta acceder, además de asegurarnos de que realmente es quien dice ser. Si bien existen técnicas más o menos sofisticadas (sistemas para escanear el iris de los ojos, huellas dactilares,...), uno de los más usados y simples es el empleo de passwords.
Cuando vayamos a entrar al sistema se nos requerirá:
Por último, será preciso señalar que la efectividad de las contraseñas dependen de varios factores:
Sistemas
monousuario/multiusuario, monotarea/multitarea
Tenemos que hacer una diferenciación dentro de los SO's, porque la seguridad no siempre será la misma.
Un SO podría dividirse de la siguiente forma:
- Monousuario
- Multiusuario
- Monotarea
- Multitarea
Monousuario:
|
Un único usuario con permiso para hacer cualquier cosa. -No requiere password. |
Multiusuario:
|
Varios usuarios que acceden simultáneamente al mismo SO. -Requiere password. -Proteger la información de los diferentes usuarios. |
Los siguientes serán independientes de si el SO es monousuario o multiusuario: | |
Monotarea:
|
Un único proceso en ejecución cada vez. -No requiere protección sobre el proceso. |
Multitarea:
|
Varios procesos que se ejecutan simultáneamente. -Proteger los procesos (un proceso no puede acceder a la memoria de otro). |
A continuación se indicará la forma que tiene este SO para proporcionar seguridad, además algunar recomendaciones.
Acceso a ficheros y directorios
En UNIX, tenemos la posibilidad de controlar los accesos a través de los diferentes directorios o ficheros por diferentes métodos, por ejemplo:
- Permisos
- ACL (Listas de Control de Acceso)
PermisosBit suid
Consiste en otorgar diferentes tipos de permisos tanto a los archivos como a los directorios. Los más importantes son:Su efecto dependerá de a qué se le asigne:
- Lectura (r)
- Escritura (w)
- Ejecución (x)
Estos permisos tendrán la siguiente estructura:
Fichero r
w
xLeer
Escribir
EjecutarloDirectorio r
w
xVer contenido
Modificar
Buscar un fichero concreto dentro del mismoEn donde, dividido de esta forma, cada bloque de permisos tendrá el siguiente significado:
Fichero: - rwx r-x r-x Directorio: d rwx r-x r-x
- Tipo de archivo (fichero ordinario, directorio, link,...).
- Permisos para el usuario propietario.
- Permisos para el grupo al que pertenezca el usuario.
- Permisos para otros (el resto de personas).
ACL
Esta lista de control de accesos consiste en una extensión de los permisos ya explicados. Con su empleo conseguiremos afinar más la funcionalidad de los permisos puesto que podremos limitar/permitir el acceso a individuos o grupos concretos sin que queden afectados los permisos originales. Su formato es el siguiente:
extended permissions: enabled | disabled permit Mode UserInfo...: deny Mode UserInfo...: specify Mode UserInfo...: Activar o no los permisos extendidos Añadir permisos al usuario Sustraer permisos al usuario Si cumple lo especificado, éstos permisos
En donde:
- Mode serán los permisos a aplicar.
- UserInfo representará al usuario/s a quien le serán modificados los permisos.
Ejemplo:
attributes: SUID base permissions: owner(frank): rw- group(system): r-x others: --- extended permissions: enabled permit rw- u:dhs deny r-- u:chas, g:system specify r-- u:john, g:gateway, g:mail permit rw- g:account, g:finance
Es otro tipo de permiso, con la particularidad que si se activa para un ejecutable que tengamos, quien lo llame asumirá nuestra identidad, se ejecutará el programa como su fuéramos nosotros quien lo ha invocado.PasswordsCuando el mencionado programa se ejecuta de este modo, cobran especial importancia 4 variables:
Ejemplo:
- UID: Identificación del usuario
- GID: Identificación del grupo
- EUID: Identificación del usuario EFECTIVA
- EGID: Identificación del grupo EFECTIVA
Tenemos los siguientes permisos para un ejecutable: - rwx r-s r-s Cuando alguien lo ejecute, en EUID y EGID aparecerá nuestro UID y GID respectivamente, como si fueramos nosotros quien lo ha llamado, en vez de quien realmente lo pretende utilizar. Aun así, el UID y GID de quien lo ejecuta no cambiará.
Para acceder al sistema bajo UNIX, al principio de una sesión se nos pide un nombre de usuario y un password. Como ya se ha mencionado, así autenticaremos en cierta forma quienes somos.La forma de UNIX a la hora de trabajar con los passwords para verificarlos es la siguiente:
- Recibe el password y lo cifra.
- Buscará el usuario introducido y comprobará que el password introducido cifrado sea igual al password almacenado.
Ficheros relacionados /etc/passwd____ Información de los usuarios y passwords (opcional) /etc/shadow Passwords, caducidad, tiempo de cambio,...
Nota: es preferible que en (passwd) en lugar del password aparezca un símbolo, y sea en shadow donde esté realmente almacenado el password cifrado. Además, la política correcta del uso del fichero (shadow) debería ser olvidarse de lo que pone en (passwd) si aparece en (shadow).Mantener seguro el sistema
Todos métodos que hemos visto hasta ahora para mantener seguro el sistema están bien, pero tenemos que verificar fallos de seguridad en la utilización de éstos.Actuación ante ataquesAntes de empezar, debemos tener en consideración lo siguiente:
- Entrar como root sólo para tareas de administración. Principio de mínimo privilegio necesario (evitaremos destrozar el sistema por descuidos). Mejor crear una cuenta para realizar otras tareas de administración.
Acceso a ficheros y directorios
Es potencialmente peligroso. Buscar regularmente cambios en los permisos, especialmente en los referidos al sistema que no deban ser accesibles.Bit suidPara que restringir los permisos en los ficheros, acudir a /etc/profile y poner el umask para los usuarios lo más restrictivo posible. De este modo, todos los ficheros o directorios creados a partir de entonces tendrán los permisos rentringidos por defecto.
Mucho cuidado con este tipo de ficheros. Tenerlos bien controlados. Para buscarlos podemos utilizar el siguiente comando:Passwordsfind / -type f \( -perm -04000 -o -perm -02000 \)Por último, proteger todos los ficheros setuid root que no se usen.
- Fichero /etc/shadow
Tener las passwords dentro del fichero /etc/shadow por mayor seguridad. Si se encuentran dentro de /etc/passwd, fichero accesible por otros usuarios, con programas específicos (que usan diccionarios con palabras habituales) será posible descifrar por "fuerza bruta" los passwords. Para realizar esta tarea, si no están ya dentro de este fichero, realizar lo siguiente como root:pwconvSe creará o actualizará el fichero. Para comprobar si ha funcionado, loguearse desde una consola. En caso de problemas, volver atrás con el comando:pwunconv
- Políticas sobre los passwords
Mantener un cierto nivel de seguridad acerca de los passwords. Exigir un mínimo de caracteres, algunos numéricos, comprobar que no se haya utilizado con anterioridad, solicitar su cambio cada cierto tiempo,...Aunque todo esto esté muy bien, ser consecuentes con la finalidad del sistema; no hastiar con cambios constantes de password, ni relajarse en exceso. Mantener una cierta coherencia entre la seguridad aplicada y lo que se pretende proteger.
Otros
- Eliminar las cuentas de usuarios que no vayan a usarse más.
- En el PATH del root nunca debe aparecer el directorio "."
- Revisar los ficheros de registros presentes en /var/log
- auth y auth-priv: mensajes de seguridad y autenticación.
- cron: mensajes generados por el demonio cron.
- secure: mensajes de seguridad de acceso (conexiones, wrappers...).
- htmalaccess.log: mensajes de acceso al servidor WWW, si lo hubiese.
- utmp: contiene información sobre los usuarios que se encuentran actualmente en el sistema. La información la consultamos con comandos como who,w,users...
- wtmp: contiene información sobre las entradas y salidas de los usuarios al sistema. La información la consultamos con el comando last.
- Limitar los servicios activos (los cuales usan determinados puertos) del sistema para evitar intrusiones.
- El administrador debe ser una única persona para el buen funcionamiento del sistema.
- Por último, APLICAR EL SENTIDO COMÚN.
Si por más que hayamos tratado de evitar ataques externos y garantizar la seguridad dentro de nuestro SO, todo ha fracasado, la única solución es hacer frente a esta situación e intentar restablecer la seguridad lo antes posible.Estos deberán ser los pasos a seguir:
A. Recuperarse de la intrusión.
B. Asegurar el sistema
- Recuperar el control
- Desconectarse de la red si es necesario. Copiar los archivos añadidos o modificados por el intruso (como evidencia).
- Revisar los registros de acceso, ejecutables y ficheros de configuración.
- Deshacer las modificaciones del intruso e instalar un sistema limpio.
- Ponerse en contacto con sitios remotos que pudieran estar involucrados o afectados.
- Instalar todos los parches de seguridad.
- Consultar documentos de consejos de CERTs*, sumarios y boletines informativos del vendedor.
- Instalar herramientas de seguridad.
- Habilitar los registros del sistema (logging).
- Configurar "firewalls" para defender redes.
- Revisar la seguridad por medio de guías de configuración.
- Cambiar todos los passwords.
- Reconectarte a Internet.
- Cumplimentar un formulario para reportes de incidentes CERT.
Por último, un pequeña recomendación: aunque hallamos descubierto una intrusión en el sistema NO dar a conocer la noticia, de lo contrario lo único que conseguiremos será dar a conocer que nuestro sistema es vulnerable, dejando la puerta abierta a otros ataques. Lo mejor será solucionar antes el problema.
* Equipo de Respuesta a Emergencias de Cómputo