Seguridad y protección

 

 

 

Un sistema informático ofrece servicios a usuarios humanos en el seno de una sociedad u organización. Algunos tipos de servicios son:

 

  Gestión de información (p.ej. transacciones financieras, archivos personales, etc.)

  Control de otras actividades (p.ej. procesos industriales, control de tráfico, etc.)

  Servicios empotrados en un aparato (p.ej. automóviles, robots...)

 

En muchos casos es cuestión de vida o muerte garantizar que el sistema informático funciona correctamente.

 

Los recursos del sistema informático son limitados: hay un coste inherente a su utilización, que puede ser repercutido en forma de tarifa o impuestos a los usuarios.

 

En toda sociedad u organización humanas existen unas restricciones de uso de la información: derechos de intimidad; información que representa o es sujeto de propiedad; etc. En tales casos es necesario restringir según qué usuario el acceso a la información del sistema.

 

 

SEGURIDAD INFORMÁTICA

 

Garantizar la integridad, disponibilidad y privacidad de la información contenida en un sistema informático

 

Permitir la distinción de clases de usuarios, con diferentes autorizaciones sobre el uso de los recursos del sistema

 

 

 

La seguridad informática es una materia amplia, que abarca entre otras cosas: los modos de trabajo de las personas, los dispositivos físicos de seguridad y la seguridad interna de la máquina y el sistema operativo.

 

Seguridad externa: la referente a las instalaciones del sistema informático y al acceso de personas al sistema y su información.

 

Contempla estas dos áreas:

  Seguridad física. De las instalaciones. Incluye medidas de prevención o recuperación de siniestros, y control de acceso al sistema.

  Seguridad operacional. Políticas y mecanismos de seguridad: niveles de autorización o responsabilidad, métodos de acceso, protocolos de comunicación...

Seguridad interna: la que se refiere a la circuitería del sistema, o a los asuntos de seguridad del sistema operativo.

 

 

 

PROTECCIÓN: Parte de la seguridad interna relativa al control de acceso de programas, procesos o usuarios a los recursos de un sistema informático.

 

 

Tipos de amenazas
contra la integridad del sistema

 

  Uso negligente o incorrecto

  Siniestros (daños físicos al sistema)

  Uso no autorizado o indebido

  Sabotaje (acto deliberado de alterar el funcionamiento del sistema)

 

Estas amenazas pueden ser accidentales o intencionadas.

 

Intrusión: Entrada no autorizada o indebida en el sistema. También llamada penetración.

 

 

Posibles efectos de las amenazas

 

Revelación de información no autorizada

Destrucción de información

Utilización indebida de servicios del sistema

Daños físicos al sistema

Degradación en el funcionamiento del sistema

Denegación de acceso a usuarios autorizados

 

Algunos intentos de intrusión

 

Basados en: oportunismo, búsqueda de información útil, programación, etc.

 

× Robo o espionaje de contraseñas

× Aprovechar descuidos

× Recolección de basura

× Inspección de información del sistema

× Escucha electrónica

× Prueba y error: programas analizadores de contraseñas, descifradores, etc.

 

  Programas señuelo: caballo de Troya; ardid de engaño

  Utilización de una "puerta trasera" (backdoor)

  Explotación de agujeros del sistema

 

 

 

Software malicioso

 

Programas cuyo propósito directo o indirecto es violar la seguridad del sistema

 

  Gusanos (worms) y virus: programas orientados al sabotaje del sistema

  Caballos de Troya

 

Objetivos del sistema de seguridad

 

× Establecer de forma eficaz un sistema de autorizaciones de utilización de los recursos y la información

× Prevenir o evitar las amenazas a la seguridad

× Detectar los intentos de intrusión y llevar un control de las operaciones  auditoría

× Recuperarse de las violaciones de la seguridad   robustez

× Resolver lo anterior consumiendo el mínimo de recursos, y sin que represente una gran molestia a los usuarios (en suma, con el menor coste)

 

 

El sistema de autorizaciones ha de definir:

 

× Forma en que se genera, añade, borra o extrae información

× Flujos de información interna permitidos

× Autorizaciones de acceso a la información

× Autorizaciones de uso de recursos en general

 

 

Seguridad. Principios nada válidos

 

× Buena fe : siempre habrá usuarios malintencionados o negligentes

× Menosprecio del atacante

× Optimismo (recordar la Ley de Murphy)

 

 

Seguridad. Principios de diseño
(Saltzer y Schroeder)

 

 

 

 

Mínimo privilegio

Cada sujeto ha de tener el mínimo de privilegios para realizar sus funciones

 

Separación de privilegios

Procurar que tengan que satisfacerse varias condiciones para realizar una función

Mínimo mecanismo común

Minimizar los recursos compartidos

Simplicidad de mecanismo

Evitar complicaciones innecesarias

Mediación completa

Hacer la comprobación de acceso siempre

Valores predeterminados seguros

La opción por omisión debería ser denegar el acceso al recurso

 

Diseño público

La eficacia del sistema de seguridad no debe basarse en el secreto del diseño

Aceptabilidad por los usuarios

El sistema de seguridad debe ser fácil de cumplir y poco molesto

 

 

Validación de usuarios

 

 

Validación o autentificación: mecanismos para admitir o denegar el acceso de usuarios

 

El mecanismo de validación ha de ser lo más cómodo, aceptado por los usuarios, barato y difícil de replicar o robar.

 

Debería minimizar las falsas aceptaciones así como los falsos rechazos de usuarios.

 

Clases de mecanismos:

 

Contraseña   algo conocido por la persona

Artefacto   algo poseído por la persona

Biometría   algo característico de la persona

 

 

Contraseñas

 

× El mecanismo más popular y económico

× Muy fáciles de implementar

× No requieren hardware adicional

× Imponen esfuerzos al usuario

× Su sustracción o adivinación es difícil de detectar

× Exigen mecanismos más elaborados para garantizar cierto nivel de seguridad

 

Artefactos

 

Tarjetas magnéticas, llaves, etc.

 

× Cómodas de usar y aceptadas socialmente

× Casi siempre son multifunción (sirven para otras cosas)

× Evitan caballos de Troya

× Pueden ser difíciles de replicar

× Su pérdida o robo es fácilmente detectado

 

 

 

Métodos biométricos

 

Características fisiológicas (huella dactilar, vasos retinales) o conductuales (firma, patrón de voz, etc.)

 

× Requieren hardware más costoso

× Prácticamente imposibles de replicar

× La tasa de falsos rechazos puede ser alta

× Tienden a ser rechazados socialmente

 

 

Contraseñas

 

Si son fáciles de recordar, son fáciles de adivinar

 

Solución: contraseñas aleatorias generadas por el sistema

 difíciles de recordar   se tienden a anotar   se pueden robar

 

Contraseñas multinivel, o una por tipo de servicio   incómodo

 

Reto dinámico: plantear un enigma conocido por el usuario   impracticable

 

Limitación de intentos consecutivos, p.ej. con subsiguiente desconexión de la terminal o cancelación de la cuenta   riesgo de denegación de servicio o de merma de eficiencia

 

Caducidad de contraseñas   que expiren al cabo de cierto tiempo

 

Medidas de protección típicamente a cargo del sistema operativo o el hardware

 

 

Establecer niveles de privilegio mediante circuitería:

 

× Modo dual de operación

× Protección de segmentos de memoria

× Protección de acceso a periféricos

× Protección de la gestión de eventos (interrupciones, temporizador...)

 

 

Limpieza de almacenamiento borrado  evita obtención de información por recolección de basura

 

Servicios de registro de auditoría ofrecidos por el sistema operativo

 

Replicación de la información (copia de seguridad, etc.)

 

Autocomprobación de consistencia de la información (sumas de control, códigos correctores de error...) ð antivirus

 

Criptografía: cifrado en las transmisiones y en el almacenamiento de datos altamente sensibles (como las contraseñas, ficheros personales...)

 

 

Modelo formal de protección

 

 

En un computador, en materia de protección, consideramos que un conjunto de sujetos (entidades activas=procesos o usuarios) realiza operaciones sobre objetos (cualquier recurso, información, etc.)

 

Cada objeto admite un conjunto de operaciones sobre él.

 

Los sujetos y objetos pueden aparecer y desaparecer en el transcurso de la existencia del sistema (ej. nuevos procesos, nuevos ficheros)

 

 

Derecho de acceso: Autoridad de un sujeto para ejecutar una operación

 

Cada sujeto posee un conjunto de derechos de acceso sobre cada recurso.

 

 

Dominio de protección: conjunto de derechos de acceso, como una lista de pares <objeto, conjunto de derechos>

 

En cada momento, un proceso se ejecuta dentro de un dominio de protección.

 

 

Dominios de protección

 

 

Ejemplo de representación de dominios de protección:

 

 

pepe.c

juan.c

cc

a.out

impresora

 

D1

leer

escribir

 

 

ejecutar

borrar

crear

ejecutar

 

imprimir

 

D2

 

leer

escribir

 

ejecutar

borrar

crear

ejecutar

 

 

Al conjunto de dominios de protección se le llama a veces matriz de acceso

 

┐Qué representa un dominio de protección?

 

Los dominios de protección o los derechos de acceso pueden también considerarse objetos.

 

Por poner un caso, puede definirse el derecho de acceso que permita a un proceso ejecutarse en un dominio de protección determinado.

 

 

Ejemplo: matriz de acceso que define el ciclo de vida de un proceso de edición/compilación/ejecución de un programa.

 

 

 

 

pepe.c

 

a.out

 

cc

 

impresora

 

D1

 

D2

 

D3

 

D1

crear

leer

escribir

 

 

 

 

 

 

 

cambiar a

 

 

D2

 

leer

crear

borrar

escribir

 

ejecutar

 

 

 

 

cambiar a

 

D3

 

 

ejecutar

 

 

 

imprimir

 

eliminar

 

eliminar

 

eliminar

 

 

Obsérvese que en este ejemplo se atiende al principio de mínima necesidad.

 

 

Implementación
de los dominios de protección

 

 

La matriz de acceso es sólo una construcción teórica; potencialmente es ilimitada y además es escasa (muchas casillas en blanco).

 

Mecanismos desarrollados:

 

  Reglas implícitas

  Jerarquías de acceso

× Encapsulamiento (en lenguajes de programación)

 

× Listas de acceso

× Capacidades

 

 

 

 

 

Reglas implícitas

 

 

Evitan expresar la información sobre protección en estructuras de datos.

 

Muy común es considerar que un usuario es un dominio de protección, o alguna variante de este principio.

 

Ejemplo: En Unix, cada objeto o proceso tiene un usuario propietario. Determinadas operaciones (matar un proceso, cambiar permisos de un fichero) sólo se pueden efectuar si el usuario propietario del proceso actuante coincide con el del objeto.

 

El usuario se autentifica mediante un mecanismo de nombre y contraseña; tras autentificarse, queda en un dominio de protección correspondiente al UID del usuario.

 

 

Jerarquía de accesos

 

 

Establecer un conjunto de niveles jerárquicos de acceso a los recursos, y las transiciones permitidas entre ellos.

 

Modo dual de operación (modo supervisor/modo usuario): dos niveles.

 

Múltiples niveles de operación.

Ej. modo núcleo, modo sistema, modo administrador, modo usuario.

 

Anillos de protección (MULTICS)

n niveles, cada uno asociado a un dominio de protección.

Cada proceso se ejecuta en un nivel k; tiene como dominio de protección a la unión de los dominios de nivel i ú k.

 

Solución muy limitada: no se pueden definir dominios de protección que no sean jerárquicos.

 

 

 

Encapsulamiento en lenguajes de programación

 

 

Muchos lenguajes protegen los objetos declarados en los programas mediante estructuración del código en bloques, compilación separada de módulos, abstracción de tipos de datos, etc.

 

Listas de accesos

 

 

Cada objeto tiene asociada una lista de elementos <dominio,derechos>, con los derechos de acceso existentes sobre él ð las celdas no vacías de su columna en la matriz de accesos

 

La información de protección puede así estar dispersa: cada objeto tiene su lista aparte.

 

Las celdas vacías de la matriz de acceso no están representadas.

 

Variantes:

 

Listas con derechos por omisión (si no apareces en las listas, se te concede el derecho por omisión)

Listas denegatorias (quien aparece en ellas, no tiene el derecho indicado)

 

 

 

Capacidades

 

 

Una capacidad es la representación de un dominio de protección: funciona a modo de boleto que da derecho a acceder a un objeto, de la manera especificada en la propia capacidad.

Desde el punto de vista de un lenguaje de programación, una capacidad es un puntero protegido.

 

Una capacidad representa conceptualmente una fila de la matriz de accesos.

 

Una capacidad es un tipo especial de apuntador a objetos.

 

Cada sujeto (proceso) posee una lista de capacidades, que le permiten acceder de forma controlada a los objetos del sistema.

 

Basta la posesión de la capacidad para tener acceso al objeto correspondiente (con los derechos asociados a la capacidad). No hay verificación adicional.

 

El sistema ha de garantizar que un proceso no pueda utilizar capacidades que no posee.

 

 

Un proceso actúa sobre los objetos invocando servicios del tipo operación ( capacidad, parámetros... ), servicios proporcionados por el sistema operativo.

 

 

En el sistema puede haber muchas capacidades distintas que apunten al mismo objeto, pero con diferentes derechos.

 

 

Implementación de un sistema de capacidades

 

Como las capacidades son apuntadores a objetos, la implementación de un mecanismo de capacidades se entremezcla con la gestión de la memoria (primaria o secundaria).

 

La lista de capacidades, o las capacidades mismas han de estar protegidas por hardware, de forma que un proceso o usuario no pueda crear sus propias capacidades.

 

 

Formas de implementar el sistema:

 

× Memoria marcada

× Memoria segmentada

× Capacidades cifradas

 

Memoria marcada

 

Cada objeto tiene una marca que indica su tipo: en este caso, se distinguiría entre capacidades o palabras de memoria "normales".

Sólo el sistema operativo estaría facultado para crear objetos de tipo "capacidad".

 

Ejemplo:

 

dirección

tipo

contenido

 

.

.

.

.

.

.

123

NORMAL

33

124

CAPACIDAD

489783498

125

NORMAL

12345

126

NORMAL

970567

 

.

.

.

.

.

.

 

Inconveniente: exige un modelo de memoria distinto al de Von Neumann.

Memoria segmentada

 

Se hace uso de una tabla local de capacidades por proceso; y una tabla global de objetos. Ambas estructuras han de estar protegidas, para evitar que un proceso cree o altere capacidades de forma incontrolada.

 

Ejemplo:

 






 

 

 

 

 

Ventaja: implementable a partir de un sistema de memoria segmentada

Capacidades cifradas

 

La capacidad es un patrón de bits formado por el identificador de objeto, los derechos de acceso y una suma de control (checksum):

 

id. objeto

derechos

suma de control

 

 

Toda esta información está cifrada por el sistema, de forma que los componentes son irreconocibles.

 

No se precisan tablas de objetos ni de capacidades, puesto que toda la información de direccionamiento y protección está autocontenida en la capacidad.

Por ello este mecanismo es ideal para sistemas distribuidos.

 

Existe la probabilidad de generar indebidamente una capacidad válida, pero es prácticamente nula gracias al cifrado y la suma de control, si tienen una gran cantidad de bits.

 

En lugar de sumas de control, se pueden usar marcas de tiempo (timestamps) con el instante de creación de la capacidad ð dificulta más su generación indebida

 

Manipulación de capacidades

 

Podrán existir servicios para:

 

 

Para evitar problemas de seguridad, podemos definir un proceso "propietario" de cada capacidad, el cual sea el único con poder para eliminarla. o recortar sus derechos.

 

 

Comparación entre capacidades y listas de accesos

 

En un sistema basado en capacidades, la información de protección reside en los sujetos (las listas de capacidades), en vez de en los objetos, como ocurre con las listas de acceso.

 

Las capacidades son además direcciones de objetos.

 

 

Ventajas de las capacidades:

 

El sistema de acceso a objetos puede ser más rápido con capacidades, dado que no se hacen recorridos en listas. La dirección del objeto viene dada por la propia capacidad.

 

Se pueden transferir derechos de acceso entre los procesos fácilmente y sin tener que alterar listas de accesos.

 

 

Inconvenientes de las capacidades:

 

Es difícil conocer qué procesos tienen derechos de acceso sobre un objeto en particular.

 

Si un proceso revoca una capacidad, ┐cómo se consigue que afecte a los otros procesos que poseen esa misma capacidad?

 

Si un objeto desaparece, ┐cómo se invalidan todas las capacidades relativas a ese objeto?

 

 

Llaves y cerraduras

 

Mecanismo intermedio entre las listas de accesos y las capacidades.

 

Cada objeto dispone de un conjunto de cerradurasð patrones de bits únicos en el sistema. Cada cerradura se asocia a un conjunto de derechos.

 

Cada dominio de protección posee un conjunto de llaves ð patrones de bits únicos, cada uno de los cuales "encaja" con una llave en el sistema.

 

 

Un proceso puede efectuar una operación con un objeto sólo si el dominio bajo el que se ejecuta posee una llave específica para alguna de las cerraduras del objeto.

 

Tanto las llaves como las cerraduras han de estar protegidas, de la misma forma que las capacidades.

 

 

Este mecanismo goza de las ventajas de las capacidades, a la vez que simplifica el problema del borrado de objetos que existe con las capacidades.