Informática
Seguridad en la Informática
PROTECCION Y SEGURIDAD
(Temas a Desarrollar)
AMENAZAS POR SEGURIDAD
1.1 AMENAZAS POR PROGRAMAS
1.1.1 Caballo de Troya
1.1.2 Puerta Secreta (Trap Door)
1.2 AMENAZAS AL SISTEMA
1.2.1 Gusanos
El Gusano de Morris
2. PROTECCIÓN
2.1 AUTENTIFICACIÓN DEL USUARIO
2.1.1 Contraseñas
2.2 DOMINIOS DE PROTECCION
2.2.1 Estructura de Dominios
2.3 MATRIZ DE ACCESO
2.4 IMPLEMENTACION DE LA MATRIZ DE ACCESO
2.4.1 Tabla Global
2.4.2 Lista de acceso para objetos
3. INTRUSOS
4. VIRUS
PROTECCION Y SEGURIDAD
Los mecanismos de protección, proporcionan un acceso controlado limitando los tipos de acceso a archivos que los diferentes usuarios pueden ejecutar. También se requiere protección para asegurar que sólo los procesos que hayan obtenido la autorización debida del sistema operativo, puedan operar no solo con los archivos, sino también con los segmentos de memoria, CPU y otros recursos.
La protección se proporciona con un mecanismo que controla el acceso de los programas, procesos o usuarios a los recursos definidos por el sistema de computación. Dicho mecanismo debe permitir especificar los controles que se impondrán y hacer cumplir las restricciones.
El sistema de seguridad impide el acceso no autorizado a un sistema que podría dar pie a la destrucción o alteración mal intencionada de los datos. La seguridad se encarga de validar a los usuarios del sistema para proteger la integridad de la información almacenada en el sistema (tanto datos, código); así como los recursos físicos del sistema de computación.
AMENAZAS DE SEGURIDAD
Los archivos, contienen con frecuencia, información muy valiosa para sus usuarios. Los términos "seguridad" y "protección" se utilizan a menudo en forma confusa. Sin embargo, es útil hacer una distinción entre los problemas generales relativos a la garantía de que los archivos no sean leídos o modificados por personal no autorizados, por un lado, y los sistemas específicos usados por el sistema operativo para proporcionar la seguridad, por el otro. Para evitar la confusión, se usará el término "seguridad" para referirse al problema general y el término "mecanismo de protección" para referirse a los mecanismos específicos del sistema utilizados para resguardar la información de la computadora. Primero, se hablaremos de la seguridad. La seguridad tiene muchas facetas. Dos de las más importantes son la pérdida de datos, y los intrusos (de los cuales se habla más adelante). Algunas de las causas más comunes de la pérdidas de datos son:
Actos Divinos: incendios, inundaciones, terremotos, guerras, revoluciones, o ratas que roen las cintas o discos flexibles.
Errores de Hardware o de Software: mal funcionamiento de la CPU , discos o cintas ilegibles, errores de telecomunicación o errores en el programa.
Errores Humanos: Entrada incorrecta de datos, mal montaje de una cinta o disco, ejecución incorrecta del programa, pérdida de cintas o discos.
La mayoría de estas causas se pueden enfrentar con el mantenimiento de los respaldos adecuados; de preferencia en un lugar alejado de los datos originales.
Se dice que un sistema es seguro, si sus recursos se usan y acceden como es debido en todas las circunstancias. Por desgracia, en general, no es posible llegar a una seguridad total. No obstante debemos contar con mecanismos, para hacer que las violaciones de seguridad sea un suceso poco común. Las violaciones de seguridad (mal uso del sistema) se pueden clasificar como intencionales (maliciosas) o accidentales. Es más fácil protegerse contra un mal us9o accidental que contra un abuso malintencionado. Entre las formas de acceso malintencionado están:
Lectura no autorizada de datos.
2. Modificación no autorizada de datos.
3. Destrucciones no autorizadas de datos.
AMENAZAS POR PROGRAMAS
En un entorno en el que un programa escrito por un usuario podría ser utilizado por otro usuario, existe un posibilidad de abuso que podría dar pie a un comportamiento inesperado. Ahora se muestran dos métodos comunes para causar tal comportamiento: los caballos de Troya y las puertas secretas.
1.1.1 Caballo de Troya
Muchos sistemas cuentan con mecanismos que permiten a un usuario ejecutar programas escritos por otros usuarios. Si tales programas se ejecutan un dominio que proporciona los derechos de acceso del usuario ejecutante, podrían abusar de esos derechos Por ejemplo, un programa editor de textos podría contener código para buscar ciertas palabras clave en el archivo que se va a editar. Si se encuentran, todo el archivo podría copiarse en un área especial accesible para el creador del editor de textos. Un segmento de código que abusa de su entorno se denomina caballo de troya. El problema del caballo de troya se agrava si los caminos de búsqueda son largos (cosa común en los sistemas Unix). El camino de búsqueda lista el conjunto de directorios en el que se debe buscar cuando se da un nombre de programa ambiguo. Se busca en el camino un archivo con ese nombre, y se ejecuta el archivo. Todos los directorios del camino de búsqueda deben ser seguros, pues de lo contrario se podría introducir un caballo de troya en el camino del usuario y ejecutarse accidentalmente.
Por ejemplo, consideremos el uso del carácter “.” en un camino de búsqueda. Ese carácter le dice al shell que incluya el directorio actual en la búsqueda, cambia su directorio actual al de un amigo e introduce el nombre de una orden normal del sistema, la orden podría ejecutarse desde el directorio del amigo. El programa se ejecutaría dentro del dominio del usuario y le permitiría hacer todo lo que el usuario está autorizado para hacer, incluso eliminar sus archivos, por ejemplo.
Una variación del caballo de troya sería un programa que emula un programa de ingreso al sistema (login). Un usuario confiado comienza a ingresar en el sistema desde una terminal y se da cuenta de que al parecer tecleó mal su contraseña. El usuario lo intenta de nuevo y tiene éxito. Lo que ha sucedido es que su clave de validación y su contraseña han sido robados por el emulador de login que el delincuente dejó ejecutándose en el terminal. El emulador guardó la contraseña, exhibió en la pantalla un mensaje de error de login, y terminó. A partir de ese momento, el usuario interactuó con el verdadero programa de login. Este tipo de ataque puede bloquearse si el sistema operativo imprime un mensaje de utilización al término de una sesión interactiva o si se usa una secuencia de teclas no atrapable, como la combinación control-alt-suprimir que usa windows NT.
1.1.2 Puerta Secreta (Trap Door)
El diseñador de un programa o sistema podría dejar un “agujero” en el software que sólo el puede usar. Este tipo de violación de la seguridad se mostró en la película “juegos de guerra”. Por ejemplo, el código podría verificar que el identificador de usuario o la contraseña tengan un valor específico, y podría burlar los procedimientos de seguridad normales Ha habido caos de programadotes que han sido arrestados por desfalco de banco mediante la inclusión de errores de redondeo en su código, haciendo que de vez en cuando medio centavo se abone a sus cuentas. Éstos abonos pueden sumar cantidades apreciales de dinero si consideramos el numero de transacciones que un banco grande ejecuta.
Podría incluirse una puerta secreta ingeniosa en un compilador. El compilador podría generar código objeto estándar y también un a puerta secreta, independientemente del código fuente que esté compilando. Tal actividad es particularmente insidiosa, ya que un examen del código fuente del programa no revela problema alguno. Sólo el código fuente del compilador contendría la información. Las puertas secretas son un problema difícil porque para detectarlas es preciso analizador todo el código fuente de todos los componentes de un sistema. Dado que los sistemas de software pueden consistir en millones de líneas de código, tal análisis no se efectúa con mucha frecuencia.
1.2 AMENAZAS AL SISTEMA
La mayor parte de los sistemas operativos cuentan con un mecanismo para que un proceso engendre otros procesos. En un entorno así, es posible crear una situación en que se abuse de los recursos del sistemas operativo y de los archivos de usuario. Los dos métodos más comunes para lograr tal abuso son los gusanos y los virus (de los que se hablarán más adelante).
1.2.1 Gusanos
Un gusano es un proceso que usa el mecanismo de engendrar para dar al traste con el desempeño del sistema. El gusano engendra copias de si mismo, ocupando recursos del sistema y tal vez impidiendo a todos los demás procesos usar el sistema. En as redes de computadores los gusanos son especialmente potentes, ya que pueden reproducirse entre los sistemas y paralizar toda la red. Un suceso así ocurrió en 1988 en los sistemas Unix de la red mundial internet y causó pérdidas por millones de dólares en tiempo de cómputo y de programador.
La internet enlaza miles de computadoras gubernamentales, académicos, de investigación e industriales internacionalmente, y funciona como infraestructura para el intercambio electrónico de información científica. Al término de la jornada de labores el 2 de noviembre de 1988, Robert Tappan Morris, Jr., un estudiante de postgrado de primer año de la Çornell University soltó un programa gusano en una o más anfitriones conectados a Internet. El gusano, que atacaba las estaciones de trabajo Sun 3 de Sun Microsystems y los computadores VAX que ejecutaban variantes de Unix versión 4 BSD, rápidamente se extendió a grandes distancias, unas cuantas horas después de su liberación, el gusano había consumido recursos de sistema hasta el punto de hacer caer las máquina afectadas.
Aunque Robert Morris diseñó el programa auto-replicante de modo que se reprodujera y distribuyera rápidamente, algunas de las características del entorno de red Unix permitieron al gusano propagarse por todo el sistema. Es probable que Morris haya escogido para la infección inicial un anfitrión de Internet que se había dejado abierto y accesible para usuarios externos. Desde ahí, el programa gusano aprovechó defectos en las rutinas de seguridad del sistema operativo Unix y utilizó rutinas de Unix que hacen mas sencillo compartir recursos en redes de área local para obtener acceso no autorizado a varios miles de sitios interconectados.
El Gusano de Morris
Desde el punto de vista técnico, el gusano contaba de dos programas, el "arrancador" y el gusano propiamente dicho. El arrancador era un archivo de 99 líneas en C llamado l1.c. Se compilaba y ejecutaba en el sistema por atacar. Una vez ejecutado, se conectaba con la máquina de la que provenía, cargaba el gusano principal y lo ejecutaba. Después de ciertos problemas para ocultar su existencia, el gusano buscaba en las tablas de rutas el nuevo anfitrión para saber las máquinas que estaban conectadas con éste e intentaban diseminar el arrancador a esas máquinas.
Existían tres métodos para intentar infectar las nuevas máquinas. El método 1 intentaba ejecutar un Shell remoto mediante el comando rsh. Algunas máquinas confían en otras, por lo que podrían ejecutar rsn sin Autentificación alguna. Si esto funcionaba, el Shell remoto cargaba el programa del gusano y seguía infectando las demás máquinas a partir de ese punto.
El método 2 utilizaba un programa presente en todos los sistemas BSD, llamado finger, el cual permite a cualesquiera de los usuarios de Internet escribir finger name@site y poder recibir la información relativa a una persona en una instalación dada. Esta información incluye por lo general el nombre real de la persona, clave de acceso, direcciones de su casa y su oficina, nombre de la secretaria y número telefónico, número de fax y otra información semejante. Es un equivalente electrónico del directorio telefónico.
Finger funciona de la siguiente manera. En cada instalación BSD, un proceso secundario llamado finger daemon se ejecuta todo el tiempo con el fin de enviar y contestar todas las solicitudes de todas las partes de Internet. Lo que hizo el gusano fue llamar a finger con una cadena especialmente diseñada de 536 bytes como parámetro. Esta cadena sobrepasaba la capacidad del búffer de daemon y escribía sobre su pila. El error que se utilizaba aquí era el hecho de que daemon no verificaba si se excedía la capacidad del búffer . Cuando daemon regresaba del procedimiento en el que se encontraba cuando recibió la solicitud, no regresaba a main, sino a un procedimiento dentro de la cadena de 536 bytes de la pila. Este procedimiento intentaba ejecutar /bin/sh. Si lo lograba, el gusano disponía entonces, de un Shell que se ejecutaba en la máquina atacada.
El método 3 dependía de un error en el sistema de correo sendmail, que permitía enviar una copia del arrancador, además de la ejecución de este.
Una vez establecido, el gusano intentaba romper con las contraseñas de usuario. Morris no tuvo que realizar una gran investigación para poder llevar esto a cabo. Lo único que hizo fue pedirle a su padre, un experto en seguridad de la National Security Agency, la agencia de EE.UU. encargada de romper los códigos, un ejemplar de un artículo clásico del tema, que el propio padre de Morris y Ken Thompson escribieron una década antes en Bell Laboratories. Cada contraseña rota permitía que el gusano penetrara en otras máquinas donde el poseedor de la contraseña tuviera cuentas.
Cada vez que el gusano lograba el acceso a una nueva máquina, verificaba si en ella existían copias activas del mismo. En tal caso, la nueva copia salía, excepto una vez por cada siete que entraba a la máquina, tal vez por un intento de mantener al gusano en propagación incluso en el caso de que el administrador del sistema tuviera su propio gusano para engañar al gusano real. El uso de 1 por cada 7 creó un número enorme de gusanos y fue la razón por la que las máquinas infectadas fueron obligadas a parar: estaban totalmente infectadas por gusanos. Si Morris no hubiera hecho esto último, y sólo obligara a salir si se veía otro gusano, tal vez éste hubiera pasado desapercibido.
Morris fue capturado cuando uno de sus amigos habló con el reportero del área de computación del New York Time, Jhon Markoff para intentar convencerlo de que todo había sido un accidente, que el gusano no provocaba daños y que el autor estaba arrepentido. El amigo dejó entrever de manera inadvertida que la clae de acceso del responsable era rtm. La conversión rtm a nombre del autor fue sencilla: sólo había que ejecutar finger. A día siguiente, la historia estaba e la primera plana, incluso por encima del tema de la elección presidencia que se llevaría a cabo tres días después.
Morris fue juzgado y condenado en una corte federal. Fue sentenciado a una multa de 10000 dólares, 3 años de libertad condicional y 400 horas de servicio a la comunidad. Sus gastos legales, tal vez excedieron a los 15000 dólares. Esta sentencia generó una gran controversia. Muchas de las personas de la comunidad de las computadoras sentían que él era un brillante estudiante graduado cuya broma inocente se salió de su control. Ningún aspecto del gusano sugería que Morris intentaba robar o dañar algo. Otros pensaron que era un criminal serio y debió ser encarcelado.
PROTECCIÓN
La protección se refiere a un mecanismo para controlar el acceso de los programas, procesos o usuarios a los recursos definidos por un sistema de computación. Este mecanismo debe permitir especificar los controles que se impondrán, y deben contar con alguna forma de hacerlos cumplir.
A medida que los sistemas de computación se vuelvan más complejos y omnipresentes en sus aplicaciones, también ha crecido la necesidad de proteger su integridad. La protección se concibió originalmente, como un adjunto de los sistemas operativos con multiprogramación, para que usuarios poco confiables pudieran compartir sin peligro un espacio de nombres lógico común, como un directorio de archivos, o un espacio de nombres físico común, como la memoria. Los conceptos de protección modernos han evolucionado para aumentar la confiabilidad de cualquier sistema complejo que usa recursos compartidos.
AUTENTIFICACIÓN DEL USUARIO
Muchos de los esquemas de protección se basan en la hipótesis de que el sistema conoce la identidad de cada usuario. El problema de la identificación de los usuarios cuando están conectados al sistema se conoce como la autentificación del usuario. Muchos de los método de autentificación se basan en la identificación de datos conocidos del usuario, algo que posee el usuario, o algo que es el usuario.
Contraseñas
La forma de autentificación que más se utiliza es pedirle al usuario que escriba una contraseña. La protección mediante contraseñas es fácil de comprender e implantar. La autentificación mediante contraseñas es fácil de vencer. Uno puede leer con frecuencia acerca de grupos de bachillerato, o incluso de secundaria quienes, con ayuda de su computadora casera, penetraron a un sistema de total secreto en una gigantesca corporación o agencia gubernamental. Casi siempre, la forma de penetración consisten pruebas de combinaciones de nombres y contraseñas.
Cuando el usuario se identifica con un identificador de usuario o nombre de cuenta, se le pide una contraseña. Si la contraseña que el usuario proporciona coincide con la que está almacenada en el sistema, éste supone que el usuario está autorizado.
Es común usar contraseñas para proteger objetos del sistema de computación cuando no se cuenta con esquemas de protección más completos. Las contraseñas se pueden considerar como un caso especial de las llaves o las capacidades (que veremos más adelante). Por ejemplo, podría asociarse una contraseña por cada recurso (un archivo, por ejemplo), cada vez que se solicite usar el recurso, se deberá proporcionar la contraseña. Si está correcta, se concede el acceso, podrían asociarse diferentes contraseñas a diferentes tipos de acceso. Por ejemplo, distintas contraseñas para leer, anexar y actualizar un archivo.
Aunque hay problemas asociados al uso de contraseñas, éstas son muy comunes porque son fáciles de entender y usar. Los problemas con las contraseñas tienen que ver con la dificultad para mantener secreta una contraseña. Las contraseñas pueden perder sus utilidad si se adivinan, exponen accidentalmente o transfieren indebidamente de un usuario autorizado a uno no autorizado, como se vera en seguida.
Hay dos formas comunes de adivinar una contraseña. Una es que el intruso (sea humano o programa) conozca al usuario o tenga información acerca de él. Con demasiada frecuencia, la gente usa información obvia (digamos los nombres de sus gatos o cónyuges) como contraseñas. La otra forma es usar fuerza bruta, probando todas las posibles combinaciones de letras, números y signos de puntuación hasta hallar la contraseña. Las contraseñas cortas no tienen suficientes opciones para impedir que se adivinen mediante intentos repetidos. Por lo tanto, una contraseña de cuatro dígitos decimales, sólo tiene 10000 variaciones. En promedio bastarán 5000 pruebas para lograr un acierto. Si se puede escribir un programa que pruebe una contraseña cada milisegundo, sólo se tardaría 5 segundos en adivinar una contraseña de cuatro dígitos. Las contraseñas más largas, son menos susceptibles a ser adivinadas por enumeración, y los sistemas que permiten entre letras mayúsculas y minúsculas, y que permiten usar número y todos los signos de puntuación en las contraseñas hacen mucho más difícil la tarea de adivinar la contraseña. Desde luego, los usuarios deben aprovechar el espacio de contraseña más grande y no usar, por ejemplo, sólo letras minúsculas.
DOMINIOS DE PROTECCION
Un sistema de computación es una colección de procesos y objetos. Con objetos nos referimos tanto a objetos de hardware (como la CPU, segmentos de memoria, impresoras, discos y unidades de cinta) como se software (archivos, programas y semáforos). Cada objeto tiene un nombre único que lo distingue de todos los demás objetos del sistema, y sólo se puede acceder a cada uno empleando operaciones bien definidas y significativas. En esencia, los objetos son tipos de datos abstractos.
Las operaciones posibles podrían depender del objeto. Por ejemplo, con una CPU sólo puede efectuarse ejecución. Los segmentos de memoria pueden leerse y escribirse, mientras que un lector de tarjetas sólo puede leerse. Las unidades de cinta pueden leerse, escribirse y rebobinarse. Los archivos de datos pueden crearse, abrirse, leerse, escribirse y rebobinarse. Los archivos de datos pueden crearse, abrirse, leerse, escribirse, cerrarse y eliminarse; los archivos de programa pueden leerse, escribirse, ejecutarse y eliminarse.
Queda claro que aun proceso sólo debe permitírsele acceder a los recursos para los cuales tiene autorización de acceso. Además, en un instante dado, el proceso sólo deberá poder acceder a los procesos que necesita para llevar a cabo su tarea. Este requisito, conocido como el principio de la necesidad de conocer, es útil para limitar la cantidad de daño que un proceso que falla podría causar en el sistema. Por ejemplo, si el proceso P invoca al procedimiento A, sólo deberá permitirse al procedimiento acceder a sus propias variables y a los parámetros formales que se le pasaron; no deberá poder acceder a todas las variables del proceso P. Así mismo, consideremos el caso en que el proceso P invoca un compilador para compilar un archivo dado. el compilador no deberá poder acceder a cualquier archivo arbitrario, sino sólo a un subconjunto bien definido de archivos (como el archivo fuente, el archivo listado y demás) relacionado con el archivo que se va a compilar. Por otro lado, el compilador podría tener archivos privados que se usan para fines de contabilización u optimización, a los cuales el proceso P no deberá tener acceso.
Estructura de Dominios
Para facilitar este esquema, introducimos el concepto de dominio de protección. Un proceso opera dentro de un dominio de protección, que especifica los recursos a los que el proceso puede acceder. Cada dominio define un conjunto de objetos y los tipos de operaciones que se pueden invocar para cada objeto. La capacidad para ejecutar una operación con un objeto es un derecho de acceso. Un Dominio es una colección de derechos de acceso, cada uno de los cuales es un par ordenado <nombre del objeto, conjunto de derechos>. Por ejemplo, si el dominio D tiene el derecho de acceso <archivo F, {leer, escribir}>, un proceso que se ejecute en el dominio D podrá leer y escribir en el archivo F, pero no podrá realizar ninguna otra operación con ese objeto.
Los dominios no necesitan ser disyuntos; pueden compartir derechos de acceso. Por ejemplo, en la Figura 1 se tienen 3 dominios: D1, D2, y D3. D2 y D3 comparten el derecho de acceso <O4, {imprimir}>, lo que implica que un proceso que se ejecuta en cualquiera de esos dominios puede imprimir el objeto O4. Observe que un proceso tiene que ejecutarse en el dominio D1 para leer y escribir el objeto O1. Por otra parte, sólo los procesos del dominio D3 pueden ejecutar el objeto O1.
La asociación entre un proceso y un dominio podría ser estática (si el conjunto de recursos de que dispone un proceso no cambia durante toda la existencia del proceso) o dinámica. Como cabría esperar, los problemas inherentes a establecer dominios de protección dinámicos requieren una resolución más cuidadosa que los problemas más sencillos del caso estático.
Si la asociación entre dominios y procesos es fija, y queremos respetar el principio de necesidad de conocer, necesitaremos un mecanismo para cambiar el contexto de un dominio. Un proceso podría ejecutarse en dos fases distintas. Por ejemplo, podría requerir acceso de lectura en una fase y acceso de escritura en otra. Si un dominio es estático, deberemos definir el dominio de modo que incluyo acceso tanto de lectura como de escritura. Sin embargo, este esquema proporciona más derechos de los que se necesitan en cada una de las dos fases, puesto que tenemos derecho de lectura en la fase en la que sólo necesitamos acceso de escritura, y viceversa. Esto viola el principio de necesidad de conocer. Debemos permitir la modificación del contenido de un dominio, de modo que siempre refleje los derechos de acceso mínimos necesarios.
Si la asociación es dinámica, se cuenta con un mecanismo para que un proceso ueda cambiar de un dominio a otro. También podríamos querer permitir que se modifique el contenido de un dominio. Si no podemos modificar el contenido de un dominio. Si no podemos modificar el contenido de un dominio, podemos lograr el mismo efecto creando un nuevo dominio con un nuevo contenido, y cambiando a ese nuevo dominio cuando queramos modificar el contenido del dominio.
Hay varias formas de establecer dominios:
Cada usuario podría ser un dominio. En este caso, el conjunto de objetos al que se puede acceder depende de la identidad del usuario. Hay conmutación de dominio cuando cambia el usuario (generalmente, cuando un usuario termina una sesión y otro usuario inicia una sesión).
Cada proceso podría ser un dominio. En este caso, el conjunto de objetos a los que se puede acceder depende de la identidad del proceso. La conmutación de dominio corresponde a que un proceso envía un mensaje a otro proceso, y luego espera la respuesta.
Cada procedimiento podría ser un dominio. En este caso, el conjunto de objetos a los que se puede acceder corresponde a las variables locales definidas dentro del procedimiento. La conmutación de dominio ocurre cuando se invoca un procedimiento.
MATRIZ DE ACCESO
Nuestro modo de protección puede visualizarse de forma abstracta como una matriz, llamada matriz de acceso. Las filas de la matriz de acceso representan dominios, y las columnas, objetos. Cada entrada de la matriz consiste en un conjunto de derechos de acceso. Dado de que la columna define explícitamente el objeto, podemos omitir el nombre del objeto en el derecho de acceso. La entrada a acceso(i,j) define el conjunto de operaciones que un proceso que se ejecuta en el dominio Di puede invocar con el objeto Oj.
Para ilustrar estos conceptos, consideremos la matriz de acceso que se muestra en la Figura 2. Hay cuatro dominios y cuatro objetos: tres archivos (F1, F2 y F3) y una impresora láser. Cuando un proceso se ejecuta en el dominio D1, puede leer los archivos F1 y F3. Un proceso que se ejecuta en el dominio D4 , tiene los mismos privilegios que en el dominio D1, pero además, puede escribir en los archivos F1 y F3. Sólo los procesos que se ejecutan en el dominio D2 tienen acceso a la impresora.
El esquema de matriz de acceso nos proporciona el mecanismo para especificar diversas políticas. El mecanismo consiste en implementar la matriz de acceso y asegurar que se cumplan realmente las propiedades semánticas que bosquejemos. En términos más específicos, debemos asegurar que un proceso que se ejecuta en el dominio Di, pueda acceder sólo a los objetos especificados en la fila i, y sólo como lo especifican las entradas de la matriz de acceso.
Las decisiones de política relativas a la protección se pueden implementar con la matriz de acceso. Dichas decisiones se refieren a qué derechos deben incluirse en la (i,j)-ésima entrada. También debemos decidir en qué dominio se ejecutará cada proceso. Esta última decisión de política generalmente corresponde al sistema operativo.
Los usuarios normalmente deciden el contenido de las entradas de la matriz de acceso. Cuando un usuario crea un objeto nuevo Oj, se añade la columna Oj a la matriz de acceso con las entradas iniciales apropiadas, a gusto del creador. El usuario podría decidir colocar algunos derechos en algunas entradas de la columna j y otros derechos en otras entradas, según sus necesidades.
La matriz de acceso proporciona un mecanismo apropiado para definir e implementar un control estricto de la asociación tanto estática como dinámica entre procesos y dominios. Cuando conmutamos un proceso de un dominio a otro, estamos ejecutando una operación (conmutar) con un objeto (el dominio). Podemos controlar la conmutación de dominios incluyendo dominios entre los objetos de la matriz de acceso. Así mismo, cuando modificamos el contenido de la matriz de acceso, estamos realizando una operación con un objeto: la matriz de acceso. Una vez más, podemos controlar estos cambios incluyendo la matriz de acceso misma como un objeto. En realidad, puesto que cada entrada de la matriz de acceso se puede modificar individualmente, debemos considerar cada entrada de la matriz de acceso como un objeto que debe protegerse.
Ahora bien, sólo tenemos que considerar las operaciones que son posibles con estos nuevos objetos (dominios y la matriz de acceso) y decidir cómo queremos que los procesos puedan ejecutar dichas operaciones.
Los procesos deberán poder cambiar de un dominio a otro. Se permite la conmutación del dominio Di al dominio D j si y sólo si el derecho de acceso conmutar acceso(i,j). Así, en la Figura 3, un proceso que se ejecuta en el dominio D 2 puede cambiar al dominio D 3 o al D 4. Un proceso del dominio D 4 puede cambiar a D 1 , y uno del dominio D 1 puede cambiar al dominio D 2.
Para poder modificar de forma controlada el contenido de las entradas de la matriz de acceso se requieren tres operaciones adicionales: copiar (copy), dueño (owner) y control. La capacidad para copiar un derecho de acceso de un dominio (fila) de la matriz de acceso a otro se denota con un asterisco (*) añadido al derecho de acceso. El derecho copiar permite copiar el derecho de acceso sólo dentro de la columna (esto es, el objeto) para la cual se define el derecho. Por ejemplo, en la Figura 4.a, un proceso que se ejecuta en el dominio D2 puede copiar la operación de leer en cualquier entrada asociada al archivo F2 . Así, la matriz de acceso de la Figura 4.a se puede modificar a la que se muestra en la Figura 4.b.
Este esquema tiene dos variantes:
Se copia un derecho de acceso(i,j) a acceso(k,j); luego se elimina de acceso(i,j); esta acción es una transferencia de un derecho, más que una copia.
La propagación del derecho de copiar podría estar limitada. Es decir, cuando el derecho R* se copia de acceso(i,j) a acceso(k,j), sólo se crea el derecho R (No R*). Un proceso que se ejecute en el dominio Dk no podrá copiar el derecho R.
Un sistema podría seleccionar solo uno de estos tres derechos de copiar, o podría ofrecer los tres identificándolos como derechos distintos: copiar, transferir y copiar limitado.
El derecho copiar permite a un proceso copiar algunos derechos de una entrada de una columna a otra entrada de la misma columna. También necesitamos un mecanismo para añadir nuevos derechos y quitar algunos derechos. El derecho de dueño controla estas operaciones. Si acceso(i,j) incluye el derecho dueño, un proceso que se ejecuta en el dominio Di puede quitar y agregar derechos en cualquier entrada de la columna j. Por ejemplo, en la Figura 5.a, el dominio D1 es el dueño de F1 , por lo tanto, puede agregar y eliminar cualquier derecho válido de la columna F1. De forma similar, el dominio D2 , es el dueño de F2 y F3, y por lo tanto, puede agregar y quitar cualquier derecho válido dentro de estas dos columnas. Así, la matriz de acceso de la figura 5.a se puede transformar en la que se muestra en la Figura 5.b.
Los derechos copiar y dueño permiten a un proceso modificar las entradas de una columna. También se requiere un mecanismo para modificar las entradas de una fila. El derecho control solo aplica a los objetos dominio. Si acceso(i,j), incluye el derecho control, un proceso que se ejecuta en el dominio Di, puede quitar cualquier derecho de acceso a la fila j. Por ejemplo, supongamos que, en la Figura 6 incluimos el derecho control en acceso(D2, D4). Entonces un Proceso que se ejecuta en el dominio D2 podría modificar al dominio D4 , como se muestra en la Figura 6.
Aunque los derechos copiar y dueño proporcionan un mecanismo para limitar la propagación de los derechos de acceso, no ofrecen las herramientas apropiadas para evitar la propagación de información (es decir, la revelación de información). El problema de garantizar que ninguna información que inicialmente está contenida en un objeto pueda migrar fuera de su entorno de ejecución se denomina problema de confinación. Este problema no puede resolverse en el caso general.
En sí, estas operaciones con los dominios y la matriz de acceso no son demasiado importantes. Lo que es más importante es que ilustran la capacidad del modelo de la matriz de acceso para implementar y controlar las necesidades de protección dinámica. Es posible crear dinámicamente objetos y dominios nuevos e incluirlos en le modelo de la matriz de acceso. Sin embargo, sólo hemos mostrado la existencia del mecanismo básico; bajo las decisiones de política sobre qué dominios habrán de tener acceso a qué objetos y de qué maneras corresponden a los diseñadores y usuarios del sistema.
IMPLEMENTACION DE LA MATRIZ DE ACCESO
¿Cómo puede implementarse de forma efectiva la matriz de acceso? En general, la matriz estará poco poblada; es decir, la mayor parte de las entradas estarán vacías. Aunque existen técnicas de estructuras de datos para representar matrices poco pobladas, no son muy útiles para esta aplicación a causa de la forma en que se usa el recurso de protección.
Tabla Global
La implementación más sencilla de la matriz de acceso es una tabla global que consiste en un conjunto de tripletas ordenadas <dominio, objeto, conjunto de derechos>. Cada vez que una operación M se ejecuta con un objeto Oj dentro del dominio Di; se busca en la tabla global una tripleta <Di, Oj, Rk> , donde M está en Rk. Si se encuentra tal tripleta, se permite que la operación continúe; si no, se genera una condición de excepción (error). Esta implementación tiene varias desventajas. La tabla suele ser grande y por tanto no puede mantenerse en memoria principal, por lo que requiere E/S adicional. Es común usar técnicas de memoria virtual para manipular esta tabla. Además, es difícil aprovechar agrupamientos especiales de objetos o dominios. Por ejemplo, si todo mundo puede leer un objeto en particular, deberá tener una entrada individual de cada dominio.
Lista de acceso para objetos
Cada columna de la matriz de acceso se puede implementar como una lista de acceso para un objeto. Obviamente, las entradas vacías pueden desecharse. La lista resultante para cada objeto consiste en pares ordenados <dominio, conjunto de derechos>, que definen todos los dominios con un conjunto no vacío de derechos de acceso para eso objeto.
Este enfoque puede extenderse con facilidad para definir una lista mas un conjunto por omisión de derechos de acceso. Si se intenta una operación M, con un objeto Oj, en el dominio Di, examinamos la lista de acceso para el objeto Oj, en busca de una entra <Di, Rk> con M que está en Rk. Si se encuentra la entrada, permitimos la operación; si no, examinamos el conjunto por omisión. Si M está en ese conjunto, permitimos el acceso, sino, negamos el acceso y ocurre una condición de excepción. Por eficiencia, podríamos examinar primero la lista por omisión, y luego la lista de acceso.
INTRUSOS
Saber que hacer con los intrusos en el sistema, es un tema bien interesante. Estos son dos:
Los Intrusos Pasivos. Sólo desean leer los archivos que no están autorizados para leer.
Los Intrusos Activos. Son más crueles. Desean hacer cambios no autorizados a los datos.
Si se desea diseñar un sistema seguro contra los intrusos, es importante tener en cuenta el tipo de intruso contra el cual se quiere tener protección. Algunas categorías comunes son:
Curiosidad casual de usuarios no técnicos. Muchas personas tienen en sus escritorios terminales para sistemas con tiempo compartido y, por la naturaleza humana, algunos de ellos leerán el correo electrónico de los demás, u otros archivos si no existen barreras enfrente de ellos. Por ejemplo, el sistema Unix, tiene predefinido que todos los archivos se pueden leer de manera pública.
Conocidos husmeando. Algunos estudiantes, programadores de sistemas, reparadores y demás personal técnico consideran como un reto personal romper la seguridad del sistema de cómputo local. A menudo son muy calificados, y están dispuestos a invertir una cantidad sustancial de su tiempo en este esfuerzo.
Un intento deliberado por hacer dinero. Algunos programadores en bancos han intentado penetrar un sistema bancario con el fin de robarle al banco. Los esquemas han cambiado desde cambiar el software para truncar y no redondear el interés, para quedarse con una pequeña fracción de dinero, hasta sacar dinero de las cuentas que no se han utilizado en años o el "correo negro" ("dame dinero o destruiré todos los registros del banco");
Espionaje comercial o militar. El espionaje indica un intento serio y fundamentado por parte de un competidor u otro país por robar programas, secretos comerciales, patentes, tecnologías, diseños de circuitos, planes de comercialización, etc. A menudo, este intento implica la cobertura de cables o el levantamiento de antenas dirigidas hacia la computadora con el fin de recoger su radiación electromagnética.
Debe quedar claro que el intento por mantener secretos militares aislados, y el intento por evitar que un estudiante gracioso inerte mensajes graciosos en el sistema, son un poco distintos. La cantidad de esfuerzo que alguien pone en la seguridad y la protección depende que quien se piense que sea el enemigo.
4. VIRUS
Otra forma de atacar las computadoras son los virus. Al igual que los gusanos, los virus están diseñados para extenderse hacia otros programas y pueden producir daños graves en un sistema, como modificar y destruir archivos y causar caídas del sistema y fallos en los programas. Mientras que un gusano está estructurado como un programa completo y autónomo, un virus es un fragmento de código incrustado en un programa legítimo. Los virus son un problema importante para los usuarios de los computadores, sobre todo, de los microcomputadores. Los computadores multiusuario generalmente no son tan vulnerables a los virus porque el sistema operativo protege los programas ejecutables contra escritura. Aún si un virus llega a infectar un programa, no habrá mucho que pueda hacer porque otros aspectos del sistema están protegidos. Los sistemas monousuario no cuentan con tales protecciones , y por ello un virus tiene rienda suelta.
Los virus generalmente se difunden cuando los usuarios descargan programas infectados de tableros públicos o intercambian disquetes que contienen alguna infección. Un caso de febrero de 1992 en el que intervinieron 2 estudiantes de la Cornell University es ilustrativo. Los estudiantes habían desarrollado tres programas de juegos para Macintosh con un virus incrustado que distribuyeron a colecciones de software en todo el mundo a través de Internet. El virus se descubrió cuando un profesor de matemáticas de Gales descargó los juegos y los programas y un antivirus de sus sistema le avisó que había una infección. Cerca de otros 200 usuarios también habían descargado los juegos. Aunque el virus no estaba diseñado para destruir datos, podía difundirse a archivos de aplicaciones y causar problemas como largas esperas y fallos del programa. Fue fácil dar con los autores, porque los juegos se habían enviado por correo electrónico desde una cuenta en Cornell. Las autoridades del estado de New York arrestaron a los estudiantes acusándolos del delito menor de intervención de computadores y es posible que posteriormente hayan presentado cargos adicionales.
En otro incidente, un programador de California, cuya esposa estaba promoviendo el divorcio le dio un disco para que ella lo cargara en un computador que estaba en disputa. El disco tenía un virus y borró todos los archivos del sistema. El esposo fue arrestado y se le acusó de destrucción de propiedad.
A veces, las infecciones virales inminentes se anuncian en eventos muy publicitados. Tal fue el caso del virus Miguel Angel, que estaba programado para borrar los archivos de los discos duros infectados el 6 de marzo de 1992, el cumpleaños 517 del artista renacencista. A causa de la extensa publicidad que rodeó al virus, la mayor parte de los sitiios estadounidenses habían localizado y destruido el virus antes de que se activara, así que casi no causó daños. Tales casos ponen sobre aviso y al mismo tiempo, alertan al público en general a cerca del problema de los virus. Los programas antivirus se venden como pan caliente. La mayor parte de los paquetes comerciales sólo son eficaces contra virus específicos conocidos. Estos programas examinan todos los programas del sistema en busca del patrón de instrucciones específico que se sabe constituye el virus; cuando encuentran un patrón conocido, eliminan las instrucciones "desinfectando" el programa. Estos paquetes comerciales tienen cientos de catálogos de virus que buscan.
La mejor protección contra los virus de computador es la prevención, o la práctica de computación segura. Comprar software empacado de fábrica y sin abrir, y evitar copias gratuitas o piratas de fuentes públicas, o intercambios de disquetes es la forma más segura de evitar infecciones. Sin embargo, ni siquiera las copias nuevas de aplicaciones de software legítimas son inmunes a la infección con virus: han existido casos en que empleados vengativos de una compañía de software han infectado las copias maestras de los programas para causar daños económicos a la compañía que vende el software.
Dado que casi siempre se pasan de un sistema a otro, los gusanos y los virus generalmente se consideran como un problema de seguridad, no de protección.
BIBLIOGRAFIA
Silverschatz A; Peterson J y Galvin P. Sistemas Operativos. Conceptos Fundamentales. Addison-Wesley. Iberoamericana. 1996.
Tanenbaum S., Andrew. Sistemas Operativos Modernos. Prentice-Hall. Hispanoamericana, S.A. Traducido de la primera edición en Inglés.
D1
D2
D3
<O3, {leer, escribir}>
<O1, {leer, escribir}>
<O2, {ejecutar}>
<O2, {escribir}>
<O4, {imprimir}>
<O1, {ejecutar}>
<O3, {leer}>
Figura 1: Sistema con Tres Dominios de Protección
OBJETOS | ||||
DOMINIOS | F1 | F2 | F3 | Impresora |
D1 | leer | leer | ||
D2 | imprimir | |||
D3 | leer | ejecutar | ||
D4 | leer/escribir | leer/escribir |
Figura 2. Matriz de Acceso
Figura 3. Matriz de Acceso de la Figura 2 con dominios como objetos.
OBJETOS | ||||||||
DOMINIOS | F1 | F2 | F3 | Impresora | D1 | D2 | D3 | D4 |
D1 | leer | leer | conmutar | |||||
D2 | imprimir | conmutar | conmutar | |||||
D3 | leer | ejecutar | ||||||
D4 | leer/escribir | leer/escribir | conmutar |
Figura 4. Matriz de Acceso con derechos de copiar.
OBJETOS | |||
DOMINIOS | F1 | F2 | F3 |
D1 | Ejecutar | Escribir* | |
D2 | Ejecutar | Leer* | Ejecutar |
D3 | Ejecutar |
OBJETOS | |||
DOMINIOS | F1 | F2 | F3 |
D1 | Ejecutar | Escribir* | |
D2 | Ejecutar | Leer* | Ejecutar |
D3 | Ejecutar | Leer |
a.
b.
b.
a.
OBJETOS | |||
DOMINIOS | F1 | F2 | F3 |
D1 | Dueño Ejecutar | ||
D2 | Leer*/Escribir* Dueño | Leer*/Escribir* Dueño | |
D3 | Escribir | Escribir |
Figura 5. Matriz de Acceso con derechos de dueño.
OBJETOS | |||
DOMINIOS | F1 | F2 | F3 |
D1 | Dueño Ejecutar | Escribir | |
D2 | Leer* Dueño | Leer*/Escribir* Dueño | |
D3 | Ejecutar |
Figura 6. Matriz de Acceso modificada de la Figura 3.
OBJETOS | ||||||||
DOMINIOS | F1 | F2 | F3 | Impresora | D1 | D2 | D3 | D4 |
D1 | leer | leer | conmutar | |||||
D2 | imprimir | conmutar | Conmutar Control | |||||
D3 | leer | Ejecutar | ||||||
D4 | escribir | Ejecutar | conmutar |
Descargar
Enviado por: | Yoli |
Idioma: | castellano |
País: | Colombia |