En esta sección se consideran los tres tipos de controles externos al sistema operativo que se aplican más frecuentemente para prevenir fallos de seguridad durante las etapas de desarrollo y de prueba de un sistema operativo
- Equipos de penetración y limitación de acceso.
- Controles de programación.
- Uso de estándares para seguridad.
Prevenir todos los problemas de seguridad posibles es difícil. Para tratar de detectar el mayor número de fallos posible es habitual usar equipos de penetración. Su misión consiste en llevar a cabo todos los ataques de seguridad imaginables sobre un sistema. Un conjunto de pruebas de seguridad bien diseñado es muy complejo, porque debe incluir desde cosas muy sencillas hasta muy sofisticadas. Por ejemplo, intentar leer bloques de disco o páginas de memoria al azar, intentar entrar en cuentas de otros usuarios, hacer las cosas que se indican como no convenientes en los manuales, etc. Estos controles de seguridad han de ser más rigurosos si los sistemas están conectados en redes por la posibilidad existente de difusión de virus o de intento de adquisición de palabras de acceso al sistema mediante programas que descifran dichos códigos (crackers).
La complejidad de las comprobaciones y el registro de los accesos aumentan en los sistemas conectados a la red. En este caso, la seguridad del sistema se enfrenta a múltiples puntos de ejecución y a canales de comunicación expuestos. Debido a la complejidad de los mecanismos de protección en sistemas distribuidos, en muchas redes de computadoras se limita el acceso y sólo se permite el acceso a la red interna a través de una máquina determinada, denominada cortafuegos (firewall). Esta máquina separa dos dominios de seguridad: el fiable y el exterior. El cortafuego se sitúa entre ambos y filtra todo el tráfico de la red, monitoriza y registra las conexiones.
Actualmente, Internet se sitúa en el dominio de seguridad exterior, mientras que las máquinas del dominio de seguridad fiable se aíslan del exterior, estando conectadas mediante una intranet.
Habitualmente, sólo se permite el establecimiento de comunicaciones entre máquinas de la intranet y el mundo exterior a través de los servicios del cortafuego. En algunos casos existe una zona intermedia de seguridad cuyas máquinas se pueden conectar con las de la intranet. Por ejemplo, máquinas controladas de clientes que se conectan a los catálogos de una compañía usando protocolos que pueden ser filtrados por el cortafuego.
Controles de programación
Existen distintos métodos que se pueden aplicar durante el desarrollo de un sistema operativo para intentar asegurar la calidad de la programación, que lo programado se ajusta a lo diseñado y la fiabilidad del código producido:
Diseño detallado y contrastado de las tareas a programar: Es importante que el diseño y el código del sistema sean revisados por un grupo independiente de los diseñadores y los programadores, de forma que todo el grupo se involucre en la corrección y seguridad del pro ducto. Una revisión exhaustiva del código puede permitir detectar errores de programación, desviaciones del diseño, código malicioso (caballos de Troya, puertas traseras,...) o incongruencias entre distintos módulos. Como ejemplo de detección de código malicioso, se pue de indicar que las revisiones de código para detectar el efecto 2000 han permitido detectar bombas de tiempo en algunos sistemas. Es necesario comprender que tener un sistema operativo con nivel de seguridad alto no sirve de nada si se permite a los programadores poner una bomba lógica o un caballo de Troya.
Aplicar el principio de aislamiento a cada componente del sistema: Este principio se puede aplicar a los programas encapsulando datos y métodos de un objeto, de forma que sólo se puedan acceder a través de métodos verificados del mismo objeto y con una interfaz bien definida.
Pruebas por parte de probadores independientes, no relacionados con los miembros del equipo de diseño y desarrollo: Estas pruebas son muy importantes para la seguridad del sistema, porque si un programador quiere introducir código malicioso en el sistema nunca desarrollará código de prueba que detecte dicho código. En los sistemas operativos abiertos y de distribución gratuita, como LINUX, se suelen detectar y resolver antes los problemas de seguridad debido a dos razones: gran número de probadores y gran número de modificadores que estudian detalladamente el código.
Gestión de configuración: de forma que cualquier cambio o instalación de software en un sistema debe ser aprobado por el administrador que debe juzgar la necesidad del cambio. Este control protege frente a amenazas no intencionadas, al evitar que el sistema quede en un estado inseguro. Por ejemplo, un instalador no puede borrar la versión de un programa antes de tener instalada la j + 1 de forma segura. Además protege frente a errores maliciosos.
Uso de estándares para seguridad
Un sistema operativo suele ser un proyecto de programación muy grande. Los controles anteriores son sólo una pequeña parte de los controles que es necesario aplicar en el desarrollo del sistema. Además, para que el sistema sea seguro es necesario describir claramente qué hacer, y cómo hacer lo, en términos de seguridad. Actualmente, existen varios estándares que describen cómo conse guir un sistema fiable y de calidad. Los tres más conocidos son el DoD-2167A, el SSE-CMM y el ISO 9000.
El estándar DoD-2167A: data de 1988 y permite definir requisitos uniformes aplicables a lo largo del ciclo de vida del sistema. En cada fase del modelo se puede comprobar la calidad y seguridad de lo desarrollado, solventando los problemas lo antes posible.
El Modelo de Madurez y Capacidad (CMM): fue publicado en el Software Engineering Institute (SEI) en febrero de 1993. En 1995, la National Security Agency (NSA) publicó el Modelo de Madurez y Capacidad para la Ingeniería de Seguridad de Sistemas (SSE-CMM). Este modelo permite evaluar la calidad de los métodos de seguridad usados en un sistema u organización.