43 Arquitectura y programación de ordenadores 3 SISTEMAS OPERATIVOS 3.1 PROCESOS El término proceso fue acuñado por primera vez por los diseñadores de Multics (1960), y se han dado muchas definiciones, entre las que cabe destacar las siguientes: 1. Un programa en ejecución. 2. Entidad que puede ser asignada al procesador y ejecutada por él. 3. Unidad de actividad caracterizada por un sencillo tratamiento de ejecución secuencial, un estado actual, y asociada a un conjunto de recursos del sistema. Este concepto surge como consecuencia de los problemas que surgieron del desarrollo de los propios sistemas operativos, como son la multiprogramación, el tiempo compartido y las transacciones en tiempo real. Una de las herramientas principales de las que disponían los programadores de sistemas para evitar los conflictos anteriores, fue la interrupción. Con interrupción, la actividad de cualquier trabajo puede suspenderse por un hecho determinado, como la culminación de una E/S. El procesador debe entonces salvar algún tipo de contexto ( por ejemplo, el contador de programa y otros registros) y bifurcar a una rutina de tratamiento de la interrupción, que 44 Arquitectura y programación de ordenadores determina la naturaleza de esta, la procesa y después reanuda la ejecución del proceso de usuario en el trabajo interrumpido o en algún otro trabajo. Un sistema operativo capaz de controlar varias aplicaciones simultáneamente, con recursos compartidos y varios usuarios, puede dar lugar a conflictos, entre los que caben destacar los siguientes: Sincronización incorrecta: un diseño incorrecto del mecanismo de generación de señales puede dar como resultado la pérdida de señales o la recepción de señales duplicadas. Fallos de exclusión mutua: debe existir algún tipo de mecanismo de exclusión mutua que permita que sólo una rutina pueda realizar una transacción al mismo tiempo, sobre una determinada parte de los datos. Funcionamiento no determinista del programa: el orden en que se organiza la ejecución de varios programas puede influir en los resultados de un programa en particular, ya que estos pueden compartir memoria y sus ejecuciones se intercalan el procesador. Interbloqueos: es posible que dos o más programas están suspendidos a la espera uno del otro, debido a la aleatoriedad de la asignación y liberación de recursos compartidos. Para evitar estos problemas necesitamos supervisar y controlar los diferentes programas que puedan estar ejecutándose en el procesador. El concepto de proceso ofrece esta base, y se puede considerar esta formado por los siguientes componentes: Un programa ejecutable. Los datos asociados necesarios para el programa ( variables, espacio trabajo, buffers, etc...). El contexto de ejecución del programa o estado del proceso. 45 Arquitectura y programación de ordenadores Este último elemento es esencial, pues incluye toda la información que el sistema operativo necesita para administrar el proceso y que el procesador necesita para ejecutarlo correctamente. El contexto incluye los contenidos de varios registros del procesador, tales como el contador de programa y los registros de datos. Además, en el contexto se guarda el estado de un proceso que ha sido temporalmente interrumpido . También incluye información de utilidad al sistema operativo, como la prioridad del proceso y si el proceso esta esperando la terminación de un suceso particular de E/S. A cada proceso se le asigna un bloque de memoria que contiene el programa, los datos y la información del contexto. Cada proceso también es registrado en una línea de procesos construida y guardada por el sistema operativo en la memoria principal. Esta lista contiene una entrada para cada proceso, la cual dispone de un puntero para la posición del bloque de memoria que contiene al proceso. Esta entrada también puede incluir parte o todo el contexto de ejecución del proceso. En el propio procesador se guardan valores relativos a los procesos que están teniendo lugar. Así , el registro índice del proceso contiene el índice, dentro de la lista de procesos, del proceso que está actualmente controlando al procesador. El contador de programa apunta a la siguiente instrucción del proceso que se ejecutará. Los registros base y límite definen la región de memoria ocupada por el proceso. El registro base contiene la dirección de comienzo de la región de memoria y el registro límite indica el tamaño de la región (en butes o palabras). Contador de programa y toda la referencias a datos se interpretan como relativas al registro base y no deben exceder el valor del registro límite. Esto impide las interferencias entre procesos. Un proceso puede estar ejecutándose o esperando su ejecución. Todo el estado del proceso en un instante determinado, está contenido en su contexto. Esta estructura permite el desarrollo de técnicas potentes, que aseguran la coordinación y la cooperación entre procesos. Se pueden diseñar e incorporar nuevas características al sistema operativo (por ejemplo , prioridades) mediante la ampliación del contexto para incluir cualquier nueva información que sea necesaria para dar soporte al nuevo atributo. 46 Arquitectura y programación de ordenadores 2 3.2 GESTIÓN DE MEMORIA En un sistema monoprogramado, la memoria principal se divide en dos partes: una para el sistema operativo ( monitor residente, núcleo) y otra para el programa que se ejecuta en ese instante. En sistema multiprogramado, la parte de usuario de la memoria debe subdividirse aún más para hacer sitio a varios procesos. La tarea de subdivisión la lleva a cabo dinámicamente el sistema operativo y se conoce como gestión de memoria, repartiendo eficazmente la memoria, para introducir tantos procesos como sea posible. Se parte de la necesidad de que un programa esté cargado en la memoria principal para poder ser ejecutado. Para satisfacer estos requisitos, el sistema operativo debe cumplir las siguientes tareas:. Aislamiento del proceso: el sistema operativo debe procurar que cada proceso independiente no interfiera en los datos y la memoria de ningún otro. Asignación y gestión automáticas: el sistema operativo puede lograr eficiencia asignando memoria dinámicamente a los trabajos, según la vayan necesitando. Soporte para programación modular: El programa se ha de construir en módulos de tamaño variable para optimizar el uso de la memoria. Protección y control de acceso: el sistema operativo debe permitir que las secciones de memoria estén accesibles de diferentes maneras para los diversos usuarios, de manera que esto no amenaza de la integridad de los programas y del mismo sistema. Almacenamiento a largo plazo: muchos programas de aplicaciones necesitan ser almacenados en memoria después de apagar el computador. 47 Arquitectura y programación de ordenadores Requisitos de la gestión de memoria Al realizar un estudio de los diversos mecanismos asociados con la gestión de memoria, es conveniente tener en cuenta los requisitos mínimos que se intentan satisfacer, como son la reubicación, la protección, compartición, organización lógica y organización física. La reubicación se refiere a la capacidad de traducir las referencias a la memoria encontradas en el código del programa, a las direcciones físicas reales que reflejen la posición actual del programa en la memoria principal Cada proceso debe protegerse contra interferencias no deseadas de otros procesos. Así pues, el código de un proceso no puede hacer referencia a posiciones de memoria de otros procesos, confines de lectura o escritura, sin permiso. Normalmente un proceso de usuario no puede acceder a ninguna parte del sistema operativo, ni programas ni datos.El programa de un proceso, normalmente, no puede bifurcarse hacia una instrucción de otro proceso. El procesador debe ser capaz de abortar estas instrucciones el momento de la ejecución. Es el procesador y no al sistema operativo, el que debe satisfacer las exigencias de protección de la memoria. Este es debido a que el sistema operativo no puede anticiparse a todas las referencias a la memoria que hará un programa. Cualquier mecanismo de protección que se implemente debe tener la flexibilidad de permitir el acceso de varios procesos a la misma zonal de memoria principal. El sistema de gestión de memoria debe, permitir accesos controlados a las áreas compartidas de la memoria sin comprometer la protección básica. De forma casi invariable la memoria principal de un sistema informático se organiza como un espacio de direcciones lineal o unidimensional, que consta de una secuencia de bytes o palabras. La memoria secundaria, físicamente, se organiza de forma similar. Si bien esta organización refleja fielmente el jaguar de la máquina, no se corresponde con la forma en la que los programas están construidos habitualmente. La mayoría de los programas se organizan en módulos, que pueden escribirse o compilarse independientemente, otorgando distinto grado 48 Arquitectura y programación de ordenadores de protección a cada uno, siendo posible introducir mecanismos por medio de los cuales los procesos puedan compartir módulos. Este tipo de organización de la memoria es lógica, y la herramienta más utilizada es la segmentación. Organización física. La gestión de la memoria en sistema jerárquico, y el flujo información entre los diferentes niveles debe ser tarea de sistema operativo. Esta tarea es la esencia de la gestión de memoria. Partición de la memoria La tarea principal de sistema de gestión de memoria es cargar los programas en la memoria principal para su ejecución en el procesador. En casi todos los sistemas mulprogramados modernos, esta tarea requiere un sofisticado esquema llamado memoria virtual. La memoria virtual ésta, a su vez, basada en el uso de una de dos técnicas básicas: segmentación o paginación. Antes de ver estas técnicas de memoria virtual, consideraremos técnicas más simples que no requieren el uso de memoria virtual. Una de estas técnicas, la partición, se ha venido usando con distintas variantes en algunos sistemas operativos ahora obsoletos. Las otras dos técnicas, la paginación simple y la segmentación simple, se usan conjuntamente. No obstante, el estudio de la memoria virtual resultará más sencillo si se consideran en primer lugar estas dos técnicas sin tener en cuenta la memoria virtual. Particiones estáticas En la mayoría de los esquemas de gestión de memoria, se puede suponer que sistema operativo ocupa una parte fija de la memoria principal y que el resto de la memoria está disponible para ser usado por varios procesos. El esquema más sencillo de gestión de la memoria disponible es dividirla en regiones con límites fijos. Aquí nos encontramos con dos alternativas. Una posibilidad es emplear particiones de igual tamaño, pero esto plantea dos dificultades. Un programa puede ser demasiado grande para caber en la partición, en cuyo caso el programa debe dividirse en módulos, para que sólo una parte de este esté en la memoria principal en cada instante. El otro inconveniente se debe a que el uso de la memoria 49 Arquitectura y programación de ordenadores principal es extremadamente ineficiente. Cualquier programa, sin importar lo pequeño que sea, ocupará una partición completa, produciendo fragmentación interna. Puedan reducirse, aunque no solventarse, ambos problemas por medio del empleo de particiones de distintos tamaños. El uso de la partición estática es casi nulo hoy día. Como ejemplo de un sistema operativo que empleaba esta técnica, se tiene un antiguo sistema operativo de grandes computadoras de IBM, el OS/MFT (multiprogramación con un número fijo de tareas) Con particiones del mismo tamaño la ubicación de un proceso en la memoria es trivial, con particiones de distintos tamaños, hay dos maneras posibles de asignar los procesos a las particiones. La forma más simple es asignar cada proceso a la partición más pequeña en la que quepa. En este caso hace falta una cola de planificación para cada partición, que albergue los procesos expulsados cuyo destino es dicha partición. La ventaja de este enfoque es que los procesos están siempre asignados de forma que se minimiza la memoria desaprovechada dentro de cada partición ( fragmentación interna). Sin embargo esta técnica no es óptima desde el punto de vista del sistema global, y una solución mejor sería emplear una única con la para todos los procesos. Cuando se va a cargar un proceso en la memoria principal, se selecciona de partición más pequeña disponible que pueda albergar al proceso. Si todas las particiones están ocupadas, se debe tomar una decisión de intercambio. Puede darse preferencia al intercambio de la partición más pequeña que pueda contener al proceso entrante. También es posible considerar otros factores, tales como prioridades y preferencia a descargar procesos bloqueados antes que procesos listos. Particiones dinámicas Con la partición dinámica, las particiones son variables en número y longitud. Cuando se carga un proceso en la memoria principal, se le asigna exactamente tanto memoria, necesita y no más. Este método comienza bien, pero, finalmente, desemboca en una situación en la que hay un gran número de huecos pequeños en la memoria. Conforme pasa tiempo, la memoria 50 Arquitectura y programación de ordenadores comienza a estar más fragmentada y su rendimiento decae. Este fenómeno se denomina fragmentación externa y se refiere al hecho de que la memoria externa a todas las particiones se fragmenta cada vez más. Una técnica utilizada para evitar la fragmentación, es la compactación: de vez en cuando, el sistema operativo desplaza los procesos para estén contiguos, de forma que toda la memoria libre quede junta en un bloque. Los tres algoritmos ubicación que se utilizan en este tipo de particiones son el de mejor ajuste (best-fit), el primer ajuste (first-fit) y siguiente ajuste (next-fit). Todos ellos se limitan a elegir entre los bloques de memoria libres que son mayores o iguales que el proceso a cargar. El algoritmo de primer ajuste no sólo es el más sencillo, sino que normalmente es también el mejor y más rápida. El algoritmo del siguiente ajuste tiende a generar resultados algo peores que el anterior, pues lleva frecuentemente al asignación de bloques libres al final de la memoria, y hará falta una compactación más frecuente. Con el algoritmo del mejor ajuste, a pesar de su nombre, se obtienen los peores resultados, porque este algoritmos buscar el hueco más pequeño que cumple con los requisitos, garantizando que el fragmento que se deja es lo más pequeño posible. Aunque cada solicitud de memoria desperdicia siempre la menor cantidad de memoria, el resultado es que la memoria principal se llena rápidamente de bloques demasiado pequeños como para satisfacer la solicitudes de asignación de memoria. Así pues, se debe compactar más frecuentemente que con los otros algoritmos. Sistema de colegas Tanto los esquemas de partición estática como dinámica tienen inconvenientes. Los esquemas de partición estática limitan el número de procesos activos y pueden utilizar el espacio ineficientemente si hay poca concordancia entre los tamaños de las particiones disponibles y los tamaños de los procesos. Un esquema de partición dinámica es mucho más complejo de mantener e incluye la sobrecarga de compactar. Un equilibrio interesante es el sistema de colegas. 51 Arquitectura y programación de ordenadores Para empezar, el espacio entero disponible para la asignación se trata como solo bloque de tamaño 2U, siendo este el máximo espacio disponible en la memoria principal. Si se hace una solicitud de tamaño s tal que 2U-1 < s <=2U, entonces el bloque entero se asigna. Si no es así, el bloque se divide en dos colegas de igual tamaño 2U-1. Si 2U-2 <s <2U-1, entonces la solicitud se asigna a uno de los dos colegas. Si no, uno de los colegas divide por la mitad nuevamente. Este proceso continúa hasta que el bloque más pequeño sea mayor o igual que s generándose y asignándose a la solicitud. En cualquier instante, el sistema de colegas mantiene una lista de huecos (bloques de asignados) para cada tamaño 2i. Un hueco puede eliminarse de la lista (i+1) dividiéndola en dos mitades para crear dos colegas de tamaño 2i en la lista i. Cuando una pareja de colegas de la lista i pasa a estar libre, se les elimina de la lista y se unen en un solo bloque de la lista i+1. Paginación Tanto las particiones de tamaño fijo como las de tamaño variable hacen un uso ineficiente de la memoria: las primeras generan fragmentación interna, mientras las segundas originan fragmentación externa. Cuando la memoria se encuentra dividida en trozos iguales de tamaño fijo relativamente pequeños (marcos) y cada proceso está dividido también en pequeños trozos de tamaño fijo, del mismo tamaño que los de la memoria (páginas), entonces el espacio desaprovechado en la memoria para cada proceso por fragmentación interna consta sólo de una fracción de la última página del proceso. Además, no hay fragmentación externa. De esta forma el sistema operativo mantiene una tabla de páginas para cada proceso. Esta muestra la posición del marco de cada página del proceso. Dentro del programa, cada dirección lógica constará de un número de páginas y un desplazamiento dentro de la página. Con la paginación, el hadware del procesador también realiza la traducción de direcciones lógicas a físicas. Ahora, el procesador debe saber cómo acceder a la tabla de páginas del proceso actual. Dada una dirección lógica (número de página, desplazamientos), el procesador emplea la tabla de páginas para obtener una dirección física (número de marco, desplazamiento). 52 Arquitectura y programación de ordenadores Segmentación Otro modo de subdividir el programa es la segmentación. En este caso, el programa y sus datos asociados se dividen en un conjunto de segmentos. No es necesario que todos los segmentos de todos los programas tengan la misma longitud, aunque existe una longitud máxima de segmento. Como en la paginación, una dirección lógica segmentada consta de dos partes, en este caso un número de segmento y desplazamiento. Como consecuencia del empleo de segmentos de distintos tamaños, la segmentación resulta similar a la partición dinámica. En ausencia de un esquema de superposición o del uso de memoria virtual, sería necesario cargar en la memoria todos los segmentos de un programa para su ejecución. La diferencia, en comparación con la partición dinámica, radica en que, con segmentación, un programa puede ocupar más de una partición y éstas no tienen porqué estas contiguas. La segmentación elimina la fragmentación interna, pero la partición dinámica, sufre de fragmentación externa. Sin embargo, debido a que los procesos se dividen en un conjunto de partes más pequeñas, la fragmentación externa será menor. Mientras que la paginación es transparente el programador, la segmentación generalmente es visible y se ofrece como la ventaja para la organización de los programas y datos. Normalmente el programador o el compilador asigna los programas y los datos a diferentes segmentos de. Para facilitar la programación modular, el programa o los datos pueden ser divididos de nuevo en diferentes segmentos. El principal inconveniente de este servicio es que el programador debe ser consciente de la limitación de tamaño máximo de los segmentos. Otra consecuencia del tamaño desigual de los segmentos es que no hay una correspondencia simple entre las direcciones lógicas y las direcciones físicas. De forma análoga a la paginación, un esquema de segmentación simple hará uso de una tabla de segmentos para cada proceso y una lista de bloques libres en la memoria principal. Cada entrada de la tabla de segmentos tendría que contener la dirección de comienzo del segmento correspondiente de la memoria principal. La entrada de ver a proporcionar también la longitud del segmento para 53 Arquitectura y programación de ordenadores garantizar que no se usan direcciones no válidas. Cuando un proceso pasa de estado ejecutando, se carga la dirección de su tabla de segmentos en un registro especial del hardware de gestión de memoria. Para resumir, y con segmentación simple un proceso se divide en varios segmentos que no tienen porque ser el mismo tamaño. Cuando el proceso se introduce en la memoria, se cargan todos sus segmentos en regiones de memoria libres y se rellena la tabla de segmentos. Memoria virtual Comparando la paginación y la segmentación simple por un lado, con la partición estática y dinámica por el otro, se establecen las bases para un avance de la fundamental en la gestión de memoria. Las claves de este avance son dos características de la paginación y la segmentación: 1. Todas las referencias a la memoria dentro de un proceso son direcciones lógicas que se traducirán dinámicamente al direcciones físicas durante la ejecución. Esto significa que un proceso puede cargarse y descargarse de la memoria principal de tal forma que ocupe regiones diferentes en momentos distintos a los largo de su ejecución. 2. un proceso puede dividirse en varias partes (páginas o segmentos) y no es necesario que estas partes se encuentra en contiguas en la memoria principal durante la ejecución. Esto es posible por la combinación de la traducción dinámicas direcciones en tiempo de ejecución y el uso de una tabla de páginas o de segmentos. Volviendo sobre la avance comentado, si estas dos características están presentes, no será necesario que todas las páginas o todos los segmentos de un proceso estén en la memoria durante la ejecución. Si tanto el fragmento (página o segmento) que contiene la siguiente instrucción a leer como la parte contiene los próximos datos a acceder están en la memoria principal, la ejecución podrá continuar al menos por un tiempo. 54 Arquitectura y programación de ordenadores A continuación se verá cómo conseguirlo. Supóngase que se trae un proceso a la memoria en momento dado. El sistema operativo comienza trayendo sólo unos pocos fragmentos, incluido el fragmento que contiene el comienzo de programa. Si llamará conjunto residente del proceso a la parte de un proceso que está realmente en la memoria principal. Cuando el proceso se ejecuta, todo irá perfectamente mientras todas las referencias a la memoria estén en posiciones que pertenezca al conjunto residente. A través de la tabla de páginas o de segmentos, el procesador siempre es capaz de determinar si esto es así. Se procesador encuentra una dirección lógica que no está en la memoria principal, genera una interrupción que indica un fallo de acceso a memoria. El sistema operativo pone al proceso interrumpido en estado bloqueado y toma el control. Para que la red ejecución de este proceso siga más tarde, el sistema operativo necesita traer a la memoria principal el fragmento de proceso que contiene la dirección lógica que provocó el fallo de acceso. Para ello el sistema operativo emite una solicitud de lectura de entrada salida al disco. Después de haber emitido esta solicitud, el sistema puede expedir otro proceso para que se ejecute mientras se realiza la operación de E/S. Una vez que el fragmento deseado se ha traído a la memoria principal y se ha emitido la interrupción de entrada salida, se devuelve el control al sistema operativo, que coloca el proceso afectado en el estado de listo. Ahora bien, esto puede llevar a cuestionarse la eficiencia de esta operación en la cual un proceso se puede estar ejecutando y ser interrumpido sin otra razón que un fallo en la carga de todos los fragmentos necesarios para el proceso. Pero las implicaciones de esta nueva estrategia, son sorprendentes: 1. Se pueden mantener más procesos en la memoria principal. Puesto que se van a cargar sólo algunos fragmentos de un proceso particular, habrá sitio para más procesos. Esto conduce a una utilización más eficiente del procesador, puesto que es más probable que, por lo menos, uno de los numerosos procesos esté en estado listo en un instante determinado. 2. Es posible que un proceso sea más grande que toda la memoria principal. Se elimina así una de las limitaciones más notorias de la programación. Sin el esquema que se ha 55 Arquitectura y programación de ordenadores expuesto, un programador debe ser consciente de cuanta memoria tiene disponible. Si programa que está escribiendo es demasiado grande, se debe idear una forma de estructurar el programa en fragmentos que puedan cargarse de forma separada con algún tipo de estrategia de superposición. Con una memoria virtual basada en la paginación o segmentación, este trabajo queda para el sistema operativo y el hardware. En lo que atañe al programador, trabaja con una memoria enorme, dependiendo del tamaño del almacenamiento en el disco. El sistema operativo cargará automáticamente en la memoria principal los fragmentos de un proceso cuando los necesite. 3.3 SEGURIDAD Y PROTECCIÓN DE LA INFORMACIÓN Las sociedades avanzadas de fin de este siglo son denominadas frecuentemente sociedades de la información, pues el volumen de datos que es procesado, almacenado y transmitido es inconmensurablemente mayor que es cualquier época pretérita. Además, no sólo el volumen, sino la importancia de esta información para el desarrollo económico y social, no tiene ningún parangón con la que tuvo en el pasado. De hecho, en la actualidad, las organizaciones consideran que la información es un bien más de su activo y, en muchos casos, prioritario sobre los restantes. Pero gran parte de esos datos que nosotros, o las entidades de nuestra sociedad, manejamos, han sido tratados, sea durante su proceso, o almacenamiento, o transmisión, mediante las llamadas tecnologías de la información,entre las que ocupa un lugar focal la informática. Consiguientemente, la seguridad de las tecnologías de información, y por ende las informática, se convierte en un tema de crucial importancia para el continuo y espectacular progreso de nuestra sociedad, e incluso para su propia supervivencia. Por otro lado, la eclosión en los últimos años de las redes informáticas y fundamentalmente de Internet, ha sido el factor fundamental que ha hecho que la Seguridad Informática cobrase una importancia vital en el uso de sistemas informáticos conectados. Desde el momento en que nuestro ordenador se conecta a Internet, se abren ante nosotros toda una nueva serie de posibilidades, sin embargo éstas traen consigo toda una serie de nuevos y en ocasiones complejos tipos de ataque. Más aun, mientras en un ordenador aislado el posible origen de los 56 Arquitectura y programación de ordenadores ataques es bastante restringido, al conectarnos a Internet, cualquier usuario de cualquier parte del mundo puede considerar nuestro sistema un objetivo apetecible. Existe un acuerdo y conciencia general sobre la importancia de la Seguridad de los Sistemas de Información (SSI). La SSI está relacionada con la disponibilidad, confidencialidad e integridad de la información tratada por los ordenadores y las redes de comunicación. Se usan comúnmente otros términos que en esencia tienen el mismo significado, tales como seguridad de la información, seguridad de los ordenadores, seguridad de datos o protección de la información, pero en aras de la consistencia, usaremos el término Seguridad de los Sistemas de Información en las páginas siguientes. Los objetivos fundamentales del presente tema son los siguientes: • Introducir el concepto de Sistema de Información, sus principales componentes y tipos de información manejados. • Definir los conceptos básicos involucrados en la seguridad informática como son la confidencialidad, integridad y disponibilidad. Definir cuales son las principales amenazas y vulnerabilidades de un sistema informático, así como los distintos tipos de medidas que podemos utilizar para prevenirlas. • Definir que se entiende por política de seguridad, cómo se fija y cuales son sus principales contenidos. • Introducir algunos principios básicos que subyacen en la aplicación de cualquier política de seguridad informática. 3.3.1 Conceptos básicos Entendemos por información el conjunto de datos que sirven para tomar una decisión. En consecuencia, su necesidad es evidente tanto en la planificación estratégica a largo plazo como en la fijación de estándares para la planificación a corto. La información también es necesaria para el estudio de las desviaciones y de los efectos de las acciones correctoras; es un componente vital para el Control. En cuanto a su implantación, se puede hablar de: • Subsistema formalizado: Normas, procedimientos e información de negocio. • Subsistema no formalizado: Flujos de información que no pasan por el sistema de información formalizado (rumores, charlas informales, llamadas telefónicas, etc.). El sistema informático es un subconjunto del subsistema formalizado, con distinto grado de cobertura. Por otra parte, se puede ver el sistema informático como el conjunto de los recursos técnicos (máquinas y utensilios), financieros (ingresos, gastos y patrimonio) y humanos 57 Arquitectura y programación de ordenadores (plantilla de informáticos y personal auxiliar), cuyo objetivo consiste en el almacenamiento, procesamiento y transmisión de la información de la empresa. 3.3.2. Aspectos clave en la SSI Debido a la difusión de las tecnologías de la información, la mayoría de las organizaciones actuales están expuestas a una serie de riesgos derivados de una protección inadecuada o inapropiada de la información o de sus sistemas de tratamiento. Apuntaremos sólo dos ejemplos de esta vulnerabilidad creciente. Primero, con la gran expansión del uso de ordenadores personales se ha magnificado el problema de la SSI, debido sobre todo a la carencia de controles de seguridad básicos en este tipo de sistemas. En segundo lugar, la evolución hacia entornos con acceso global y múltiple, con un aumento de la conectividad entre organizaciones distintas, plantea retos importantes a la gestión de la seguridad. Los riesgos fundamentales asociados con la incorrecta protección de la información son: • Revelación a personas no autorizadas • Inexactitud de los datos • Inaccesibilidad de la información cuando se necesita. Estos aspectos se relacionan con las tres características que debe cubrir un SI seguro: confidencialidad, integridad y disponibilidad. Así pues, preservar estas tres características de la información constituye el objetivo de la seguridad. Los problemas técnicos, las amenazas ambientales, las condiciones de instalación desfavorables, los usuarios, la situación política y social, son otros tantos factores susceptibles de poner en peligro el buen funcionamiento de los SI. Las amenazas a los SI van desde desastres naturales tales como inundaciones, accidentes o incendios, hasta abusos deliberados como fraudes, robos, virus, con un origen tanto interno como externo. Aunque se pueda pensar que el problema de la seguridad de los SI está sobredimensionado, muchos intereses no son nunca detectados, o se ocultan por los gestores porque muestran fallos o debilidades de los procedimientos de seguridad, existiendo una natural resistencia en informar de los mismos a personas ajenas. 58 Arquitectura y programación de ordenadores 3.3.3 Seguridad Informática No existe una definición estricta de lo que se entiende por seguridad informática, puesto que ésta abarca múltiples y muy diversas áreas relacionadas con los SI. Áreas que van desde la protección física del ordenador como componentes hardware, de su entorno, hasta la protección de la información que contiene o de las redes que lo comunican con el exterior. Tampoco es único el objetivo de la seguridad. Son muy diversos tipos de amenazas contra los que debemos protegernos. Desde amenazas físicas, como los cortes eléctricos, hasta errores no intencionados de los usuarios, pasando por los virus informáticos o el robo, destrucción o modificación de la información. No obstante sí hay tres aspectos fundamentales que definen la seguridad informática: la confidencialidad, la integridad y la disponibilidad. Dependiendo del tipo de sistema informático con el que tratemos (militar, comercial, bancario, ...), el orden de importancia de estos tres factores es diferente, e incluso entran en juego otros elementos como la autenticidad o el no repudio. El enfoque de la política de seguridad y de los mecanismos utilizados para su implementación está influido por el más importante de los tres aspectos. Estos aspectos también pueden entenderse como metas u objetivos. Definición operacional: Un ordenador es seguro si podemos contar con que su hardware y su software se comporten como se espera de ellos.