Tema 4
Seguridad en Sistemas Operativos
4.1 Identificación y autentificación. Passwords
UNIX utiliza un programa llamado crypt(3) para encriptar las passwords, este programa se basa en el algoritmo de encritación DES (Estándar de Encriptación de Datos).
Las passswords pueden tener como máximo 11 caracteres pero una vez encriptadas tienen 13, esto es debido a que los dos primeros caracteres son
las semillas y se generan a parir del contador del reloj en el momento en el que se asigna la contraseña, las semillas constan de 12 bits, esto quiere decir que puede ser un valor de entre 0 y 4095. Asi para cada contraseña posible hay 4095 formas diferentes de encriptación.En el fichero /etc/passwd se guardan el nombre de usuario, nombre real, información de identificación, y si el sistema no está en shadow el passwd
encriptada del usuario.
Un ejemplo:root:KJ2ASKoalaoL2,31AB:0:0:root:/root:/bin/bashDonde KJ2ASKoalaoL2 es la clave encrytada y KJ es la semilla.
El número 3 es el máximo de vida del passwd, después de tres semanas el usuario deberá cambiarla.
El número 1 indica cuantas semanas deben pasar para que el usuario puede cambiar su password.
AB Indica cuando se cambio por ultima vez la clave.
Estos datos están escritos en base 64.
Si por ejemplo:root:...,31AB:0:0:root:/root:/bin/bashIindica que el usuario tendrá que cambiar su clave la próxima vez que se conecte al sistema.Para cambiar el passwd basta con teclear:
Passwd -n diasmin -x diasmax usuarioDonde diasmin es el número de días que han de pasar para que el usuario puede cambiar su passwd.
diasmax es el número de días en que expira la clave, para deshabilitar la expiración basta con que el valor de tiempo sea -1.
Por ejemplo:passwd -x 30 userEl usuario user tendrá que cambiar su clave cada més.No es recomendado usar la opción un (días minimos para cambiar la password ) porque si el usuario sospecha que le han pillado el passwd y aun no han pasado los días minimos, pues no podrá cambiarla hasta que no pasen dichos días.
Si en el campo de la clave aparece un NP ( NO password ) la cuenta no tiene password, si por el contrario aparece LK ( Locked passwd ) significa que la cuenta esta bloqueada.
Para buscar las cuentas sin passwd:egrep ‘NP|::’ /etc/passwdPara buscar por ejemplo información de un usuario en el fichero passwd:egrep ‘usuario1|usuario2’ /etc/passwdEl numero 0 es el identificador de usuario ( uid ).El identificador de usuario permite determinar, entre otras cosas:
Que ficheros son propiedad de dicho usuario, cuales son los que se pueden ejecutar, a que zonas tiene acceso un usuario, etc...
Esto significa que UNIX / Linux no identifica de quien es cada cosa por el nombre de usuario sino por el uid.
Uid es un entero sin signo de 16 bits, el cual va de 0 a 65535.
Los uid’s menores de 9 son habitualmente usados por funciones del sistema como ftp.
El uid 0 corresponde al root, los uid para los demás usuarios suelen empezar a partir del numero 100.
4.2 Políticas, Modelos, Mecanismos
Uno de los más importantes componenetes de la arquitectura de seguridad de los sistemas informáticos es su política de seguridad.
Las políticas de seguridad están formados por un conjunto de requisitos definidos por los responsables de un sistema, en las políticas se definen los pasos a seguir sobre lo que está permitido y lo que no está permitiza realizar en el sistema.La política de seguridad se expresa en lenguaje natural, al ser ambiguo y al darse a posibles malinterprestaciones, para ello surge el modo de materializar esta política en el sistema, dando lugar a la necesidad de transformarla en un modelo de seguridad que pueda ser expresado en un lenguaje matemático formal, del que se excluya cualquier contrariedad.
Este modelo de seguridad se implanta en el ordenador en forma de mecanismo de sguridad.El objetivo principal de las políticas reside en restriguir el acceso al sistema.
Las políticas de seguridad se dividen en:
- Políticas administrativasLos modelos de seguridad son formularios matemáticos de una política de seguridad. Los modelos de seguridad dividen todos los componenetes del sistema en dos grupos, el primer grupo se hallan todas las entidades activas, es decir, que sean capaces de acceder a otros componentes y en el segundo grupo se encuentran aquellas entidades pasivas, es decir que sean accediadas por las del primer grupo.
Estas políticas se ponen en marcha mediante procedimientos administrativos. A este tipo pertenecen las politicas de desarrollo de programas de aplicación.- Políticas de control de accesos
Se basan en que un sujeto puede acceder a un cierto objeto.
- Política de máximo privilegio o abierta
En esta política todo lo que no está expresamente prohibido está permitido.- Política de menor privilegio o cerrada
En este tipo de política todo lo que no está expresamente pertmitido está denegado
Toda política ha de contemplar tres elementos claves para proporcionar la seguridad de un sistema:- Disponibilidad
Es preciso que los datos estén disponibles, para poder acceder en todo momento a ellos. Se debe controlar el acceso al los datos, porque un exceso de accesos a los datos puede causar fallos a la disponibilidad.- Integridad
Mantener la información en buen estado implica que la información no se haya modificado porque no debe y que la información se conserve entera y no fraccionada.- Confidencialidad
La información mantenga un carácter privado, impidiendo el acceso a personas ajenas, es decir que no sea vista por personas ajenas.
A es tas entidades se les conoce como sujetos ( primer grupo ) y objetos ( segundo grupo ).
Los sujetos pueden ser usuarios o procesos y los objetos pueden ser ficheros, estructuras de datos, ...Un modelo de seguridad debe definir un conjunto de restricciones, que previenen la ejecución de programs de aplicación que puedan comprometer la seguridad.
Tipos de modelos de seguridad:
- Modelo de seguridad discrecionalMecanismos de control de accesos
Se caracterizan porque el propietario de un objeto tiene derecho de proporcionar a otros usuarios el accesao al mismo.
Se centran en la autorización o denegación de accesos de un sujeto a un objeto determinado. Estos modelos se representan normalmente mediante modelos de matriz de accesos.- Modelo de seguridad obligatoría
Surgen para prevenir los problemas que pueden aparecer en la seguridad deiscrecional
Se dividen en dos tipos de modelos:- Modelos multinivel
En estos modelos los objetos y sujetos están agrupados en distintas áreas, denominadas compartimentos. Los objetos de un mismo compartimento tienen que ver con informaciones relacionadas entre sí.
Además, cada objeto, independientemente del compartimento en el que se encuentra, tiene distinto nivel de confidencialidad.
La clasificación del objeto se denomina a cada par de parámetros denominados nivel de confidencialidad y compartimentos.
Los sujetos pertenecerán a uno de los compartimentos ya definidos. Asimismo, los sujetos se podrán clasificar en uno de los niveles de confidencialidad ya establecidos, según el principio del menor privilegio.
La clasificación del sujeto es la asociación del par nivel de autoridad y compartimento a cada sujeto.- Modelos de flujo de información
Este modelo describe los caminos autorizados para el flujo de la información en un sistema, especificando que sujetos pueden acceder a que objetos según los niveles respectivos en que se encuentran clasificados.
Los modos de acceso definidos son: sólo-lectura, lectura-escritura y sólo-lectura.
Los objetos se dividen en distintos niveles de confidencialidad. De la misma forma, los sujetos se estructuran en estos mismos niveles, pasando a llamarse autoridad de nivel al que pertenezca.
El mecanismo de control de accesos debe monitorizar todos los accesos a los objetos, así coo todos los comandos que otorgan, trnasfieren o revocan los derechos sobre los mismos. De este modo, el mecanismo de control e accesos debe materializar el modelo, previamente definido de seguridad, gerantizando que los accesos permitidos conciden con los autorizados en el modelo que implemente, o en su defecto sean un subconjunto de aquellos últimos. En este último caso, el sistema es seguro pero puede denegar accesos que el modelo autorizaba.
Un aspecto del mecanismo de control de accesos es el nivel de compartición de objetos y sujetos que se permite.
4.3 Evaluación de sistemas
4.4 Seguridad en Unix
4.4.1 Acceso a ficheros y directorios
El sistema de ficheros de UNIX / Linux tiene una estructura de árbol. Un árbol esta constituido por directorios, que contiene a su vez subdirectorios, etc. Todo parte de un directorio raiz.
En UNIX, todo esta representado mediante directorios o ficheros, como por ejemplo las unidades, el CD-ROM etc...
Cada fichero contiene un nombre, es propiedad de un usuario, tiene unos permisos etc.Toda esta información esta almacenada en los inodo, los inodos guardan todo lo asociado con el fichero excepto su nombre, los nombres son guardados en sus directorios y son asociados con los inodos mediante punteros.
Los inodos no poseen nombre. En su defecto se distinguen por un número o índice, que indica su posición en la tabla de inodos. Los inodos son las
entradas de una tabla de localizacion de ficheros, parecido a al FAT de dos, pero en formato etx2.
Cada inodo contiene lo siguiente:- La ubicación del contenido del objeto referenciado al disco.En UNIX / Linux varios ficheros pueden estar referenciados al mismo inodo, a esto de le llama link o enlace.- El tipo de objeto ( ficheros, directorios, enlace simbólico, etc ).
- El tamaño del objeto en bytes.
- La fecha en la que el inodo fue modificado por última vez.
- La fecha en la que el objeto fue accedido por última vez.
- El propietario del objeto.
- El grupo propietario del objeto.
- Los permisos del objeto.
Cada directorio tiene como mínimo dos entradas. El punto (.), que referencia el propio directorio y los dos puntos (..), que apuntan al directorio padre ( al que esta mas cerca del directorio raiz ).
Cada fichero está contiene unos permisos, los permisos pueden ser:
r Permiso de lectura.Además estos permisos se restingen en grupos ya sean:w Permiso de escritura.
x Permiso de Ejecución.
s Suid o Sgid.
t Stlicky bit.
owner Para el propietarioPara ver los permisos de un fichero basta con la orden ls -l.group Para el grupo
other Para todos los demás
Para cambiar los permisos de los ficheros o directorios se utiliza la orden chmod , su sintaxis es:chmod [-Rfh] [agou] [+-=] [rwxst] nombreDonde:-RY donde:
Algunas versiones no soportan esta opcion, con -R estamos diciendo que queremos cambiar los permisos recursivamente esto quiere decir que si
cambiamos los permisos de un directorio con esta opción se cambiarán los permisos de todos los archivos y subdirectorios del directorio.-f
Si sucede algun error con esta opción no será mostrado.-h
Se utiliza para los links con esta opción se cambian los permisos del link pero no el del fichero al que apunta el link.
aAdemás de:
Modifica para todos los usuarios el privilegio especificado.g
Modifica los privilegios para el grupo.o
Modifica los privilegios para los demás usuarios.u
Modifica los privilegios para el propietario.+ Añade un privilegio.Ejemplos:- Quita un privilegio.
= Quita todos los privilegios.....
ls -lfiche1Donde el primer carácter puede ser:
-rwx-r-r- pere usuarios 505 FEB 1 20:20 fichero3- Fichero normal.Después del primer carácter los tres siguientes son permisos para el propietarios luego los tres que le siguen para el grupo y los otros para los demás usuarios si aparece el caracter - en el campo de alguno de estos significa que no existe dicho permisos.
d Directorio.
c Dispositivo ( tty o impresora etc... )
b Dispositivos como el CD-ROM etc...
l Link simbolico.En el ejemplo de fichero3 tiene permiso de lectura, escritura, ejecución para el propietario, lectura para el grupo y lectura para todos los demás, y donde pere es el propietario del fichero y usuarios es el nombre del grupo al cual pertenece el fichero.
Para añadir permisos de escritura al grupo:
Chmod g+w fichero3También hay una manera numerica de poner permisos:
Hacemos un ls -l fichero3
-rwx-rw-r-Chmod [-Rfh] modo ficheroA chmod se le pueden especificar los permisos con un número octal de 4 dígitos, los numeros son:4000 Permisos de SUID.La manera de calcular los permisos es ir sumándolos. Se haría de la siguiente manera:
2000 Permisos de SGID.
1000 “Sticky bit”
0400 Permiso de Lectura para el usuario.
0200 Permiso de Escritura para el usuario.
0100 Permiso de Ejecución para el usuario.
0040 Permiso de Lectura para el grupo.
0020 Permiso de Escritura para el grupo.
0010 Permiso de Ejecución para el grupo.
0004 Permiso de Lectura para todos.
0002 Permiso de Escritura para todos.
0001 Permiso de Ejecución para todos.chmod 0750 ficheroLos permiso se cambian de la misma manera que los ficheros.
Ya que:
0400 Lectura pal usuario.
+
0200 Escritura pal usuario.
+
0100 Ejecucion pal usuario.
+
0040 Ejecucion para el grupo.
+
0010 Ejecucion para el grupo.
---------
0750
Si no hay permisos de ejecución no se podrá entrar en dicho directorio.Cuando un ejecutable tienga el sticky bit activado aparecerá con una t situada al final del campo de permisos. Al activar este bit estamos indicando
al sistema que queremos que el programa permanezca en memoria al terminar su ejecución. Si se usa sobre un directorio este bit tiene un significado diferente.
4.4.2 Bit suid
El tener los permisos suid o sgid activados en algun programa puede resultar bastante peligroso, ya que los exploits de buffer o stack overflow se aprovechan de estos permisos. Tener el permisos suid activado en un programa significa que cuando un usuario ejecute el programa lo hará como si lo hubiera ejecutado el usuario del fichero o por el grupo si tiene el sgid activado.
Hay programas que tienen que acceder a zonas donde sólo tiene permiso el root, por ejemplo al ejecutar passwd el cual sirve para cambiar el password de un usuario, el propietarios de este programa es el root, si no tuviera permisos de suid el programa no podría ( o no debería poder ) modificar el fichero /etc/passwd ya que se hubiera ejecutado con la uid de usuario y por tanto un usuario normal no puede modificar dicho fichero, para solucionar esto se le dan permisos de suid, entonces el programa se ejecuta como si lo hubiera hecho el root y puedes modificar tranquilamente el fichero.
Si mientras el programa está en ejecución pudieramos sobreescribir parte de la pila, es decir, cambiar la dirección de retorno de alguna función etc... y consiguieramos que este programa ejecutase código que no pertenece a este programa, dicho código se ejecutaría con permisos del propietario del
programa que habitualmente es el root.
4.4.3 Passwords en shadow
Este archivo contiene información sobre la password, se localiza en /etc/shadow. Los passwords en Unix se dividen en 7 campos, ejemplo:
Usuario:2ASKoalaoL2: 1000:121:Juanito:/usr/olimpico:/bin/shLas passwords encryptadas se guardan en un archivo a parte generalmente en /etc/shadow, este archivo al contrario del /etc/passwd solo tiene permisos de lectura para el administrdor.- Primer campo: Usuario
Es el nombre con el que el sistema reconoce al usuario.- Segundo campo: 2ASKoalaoL2
Esta es la palabra clave del usuario pero esta encriptada.- Tercer campo: 1000
Este es el número de usuario del sistema. El usuario con nivel 0 es el root.- Cuarto campo: 121
Es el número del grupo al que pertenece el usuario.- Quinto campo: Juanito
En este campo aparecen datos adicionales del usuario, (en este caso el nombre).- Sexto campo: /usr/olimpico
Es el directorio home del usuario en cuestion.- Septimo campo: /bin/sh
Es el Shell que el usuario utiliza.La estructura del fichero /etc/shadow es la siguiente:
username:passwd:last:may:must:warn:expire:disable:
- username Es el nombre de usuario.- passwd La clave encriptada.
- last Los días que hace que se cambio la clave.
- may Los días que han de pasar para que la clave pueda ser cambiada.
- must Los días en que espira la clave.
- warn Los días en que se avisara al usurario antes de que el passwd expire.
- expire Son los días que pueden pasar con la clave caducada antes de que se deshabilite la cuenta.