La seguridad reviste dos aspectos, uno es garantizar la
identidad de los usuarios y otro es definir lo que puede hacer cada uno de
ellos. El primer aspecto se trata bajo el término de autenticación, mientras
que el segundo se hace mediante los privilegios. La seguridad es una de las
funciones del sistema operativo que, para llevarla a cabo, se ha de basar en
los mecanismos de protección que le proporciona el hardware.
Autenticación.
El objetivo de la autenticación es determinar que un
usuario( persona, servicio o computadora) es quien dice ser.
Privilegios.
Los privilegios especifican los recursos que puede
acceder cada usuario. Para simplificar la información de privilegi9os es
corriente organizar a los usuarios en grupos, asignando determinados
privilegios a cada grupo.
Una vez presentadas las funciones y principales
componentes del sistema operativo, es importante describir cuáles son las
acciones que activan la ejecución del mismo, el sistema operativo es un
servidor que está a la espera de que se encargue trabajo.
Un sistema de computación
puede verse como una colección de objetos (procesos, procesadores,
segmentos de memoria, discos, impresoras, archivos, semáforos). Cada objeto debe tener un
nombre único para poder identificarlo, y un número finito de operaciones
que los procesos pueden efectuar sobre él (leer y escribir en archivos, P y V
en semáforos). Podemos ver a estos objetos como tipos abstractos de datos.
Obviamente, un proceso no debe poder accesar objetos sobre los que no tenga
autorización. También debe ser posible restringir el uso de un objeto por parte
de un proceso sólo a ciertas operaciones. Por ejemplo, un proceso podría tener
autorización para leer, pero no para escribir un determinado archivo.
Un dominio
de protección es un conjunto de pares (objeto, operaciones); cada par
identifica un objeto y las operaciones permitidas sobre él.
En cada instante, cada proceso
ejecuta dentro de un dominio de protección. Los procesos pueden cambiar de un
dominio a otro en el tiempo; el cómo depende mucho del sistema. En UNIX, se
asocia un dominio a cada usuario+grupo;
dado un usuario y el grupo al cual pertenece, se puede construir una lista de
todos los objetos que puede accesar y con qué operaciones. Cuando un usuario
ejecuta un programa alamacenado en un archivo de propiedad de otro usuario B, el proceso puede ejecutar dentro del dominio de protección
de A o B, dependiendo del bit de dominio o SETUSERID bit del archivo. Este
mecanismo se usa con algunos utilitarios. Por ejemplo, el programa passwd debe
tener privilegios que un usuario común no tiene, para poder modificar el
archivo donde se guardan las claves. Lo que se hace es que el archivo
/bin/passwd que contiene el programa es propiedad del superusuario, y tiene el
SETUSERID encendido. Este esquema es peligroso: un proceso puede pasar de un estado
en que tiene poco poder a otro en que tiene poder absoluto (no hay términos medios).
Cualquier error en un programa como passwd puede significar un gran hoyo en la
seguridad del sistema. Cuando se hace una llamada al sistema también se produce
un cambio
de dominio, puesto que la llamada se ejecuta en modo protegido.
Conceptualmente al menos,
podemos ver este modelo
de protección como una gran matriz de acceso.
Los cambios de dominio que un
proceso puede hacer también podemos integrarlos a la matriz, tratando a los
dominios como otros objetos, con una operación: entrar.
Una política de protección
involucra decidir cómo se va a llenar esta matriz. Normalmente el usuario que
crea un objeto es quién decide cómo se va a llenar la columna de la matriz
correspondiente a ese objeto. La matriz de acceso es suficientemente general
como para apoyar diversas políticas. Por ejemplo:
La capacidad para copiar o
transferir un derecho de un objeto a otro dominio.
Capacidad de un dominio para
modificar los derechos
en otros dominios (todos, o para un recurso específico).
El problema es cómo almacenar
esta matriz. Como es una matriz poco densa (muchos de los elementos son
vacíos), no resulta práctico representarla como matriz propiamente. Podríamos
usar una tabla con triples (dominio, objeto, derechos). Si un proceso dentro de
un dominio D intenta efectuar una operación M sobre un objeto O, se busca (D,
O, C), y se verifica si M pertenece a C. De todas maneras, la tabla es grande,
y el esquema no es muy eficiente. Además, si un objeto puede ser, por ejemplo,
leído por todo el mundo,
La autentificación, que
consiste en identificar a los usuarios que entran al sistema, se puede basar en
posesión (llave o tarjeta), conocimiento (clave) o en un atributo del usuario (huella digital).
Claves
El mecanismo de
autentificación más ampliamente usado se basa en el uso de claves o passwords;
es fácil de entender y fácil de implementar. En UNIX, existe un archivo
/etc/passwd donde se guarda los nombres de usuarios y sus claves, cifradas
mediante una función one-way
F. El programa login pide nombre y clave, computa F(clave), y busca el par
(nombre, F(clave)) en el archivo.
Con claves de 7 caracteres
tomados al azar de entre los 95 caracteres ASCII
que se pueden digitar con cualquier teclado,
entonces las 957 posibles claves deberían desincentivar cualquier intento por
adivinarla. Sin embargo, una proporción demasiado grande de las claves
escogidas por los usuarios son fáciles de adivinar, pues la idea es que sean
también fáciles de recordar. La clave también se puede descubrir mirando (o
filmando) cuando el usuario la digita, o, si el usuario hace login remoto,
interviniendo la red
y observando todos los paquetes que pasan por ella. Por último, además de que
las claves se pueden descubrir, éstas también se pueden "compartir",
violando las reglas de seguridad. . En definitiva, el sistema no tiene nunguna
garantía de que quien hizo login es realmente el usuario que se supone que es.
Un enfoque diferente es usar
un elemento físico difícil de copiar, típicamente una tarjeta con una banda
magnética. Para mayor seguridad este enfoque se suele combinar con una clave
(como es el caso de los cajeros automáticos). Otra posibilidad es medir
características físicas particulares del sujeto: huella digital, patrón de
vasos sanguíneos de la retina, longitud de los dedos. Incluso la firma sirve.
Algunas medidas básicas
- Demorar la respuesta ante claves erróneas; aumentar la demora cada
vez. Alertar si hay demasiados intentos.
- Registrar todas las entradas. Cada vez que un usuario entra,
chequear cuándo y desde dónde entró la vez anterior.
- Hacer chequeos periódicos de claves fáciles de adivinar, procesos
que llevan demasiado tiempo corriendo, permisos erróneos, actividades
extrañas (por ejemplo cuando usuario está de vacaciones).
- Para los más paranoicos: poner trampas para descubrir intentos de
uso no autorizado.
Los mecanismos de protección
que hemos visto hasta ahora muchas veces no son suficientes para mantener
información confidencial adecuadamente resguardada. Con el uso masivo de las redes de computadores, más
y más información se transmite por ella, y nadie puede estar seguro de que no
hay mirones en el alambre. Los métodos
criptográficos son los más comúnmente usados para proteger información
confidencial. Lo que se envía por la red no es la información original, sino la
información codificada, que carece de sentido salvo para el receptor, que puede
decodificarla.
No hay comentarios:
Publicar un comentario