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?
•	un usuario (UNIX) o un grupo de usuarios
•	un proceso
•	un procedimiento (Hydra)

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
•	Llaves y cerraduras

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:

lista de capacidades
del proceso
(local)

tabla global de objetos

write (c4,...)

c4

15

15

RW

dirección

...

Objeto

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:

•	crear una capacidad nueva
•	destruir una capacidad
•	recortar los derechos de una capacidad
•	copiar o mover una capacidad a otro proceso o usuario

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.