Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
FACULTAD DE INGENIERÍA HERRAMIENTA PARA LA DETECCIÓN Y DESINFECCIÓN DE GUSANOS INFORMÁTICOS T E S I S QUE PARA OBTENER EL TÍTULO DE INGENIERO EN COMPUTACIÓN PRESENTAN: JOSÉ ROBERTO SÁNCHEZ SOLEDAD VLADIMIR MEDINA GARCÍA DIRECTORA DE TESIS: M.C. MA. JAQUELINA LÓPEZ BARRIENTOS MÉXICO, D. F. 2007 UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO UNAM – Dirección General de Bibliotecas Tesis Digitales Restricciones de uso DERECHOS RESERVADOS © PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL Todo el material contenido en esta tesis esta protegido por la Ley Federal del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). El uso de imágenes, fragmentos de videos, y demás material que sea objeto de protección de los derechos de autor, será exclusivamente para fines educativos e informativos y deberá citar la fuente donde la obtuvo mencionando el autor o autores. Cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por el respectivo titular de los Derechos de Autor. Agradecimientos/Dedicatorias Vladimir Medina García A mi madre por ser la persona más importante durante toda mi vida y apoyarme en mi carrera por alcanzar esta meta de mi vida, no existen palabras para expresar el agradecimiento que le tengo; se que soy muy poco expresivo, pero ella sabe que es todo para mi y que todo lo hago por y para ella. A mi familia en general, por haberme apoyado, cada quien a su manera, en alcanzar y superar esta meta de mi vida. A la Facultad de Ingeniería y a todos los maestros que tuve durante mi carrera por haber contribuido a mi formación académica profesional, muchas gracias. A la M.C. Ma. Jaquelina López Barrientos por habernos apoyado para el desarrollo de este proyecto de Tesis, a pesar de todo el tiempo que nos llevo. Agradecimientos/Dedicatorias José Roberto Sánchez Soledad A mis padres, por apoyarme y creer en mi a lo largo de todo este tiempo. A mis Hermanos, Guadalupe y Jesús por su afecto y comprensión en todo momento. A Maribel, por dar sentido a mi vida. A la Maestra Jaqui, que siempre ha sido un ejemplo a seguir. Agradecimientos/Dedicatorias Generales A la M.C. Ma. Jaquelina López Barrientos por compartir sus conocimientos y guiarnos a lo largo de este trabajo. A nuestros Sinodales por su tiempo y dedicación. Índice Introducción ............................................................................................................................................................. 1 Capítulo 1. Antecedentes........................................................................................................................................ 4 � 1.1 Historia ............................................................................................................................................................... 5 1.2 Concepto de seguridad.................................................................................................................................... 6 1.2.1 Concepto de Seguridad Informática....................................................................................................... 6 A) Distinción entre amenaza y ataque........................................................................................................ 7 B) ¿Qué queremos proteger?...................................................................................................................... 7 C) ¿De qué lo queremos proteger? ............................................................................................................ 8 D) ¿Cómo lo podemos proteger? .............................................................................................................. 11 1.2.2 Seguridad en Internet............................................................................................................................ 12 A) Vulnerabilidades en Internet.................................................................................................................. 13 1.2.3 Gusanos. .................................................................................................................................................. 15 1.3 Sistemas Operativos ....................................................................................................................................... 16 1.3.1 Servicios del sistema operativo............................................................................................................. 17 1.3.2 Estructura de los sistemas operativos ................................................................................................. 17 A) Administración de memoria .................................................................................................................. 17 B) Administración de procesos ................................................................................................................. 18 C) Administración del almacenamiento secundario................................................................................ 18 D) Administración de Archivos .................................................................................................................. 19 E) Sistema de protección............................................................................................................................ 19 F) Sistema distribuido................................................................................................................................. 19 G) Sistema intérprete de comandos .......................................................................................................... 19 H) Llamadas al sistema............................................................................................................................... 20 I) Manipulación de archivos ....................................................................................................................... 21 1.3.3 Sistemas Operativos más populares .................................................................................................... 21 A) Microsoft Windows................................................................................................................................. 22 B) Unix .......................................................................................................................................................... 22 1.4 Lenguajes de programación........................................................................................................................... 23 1.4.1 Lenguaje C ................................................................................................................................................ 24 1.4.2 Lenguaje Perl............................................................................................................................................ 25 1.4.3 WMI (Windows Management Instrumentation) ..................................................................................... 25 1.4.4 Lenguaje C# ............................................................................................................................................. 27 1.4.5 Comparación de lenguajes ..................................................................................................................... 27 Capítulo2. Gusanos y Vulnerabilidades .............................................................................................................. 29 2.1 Gusanos Informáticos..................................................................................................................................... 30 2.1.1 Tipos deGusanos .................................................................................................................................... 31 2.2 Vulnerabilidades .............................................................................................................................................. 33 2.2.1 Clasificación por tipo de Vulnerabilidad................................................................................................ 33 A) Vulnerabilidades de desbordamiento de pila (buffer overflow). ........................................................ 33 B) Vulnerabilidades de condición de carrera (Race condition)............................................................... 34 C) Vulnerabilidades de error de formato de cadena (format string bugs). ............................................ 34 D) Vulnerabilidades de Cross Site Scripting (XSS). ................................................................................. 34 E) Vulnerabilidades de inyección de código SQL (SQL injection).......................................................... 34 F) Vulnerabilidades de inyección de caracteres (CRLF).......................................................................... 35 2.2.2 Clasificación por Sistema Operativo...................................................................................................... 35 2.2.3 Clasificación por fabricante de Software............................................................................................... 41 2.2.4 Clasificación por Rango de Explotación ............................................................................................... 42 2.2.5 Clasificación por Tipo de Gravedad....................................................................................................... 42 2.2.6 Clasificación por Tipo de Pérdida .......................................................................................................... 43 2.2.7 Clasificación por Origen de Vulnerabilidad........................................................................................... 43 2.2.8 Clasificación por Componentes Expuestos.......................................................................................... 45 Capítulo 3. Análisis y diseño................................................................................................................................ 46 3.1 Análisis ............................................................................................................................................................. 47 3.1.1 Registro de Windows............................................................................................................................... 47 A) Diferencias entre Regedit.exe y Regedt32.exe..................................................................................... 47 B) Descripción de los valores del registro ................................................................................................ 48 3.1.2 Archivos de inicio del Sistema ............................................................................................................... 51 3.1.3 Procesos ................................................................................................................................................... 53 3.1.4 Servicios ................................................................................................................................................... 55 3.1.5 Validación de los archivos. ..................................................................................................................... 56 A) Funciones Hash....................................................................................................................................... 56 3.1.6 Redes......................................................................................................................................................... 57 A) Redes de computadoras......................................................................................................................... 57 B) Modelo OSI............................................................................................................................................... 59 C) Protocolos de red .................................................................................................................................... 61 D) Sistema de detección de intrusos ......................................................................................................... 63 E) Puertos .................................................................................................................................................... 64 1. Socket................................................................................................................................................... 64 2. Detección de puertos.......................................................................................................................... 65 3. Escáner de puertos............................................................................................................................. 66 3.1.7 Métodos de Cifrado.................................................................................................................................. 68 3.1.8 Bases de Datos......................................................................................................................................... 69 A) Clasificación de las Bases de Datos ..................................................................................................... 69 B) Modelos de base de datos...................................................................................................................... 70 C) Normalización de Bases de Datos......................................................................................................... 72 3.2 Diseño............................................................................................................................................................... 74 3.2.1 Función para buscar llaves..................................................................................................................... 74 3.2.2 Función para eliminar llaves................................................................................................................... 74 3.2.3 Función para buscar procesos............................................................................................................... 74 3.2.4 Función para matar procesos................................................................................................................. 75 3.2.5 Función para buscar puertos.................................................................................................................. 75 3.2.6 Función para matar puertos.................................................................................................................... 75 3.2.7 Función para obtener el MD5 de un archivo ......................................................................................... 75 3.2.8 Función para obtener el tamaño de archivos ....................................................................................... 76 3.2.9 Función para buscar archivos ................................................................................................................ 76 3.2.10 Función para eliminar archivos ............................................................................................................ 76 3.2.11 Función para buscar servicios ............................................................................................................. 76 3.2.12 Función para detener servicios ............................................................................................................77 3.2.13 Función para obtener información del sistema .................................................................................. 77 3.2.14 Función para crear un archivo HTML.................................................................................................. 78 3.2.15 Función para cerrar un archivo HTML ................................................................................................. 78 3.2.16 Diseño de la Base de Datos .................................................................................................................. 78 3.2.17 Interfaz de usuario ................................................................................................................................. 80 3.2.18 Software de instalación ......................................................................................................................... 81 Capítulo 4. Desarrollo............................................................................................................................................ 82 4.1 Software utilizado para la elaboración de la herramienta. .......................................................................... 83 4.1.1 WMI ............................................................................................................................................................ 83 4.1.2 Visual Studio............................................................................................................................................. 83 4.1.3 Md5sum..................................................................................................................................................... 84 4.1.4 Netstat ....................................................................................................................................................... 84 4.2 Estructura de las funciones elaboradas ....................................................................................................... 85 4.2.1 Función busca_llave( )............................................................................................................................. 85 4.2.2 Función elimina_llave()............................................................................................................................ 85 4.2.3 Función busca_proceso()........................................................................................................................ 86 4.2.4 Función mata_proceso().......................................................................................................................... 86 4.2.5 Función busca_puerto() .......................................................................................................................... 87 4.2.6 Función cierra_puerto() ........................................................................................................................... 87 4.2.7 Función obtener_md5() ........................................................................................................................... 88 4.2.8 Función tamano_archivo() ...................................................................................................................... 88 4.2.9 Función busca_archivo()......................................................................................................................... 89 4.2.10 Función elimina_archivo()..................................................................................................................... 89 4.2.11 Función busca_servicio() ...................................................................................................................... 90 4.2.12 Función detener_servicio() ................................................................................................................... 90 4.2.13 Función info_sistema() .......................................................................................................................... 91 4.2.14 Función crea_html() ............................................................................................................................... 92 4.2.15 Función cierra_html()............................................................................................................................. 92 4.3 Creación de la base de datos ......................................................................................................................... 93 4.4 Creación de la interfaz de usuario ................................................................................................................. 93 4.4.1 Seguridad interna de la herramienta..................................................................................................... 97 4.4.2 Ejecución de programa de WMI............................................................................................................ 99 4.4.3 Resultados obtenidos del análisis ....................................................................................................... 104 4.5 Creación del instalador de la herramienta.................................................................................................. 104 4.6 Proceso de ejecución interna de la herramienta........................................................................................ 106 Capítulo 5. Pruebas y Estadísticas .................................................................................................................... 108 5.1 Ambientes controlados................................................................................................................................. 109 5.1.1 Windows 2000......................................................................................................................................... 110 A) Instalación de la herramienta............................................................................................................... 110 B) Desempeño de ejecución ..................................................................................................................... 112 C) Fallas encontradas ................................................................................................................................ 113 D) Estadísticas............................................................................................................................................ 113 5.1.2 Windows XP............................................................................................................................................ 114 A) Instalación de la herramienta............................................................................................................... 114 B) Desempeño de ejecución ..................................................................................................................... 114 C) Fallas encontradas ................................................................................................................................ 115 D) Estadísticas............................................................................................................................................ 115 5.1.3 Windows Vista ........................................................................................................................................ 115 A) Instalación de la herramienta............................................................................................................... 116 B) Desempeño de ejecución ..................................................................................................................... 116 C) Fallas encontradas ................................................................................................................................ 116 D) Estadísticas............................................................................................................................................117 5.2 Ambientes Reales.......................................................................................................................................... 117 5.2.1 Windows 2000......................................................................................................................................... 117 A) Estadísticas............................................................................................................................................ 118 5.2.2 Windows XP............................................................................................................................................ 118 A) Estadísticas............................................................................................................................................ 119 5.2.3 Windows Vista ........................................................................................................................................ 120 A) Estadísticas............................................................................................................................................ 120 � Conclusiones ....................................................................................................................................................... 122 Diccionario de Términos..................................................................................................................................... 125 Bibliografía .......................................................................................................................................................... 135 � � � � � INTRODUCCIÓN Introducción 2 Introducción Hoy en día la seguridad informática en los equipos de cómputo ha tomado un gran auge; todos aquellos que hacen uso de estos equipos, desde las grandes compañías nacionales e internacionales que contratan empresas especializadas en la seguridad para proteger sus equipos, pasando por medianas y pequeñas empresas que buscan software que les ayude a este propósito, llegando inclusive a los usuarios particulares que se ven en la necesidad de buscar herramientas de software de bajo o ningún costo, debido a esto hemos visto la necesidad de crear una herramienta eficaz que se encuentre al alcance de cualquier tipo de usuario, incluyendo a los particulares; y que les ayude a combatir y protegerse de los distintos ataques a los que pueden estar expuestos. Los ataques a los que se puede ver comprometido todo usuario son: Spyware: software espía que tiene la capacidad de auto instalarse en las computadoras personales de los usuarios, con objeto de conocer su identidad y monitorear el comportamiento del equipo o los hábitos de navegación en Internet. Virus: programas informáticos o secuencias de comandos que intentan propagarse sin el consentimiento ni conocimiento del usuario. Algunas de sus características principales son: • Son archivos ejecutables, imágenes, hojas de cálculo o documentos. • No se auto reproducen por sí mismos. • Requieren de la intervención del usuario para ejecutarse. • Realizan una acción maliciosa. Malware: programa o archivo dañino para el ordenador, está diseñado para insertar virus, gusanos, troyanos o spyware intentando conseguir algún objetivo, como podría ser el de recoger información sobre el usuario. Caballo de Troya: También llamado comúnmente como Troyano. Programa de computadora que aparenta tener una función útil, pero que contiene código posiblemente malicioso para evadir mecanismos de seguridad, a veces explotando accesos legítimos en un sistema. Gusanos: utilizan vulnerabilidades (también llamados huecos de seguridad) en el sistema operativo (como por ejemplo equipos sin actualización tanto en el sistema operativo, como en programas) para poder infectarlo. Una vez que un gusano ha infectado el sistema, éste modifica ciertos parámetros en el mismo con el propósito de asegurarse de iniciar su actividad maliciosa cada vez que el usuario reinicie su equipo y para detener el funcionamiento del software de seguridad instalado como los antivirus y firewalls (programas que controlan el acceso de las conexiones entrantes) con el propósito de evitar su detección. Ya en el sistema, el gusano de Internet intenta propagarse a otros equipos que presenten la misma vulnerabilidad, a través de ciertas rutinas programadas en el mismo. Estas rutinas consisten en generar direcciones IP (la forma en como se identifican los equipos en una red) de forma aleatoria y lanzar hacia ellas el código malicioso del gusano. Introducción 3 Los gusanos pueden estar diseñados para realizar ciertas actividades maliciosas, por ejemplo, una vez que se han infectado un gran número de sistemas con un gusano, éstos podrían lanzar un ataque contra algún sitio Web en particular. Estos ataques podrían ser los llamados Ataques de Negación de Servicio Distribuido o DDoS que tienen como propósito saturar los servicios de Internet proporcionados por alguna organización (servidores de correo electrónico, servidores de páginas Web, etcétera.). A los gusanos se les considera una subclase de los virus y son conocidos también por su término en inglés Worm. Los gusanos buscan propagarse lo más rápido posible tratando de infectar el mayor número posible de equipos, lo que tiene como consecuencia el colapso de las comunicaciones en Internet. Debido a sus características de auto propagación y forma de ataque es de primordial importancia contar con alguna herramienta que mantenga a los sistemas lo más actualizados y protegidos posibles para contrarrestar los ataques de estos peligrosos gusanos. Por ello, el objetivo primordial del presente trabajo de tesis es dotar a los usuarios, de una herramienta basada en Windows Management Instrumentation que le proporcione ayuda para: – Escanear su equipo en busca de posibles gusanos – Proteger su equipo de amenazas actuales y futuras por parte de los gusanos – Combatir las distintas intrusiones de gusanos que puedan ocurrir en sus equipos – Eliminar todo aquello que haya sido introducido por un gusano – Poder actualizar dicha herramienta para que ésta no quede obsoleta ni pierda fuerza. Por lo que en el capítulo 1 se presentan una serie de antecedentes referentes a la seguridad informática, a los sistemas operativos y a los lenguajes de programación; en el capítulo 2 se da una descripción de los diferentes tipos de gusanos informáticos conocidos, así como de las vulnerabilidades que éstos utilizan para su propagación; en el capítulo 3 se hace mención de conceptos referentes al análisis de la herramienta desarrollada, además del diseño detallado de la misma; en el capítulo 4 se describe el proceso llevado a cabo para la elaboración de la herramienta con base en el análisis y diseño previos; en el capítulo 5 se vierten las pruebas realizadas de la herramienta sobre distintos sistemas operativos de Microsoft haciendo uso de gusanos informáticos reales y se muestran las estadísticas obtenidas de dichas pruebas; finalmente se definen las conclusiones correspondientes al proyecto de Tesis con base en los objetivos planteados al principio del mismo y las perspectivas a futuro. Capítulo 1. Antecedentes 1.1 Historia I. ANTECEDENTES En este capítulo se abordan temas conceptuales referentes a la seguridad informática con un breve preludio histórico de la misma, así como definiciones funcionales de los sistemas operativos y descripción de algunos lenguajes de programación útiles para el desarrollo de la herramienta. Capítulo 1. Antecedentes 5 1.1 Historia Hasta finales de 1988 muy poca gente tomaba en serio el tema de la seguridad en redes de computadoras de propósito general. Mientras que por una parte Internet iba creciendo exponencialmente con redes importantes que se adherían a ella, como Bitnet o Hepnet; por otra parte, el auge de la informática de consumo (hasta la décadade los ochenta muy poca gente contaba con una computadora y un módem en casa) unido a factores menos técnicos iba produciendo un aumento espectacular en el número de piratas informáticos. Sin embargo, el 22 de noviembre de 1988 Robert T. Morris protagonizó el primer gran incidente de la seguridad informática: uno de sus programas se convirtió en el famoso Worm o gusano de Internet. Miles de ordenadores conectados a la red se vieron inutilizados durante días, y las pérdidas se estiman en millones de dólares. Desde ese momento el tema de la seguridad en sistemas operativos y redes ha sido un factor a tener muy en cuenta por cualquier responsable o administrador de sistemas informáticos. Poco después de este incidente, y a la vista de los potenciales peligros que podía entrañar un fallo o un ataque a los sistemas informáticos estadounidenses (en general, a los sistemas de cualquier país) la agencia DARPA (Defense Advanced Research Projects Agency) creó el CERT (Computer Emergency Response Team), un grupo formado en su mayor parte por voluntarios calificados de la comunidad informática, cuyo objetivo principal es facilitar una respuesta rápida a los problemas de seguridad que afecten a hosts de Internet. Desde la creación del primer CERT cada día se hace patente la preocupación por los temas relativos a la seguridad en la red y sus equipos, y también se hace patente la necesidad de esta seguridad. Los piratas de antaño casi han desaparecido, dando paso a nuevas generaciones de intrusos que forman grupos como Chaos Computer Club o Legion of Doom, organizan encuentros como el español Iberhack, y editan revistas o magazines electrónicos (2600: The Hacker’s Quartely o Phrack son quizás las más conocidas, pero no las únicas). Todo esto con un objetivo principal: compartir conocimientos. Si hace unos años cualquiera que quisiera adentrarse en el mundo underground casi no tenía más remedio que conectar a alguna BBS (Bulletin Board System) donde se tratara el tema, generalmente con una cantidad de información muy limitada, hoy en día tiene a su disposición gigabytes de información electrónica publicada en Internet; cualquier aprendiz de pirata puede conectarse a un servidor Web, descargar un par de programas y ejecutarlos contra un servidor desprotegido y con un poco de (mala) suerte, esa misma persona puede conseguir un control total sobre un servidor, probablemente desde su PC y con una comprensión básica de lo que se esté realizando. Aunque sin grandes conocimientos técnicos, tienen a su disposición multitud de programas y documentos sobre seguridad (algo que los piratas de los ochenta apenas podían imaginar), además de ordenadores potentes y conexiones a Internet baratas. Por si esto fuera poco, se ven estimulados a través de sistemas de conversación como el IRC (Internet Relay Chat), donde en canales como #hack o #hackers presumen de sus logros ante sus colegas. A la vista de lo comentado, parece claro que la seguridad de los equipos ha de ser algo a considerar en cualquier red. Diariamente por cualquiera de ellas circulan todo tipo de datos, entre ellos muchos que se podrían catalogar como confidenciales (nóminas, expedientes, presupuestos, entre otros) o al menos como privados (correo electrónico, proyectos de investigación, artículos a punto de ser publicados, etcétera.). Independientemente de la etiqueta que cada usuario de la red quiera colgarle a sus datos, parece claro que un fallo de Capítulo 1. Antecedentes 6 seguridad de un equipo o de la propia red no beneficia a nadie; según el Computer Security Institute, en su encuesta de 1998, las pérdidas económicas ocasionadas por delitos relacionados con nuevas tecnologías (principalmente accesos internos no autorizados) sólo en Estados Unidos aumentan de forma espectacular año tras año, alcanzando incluso cotas del 800% 1. 1.2 Concepto de seguridad Se puede entender como seguridad una característica de cualquier sistema (informático o no) que indica que ese sistema está libre de todo peligro, daño o riesgo, y que es en cierta manera infalible. Como esta característica, particularizando para el caso de sistemas operativos o redes de computadores, es muy difícil de conseguir (según la mayoría de expertos, imposible), se suaviza la definición de seguridad y se pasa a hablar de fiabilidad (probabilidad de que un sistema se comporte tal y como se espera de él) mas que de seguridad; por tanto, se habla de sistemas fiables en lugar de hacerlo de sistemas seguros, ya que no se puede garantizar el 100% de su seguridad. A grandes rasgos se entiende que mantener un sistema seguro (o fiable) consiste básicamente en garantizar tres aspectos: confidencialidad, integridad y disponibilidad. Algunos estudios integran la seguridad dentro de una propiedad más general de los sistemas, la confiabilidad, entendida como el nivel de calidad del servicio ofrecido. Consideran la disponibilidad como un aspecto al mismo nivel que la seguridad y no como parte de ella, por lo que dividen esta última en sólo las dos facetas restantes, confidencialidad e integridad. ¿Qué implican cada uno de los tres aspectos? La confidencialidad dice que los objetos de un sistema han de ser accedidos únicamente por elementos autorizados a ello, y que esos elementos autorizados no van a convertir esa información en disponible para otras entidades; la integridad significa que los objetos sólo pueden ser modificados por elementos autorizados, y de una manera controlada, y la disponibilidad indica que los objetos del sistema tienen que permanecer accesibles a elementos autorizados; generalmente se considera que tienen que existir los tres aspectos descritos para que haya seguridad. 1.2.1 Concepto de Seguridad Informática El concepto de seguridad se refiere a todo tipo de precauciones y protecciones que se llevan a cabo para evitar cualquier acción que comprometa a la información, considerando que se entiende por información a todo mensaje (conjunto de datos) que: al receptor le interese, le entienda o lo ignore antes de recibirlo. Por consiguiente, el término seguridad de la información se refiere a la prevención y a la protección, a través de ciertos mecanismos, para evitar que ocurra de manera accidental o intencional, la transferencia, modificación, fusión o destrucción no autorizada de la información. Así, es necesario considerar dos nuevos conceptos debido a que la seguridad de la información así lo requiere: seguridad informática y seguridad de la red. Con la introducción 1 Fuente: http://gocsi.com/press/prelea12.jhtml Capítulo 1. Antecedentes 7 de la computadora, la necesidad de herramientas automatizadas para proteger la información almacenada en la computadora se volvió más evidente, por lo que la seguridad informática es el nombre genérico dado a una colección de herramientas diseñadas para proteger datos y detener a los perpetradores, es decir, es la protección de los sistemas de cómputo para evitar ataques de confidencialidad, integridad o disponibilidad. Por otro lado cuando la necesidad de comunicación entre los equipos de cómputo se vio cubierta con la llegada de las redes, tanto internas (LAN, Local Area Network) como a gran escala (Internet), se hizo patente que la protección de la información almacenada ya no era suficiente, sino que también se requería de esa protección durante la comunicación; por tanto, la seguridad de la red se considera como la capacidad de mantener la integridad de la información que viaja a través de las redes. A) Distinción entre amenaza y ataque Una amenaza es un posible ataque en potencia, ya que todo el tiempo se encuentra la posibilidad de atacar, la mayoría de las amenazas no las podemos controlar, ya que dependen de factores externos o internos; así, se consideran amenazas internas a todas aquellas que se encuentran dentro de nuestro entorno de trabajo, y amenazas externas a todas las queafectan directamente al sistema. En tanto que se puede considerar un ataque a toda aquella acción que afecta nuestro sistema de manera intencional, es decir cuando una amenaza es llevada a la acción, en la mayoría de las veces con un fin específico. B) ¿Qué queremos proteger? Los tres elementos principales a proteger en cualquier sistema informático son: A. Software. Conjunto de programas lógicos que hacen funcional al hardware, tanto sistemas operativos como aplicaciones. B. Hardware. Conjunto formado por todos los elementos físicos de un sistema informático, como CPUs, terminales, cableado, medios de almacenamiento secundario (Cintas, CD- ROMs, diskettes, etcétera) o tarjetas de red. C. Datos. Conjunto de información lógica que maneja el software y el hardware, como por ejemplo paquetes que circulan por un cable de red o entradas de una base de datos. Habitualmente los datos constituyen el principal elemento de los tres a proteger, ya que es el más amenazado y seguramente el más difícil de recuperar. Contra cualquiera de los tres elementos descritos anteriormente (pero principalmente sobre los datos) se pueden realizar multitud de ataques o, dicho de otra forma, están expuestos a diferentes amenazas. Generalmente, la taxonomía más elemental de estas amenazas las divide en cuatro grandes grupos: interrupción, intercepción, modificación y fabricación. Un ataque se clasifica como interrupción si hace que un objeto del sistema se pierda, quede inutilizable o no disponible. Se tratará de una intercepción si un elemento no autorizado consigue un acceso a un determinado objeto del sistema, y de una modificación si además de Capítulo 1. Antecedentes 8 conseguir el acceso consigue modificar el objeto; algunos autores consideran un caso especial de la modificación: la destrucción, entendiéndola como una modificación que inutiliza al objeto afectado. Por último, se dice que un ataque es una fabricación si se trata de una modificación destinada a conseguir un objeto similar al atacado de forma que sea difícil distinguir entre el objeto original y el ‘fabricado’. En la figura 1.1 se muestran estos tipos de ataque de una forma gráfica. A) Flujo normal de la información B) Interrupción C) Intercepción D) Modificación E) Fabricación Figura 1.1 (A) Flujo normal de información; posibles amenazas (B) Interrupción, (C) Intercepción, (D) Modificación, (E) Fabricación C) ¿De qué lo queremos proteger? A continuación se presenta una relación de las amenazas que potencialmente pueden incurrir en un ataque al sistema y que por ende son precisamente aquéllas de los cuales se desea proteger a la información. 1.- Personas La mayoría de ataques a los sistemas provienen en última instancia de personas que, intencionada o inintencionadamente, pueden causarnos enormes pérdidas. Generalmente se trata de piratas informáticos que intentan conseguir el máximo nivel de privilegio posible aprovechando alguno (o algunos) de los riesgos lógicos de los que hablaremos a continuación, especialmente agujeros del software. Los entornos de seguridad son aquellos en los cuales se tienen políticas de seguridad implantadas, además de contar con esquemas que permiten brindar una mayor seguridad a los elementos críticos, dichos entornos son un objetivo típico de los intrusos, ya sea para fisgonear, para utilizarlos como enlace hacia otras redes o simplemente por diversión. Por un lado, son redes generalmente abiertas, y la seguridad no es un factor tenido muy en cuenta Capítulo 1. Antecedentes 9 en ellas; por otro, el gran número y variedad de sistemas conectados a estas redes provoca, casi por simple probabilidad, que al menos algunos de sus equipos (cuando no la mayoría) sean vulnerables a problemas conocidos de antemano. De esta forma un atacante sólo ha de utilizar un escáner de vulnerabilidades contra el dominio completo y luego atacar mediante un simple exploit (programas utilizados para aprovechar fallos en los sistemas) a los equipos que presentan vulnerabilidades; esto convierte a las redes en un objetivo fácil y apetecible para piratas con cualquier nivel de conocimientos, desde los más novatos (y a veces más peligrosos) hasta los expertos, que pueden utilizar toda la red para probar nuevos ataques o como nodo intermedio en un ataque a otros organismos. 2.- Amenazas lógicas Bajo la etiqueta de ‘amenazas lógicas’ se encuentran todo tipo de programas que de una forma u otra pueden dañar a nuestro sistema, creados de forma intencionada para ello (software malicioso, también conocido como malware) o simplemente por error (bugs o agujeros). a) Software incorrecto Las amenazas más habituales en un sistema provienen de errores cometidos de forma involuntaria por los programadores de sistemas o de aplicaciones. Una situación no contemplada a la hora de diseñar el sistema de red. A estos errores de programación se les denomina bugs, y a los programas utilizados para aprovechar uno de estos fallos y atacar al sistema, exploits. Representan el ataque más común, ya que cualquiera puede conseguir un exploit y utilizarlo para atacar la máquina de cualquier usuario sin siquiera saber cómo funciona y sin conocimientos mínimos de programación; incluso hay exploits que dañan seriamente la integridad de un sistema (negaciones de servicio o incluso acceso con privilegios de administrador de forma remota) y están preparados para ser utilizados desde MS-DOS, con lo que cualquier pirata novato, puede utilizarlos contra un servidor y conseguir un control total de una máquina desde su PC sin saber nada del sistema atacado. b) Herramientas de seguridad Cualquier herramienta de seguridad representa un arma de doble filo: de la misma forma que un administrador las utiliza para detectar y solucionar fallos en sus sistemas o en la subred completa, un potencial intruso las puede utilizar para detectar esos mismos fallos y aprovecharlos para atacar los equipos. Pasan de ser útiles a ser peligrosas cuando las utilizan usuarios malintencionados que buscan información sobre las vulnerabilidades de un host o de una red completa. c) Puertas traseras Durante el desarrollo de aplicaciones grandes o de sistemas operativos es usual entre los programadores insertar ‘atajos’ en los sistemas de autenticación del programa o del núcleo que se está diseñando. A estos atajos se les denomina puertas traseras o Capítulo 1. Antecedentes 10 backdoors, y con ellos se consigue mayor velocidad a la hora de detectar y depurar fallos: por ejemplo, los diseñadores de un software de gestión de bases de datos en el que para acceder a una tabla se necesiten cuatro claves diferentes de diez caracteres cada una pueden insertar una rutina para conseguir ese acceso mediante una única clave ‘especial’, con el objetivo de perder menos tiempo al depurar el sistema. Algunos programadores pueden dejar estos atajos en las versiones definitivas de su software para facilitar un mantenimiento posterior, para garantizar su propio acceso, o simplemente por descuido; la cuestión es que si un atacante descubre una de estas puertas traseras (no nos importa el método que utilice para hacerlo) va a tener un acceso global a datos que no debería poder leer, lo que obviamente supone un grave peligro para la integridad del sistema y por ende de la información. d) Bombas lógicas Las bombas lógicas son partes de código de ciertos programas que permanecen sin realizar ninguna función hasta que son activadas; en ese punto, la función que realizan no es la original del programa, sino que generalmente se trata de una acción perjudicial. Los activadores más comunes de estas bombas lógicas pueden ser la ausencia o presencia de ciertos ficheros, la ejecución bajo un determinado UID o la llegada de una fecha concreta; cuando la bomba se activa va a poder realizar cualquier tarea que pueda realizar la persona que ejecutael programa; si las activa el administrador, o el programa que contiene la bomba está ejecutado a su nombre, los efectos obviamente pueden ser fatales. e) Canales cubiertos Los canales cubiertos (o canales ocultos, según otras traducciones) son canales de comunicación que permiten a un proceso transferir información de forma ilícita, tal que viole la política de seguridad del sistema; dicho de otra forma, un proceso transmite información a otros (locales o remotos) que no están autorizados a leer dicha información. f) Virus Un virus es una secuencia de código que se inserta en un fichero ejecutable denominado host, de forma que al ejecutar el programa también se ejecuta el virus; generalmente esta ejecución implica la copia del código viral o una modificación del mismo en otros programas. El virus necesita obligatoriamente un programa donde insertarse para poderse ejecutar, por lo que no se puede considerar un programa o proceso independiente. g) Gusanos Un gusano es un programa capaz de ejecutarse y propagarse por sí mismo a través de redes, en ocasiones portando virus o aprovechando bugs de los sistemas a los que conecta para dañarlos. El daño que pueden causar es muy grande: el mayor incidente Capítulo 1. Antecedentes 11 de seguridad en Internet fue precisamente el Internet Worm, un gusano que en 1988 causó pérdidas millonarias al infectar y detener más de 6000 máquinas conectadas a la red. Hemos de pensar que un gusano puede automatizar y ejecutar en unos segundos todos los pasos que seguiría un atacante humano para acceder a nuestro sistema: mientras que una persona, por muchos conocimientos y medios que posea, tardaría como mínimo varias horas en controlar una red completa (un tiempo más que razonable para detectarlo), un gusano puede hacer eso mismo en pocos minutos: de ahí su enorme peligro y sus devastadores efectos. h) Caballos de Troya Los troyanos o caballos de Troya son instrucciones escondidas en un programa de forma que éste parezca realizar las tareas que un usuario espera de él, pero que realmente ejecute funciones ocultas (generalmente en detrimento de la seguridad) sin el conocimiento del usuario; como el Caballo de Troya de la mitología griega, al que deben su nombre, ocultan su función real bajo la apariencia de un programa inofensivo que a primera vista funciona correctamente. Cuando un intruso consigue el privilegio necesario en el sistema instala troyanos para ocultar su presencia o para asegurarse la entrada en caso de ser descubierto: por ejemplo, es típico utilizar lo que se denomina un rootkit, que no es más que un conjunto de versiones troyanas de ciertas utilidades, para conseguir que cuando el administrador las ejecute no vea la información relativa al atacante, como sus procesos o su conexión al sistema. i) Programas conejo o bacterias Bajo este nombre se conoce a los programas que no hacen nada útil, sino que simplemente se dedican a reproducirse hasta que el número de copias acaba con los recursos del sistema (memoria, procesador, disco, etcétera ), produciendo una negación de servicio. Por sí mismos no hacen ningún daño interno al sistema operativo, sino que lo que realmente perjudica es el gran número de copias suyas en el sistema, que en algunas situaciones pueden llegar a provocar el alto total de la máquina. 3.- Catástrofes Las catástrofes (naturales o artificiales) son la amenaza menos probable en convertirse en ataque, pero existen. Dichas amenazas son clasificadas principalmente por su impacto en los sistemas, debido a que estas catástrofes no son controladas por los seres humanos tales como temblores, huracanes, inundaciones, entre otras. D) ¿Cómo lo podemos proteger? Primeramente es necesario entender que se requieren identificar las amenazas a las que está expuesto el sistema para entonces escribir las políticas de seguridad informática que se Capítulo 1. Antecedentes 12 requieren y entonces poder seleccionar los mecanismos de seguridad adecuados a las necesidades identificadas, así los mecanismos de seguridad; son la parte más visible de todo sistema de seguridad, y se convierten en la herramienta básica para garantizar la protección de los sistemas o de la propia red. Los mecanismos de seguridad se dividen en tres grandes grupos: • Los de prevención son aquellos que aumentan la seguridad de un sistema durante el funcionamiento normal de éste, previniendo la ocurrencia de violaciones a la seguridad; por ejemplo, el uso de cifrado en la transmisión de datos se puede considerar un mecanismo de este tipo, ya que evita que un posible atacante escuche las conexiones hacia o desde un sistema en la red. • Los de detección son aquellos que se utilizan para detectar violaciones de la seguridad o intentos de violación; ejemplos de estos mecanismos son los programas de auditoría, así como los sistemas de detección de intrusos (IDS). • Finalmente, los de recuperación son aquellos que se aplican cuando una violación del sistema se ha detectado, para retornar a éste a su funcionamiento correcto; ejemplos de estos mecanismos son la utilización de copias de seguridad o el hardware adicional. Dentro de este último grupo de mecanismos de seguridad encontramos un subgrupo denominado mecanismos de análisis forense, cuyo objetivo es el de averiguar el alcance de la violación, las actividades de un intruso en el sistema, y la puerta utilizada para entrar; de esta forma se previenen ataques posteriores y se detectan ataques a otros sistemas de nuestra red. Parece claro que, aunque los tres tipos de mecanismos son importantes para la seguridad de los sistemas, se enfatiza en el uso de mecanismos de prevención y de detección; la máxima popular ‘más vale prevenir que lamentar’ se puede aplicar a la seguridad informática: para nosotros, evitar un ataque, detectar un intento de violación, o detectar una violación exitosa en el momento que se está llevando a cabo es mucho más productivo y menos comprometedor para el sistema que restaurar el estado tras una penetración de la máquina. 1.2.2 Seguridad en Internet. Las empresas dedicadas a ofrecer acceso a Internet a través de la línea telefónica, así como otros servicios de red (principalmente, hospedaje de páginas Web) son los conocidos ISPs (Internet Service Providers); conocidos tanto por sus servicios como por su inseguridad. Si los ISPs viven justamente de permitir accesos a Internet o a sus propios servidores, parece obvio que no podrán aplicar estrictas políticas de seguridad en las máquinas: mientras que por ejemplo en una empresa el administrador puede obligar, relativamente, a sus usuarios a utilizar protocolos cifrados, si un ISP no permite acceso FTP a los clientes que deseen colgar sus páginas Web y les obliga a usar un protocolo de transferencia de archivos que aplique criptografía, es muy probable que muchos de esos clientes abandonen y se vayan a la competencia: es más fácil utilizar el FTP clásico que instalar software adicional para poder actualizar una página Web. Capítulo 1. Antecedentes 13 Con situaciones tan sencillas y comunes como las anteriores podemos hacernos una idea de la potencial inseguridad de los ISPs; se trata de problemas reales, no meramente teóricos: en Internet no es raro encontrar piratas con casi todas, o con todas, las claves de los clientes de un proveedor. A mediados de los 90’s, el número de entradas a Internet fue creciendo en un 70% cada año según OECD2 (Organization for Economic Co-operación and Development). Tan pronto como el potencial de Internet para el comercio electrónico se volvió evidente, la vulnerabilidad de Internet se convirtió en la noticia primordial. Internet conecta muchos anfitriones que están configurados y administrados de manera insegura y eso minimiza el uso de medidas para evitar cualquier ataque. Muchosde los delitos se deben a la vulnerabilidad de los proveedores, de los sistemas que no están bien configurados y de las claves de acceso por omisión o que son fáciles de adivinar. A) Vulnerabilidades en Internet. Los protocolos TCP/IP (Transmission Control Protocol/ Internet Protocol) protegen contra algunas amenazas; pero esta suite de protocolos tiene como fin enlazar computadoras que utilizan diferentes sistemas operativos, incluyendo PC, minicomputadoras y computadoras centrales sobre redes de área local y área extensa. Ahora bien, algunas sumas de comprobación se llevan a cabo como parte de este conjunto de protocolos, los cuales protegen contra las modificaciones que puedan existir en las cabeceras de los paquetes, y aún cuando en TCP la secuencia de los números protegen contra los paquetes perdidos o duplicados y otras medidas protegen contra el repudio de los paquetes, las protecciones son débiles, además TCP se encarga sólo de formar los paquetes en salida y reensamblarlos en llegada, el envío de éstos queda a cargo de IP, protocolo que se encarga de elegir la ruta más adecuada, esto es la más rápida, no la más segura, por la que los datos serán enviados. Donde el usuario no puede determinar la ruta por la que deberán transitar los paquetes, ni siquiera existe la posibilidad de especificar por dónde precisamente es que no deben pasar (por razones de seguridad), aunado a esto los paquetes IP no acarrean autenticadores de su carga de datos (una debilidad corregida en la versión 6 de IP, conocida como IPv6). No existe un lugar común para la identificación y autenticación de la información o los servicios. Para la mayoría, las aplicaciones deben realizar su propia autenticación. La autenticación del Telnet y FTP recae en las contraseñas transmitidas en el texto en claro, ambos son riesgosos para un anfitrión que no está bien asegurado. Las aplicaciones y los accesorios son más fáciles de explotar. De manera que Internet es una red inherentemente insegura, desde su surgimiento y hasta la época de su desarrollo la seguridad no era un objetivo que se requiriera y por ende que se persiguiera. Las principales vulnerabilidades son las siguientes: 1. Suplantación de IP: Muchos ataques de Internet se basan en la suplantación de IP, la cual permite que un anfitrión se disfrace como otro. 2 Fuente: http://www.oecd.org/dataoecd/34/13/31483554.pdf Capítulo 1. Antecedentes 14 Un paquete es enviado por un equipo, pero la dirección fuente en el paquete es la de otro equipo. Esto es peligroso ya que las aplicaciones comúnmente utilizan las direcciones fuente para identificar las peticiones de los equipos que son confiables (figura 1.2). De esta forma el atacante en el equipo A, de quien el destino es el equipo B, suplanta al equipo C el cual es confiable para B. Un ataque común explota una característica IP llamada encaminamiento de fuente, la cual permite al emisor de un paquete especificar su ruta y la ruta de regreso. Si la ruta es A, B, C, entonces C debe utilizar la ruta de regreso C, B, A. Para que el ataque sea exitoso, el paquete enviado desde A debe parecer que fue enviado desde C, además, si el ataque es para completar algo, la réplica de B debe dirigirse a A no a C. Primero el atacante toma control del equipo A y cambia su dirección IP a C, entonces envía un paquete a B, especificando la ruta de la fuente con A como último trayecto de la ruta. El equipo B acepta la petición como si viniera de C y reenvía su paquete hacia A. Un firewall puede proteger una red interna contra los ataques de suplantación de IP mediante el rechazo de los paquetes entrantes direccionados desde cierta fuente. Los equipos dentro del firewall no deben especificar a algún equipo externo para que sea confiable y el firewall debe rechazar cualquier paquete entrante cuya dirección fuente se encuentra dentro de la red interna. El firewall debe bloquear los paquetes salientes cuya dirección fuente no esté dentro de la red interna, esto es para evitar que se convierta en el origen de un ataque. Figura 1.2 Suplantación de IP 2. Conexiones secuestradas: un atacante que gana el control de una sesión activa gana los derechos del usuario legítimo. La autenticación y los servicios de control de acceso no son útiles ya que se toma posesión de la sesión después de la autenticación y de que el control de acceso asume que el usuario es el que está autenticado. En los sistemas UNIX en Internet el atacante penetra al sistema utilizando cualquier método y modifica el kernel para permitir el secuestro de cualquier sesión activa. 3. Ataques por husmeo: Internet ha sufrido ataques que recolectan contraseñas u otra información que puede ser utilizada por usuarios no autorizados. A estos ataques se les llama ataques por husmeo ya que utilizan herramientas que monitorean la red, también conocidas con el nombre de sniffers. El monitoreo se basa en una característica de interfaz de red llamada modo promiscuo, la cual es útil para la Capítulo 1. Antecedentes 15 administración de la red pero no para la seguridad. Una computadora cuya unidad de interfaz de red se encuentra en modo promiscuo puede leer todos los paquetes que pasan por la red. Un atacante que tome posesión de una computadora así, ejecuta un programa que captura los primeros datos transmitidos para cada sesión de la red (como el Telnet y el FTP). Los datos incluyen el nombre del equipo remoto, el nombre de la cuenta y la contraseña. 1.2.3 Gusanos. El término gusano, acuñado en 1975 en la obra de ciencia ficción de John Brunner: The Shockwave Rider, hace referencia a programas capaces de viajar por sí mismos a través de redes de computadoras para realizar cualquier actividad una vez alcanzada una máquina; aunque esta actividad no tiene por qué entrañar peligro, los gusanos pueden instalar en el sistema alcanzado un virus, atacar a este sistema como haría un intruso, o simplemente consumir excesivas cantidades de ancho de banda en la red afectada, entre otras actividades maliciosas. Aunque se trata de malware muchísimo menos habitual que por ejemplo los virus o las puertas traseras, los gusanos son una de las amenazas que potencialmente puede causar mayores daños, no debemos olvidar que el mayor incidente de seguridad de la historia fue a causa de un gusano (el famoso Worm de 1988). Antes del gusano de Robert T. Morris, existieron otros con fines muy diferentes; a principios de los setenta Bob Thomas escribió lo que muchos consideran el primer gusano informático. Este programa, denominado ‘creeper’, no estaba diseñado para dañar al sistema, sino que era utilizado en los aeropuertos por los controladores aéreos para notificar que el control de determinado avión había pasado de un ordenador a otro. Otros ejemplos de gusanos útiles fueron los desarrollados a principios de los ochenta por John Shoch y Jon Hupp, del centro de investigación de Xerox en Palo Alto, California; estos gusanos se dedicaron a tareas como el intercambio de mensajes entre sistemas o el aprovechamiento de recursos ociosos durante la noche. Todo funcionaba aparentemente bien, hasta que una mañana al llegar al centro ningún ordenador funcionó debido a un error en uno de los gusanos; al reiniciar los sistemas, inmediatamente volvieron a fallar porque el gusano seguía trabajando, por lo que fue necesario diseñar una vacuna. Éste es considerado el primer incidente de seguridad en el que entraban gusanos en juego. Sin embargo, no fue hasta 1988 cuando se produjo el primer incidente de seguridad ‘serio’ provocado por un gusano, que a la larga se ha convertido en el primer problema de seguridad informática que saltó a los medios y también en el más grave de todos los tiempos. El 2 de noviembre de ese año,Robert T. Morris saltó a la fama cuando uno de sus programas se convirtió en el primer Gusano de Internet. La principal causa del problema fue la filosofía ‘Security through Obscurity’ que muchos aún defienden hoy en día. Este joven estudiante era hijo del prestigioso científico Robert Morris, experto en Unix y seguridad, quien conocía perfectamente uno de los muchos fallos en Sendmail. No hizo público este fallo ni su solución, y su hijo aprovechó ese conocimiento para incorporarlo a su gusano. El Worm aprovechaba varias vulnerabilidades en programas como Sendmail, fingerd, rsh y rexecd para acceder a un sistema, contaminarlo, y desde él seguir actuando hacia otras máquinas. En unas horas, miles de equipos conectados a la red dejaron de funcionar, todos Capítulo 1. Antecedentes 16 presentando una sobrecarga de procesos sh (el nombre camuflado del gusano en los sistemas Unix); reiniciar el sistema no era ninguna solución, porque tras unos minutos de funcionamiento el sistema volvía a presentar el mismo problema. Fueron necesarias muchas horas de trabajo para poder detener el Worm de Robert T. Morris; expertos de dos grandes universidades norteamericanas, el MIT y Berkeley, fueron capaces de desensamblar el código y proporcionar una solución al problema. Junto a ellos, cientos de administradores y programadores de todo el mundo colaboraron ininterrumpidamente durante varios días para analizar cómo se habían contaminado y cuáles eran los efectos que el gusano había causado en sus sistemas. El día 8 de noviembre, casi una semana después del ataque, expertos en seguridad de casi todos los ámbitos de la vida estadounidense se reunieron para aclarar qué es lo que pasó exactamente, cómo se había resuelto, cuáles eran las consecuencias y cómo se podía evitar que sucediera algo parecido en el futuro; allí había desde investigadores del MIT o Berkeley hasta miembros de la CIA, el Departamento de Energía o el Laboratorio de Investigación Balística, pasando por supuesto por miembros del National Computer Security Center, organizador del evento. Esta reunión, y el incidente en sí, marcaron un antes y un después en la historia de la seguridad informática; la sociedad en general y los investigadores en particular tomaron conciencia del grave problema que suponía un ataque de esa envergadura, y a partir de ahí comenzaron a surgir organizaciones como el CERT, encargadas de velar por la seguridad de los sistemas informáticos. También se determinaron medidas de prevención que siguen vigentes hoy en día, de forma que otros ataques de gusanos no han sido tan espectaculares. 1.3 Sistemas Operativos Un sistema operativo es un conjunto de programas destinado a permitir la comunicación del usuario con la computadora y gestionar sus recursos de manera eficiente. Comienza a trabajar cuando se enciende la computadora, y gestiona el hardware de la máquina desde los niveles más básicos. Éste se encarga de reconocer dispositivos de entrada y salida que van desde el teclado, enviar mensajes a pantalla manteniendo rastro de los archivos y directorios en el disco, y controlar los dispositivos periféricos como las impresoras. Provee de una plataforma de software por encima de la cual otros programas, llamados aplicaciones, pueden ejecutarse. Las aplicaciones tienen que crearse de acuerdo a la plataforma en donde se van a ejecutar. La elección del sistema operativo, entonces, determina el tipo de uso que se le va a dar a la PC como también el tipo de aplicaciones que se puedan ejecutar. Para poder hablar más detalladamente de las características de los sistemas operativos es necesario definir los siguientes conceptos. • Programa: secuencia de instrucciones escrita en un lenguaje dado; es un concepto estático, mientras que un proceso es un concepto dinámico. Es posible que un programa sea ejecutado por varios usuarios en un sistema multiusuario, por cada una de estas ejecuciones existirá un proceso, con su contador de programa, registros, etcétera. Capítulo 1. Antecedentes 17 • Proceso: instancia de ejecución de un programa, caracterizado por su contador de programa, su palabra de estado, sus registros del procesador, su segmento de texto, pila y datos, etcétera. El sistema operativo necesita el concepto de proceso para poder gestionar el procesador mediante la técnica de multiprogramación o de tiempo compartido, de hecho, el proceso es la unidad de asignación de la CPU. 1.3.1 Servicios del sistema operativo Los sistemas operativos proporcionan servicios que permiten la interacción del usuario con el hardware, a continuación se describen brevemente algunos de ellos. • Ejecución de programas.- El sistema operativo tiene que ser capaz de cargar un programa en memoria y ejecutarlo. • Operaciones de entrada/salida.- Como un programa no puede acceder directamente a un dispositivo de E/S el sistema operativo debe proporcionarle los medios necesarios para realizarlo. • Manipulación del sistema de archivos.- El sistema operativo facilita las herramientas necesarias para que los programas puedan leer, escribir y eliminar archivos, estos servicios varían dependiendo del tipo de sistema así como de la versión del mismo. • Detección de errores.- El sistema operativo necesita constantemente detectar posibles errores. Los errores pueden producirse en el CPU, la memoria, en los dispositivos de E/S o bien en los programas que los usuarios están ejecutando. Para cada tipo de error, el sistema operativo debe adoptar la iniciativa apropiada que garantice una computación correcta y consistente. • Asignación de recursos.- Cuando hay múltiples usuarios o múltiples trabajos ejecutándose al mismo tiempo, hay que asignar recursos a cada uno de ellos. El sistema operativo se encarga de gestionar muchos tipos de recursos diferentes. 1.3.2 Estructura de los sistemas operativos Si bien no todos los sistemas operativos tienen la misma estructura, la mayoría de los sistemas operativos modernos poseen esta estructura: A) Administración de memoria Para que un proceso pueda ejecutarse debe estar ubicado en la memoria principal del ordenador. Una parte del sistema operativo se va a encargar de gestionar la memoria principal, de forma que los procesos puedan residir en la memoria sin conflictos. La gestión de la memoria implica varias tareas, una de ellas es llevar un registro de qué zonas están libres (es decir, no están siendo utilizadas por ningún proceso), y qué zonas están ocupadas por Capítulo 1. Antecedentes 18 qué procesos. Otra tarea importante surge en sistemas en los que no todos los procesos, o no todo el código y datos de un proceso, se ubican en la memoria principal. En estos sistemas, a menudo se debe pasar parte, o la totalidad del código y datos de un proceso, de memoria a disco, o viceversa; siendo el sistema operativo responsable de esta tarea. De esta forma se libera al usuario de realizar estas transferencias de información, de las cuales no es consciente. Otros dos temas importantes en la gestión de la memoria son el de la carga de los programas de disco a memoria y el de la protección. Desde el momento en que varios procesos deben compartir la memoria del ordenador surge el problema de la protección. En general, se pretende que un proceso no pueda modificar las direcciones de memoria en las que no reside. Esto es así ya que en las direcciones de memoria donde no está ubicado el proceso pueden residir otros procesos, o código o estructuras de datos del S.O. Si un proceso puede modificar indiscriminadamente la memoria, podría, por ejemplo, cambiar el valor de una dirección de memoria donde residiera una variable de otro proceso, con la consecuente ejecución incorrecta del proceso propietario de la variable. Algunos sistemas ni siquiera permiten que un proceso pueda leer las direcciones dememoria en las que no reside, con esto se consigue privacidad sobre el código y datos de los procesos. B) Administración de procesos A primera vista, la función de cambio de proceso parece sencilla. En cierto momento, un proceso que se está ejecutando se interrumpe, el sistema operativo pone a otro proceso en el estado de ejecución y pasa el control a dicho proceso. Un cambio de proceso puede suceder en cualquier instante en el que el sistema operativo gana el control de la CPU. En primer lugar, se van a tener en cuenta las interrupciones del sistema. Se pueden distinguir dos clases de interrupciones del sistema. La primera es originada por algún tipo de suceso que es externo e independiente del proceso que se está ejecutando, como la culminación de una E/S por ejemplo. La segunda tiene que ver con una condición de error o excepción generada dentro del proceso que se está ejecutando, como un intento ilegal de acceso a un fichero, una división entre cero, una instrucción máquina con código de operación no contemplado. C) Administración del almacenamiento secundario Como la memoria principal (RAM, Random Access Memory) no cuenta con la capacidad suficiente como para almacenar todos los datos y programas, la computadora posee un almacenamiento secundario para volcar los datos de memoria no utilizados. Las computadoras modernas utilizan el disco duro para este fin. La mayoría de los programas se almacenan en disco hasta que son cargados en memoria. Por lo que el sistema operativo se encarga de: • Administrar el espacio libre. • Asignar espacio de almacenamiento. Capítulo 1. Antecedentes 19 • Organizar el disco. D) Administración de Archivos El administrador de archivos es uno de los componentes más visibles de un sistema operativo. Las computadoras pueden almacenar información en diferentes tipos de medios físicos. Cintas magnéticas, discos magnéticos, memorias USB y discos ópticos, son los más comunes. Cada uno de estos medios tiene sus propias características y organización física, por lo cual se requiere de un dispositivo que controle cada uno de ellos. Las propiedades de estos dispositivos incluyen velocidad de lectura, capacidad de almacenamiento, velocidad de transferencia de datos y método de acceso. La administración de archivos se encarga de: • Creación y eliminación de archivos. • Creación y eliminación de directorios. • Soporte de primitivas (instrucciones) para manipular archivos y directorios. • Mapeo de archivos dentro de almacenamiento secundarios. • Resguardo de archivos en medios de almacenamiento estables. E) Sistema de protección Si un sistema permite tener múltiples usuarios concurrentes, los procesos deben estar protegidos de otras actividades. Para tal propósito se provee de mecanismos que aseguran que los archivos, segmentos de memoria, CPU y otros recursos pueden ser operados sólo por aquellos procesos que tienen permiso otorgado por el sistema operativo. Ciertas instrucciones máquina pueden ejecutarse sólo en modo privilegiado. Entre éstas están la lectura o modificación de registros de control (como la palabra de estado), instrucciones primitivas de E/S e instrucciones relativas a la gestión de memoria. Y solamente se puede acceder a ciertas zonas de memoria en el modo privilegiado. El modo de menor privilegio se conoce como modo usuario, y el de mayor privilegio como modo de sistema, supervisor o núcleo. La razón por la que se usan dos modos debe quedar clara. Es necesario proteger al sistema operativo y a las estructuras de datos importantes, tales como los bloques de control de procesos, de las inferencias de los programas de usuario. En el modo núcleo o privilegiado, el software tiene control completo del procesador y de todas las instrucciones, registros y memoria. F) Sistema distribuido Un sistema distribuido es una colección de procesos que no comparten memoria o recursos. Cada procesador tiene su propia memoria local, y los procesadores se comunican con otros a través de varias líneas de comunicación como buses de alta velocidad o líneas telefónicas. Capítulo 1. Antecedentes 20 Los procesadores en el sistema se conectan a través de redes de comunicación, las cuales se pueden configurar de muchas maneras. La red puede esta completa o parcialmente conectada. En un sistema distribuido los recursos se comparten entre varias estaciones, los sistemas operativos de red se encargan de administrar el acceso a estos recursos. G) Sistema intérprete de comandos Una de las funciones más importantes de un sistema operativo es el intérprete de comandos, que es la interfaz entre el usuario y el sistema operativo. Algunos sistemas operativos incluyen el intérprete en el kernel. Otros como el DOS o UNIX, poseen un programa especial para cumplir esta función que se ejecuta cuando se inicia el sistema. Cuando un usuario se conecta a un equipo se inicia un intérprete de comandos (en entornos UNIX son llamados shells). El intérprete de comandos es un programa que muestra un indicador (prompt) formado por algunos caracteres, que pueden incluir el directorio de trabajo (un posible indicador en MS DOS es C:\>), que indica al usuario que es posible introducir una orden. El usuario escribirá una orden, por ejemplo C:\> copy fich fich2 y pulsará la tecla return. En un entorno UNIX, o MS DOS, la primera palabra es el nombre de un fichero que contiene un programa, siendo el resto de la línea una serie de argumentos, separados por espacios, que toma dicho programa. Una excepción a esto son las órdenes internas, que el intérprete implementa como rutinas suyas, y que no tienen, por tanto, un programa asociado guardado en disco. El intérprete de órdenes realiza entonces una o varias llamadas al sistema para ejecutar dicho programa. Cuando el programa finalice el control vuelve al programa que lo lanzó (el intérprete), mostrando éste otra vez el indicador, y repitiéndose el ciclo. Así pues, el intérprete de órdenes es un programa que sirve de interfaz entre el sistema operativo y un usuario, utilizándolo este último para ejecutar programas. A diferencia de un programador, un "usuario final" realiza todas las llamadas al sistema indirectamente, a través de las llamadas al sistema de los programas que ejecuta. En muchos sistemas se ha optado por sustituir el intérprete de comandos por un programa que utiliza ventanas. En estos programas aparecen iconos que el usuario puede seleccionar mediante un ratón. Cuando el usuario selecciona un icono que representa un programa se realizan llamadas al sistema para ejecutar un fichero, asociado al icono, que contiene el programa. Por lo tanto, se sustituye la interfaz del usuario para ejecutar programas, pero la interfaz con el sistema operativo no cambia. H) Llamadas al sistema El Sistema Operativo en conjunto con el Hardware se muestra al usuario como un solo dispositivo con un conjunto de instrucciones más flexibles y variadas a las que se conoce como Llamadas al Sistema Estas llamadas se implementan generalmente por instrucciones en lenguaje de máquina. La forma en que se realiza una llamada al sistema consiste en colocar una serie de parámetros en un lugar específico (como los registros del procesador), para después ejecutar Capítulo 1. Antecedentes 21 una instrucción del lenguaje máquina del procesador denominada trap (en castellano, trampa). La ejecución de esta instrucción máquina hace que el hardware guarde el contador de programa y la palabra de estado del procesador (PSW, Processor Status Word) en un lugar seguro de la memoria, cargándose un nuevo contador de programa y una nueva PSW. Este nuevo contador de programa contiene una dirección de memoria donde reside una parte (un programa) del sistema operativo, el cual se encarga de llevar a cabo el servicio solicitado. Cuando el sistema operativo finaliza el servicio, coloca un código de estado en un registro para indicar si hubo éxito o fracaso, y ejecuta
Compartir