21
SISTEMAS DISTRIBUIDOS Seguridad y Protección UNIVERSIDAD NACIONAL DE TRUJILLO ESCUELA DE INFORMATICA

Seguridad y Proteccion en Sistemas Distribuidos

Embed Size (px)

DESCRIPTION

En los últimos años el tema de la seguridad en los sistemas se ha tornado en un asunto de primera importancia dado el incremento de prestaciones de las mismas, así como la imparable ola de ataques o violaciones a las barreras de acceso a los sistemas implementados en aquellas.

Citation preview

Page 1: Seguridad y Proteccion en Sistemas Distribuidos

SISTEMAS DISTRIBUIDOS Seguridad y Protección UNIVERSIDAD NACIONAL DE TRUJILLO ESCUELA DE INFORMATICA

Page 2: Seguridad y Proteccion en Sistemas Distribuidos

SEGURIDAD Y PROTECCIÓN EN SISTEMAS DISTRIBUIDOS

Resumen: En los últimos años el tema de la seguridad en los sistemas se ha tornado en un asunto de primera importancia dado el incremento de prestaciones de las mismas, así como la imparable ola de ataques o violaciones a las barreras de acceso a los sistemas implementados en aquellas. Los "incidentes de seguridad" reportados continúan creciendo cada vez a un ritmo más acelerado, a la par de la masificación del Internet y de la complejidad del software desarrollado. Teniendo presente que no existe un sistema seguro pero que si se puede proteger es que existen métodos para proteger los datos de un sistema así mismo recomendaciones para el uso de dichos sistemas.

1. SEGURIDAD

Es la capacidad del sistema para proteger datos, servicios y recursos de usuarios no autorizados. El fin de la seguridad es garantizar la protección o estar libre de todo peligro y/o daño, y que en cierta manera es 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 el) más que de seguridad; por tanto, se habla de sistemas fiables en lugar de hacerlo de sistemas seguros. 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. En este trabajo no seguiremos esa corriente por considerarla minoritaria. La confidencialidad:

Nos 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.

La disponibilidad: Indica que los objetos del sistema tienen que permanecer accesibles a elementos autorizados; es el contrario de la negación de servicio.

Generalmente tienen que existir los tres aspectos descritos para que haya seguridad: por ejemplo en un sistema Unix puede conseguir confidencialidad para un determinado fichero haciendo que

Page 3: Seguridad y Proteccion en Sistemas Distribuidos

ningún usuario (ni siquiera el root) pueda leerlo, pero este mecanismo no proporciona disponibilidad alguna. Dependiendo del entorno en que un sistema Unix trabaje, a sus responsables les interesara dar prioridad a un cierto aspecto de la seguridad. Por ejemplo, en un sistema militar se antepondría la confidencialidad de los datos almacenados o transmitidos sobre su disponibilidad: seguramente, es preferible que alguien borre información confidencial (que se podría recuperar después desde una cinta de backup) a que ese mismo atacante pueda leerla, o a que esa información esté disponible en un instante dado para los usuarios autorizados. En cambio, en un servidor NFS de un departamento se premiará la disponibilidad frente a la confidencialidad: importa poco que un atacante lea una unidad, pero que esa misma unidad no sea leída por usuarios autorizados va a suponer una pérdida de tiempo y dinero. En un entorno bancario, la faceta que mas ha de preocupar a los responsables del sistema es la integridad de los datos, frente a su disponibilidad o su confidencialidad: Es menos grave que un usuario consiga leer el saldo de otro que el hecho de que ese usuario pueda modificarlo.

2. QUÉ QUEREMOS PROTEGER

Los tres elementos principales a proteger en cualquier sistema informático son el software, el hardware y los datos.

Hardware:

Entendemos por hardware al 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. . .) o tarjetas de red.

Software Entendemos por software al conjunto de programas lógicos que hacen funcional al hardware, tanto sistemas operativos como aplicaciones,

Datos Entendemos por dato al conjunto de información lógica que manejan el software y el hardware, como por ejemplo paquetes que circulan por un cable de red o entradas de una base de datos.

Aunque generalmente en las auditorias de seguridad se habla de un cuarto elemento a proteger, los fungibles (elementos que se gastan o desgastan con el uso continuo, como papel de impresora, tóners, cintas magnéticas, diskettes. . .).

Page 4: Seguridad y Proteccion en Sistemas Distribuidos

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: con toda seguridad en una máquina. 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, interceptación, modificación y fabricación. Un ataque se clasifica como 1. Interrupción:

Si hace que un objeto del sistema se pierda, quede inutilizable o no disponible. 2. Interceptación

Si un elemento no autorizado consigue un acceso a un determinado objeto del sistema. 3. Modificación:

Si además de 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.

4. 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) se muestran estos tipos de ataque de una forma gráfica.

Figura: Flujo normal de información entre el emisor/receptor y posibles amenazas:

(a) Interrupción (b) Interceptación (c) Modificación (d) Fabricación 3. DE QUÉ NOS QUEREMOS PROTEGER

En la gran mayoría de publicaciones relativas a la seguridad informática en general, y especialmente en las relativas a seguridad, tarde o temprano se intenta clasificar en grupos a los posibles elementos que pueden atacar nuestro sistema. Con frecuencia, especialmente en las obras menos técnicas y más orientadas a otros aspectos de la seguridad, se suele identificara los atacantes únicamente como personas; esto tiene sentido si hablamos por ejemplo de responsabilidades por un delito informático. Pero en este trabajo es preferible hablar de ‘elementos’ y no de personas: aunque a veces lo olvidemos, nuestro sistema puede verse perjudicado por múltiples entidades aparte de humanos, como por ejemplo programas, catástrofes naturales, si un usuario pierde un trabajo importante a causa de un ataque, poco le importaría que haya sido un intruso, un gusano, un simple error del administrador, o un alien que haya abducido un disco duro.

Page 5: Seguridad y Proteccion en Sistemas Distribuidos

A continuación se presenta una relación de los elementos que potencialmente pueden amenazar a nuestro sistema. No se pretende ser exhaustiva, ni por supuesto una taxonomía formal; simplemente se trata de proporcionar una idea acerca de qué o quién amenaza un sistema Unix. A lo largo de este proyecto se ahondaría en aspectos de algunos de los elementos presentados aquí.

Personas

La mayoría de ataques a nuestro sistema van a provenir en última instancia de personas que, intencionada o inintencionadamente, pueden causarnos enormes pérdidas. Generalmente se tratara de piratas 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. Pero con demasiada frecuencia se suele olvidar que los piratas ‘clásicos’ no son los únicos que amenazan nuestros equipos: es especialmente preocupante que mientras que hoy en día cualquier administrador mínimamente preocupado por la seguridad va a conseguir un sistema relativamente fiable de una forma lógica (permaneciendo atento a vulnerabilidades de su software, restringiendo servicios, utilizando cifrado de datos, en otros), pocos administradores tienen en cuenta factores como la ingeniería social o el basureo a la hora de diseñar una política de seguridad. Aquí se describen brevemente los diferentes tipos de personas que de una u otra forma pueden constituir un riesgo para nuestros sistemas; generalmente se dividen en dos grandes grupos: los atacantes pasivos, y los Activos.

o Pasivos: aquellos que fisgonean por el sistema pero no lo modifican o no destruyen, y

los o Activos: aquellos que dañan el objetivo atacado, o lo modifican en su favor.

Generalmente los curiosos y los crackers realizan ataques pasivos (que se pueden convertir en activos), mientras que los terroristas y ex-empleados realizan ataques activos puros; los intrusos remunerados suelen ser atacantes pasivos si nuestra red o equipo no es su objetivo, y activos en caso contrario, y el personal realiza ambos tipos indistintamente, dependiendo de la situación concreta. Describiremos algunos de ataques que realizan las personas: o Personal

Las amenazas a la seguridad de un sistema provenientes del personal de la propia organización rara vez son tomadas en cuenta; se presupone un entorno de confianza donde a veces no existe, por lo que se pasa por alto el hecho de que casi cualquier persona de la organización, incluso el personal ajeno a la infraestructura informática (secretariado, personal de seguridad, personal de limpieza y mantenimiento, entre otros) puede comprometer la seguridad de los equipos. Aunque los ataques pueden ser intencionados (en cuyo caso sus efectos son extremadamente dañinos, recordemos que nadie mejor que el propio personal de la organización conoce mejor los sistemas y sus debilidades), lo normal es que más que de ataques se trate de accidentes causados por un error o por desconocimiento de las normas básicas de seguridad: un empleado de mantenimiento que corta el suministro eléctrico para hacer una reparación puede llegar a ser tan peligroso como el más experto de los administradores que se equivoca al teclear una orden y borra todos los sistemas de ficheros; y en el primer caso, el ‘atacante’ ni siquiera ha de tener acceso lógico (¡ni físico!) a los equipos, ni conocer nada sobre seguridad . Hemos de recordar siempre que decir ‘No lo hice a propósito no va a servir para recuperar datos perdidos ni para restaurar un hardware dañado o robado.

o Ex-empleados

Otro gran grupo de personas potencialmente interesadas en atacar nuestro sistema son los antiguos empleados del mismo, especialmente los que no abandonaron el entorno por voluntad propia (y en el caso de redes de empresas, los que pasaron a la competencia). Generalmente, se trata de personas descontentas con la organización que pueden

Page 6: Seguridad y Proteccion en Sistemas Distribuidos

aprovechar debilidades de un sistema que conocen perfectamente para dañarlo como venganza por algún hecho que no consideran justo: amparados en excusas como ‘No me han pagado lo que me deben’ o ‘Es una gran universidad, se lo pueden permitir’ pueden insertar troyanos, bombas lógicas, virus, o simplemente conectarse al sistema como si aún trabajaran para la organización (muchas veces se mantienen las cuentas abiertas incluso meses después de abandonar la universidad o empresa), conseguir el privilegio necesario, y dañarlo de la forma que deseen, incluso chantajeando a sus ex-compañeros o ex-jefes.

o Curiosos

Junto con los crackers, los curiosos son los atacantes más habituales de los sistemas en redes de I+D. Recordemos que los equipos están trabajando en entornos donde se forma a futuros profesionales de la informática y las telecomunicaciones (gente que a priori tiene interés por las nuevas tecnologías), y recordemos también que las personas suelen ser curiosas por naturaleza; esta combinación produce una avalancha de estudiantes o personal intentando conseguir mayor privilegio del que tienen o intentando acceder a sistemas a los que oficialmente no tienen acceso. Y en la mayoría de ocasiones esto se hace simplemente para leer el correo de un amigo, enterarse de cuanto cobra un compañero, copiar un trabajo o comprobar que es posible romper la seguridad de un sistema concreto. Aunque en la mayoría de situaciones se trata de ataques no destructivos (a excepción del borrado de huellas para evitar la detección), parece claro que no benefician en absoluto al entorno de fiabilidad que podamos generar en un determinado sistema.

o Crackers

Los entornos de seguridad media son un objetivo típico de los intrusos, ya sea para fisgonear, para utilizarlas 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 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 seguridad contra el dominio completo y luego atacar mediante un simple exploit los equipos que presentan vulnerabilidades; esto convierte a las redes de I+D, a las de empresas, o a las de ISPs 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, con el consiguiente deterioro de imagen (y a veces de presupuesto) que supone para una universidad ser, sin desearlo, un apoyo a los piratas que atacan sistemas teóricamente más protegidos, como los militares.

o Terroristas

Por ‘terroristas’ no debemos entender simplemente a los que se dedican a poner bombas o quemar autobuses; bajo esta definición se engloba a cualquier persona que ataca al sistema simplemente por causar algún tipo de daño en el. Por ejemplo, alguien puede intentar borrar las bases de datos de un partido político enemigo o destruir los sistemas de ficheros de un servidor que alberga páginas web de algún grupo religioso; en el caso de redes de I+D, típicos ataques son la destrucción de sistemas de prácticas o la modificación de páginas web de algún departamento o de ciertos profesores, generalmente por parte de alumnos descontentos.

o Intrusos remunerados

Este es el grupo de atacantes de un sistema más peligroso, aunque por fortuna el menos habitual en redes normales; suele afectar más a las grandes – muy grandes – empresas o a organismos de defensa. Se trata de piratas con gran experiencia en problemas de seguridad y un amplio conocimiento del sistema, que son pagados por una tercera parte generalmente para robar secretos (el nuevo diseñó de un procesador, una base de datos de clientes, información confidencial sobre las posiciones de satélites espía) o simplemente para dañar

Page 7: Seguridad y Proteccion en Sistemas Distribuidos

la imagen de la entidad afectada. Esta tercera parte suele ser una empresa de la competencia o un organismo de inteligencia, es decir, una organización que puede permitirse un gran gasto en el ataque; de ahí su peligrosidad: se suele pagar bien a los mejores piratas, y por si esto fuera poco los atacantes van a tener todos los medios necesarios a su alcance. Aunque como hemos dicho los intrusos remunerados son los menos comunes en la mayoría de situaciones, en ciertas circunstancias pueden aprovechar nuestras redes como plataforma para atacar otros organismos;

Amenazas lógicas

Bajo la etiqueta de ‘amenazas lógicas’ encontramos 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 continuación presentamos algunos tipos de amenazas lógicas: o Software incorrecto

Las amenazas más habituales a 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 del kernel o un error accediendo a memoria en un fichero . 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. Como hemos dicho, representan la amenaza más común contra sistemas, ya que cualquiera puede conseguir un exploit y utilizarlo contra nuestra máquina sin ni siquiera saber cómo funciona y sin unos conocimientos mínimos; incluso hay exploits que dañan seriamente la integridad de un sistema (negaciones de servicio o incluso acceso root remoto) y están preparados para ser utilizados desde MS-DOS, con lo que cualquier pirata novato (comúnmente, se les denomina Script Kiddies) puede utilizarlos contra un servidor y conseguir un control total de una máquina de varios millones de dinero desde su PC sin saber nada del sistema atacado; incluso hay situaciones en las que se analizan los logs de estos ataques y se descubre que el pirata incluso intenta ejecutar ordenes de MS-DOS.

o 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. Herramientas como nessus, saint o satan pasan de ser útiles a ser peligrosas cuando las utilizan crackers que buscan información sobre las vulnerabilidades de un host o de una red completa. La conveniencia de diseñar y distribuir libremente herramientas que puedan facilitar un ataque es un tema peliagudo; incluso expertos reconocidos como Alec Muffet (autor del adivinador de contraseñas Crack) han recibido enormes críticas por diseñar determinadas herramientas de seguridad.

o Puertas traseras

Durante el desarrollo de aplicaciones grandes o de sistemas operativos es habitual entre los programadores insertar ‘atajos’ en los sistemas habituales de autenticación del programa o del núcleo que se está diseñando. A estos atajos se les denomina puertas traseras, 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)

Page 8: Seguridad y Proteccion en Sistemas Distribuidos

va a tener un acceso global a datos que no debería poder leer, lo que obviamente supone un grave peligro para la integridad de nuestro sistema. 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 mas 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 ejecuta el programa: si las activa el root, o el programa que contiene la bomba está situado a su nombre, los efectos obviamente pueden ser fatales.

o Canales cubiertos

Los canales son canales de comunicación que permiten a un proceso transferir información de forma 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. Los canales cubiertos no son una amenaza demasiado habitual en redes de I+D, ya que suele ser mucho más fácil para un atacante aprovechar cualquier otro mecanismo de ataque lógico; sin embargo, es posible su existencia, y en este caso su detección suele ser difícil: algo tan simple como el puerto finger abierto en una máquina puede ser utilizado a modo de covert channel por un pirata con algo de experiencia.

o Virus Un virus es una secuencia de código que se inserta en un fichero ejecutable (denominado huésped), de forma que cuando el archivo se ejecuta, el virus también lo hace, insertándose a sí mismo en otros programas. Todo el mundo conoce los efectos de los virus en algunos sistemas operativos de sobremesa.

o Gusanos

Un gusano es un programa capaz de ejecutarse y propagarse por si mismo a través de redes, en ocasiones portando virus o aprovechando bugs de los sistemas a los que conecta para dañarlos. Al ser difíciles de programar su número no es muy elevado, pero el daño que pueden causar es muy grande: el mayor incidente 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 maquinas 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 horas en controlar nuestra 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.

o 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. Por ejemplo para que al recibir un cierto nombre de usuario y contraseña proporcione acceso al sistema sin necesidad de consultar /etc/passwd.

o 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), produciendo una negación de servicio. Por si mismos no hacen ningún daño, sino que lo que realmente perjudica es el gran número de copias suyas

Page 9: Seguridad y Proteccion en Sistemas Distribuidos

en el sistema, que en algunas situaciones pueden llegar a provocar la parada total de la máquina. Hemos de pensar hay ciertos programas que pueden actuar como conejos sin proponérselo.

o Técnicas salami Por técnica salami se conoce al robo automatizado de pequeñas cantidades de bienes (generalmente dinero) de una gran cantidad origen. El hecho de que la cantidad inicial sea grande y la robada pequeña hace extremadamente difícil su detección: si de una cuenta con varios millones de dinero se roban unos céntimos, nadie va a darse cuenta de ello; si esto se automatiza para, por ejemplo, descontar una peseta de cada nomina pagada en la universidad o de cada beca concedida, tras un mes de actividad seguramente se habrá robado una enorme cantidad de dinero sin que nadie se haya percatado de este hecho, ya que de cada origen se ha tomado una cantidad ínfima. Las técnicas salami no se suelen utilizar para atacar sistemas normales, sino que su uso más habitual es en sistemas bancarios; sin embargo, como en una red con requerimientos de seguridad medios es posible que haya ordenadores dedicados a contabilidad, facturación de un departamento o gestión de nóminas del personal, comentamos esta potencial amenaza contra el software encargado de estas tareas.

Catástrofes

Las catástrofes (naturales o artificiales) son la amenaza menos probable contra los entornos habituales: simplemente por su ubicación geográfica, a nadie se le escapa que la probabilidad de sufrir un terremoto o una inundación que afecte a los sistemas informáticos en una gran ciudad como Madrid, Valencia o Barcelona, es relativamente baja, al menos en comparación con el riesgo de sufrir un intento de acceso por parte de un pirata o una infección por virus. Sin embargo, el hecho de que las catástrofes sean amenazas poco probables no implica que contra ellas no se tomen unas medidas básicas, ya que si se produjeran generarían los mayores daños. Un subgrupo de las catástrofes es el denominado de riesgos poco probables. Obviamente se denomina así al conjunto de riesgos que, aunque existen, la posibilidad de que se produzcan es tan baja (menor incluso que la del resto de catástrofes) que nadie toma, o nadie puede tomar, medidas contra ellos. Ejemplos habituales de riesgos poco probables son un ataque nuclear contra el sistema, el impacto de un satélite contra la sala de operaciones, o la abducción de un operador por una nave extraterrestre. Nada nos asegura que este tipo de catástrofes no vaya a ocurrir, pero la probabilidad es tan baja y los sistemas de prevención tan costosos que no vale la pena tomar medidas contra ellas. Como ejemplos de catástrofes hablaremos de terremotos, inundaciones, incendios, humo o atentados de baja magnitud (más comunes de lo que podamos pensar); obviamente los riesgos poco probables los trataremos como algo anecdótico. De cualquier forma, vamos a hablar de estas amenazas sin extendernos mucho, ya que el objetivo de este proyecto no puede ser el proporcionar las directrices para una construcción de edificios a prueba de terremotos, o un plan formal de evacuación en caso de incendio.

4. COMO NOS PODEMOS PROTEGER

Hasta ahora hemos hablado de los aspectos que engloba la seguridad informática, de los elementos a proteger, de los tipos de amenazas que contra ellos se presentan y del origen de tales amenazas; parece claro que, para completar nuestra visión de la seguridad, hemos de hablar de las formas de protección de nuestros sistemas. Cuando hayamos completado este punto, habremos presentado a grandes rasgos los diferentes puntos a tratar en este proyecto, tal y como se sintetiza en la figura 2. Para proteger nuestro sistema hemos de realizar un análisis de las amenazas potenciales que puede sufrir, las pérdidas que podrían generar, y la probabilidad de su ocurrencia; a partir de este análisis hemos de diseñar una política de seguridad que defina responsabilidades y reglas a seguir para evitar tales amenazas o minimizar sus efectos en caso de que se produzcan. A los mecanismos utilizados para implementar esta política de seguridad se les denomina mecanismos de seguridad; son la parte más visible de nuestro sistema de seguridad, y se convierten en la herramienta básica para garantizar la protección de los sistemas o de la propia red.

Page 10: Seguridad y Proteccion en Sistemas Distribuidos

Los mecanismos de seguridad se dividen en tres grandes grupos: de prevención, de detección y de recuperación.

Los mecanismos 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 Mecanismos de detección: Se conoce a aquellos que se utilizan para detectar violaciones de la seguridad o intentos de violación; ejemplos de estos mecanismos son los programas de auditoria como Tripwire. Finalmente

Los mecanismos 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 no es simplemente retornar al sistema a su modo de trabajo normal, sino 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 nuestro sistema, hemos de enfatizar en el uso de mecanismos de prevención y de detección; la máxima popular “más vale prevenir que curar” 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 inmediatamente después de que ocurra es mucho más productivo y menos comprometedor para el sistema que restaurar el estado tras una penetración de la máquina. Es más, si consiguiéramos un sistema sin vulnerabilidades y cuya política de seguridad se implementara mediante mecanismos de prevención de una forma completa, no necesitaríamos mecanismos de detección o recuperación.

Figura 2: Visión global de la seguridad informática

5. TOLERANCIA A FALLOS

Un sistema falla si no puede lograr sus objetivos, si ocurren fallos que producen errores Tolerancia a fallos es que un sistema no falle aunque ocurran fallos, para esto debe ser confiable (disponibilidad, fiabilidad, seguridad, mantenibilidad).

Tipos de fallos por su duración:

Page 11: Seguridad y Proteccion en Sistemas Distribuidos

o Transitorios: El elemento solo falla una vez y después vuelve a funcionar correctamente o Intermitentes: El fallo en el elemento aparece de forma intermitente. o Permanentes: Una vez el elemento falla, ya no se recupera.

Modelos de fallos En general puede ocurrir cualquier tipo de fallo, pero se simplifica para poder diseñar sistemas y protocolos. El tipo de fallos que se consideran relevantes, constituyen el modelo de fallos. Tipos de fallos a considerar en los modelos: o Fallos de parada: El elemento que falla, simplemente deja de funcionar y no interfiere

con el resto del sistema una vez falla. o Fallos de omisión: El elemento que falla no hace cierta parte de su cometido: por

ejemplo: un canal de comunicación puede presentar fallos de omisión de envío o de respuesta.

o Fallos de temporización: El elemento que falla no lo hace en el tiempo previsto. o Fallos de respuesta: El elemento responde incorrectamente a las peticiones que se le

realizan. o Fallos arbitrarios: El componente que falla funciona de forma descontrolada.

Enmascaramiento de fallos por redundancia o Enmarcar fallos: los fallos ocurren, pero el sistema no los muestra hacia su entorno. o Técnica fundamental: redundancia

Información redundante: información que solo es útil para comprobar que no hay fallos. Por ejemplo: los CRC’s Redundancia en el tiempo (el número de veces que se realiza una operación) Redundancia de elementos: Utilizar varios elementos iguales para intentar disminuir la probabilidad de que no se proporcione servicio: replicación.

Fallos en entornos cliente/servidor

En la interacción entre un cliente y un servidor pueden ocurrir muchos tipos de fallos: en el servidor, en el canal y en el cliente: o El cliente no encuentra al servidor: sin solución. Simplemente se lanza una excepción o La petición del cliente al servidor se pierde: retransmisión después de cierto tiempo. Se

deben detectar peticiones duplicadas en el servidor, para que las descarte. o El servidor falla:

Al recibir la petición, antes de procesarla. A mitad de procesar la petición: diferentes semánticas (próxima transparencia). Al terminar el procesamiento, antes de responder.

o La respuesta del servidor se pierde: Difícil solución: retransmisión del mensaje del cliente, que el servidor debe identificar para responderle con los resultados previos. Aparece problema de recolección de residuos!

El cliente falla antes de recibir la respuesta: Problema de peticiones huérfanas. Difícil solución.

o Falla el servidor a mitad de procesar la petición. Semánticas posibles:

• Semántica como mínimo una vez: se debe garantizar que el servidor ejecuta el servicio como mínimo una vez. Como ha fallado, se debe esperar a que recupere, para reintentar la misma petición.

• Semántica como máximo una vez. No se reintenta la operación. • Semántica exactamente una vez: En general imposible de lograr. Por ejemplo:

la operación implica imprimir un documento. Cuándo sabe el cliente que fue impreso? En este ejemplo, solo posible si la impresora “colabora”.

Page 12: Seguridad y Proteccion en Sistemas Distribuidos

Grupos de procesos o Efectiva técnica de enmascaramiento de fallos: se replican los procesos. o Un conjunto de procesos “idénticos” recibe y procesa cada petición. Opciones:

El cliente se queda con una de las respuestas. Se toleran fallos de parada. El cliente se queda con la respuesta que proporcione la mayoría: Votación. Se

toleran fallos arbitrarios. o Son necesarios protocolos de comunicación a grupos que garanticen que los mensajes

lleguen a todos los miembros del grupo o a ninguno: Comunicación a grupos atómica.

6. Mecanismos de seguridad Cifrado

o Simétrico (clave secreta) o Asimétrico (par de claves pública y privada)

Autenticación o Passwords o Protocolos de reto-respuesta.

Autorización o Listas de control de accesos, Credenciales o Firewalls

Page 13: Seguridad y Proteccion en Sistemas Distribuidos

Auditoría o Mantenimiento y análisis de trazas (logs)

7. Kerberos

La autenticación en redes de computadores se realizaba principalmente de dos formas: o bien se aplicaba la autenticación por declaración (Authentication by assertion), en la que el usuario es libre de indicar el servicio al que desea acceder (por ejemplo, mediante el uso de un cliente determinado), o bien se utilizaban contraseñas para cada servicio de red. Evidentemente el primer modelo proporciona un nivel de seguridad muy bajo, ya que se le otorga demasiado poder al cliente sobre el servidor; el segundo modelo tampoco es muy bueno: por un lado se obliga al usuario a ir tecleando continuamente su clave, de forma que se pierde demasiado tiempo y además la contraseña está viajando continuamente por la red. Kerberos trata de mejorar estos esquemas intentando por un lado que un cliente necesite autorización para comunicar con un servidor (y que esa autorización provenga de una máquina confiable), y por otro eliminando la necesidad de demostrar el conocimiento de información privada (la contraseña del usuario) divulgando dicha información. El uso de Kerberos se produce principalmente en el login, en el acceso a otros servidores (por ejemplo, mediante rlogin) y en el acceso a sistemas de ficheros en red como NFS. Una vez que un cliente está autenticado o bien se asume que todos sus mensajes son fiables, o si se desea mayor seguridad se puede elegir trabajar con mensajes seguros (autenticados) o privados (autenticados y cifrados). Kerberos se puede implementar en un servidor que se ejecute en una máquina segura, mediante un conjunto de bibliotecas que utilizan tanto los clientes como las aplicaciones; se trata de un sistema fácilmente escalable y que admite replicación, por lo que se puede utilizar incluso en sistemas de alta disponibilidad

Page 14: Seguridad y Proteccion en Sistemas Distribuidos

Esquema básico de kerberos

Arquitectura de Kerberos

Un servidor Kerberos se denomina KDC (Kerberos Distribution Center), y provee de dos servicios fundamentales: el de autenticación (AS, Authentication Service) y el de tickets (TGS, Ticket Granting Service). El primero tiene como función autenticar inicialmente a los clientes y proporcionarles un ticket para comunicarse con el segundo, el servidor de tickets, que proporcionara a los clientes las credenciales necesarias para comunicarse con un servidor final que es quien realmente ofrece un servicio. Además, el servidor posee una base de datos de sus clientes (usuarios o programas) con sus respectivas claves privadas, conocidas únicamente por dicho servidor y por el cliente que al que pertenece.

La arquitectura de Kerberos está basada en tres objetos de seguridad: Clave de Sesión, Ticket y Autenticador. o La clave de sesión es una clave secreta generada por Kerberos y expedida a un cliente para

uso con un servidor durante una sesión; no es obligatorio utilizarla en toda la comunicación con el servidor, sólo si el servidor lo requiere (porque los datos son confidenciales) o si el servidor es un servidor de autenticación. Se suele denominar a esta clave KCS, para la comunicación entre un cliente C y un servidor S. Las claves de sesión se utilizan para minimizar el uso de las claves secretas de los diferentes agentes: estas últimas son válidas durante mucho tiempo, por lo que es conveniente para minimizar ataques utilizarlas lo menos posible.

o El ticket es un testigo expedido a un cliente del servicio de tickets de Kerberos para solicitar los servicios de un servidor; garantiza que el cliente ha sido autenticado recientemente. A un ticket de un cliente C para acceder a un servicio S se le denomina {ticket(C, S)}KS = {C, S, t1, t2,KCS}KS . Este ticket incluye el nombre del cliente C, para evitar su posible uso por impostores, un periodo de validez [t1, t2] y una clave de sesión KCS asociada para uso de cliente y servidor. Kerberos siempre proporciona el ticket ya cifrado con la clave secreta del servidor al que se le entrega.

o El autenticador es un testigo construido por el cliente y enviado a un servidor para probar su identidad y la actualidad de la comunicación; sólo puede ser utilizado una vez. Un autenticador de un cliente C ante un servidor S se denota por {auth(C)}KCS = {C, t}KCS . Este autenticador contiene, cifrado con la clave de la sesión, el nombre del cliente y un timestamp.

Kerberos sigue de cerca el protocolo de Needham y Schroeder ([NS78]) con clave secreta, utilizando timestamps como pruebas de frescura con dos propósitos: evitar reenvíos de viejos mensajes capturados en la red o la reutilización de viejos tickets obtenidos de zonas de

Page 15: Seguridad y Proteccion en Sistemas Distribuidos

memoria del usuario autorizado, y a la vez poder revocar a los usuarios los derechos al cabo de un tiempo.

8. Recomendaciones de seguridad

1. Efectuar un análisis de riesgos Esto se suele mencionar en la literatura como el primer paso a realizarse cuando se plantea la seguridad en un sistema. La idea es muy sencilla: trazar todos los elementos que conforman nuestro sistema (hardware y software) y observar cuáles involucran más o menos riesgo. Esto desembocará en un plan de seguridad cuyo objetivo es disminuir el riesgo total del sistema, que se puede modelar como la suma de los riesgos de sus componentes:

RIESGO TOTAL = RIESGO(componente 1) + RIESGO(componente 2) ...

El riesgo de cada componente está en función directa a las pérdidas que ocasionaría el que éste deje de operar, así como en función de cuán vulnerable es dicho componente en este momento. Por ejemplo, una base de datos de clientes involucra un gran riesgo debido al gran valor que la información representa para una organización; pero una simple PC Windows de la misma organización conectada directamente al Internet (sin firewall/Proxy de por medio) también lo representa, debido a que puede ser objeto de un ataque desde el exterior, con el posible riesgo de fácil propagación hacia otros computadores de nuestra red. El riesgo no es fácil de cuantificar, siendo en general un estimador subjetivo. A modo de ejemplo podríamos plantear una fórmula como la que sigue:

RIESGO(componente) = P * V

Donde P=pérdida, es la pérdida en dinero que implicaría la inoperatividad del componente hasta su reparación, aunque se pueden agregar otros estimadores como el desprestigio ante nuestros clientes. A veces ayuda considerarlo como "el valor" que representa para la organización. V=vulnerabilidad, es tanto o más subjetiva puesto que no hay una manera segura de establecer para todos los casos si los supuestos mecanismos de protección (del componente) son o no realmente confiables. Así por ejemplo, podríamos suponer que la vulnerabilidad de ciertos documentos importantes es muy baja, puesto que están protegidos por cierto antivirus. Sin embargo, esto realmente estará en función de diversas características del antivirus, como pueden ser: recientes actualizaciones, ejecución automática, capacidad de eliminar virus locales, licencias no caducadas, configuración adecuada, etc. Pero por algo se debe comenzar. Por ejemplo, se puede asignar números como 1, 2, 3, 4, para señalar una

Page 16: Seguridad y Proteccion en Sistemas Distribuidos

vulnerabilidad mínima, regular, importante y peligrosa, respectivamente. Para una extensa (y compleja) explicación, Esto normalmente demanda el acopio de mucha información, la que muchas veces no está a cargo de una sola persona. Esto implica que todo el staff encargado de las distintas partes del sistema debe colaborar en el análisis.

2. Lo más valioso debe alejarse de lo más vulnerable

En la fórmula del "riesgo" propuesta arriba, es evidente que los componentes de nuestro sistema con algo valor y alta vulnerabilidad serán de lejos los que presenten mayor riesgo. Sin embargo, en muchos casos no es sencillo disminuir el valor de cierto componente (y por tanto la pérdida en caso de problemas), y tampoco se puede eliminar completamente la vulnerabilidad del mismo (por ejemplo, si está de cara a Internet.) En este caso lo que conviene es separar o dividir este componente en dos partes suficientemente alejadas e independientes a fin de que el riesgo total disminuya. Por ejemplo, los portales de comercio electrónico deben dar cara a Internet (siendo vulnerables en principio) y a la vez manejar información muy costosa (como transacciones con tarjeta de crédito.) Esto los convierte en un sistema de alto riesgo. Sin embargo es casi universal la separación que se efectúa entre los componentes dedicados a dar cara a Internet (como los Web Servers) y los componentes que manipulan la información comercial (generalmente sistemas DBMS.) En términos prácticos, esto significa que el hacker no puede acceder directamente al DBMS (lo que sería catastrófico), y sólo podría atacar al Web Server, lo que en principio no acarrea mayores consecuencias. Juguemos con los números siguiendo las ideas expuestas más arriba. Suponiendo que los datos relacionados al negocio valen para nosotros $50000, y están en un computador donde corre un Web Server IIS que no ha sido parchado adecuadamente. Entonces el riesgo sería:

R total = 50000 x 5 = 250000

Supongamos ahora que los datos están en otro computador "mínimamente vulnerable" (con V=1) adecuadamente aislado del Web Server (que todavía no ha sido parchado). La pérdida por una interrupción del servicio del Web Server, por día se ha estimado en $2000 (asumimos que ese es el tiempo que toma en restablecerse el servicio tras el ataque.) Entonces el riesgo total se convierte en:

R total = R1 + R2 = 50000 x 1 + 2000 x 5 = 60000

3. Mantener las cosas simples Un sistema complejo es más difícil de asegurar y potencialmente proporciona una mayor cantidad de puertas abiertas a los atacantes. En general, es recomendable intentar dividir el problema mediante la simplificación de la configuración, para así identificar los puntos o rutas de control vulnerables para incrementar la seguridad. Un ejemplo frecuentemente citado es la seguridad de una red de estaciones Windows manipulada por usuarios inexpertos. En muchos casos no resulta práctico efectuar un profundo trabajo de seguridad en las estaciones (más allá de la instalación del antivirus, por ejemplo), puesto que por un lado, son muchas, y por otro, los usuarios suelen modificar la configuración en tanto instalan y desinstalan su software sin dar aviso a nadie. En estos casos es aconsejable centrarnos en un único punto que centralice la seguridad de todas las estaciones. Una configuración de red que obligue a que todo su tráfico pase a través de un gateway permitiría crear un único punto de control para todas las estaciones, con lo cual simplificamos la administración. Todo esto generalmente conlleva a situaciones en las que hay que hacer un compromiso. Por ejemplo, en la recomendación anterior, optamos por separar la base de datos del servidor Web con lo que la complejidad del sistema se incrementó, aunque se redujo el riesgo total.

4. Asegurar la seguridad en todos los niveles

Esto se puede expresar más sencillamente como: no confiar el sistema a un único mecanismo de seguridad. La información fluye a través de los distintos componentes y/o capas del sistema y son muchas las instancias en las que se puede mejorar su seguridad. La recomendación estipula que

Page 17: Seguridad y Proteccion en Sistemas Distribuidos

utilicemos todas estas instancias a pesar de que en principio puedan parecer redundantes. Por lo general los administradores tienden a preocuparse por un único punto de acceso desde donde supuestamente hay una gran probabilidad de ser atacados (por ejemplo, la conexión a Internet.) Por tanto se invierte esfuerzo y dinero en controlar este único punto bajo la asunción de que es la única puerta de entrada a los maleantes y que por tanto, tras asegurarla, todo el sistema quedará seguro. Esto tiene dos problemas: • Muchos ataques o "vulnerabilidades" se originan (de forma inocente o intencional) desde dentro de la organización • El sistema que controla la "puerta" siempre puede fallar Esto obliga a implementar la seguridad no en un único punto evidentemente vulnerable, sino en todos los lugares por donde fluye la información al interior de cada componente involucrado. Un ejemplo típico lo constituye un filtro de paquetes TCP/IP, operando a nivel de capas 3 y 4 del modelo OSI. Estos por lo general hacen un gran servicio restringiendo accesos a servicios de red internos y se suelen colocar en la "puerta" o "gateway" que da cara a Internet o a una red insegura a modo de "firewall". Tomando literalmente la idea de "niveles" o "capas", podríamos pensar qué hacer en este gateway para mejorar la seguridad. Son 7 las capas OSI y podríamos intentar añadir instancias de control adicionales a las mencionadas. Por ejemplo, en la capa 7 (aplicación) es frecuente y muy recomendable el empleo de proxys HTTP. Algunos firewalls proporcionan control a nivel de la capa 2 (específicamente, del MAC Address.) Sin embargo, esto se debe complementar con otras medidas que van más allá del gateway y que se implementan a lo largo de todo el sistema (pudiéndose considerar como niveles o "capas" adicionales), tales como redes perimétricas, el uso de encriptación, etc.

5. Encriptar tanto como sea posible La encriptación es un tema complejo pero cuya implementación resulta cada vez más sencilla conforme aparecen más productos. Los cambios del año pasado en la legislación norteamericana con respecto a la exportación de productos que encriptan, son un incentivo claro para que los desarrolladores y vendedores se interesen más en el tema. En general, los canales de comunicación más vulnerables o de mayor cercanía al público requieren una encriptación "más fuerte", es decir, más difícil de descifrar por los curiosos o atacantes. Cierta información conlleva más riesgo que otra, y por tanto requerirá un nivel de encriptación diferenciado. Las herramientas capaces de hacer esto son muchas, dependiendo del contexto en que nos encontremos. Por ejemplo, los sistemas DBMS más avanzados incorporan la encriptación como una opción normal para los datos almacenados, generalmente bajo esquemas propietarios. La tecnología de encriptación de información destinada a pasar a través de la red ha evolucionado bastante, haciéndose popular el término VPN para hacer referencia a canales que encriptan la información de un modo más o menos transparente. Hay soluciones propietarias así como estándares relativamente implementados como IP Sec. Ciertas aplicaciones estándar han recibido soluciones de encriptación también estándar. El caso del Web encriptado bajo SSL (HTTPS) junto con la industria de certificados digitales es el caso más conspicuo. De igual modo los estándares para correo electrónico PGP (o derivados) y S/MIME son integrados cada vez con mayor frecuencia en las aplicaciones de los usuarios finales. Retornemos al principio. En nuestra organización deberíamos encriptar todo lo que sea posible. La razón de esto es evidente si de lo que se trata es de enviar un mensaje privado por Internet. Sin embargo, al interior de la organización la encriptación puede ayudar también. Por ejemplo, es usual que cierta información sea manejada exclusivamente por un número reducido de personas (los contratos salariales, por poner un caso.) Un caso más dramático se presenta cuando un hacker ha logrado infiltrarse en la organización: si la información está encriptada, los datos que robe le serán inútiles dado que no posee las claves correspondientes. Naturalmente hay que sopesar los inconvenientes que trae la encriptación en términos de incomodidad de uso, costo de licencias, ciclos de CPU, etcétera; con el hecho de que cierta información es definitivamente de carácter público y por tanto no tiene sentido que esté

Page 18: Seguridad y Proteccion en Sistemas Distribuidos

encriptada. Por ejemplo, la información que se publica en Internet vía el Web Server de la empresa. En se puede obtener regularmente mucha información interesante y actualizada sobre la encriptación.

6. No confiar en la autenticación estándar

Las redes locales, y por extensión, el Internet, NO fueron diseñados en principio para ser seguros. La mayoría del software y hardware creados hasta incluso mediados de los años 90, no tuvieron la seguridad como objetivo de primer orden. Esto implica que muchos de los sistemas que compramos y usamos en la actualidad tienen serias deficiencias, pero que por mantener la compatibilidad no se han podido corregir. Un caso crítico es lo concerniente a la autenticación de los accesos. En la gran mayoría de casos esto se limita a proporcionar una contraseña por parte de quien pretende acceder al recurso correspondiente, cosa que funciona bien en un ambiente seguro en el que todos estamos de acuerdo en no ir más allá de este mecanismo. Sin embargo esto no siempre es cierto (y menos en Internet.) Son muchos los mecanismos que puede emplear un hacker para "capturar" las contraseñas de usuarios reales, así como para "adivinar" las mismas. Otros esquemas pretenden ser más seguros basándose en el análisis de la dirección de red de quien intenta conectarse, pero de igual modo los hackers pueden "simular" una dirección de red sin mayores inconvenientes. En tanto los ataques son cada vez más sofisticados, es de rigor que la autenticación también sea cada vez más sofisticada, lo cual implica abandonar para siempre diversos mecanismos estándar muy arraigados. El ejemplo más paradigmático tal vez sea el comando "telnet" de los sistemas Unix, utilizado para obtener una sesión en un sistema remoto. Este comando se distribuye (y se seguirá distribuyendo sin duda) en prácticamente todas las encarnaciones de los sistemas Unix y sus clones (como Linux.) Es tan popular y útil que incluso los sistemas Windows lo proporcionan. Sin embargo, ningún administrador serio recomendaría su uso para una conexión remota, y quizá tampoco al interior de la red. La razón estriba en que toda la información de autenticación (el nombre de usuario y su contraseña) viaja sin encriptación tal cual es, y cualquier persona con acceso a un nodo intermedio o al canal de la conexión puede extraer esta información con relativa facilidad. Actualmente diversos productos y estándares promueven la seguridad en la autenticación. Como muestra podemos mencionar a SSH, S/Key , Kerberos, Tcpwrappers, etc.

7. No usar la configuración "estándar" Esto se puede considerar una generalización de la recomendación anterior. Por lo general los sistemas operativos y las aplicaciones se instalan con una configuración determinada y de carácter genérico. En muchos casos el administrador no tiene necesidad de modificarla pues el sistema aparentemente funciona bien. Sin embargo, los atacantes al no tener conocimiento de la configuración de nuestro sistema, asumen que ésta es justamente la "estándar", y programan sus ataques basados en dicha asunción. Muchos administradores (y sus jefes) pretenden elevar la seguridad tan sólo a costa de comprar un producto costoso. Imaginémonos una ciudad en la que todas las casas comprar un mismo modelo de cerradura. Entonces lógicamente los ladrones se dedicarán sin parar a conseguir la llave correspondiente que les abrirá las puertas de todas las casas. Ahora imaginemos otra ciudad en la que todos los habitantes son cerrajeros. Seguramente los ladrones dejarán de pensar en las llaves y a no ser que encuentren otro mecanismo distinto, tendrán que mudarse.

8. La seguridad hacia el interior

Algunos reportes han puesto de relieve que en una gran cantidad de casos la mayor amenaza de ataques al sistema no proviene de fuera, sino que parte desde el interior de la organización. Muchos ataques exitosos desde el exterior han necesitado de cierta ayuda inicial activada en el interior de la organización, donde por lo general nadie sospecha de este tipo de prácticas.

Page 19: Seguridad y Proteccion en Sistemas Distribuidos

Por tanto, el análisis de riesgos debe incluir posibles ataques originados en el interior, incluyéndose el robo de contraseñas, la modificación de archivos de configuración, la desactivación de las barreras de protección, etc. Un caso muy común de este tipo de ataque lo constituye el trabajador despedido o castigado que decide tomar venganza. Antes de retirarse definitivamente puede efectuar este tipo de tareas maliciosas e incluso ponerse en combinación con un atacante externo. En ciertos casos la simple introducción intencional de un virus puede acarrear efectos devastadores. La única manera de reducir el riesgo en estos casos, consiste en planificar el acceso al sistema de modo tal que ningún elemento crítico dependa de una sola persona. Dicho de otro modo, para dañar un sistema, no debe bastar con un único individuo disconforme. Esto muchas veces no es posible con los sistemas operativos comerciales actuales (por ejemplo, con las estaciones Windows 9x) y se hace aún más difícil si el despedido es el administrador! Algunos sistemas intentan por tanto dividir las responsabilidades en diversos administradores, pero en el sector comercial todavía falta mucho camino por recorrer. Los usuarios de Linux podrían interesarse en el sistema LIDS a fin de implementar esta recomendación.

9. Educar a los usuarios

Una de las mayores ayudas que puede recibir un hacker que intenta infiltrarse en el sistema de una organización consiste en obtener información acerca de éste. En este sentido, las prácticas empleadas por el atacante comprenden muchas veces la interacción encubierta con los usuarios de la organización a los cuales se les extrae (sin que tomen conciencia de esto) una serie de datos útiles para el hacker. El caso más evidente consiste en obtener "como jugando" una contraseña de parte de este incauto. Y ciertamente las contraseñas de los usuarios comunes suelen ser muy malas, por lo que pueden liberarlas inadvertidamente al interlocutor en medio de una conversación aparentemente inocente. Esto se suele denominar "Ingeniería Social". La única forma de combatir esto es con educación para los usuarios. Por ejemplo, es necesario hacer que ellos sean conscientes de este tipo de ataque (o entrevista), y que una de las mejores medidas a tomarse es el uso de contraseñas suficientemente complicadas como para que no surjan de improviso en cualquier diálogo. Otra recomendación (o norma obligatoria si se desea) consiste en que los usuarios no divulguen detalles acerca de la configuración del sistema. Esta es una práctica increíblemente extendida: Auxiliares, programadores, ingenieros, e incluso administradores, que en su deseo de hacer alarde del "súper sistema" que utiliza su empresa, empiezan de pronto a nombrar todos y cada uno de sus componentes, tanto de hardware como de software, con número de versión incluido. Esto puede ser inmediatamente aprovechado por el atacante, pues empezará a "disparar" los ataques ya conocidos para ese hardware/software específico.

10. No confiar (totalmente) en nosotros mismos Esto puede sonar extraño, sin embargo lo único que quiero indicar es la necesidad de que otra persona verifique la seguridad de nuestro sistema. Como se sabe, existen empresas consultoras especializadas en auditar nuestra organización con este fin. Si esta última opción no es posible (por ejemplo, por el costo involucrado) entonces es de rigor solicitar a otro administrador o ingeniero que verifique las medidas que hemos considerado. En sistemas y redes complejas es muy posible que una sola persona (nosotros) hayamos dejado pasar alguna puerta insegura. Mientras más personas verifiquen nuestro trabajo, habrá más probabilidades de que éste esté adecuadamente realizado. Esta es la idea que está detrás de mucho software Open Source, siendo el Kernel de Linux el caso más conspicuo. Naturalmente evitaremos mostrar estos detalles a personas ajenas a la organización, a fin de disminuir el conocimiento que se tiene en el exterior acerca de nuestro sistema.

11. Ejecutar sólo los servicios imprescindibles

Page 20: Seguridad y Proteccion en Sistemas Distribuidos

Algunas personas tienen la manía de instalar los sistemas con la mayor cantidad posible de opciones que puedan entrar en el disco duro. Los administradores de sistemas seguros deben ir exactamente en sentido inverso: en un sistema de alto riesgo es de rigor que se ejecute únicamente lo imprescindible. El ejemplo más conocido corresponde a los servicios de red, los cuales muchas veces vienen configurados para estar activos tan pronto como se instala un sistema operativo, creándose automáticamente nuevas oportunidades para los atacantes. El administrador debería asegurarse de que sólo esté instalado lo imprescindible para que el sistema siga en operación. Debe descartar incluso el software aparentemente más inofensivo. Recuerdo haber leído de un caso en el cual el sistema de manuales de Solaris tenía una vulnerabilidad explotable que permitía a cualquier usuario ejecutar programas con mayores privilegios. Sistemas que en apariencia no tienen nada de riesgosos han presentado serias amenazas para la seguridad, como por ejemplo, las conexiones X Window, las librerías compartidas, los módulos del kernel, etc.

12. Descargas de software de Internet Como regla general, el software no debería ser descargado de Internet, sino adquirido de una fuente confiable. Sin embargo en muchos casos esto es imprescindible por lo que deberíamos seguir algunas reglas mínimas para no terminar descargando un virus o un "caballo de Troya". En primer lugar, debemos asegurarnos que el software que descargamos es realmente lo que hemos pretendido descargar. La idea es que un atacante podría modificar los datos que estamos recibiendo e introducir modificaciones en aquello que descargamos. Luego nosotros confiadamente ejecutamos el archivo en cuestión y... la historia es conocida. Para evitar esto, cada vez con mayor frecuencia los portales de descarga incluyen una serie de alternativas para verificar que lo que hemos descargado no ha sido alterado. Un método común consiste en el "checksum MD5" que el usuario debería aplicar a todo archivo que descargue, a fin de obtener una especie de "firma" que ha de coincidir con la que se anuncia en el portal. Es asimismo muy recomendable que los portales de descarga utilicen certificados digitales, de modo que no seamos presas de un portal ficticio implementado por atacantes (esto último es realmente es muy difícil, pero no imposible.)

13. Mantener contacto con el proveedor de líneas de comunicación Diversos problemas pueden aparecer en las comunicaciones desde nuestra red hacia el exterior en los cuales sólo el proveedor del enlace puede ayudarnos. Ciertos tipos de ataques necesitan de la participación de uno o más proveedores de Internet para paliarlos, como son ciertos tipos de ataque DoS (Deny of Service) ante los que nuestro firewall podría quedar indefenso. Sólo mediante el concurso de uno o más nodos de alto nivel del Internet se podría bloquear al atacante. Por suerte los ataques más sofisticados de este tipo no son muy frecuentes

14. No permitir conexiones directas desde la red interna a Internet Asumimos que en Internet están los malos, y por tanto nuestra red interna no debería tomar contacto con ellos. Sin embargo el Internet es irresistible e imprescindible para muchas personas de nuestra organización, por lo que debemos buscar algún mecanismo de protección. Una de las soluciones más generalizadas a este problema la constituyen los sistemas denominados proxy. En este caso, los usuarios de nuestra red local (a los que protegemos), se conectan aparentemente a Internet, pero realmente lo hacen hacia nuestro programa proxy. La función de éste es básicamente conectarse a Internet en beneficio de los usuarios internos que lo solicitan. El resultado es que los posibles atacantes observarán al proxy conectándose, pero no podrán acceder a la red interna. Obviamente nos aseguraremos que el proxy esté bien seguro. Esto es más sencillo que cuidar a cada estación con usuarios incautos y sus sistemas operativos inseguros. En resumen: cuando sea posible, use proxy para dar acceso a Internet para la red interna. Los proxys pueden presentar otras ventajas, como ahorro del ancho de banda y mayor velocidad de acceso a las páginas web más populares (proxy-caché.)

Page 21: Seguridad y Proteccion en Sistemas Distribuidos

15. Vigilancia

La vigilancia del buen funcionamiento del sistema es un asunto más complicado de lo que parece. El problema es que los ataques frecuentemente están disfrazados de conexiones más o menos válidas, y por otro lado, los sistemas de cómputo normalmente no avisan cuando son alterados, a no ser que esto se haya establecido de antemano. Los ataques generalmente tratan de aparentar que no ha ocurrido nada, a fin de conseguir hacer más y más modificaciones sin ser detectados y detenidos. Todo esto obliga a considerar de antemano ciertos indicadores que nos ayuden a determinar si un sistema ha sido comprometido o está en proceso de serlo. Esto en ciertos casos puede requerir mucha sagacidad y un profundo conocimiento de los mecanismos internos del sistema, así como la activación de una mayor descripción de eventos. Pero generalmente este análisis no se pone en práctica hasta que los síntomas aparecen y el ataque ya está muy avanzado, lo que ha motivado el incremento de productos que intentan adelantarse y dar aviso cuando algo anda mal. A estos sistemas se les conoce como sistemas de detección de intrusiones (IDS o NIDS.) El administrador precavido hará bien en considerarlos como parte de las medidas de seguridad.

10. CONCLUSIONES

Actualmente no existe un sistema seguro sino que es un sistema fiable. Unos de los sistemas de autenticación en los sistemas distribuidos recomendable es el

Kerberos. La seguridad de un sistema distribuido no hay que tomarse a la ligera, sino que hay que aplicar

todas las medidas de seguridad posibles. 11. Bibliografía

[1]: http://www.sc.ehu.es/acwlaroa/SDI/Apuntes/Seguridad.pdf [2]: mx.geocities.com/nancy_aguas/seguridad.pdf [3]: Seguridad en Unix y Redes – Versión 2.0 – Antonio Villalón Huerta [4]: Recomendaciones de seguridad en sistemas distribuidos de cómputo - (V0.11) Diego Bravo Estrada. [5]: Tanenbaum – Capitulo 7 ~ 8