Hogar Mapa Indice Busqueda Noticias Arca Enlaces Sobre LF

Este documento está disponible en los siguientes idiomas: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
por Georges Tarbouriech

Sobre el autor:

Georges es un usuario viejo de Unix. Piensa que la seguridad informática es uno de los desafíos más importantes de éste siglo.


Contenidos:

Psionic Portsentry 1.1, el defensor de los puertos

[illustration]

Resumen:

Psionic portsentry es parte de las herramientas del proyecto Abacus (al lado de portsentry, tienen logcheck y hostsentry). Es un IDS (Sistema de detección de intrusión) dedicado a la detección de barridos de puertos y a la defensa activa. Funciona con muchos sabores de Unix incluso Mac OS X. La característica principal de un IDS es de informar al administrador sistema sobre intentos de intrusión. Portsentry va más lejos, puesto que es capaz de reaccionar a un ataque. La última versión (1.1) de esta herramienta muy buena se encuentra a http://www.psionic.com, y a propósito, la versión 1.0, ahora hace parte de unas de las mayores distribuciones Linux (Debian, RedHat...).



 

Por qué usar portsentry ?

En los pasados diez años, redes informáticas han crecido con una velocidad increible. El objetivo era de permitir la comunicación entre maquinas usando SO diferentes. Así los sistemas de red propietarios fueron poco a poco remplazados por TCP/IP. Internet hizo el resto ! Hoy, la mayoría de las redes funciona bajo TCP/IP y TCP/IP depiende de puertos. Para ponerlo en corto, puertos estan atados a programas (clientes o servidores). El servidor escucha hasta que un cliente le contacta para establecer una comunicación. Los servicios (los programas arriba mencionados) se ven destinados a un puerto específico. En los sistemas Unix, ésta asignación se encuentra en el fichero /etc/services. Es decir que cada uno puede saber cual puerto esta dedicado a cual servicio. Si cada uno sabe, los "crackers" saben aún mejor ! Si consideramos un puerto como si fuera una puerta, cuando un puerto esta abierto (escuchando), se puede comparar con una puerta con el cerrojo descorrido. Y cómo entran en una casa ? Normalmente por la puerta (bueno, si prefieran la ventana, le toca a vosotros !). Es lo que hacen los "sombreros negros" para entrar en un ordenador...
La primera cosa que pueden hacer para reducir el riesgo es de cerrar lo más puertos possible, es decir parar los servicios. Lo menos lo mejor. Pero no pueden cerrar todos los puertos en una máquina en una red : ya no podría comunicar más, lo que sería una lástima !
Cómo limitar los servicios activos o cómo cerrar los puertos es más allá del subjeto de este artículo. Encontrarán mucha literatura en el asunto, por ejemplo visitando el Linux Documentation Project o buscando en LinuxFocus (por ejemplo, Bastille-Linux o Herramientas de seguridad). Igual por lo que concierne las maneras de proteger una máquina o una red. Bajo Linux, pueden considerar Bastille-Linux como de primera necesidad.
Y aquí llega portsentry. Portsentry puede vigilar puertos y puede bloquearlos si le piden hacerlo. Provee diferentes modos operativos, unos siendo específicos a unos SO. De hecho, unos SO significa Linux.
Portsentry puede aprovechar los filtrajes de paquetes tales como ipfwadm, ipchains o iptables según el kernel Linux que tienen. También es verdad para otros sabores de Unix usando diferentes herramientas (volveremos en el asunto ese más tarde). Aquí estamos : la característica más importante de portsentry, es probablemente "auto-bloqueo".
Cómo lo hace ? Ya vamos !

 

Cómo instalar portsentry ?

Portsentry llega en un arca muy pequño. Depués de extractar el arca, tienen el código fuente y varios ficheros de configuración y README. Claro, todo eso se recomenda leer. Puesto que hablamos de seguridad, no olviden bajar los ficheros PGP (firma y clave).
Instalar portsentry es evidente : make (su sistema) y make install. Pero, antes la instalación, tendrían que prepararla. Es decir, tendrían que leer la documentación, modificar el fichero portsentry.conf para que corresponda a lo que necesitan y controlar el Makefile y el fichero portsentry_config.h file.
Para que portsentry sea lo más eficaz possible, necesitan por lo menos, TCPWrappers. Por lo menos, porque sería mucho mejor usarlo unido con una herramienta de filtraje de paquete. Claro, si usan Linux, ya tienen todo lo que se necesita. Qué para otros Unices ?
Puesto que hemos probado portsentry en diferentes plataformas, podemos hablar de lo que hace falta.
Bajo MAC OS X, es igual que para Linux : ya lo tienen todo. Tienen TCPWrappers y ipfw (versión BSD). Así basta con teclar "make osx".
Bajo Solaris 2.6 (SPARC), no tienen TCPWrappers. Pueden obtenerlo desde ftp://ftp.porcupine.org/pub/security. También pueden probar IPFilter disponible desde ftp://coombs.anu.edu.au/pub/net/ip-filter/ip-fil3.4.9.tar.gz (pero solo si tienen el compilador Solaris !!!).
Bajo Irix 6.5, tampoco tienen TCPWrappers. Lo encontrarán en forma de "package" a http://freeware.sgi.com/index-by-alpha.html Para filtrar los paquetes tienen ipfilterd, haciendo parte de la distribución Irix pero no instalado por defecto.
Ultimo, a menos de encontrar un vsnprintf() funcional, no podrán instalar portsentry bajo NeXTSTEP... y no encontre ni uno !
No obstante, de nuevo, tendrían que configurar portsentry antes de instalarlo. Bueno, es como les da la gana, pero sería mejor entender su filosofía antes de todo... solo es cuestión de opinión !

 

Cómo funciona portsentry ?

Muy bien, gracias !
En serio, portsentry depiende de los ficheros de configuración. El más importante es el fichero portsentry.conf. Aquí es donde van a decir a portsentry como reaccionar en frente de la adversidad.
Antes de trabajar en este fichero, tienen que conocer los diferentes modos operativos y lo que hacen.
Portsentry puede usar seis modos diferentes, según la opción elegida al arrancar.
- La primera es "-tcp" y es el modo básico. Con esta opción, portsentry va a atar los puertos TCP encontrados en el fichero de config en la parte "port configuration". Puede atar hasta el limite de 64 puertos.
- La segunda es "-udp" y hace lo mismo que la anterior para los puertos UDP.
- La tercera es "-stcp", la "s" significando "stealth" (furtivo). Esta opción y las siguientes son disponibles solamente bajo Linux. Con la opción "-stcp", portsentry usa un socket para vigilar los paquetes llegando, es decir los puertos no se atan a nada.
- La cuarta es "-sudp" y hace lo mismo que la anterior para los puertos UDP.
- La quinta y la sexta son "-atcp" y "-audp". Son las opciones más eficaces ("a" significa "advanced" [avanzada]). Usando estas opciones, portsentry hace una lista de los puertos TCP y UDP escuchando, si seleccionan ambos, y bloquea el host tratando de conectar con estos puertos, a menos que el dicho host sea presente en el fichero portsentry.ignore.
Eso es mucho más bien explicado en los ficheros README llegando con portsentry. Entonces, no vamos a reinventar la rueda, tratando de escribir de nuevo la documentación. Estos ficheros README se necesitan leer (como de costumbre, hay que ser un poco fascista !).

Cómo reacciona portsentry ?

Evidentemente, portsentry puede crear logs. Si son de la categoría de sysadmin quienes no lean los logs (que vergüenza !), pueden usar logcheck al lado de portsentry. Así, portsentry manda un correo para informarles de una tentativa de intrusión.
Puede escribir el "target host" en el fichero /etc/hosts.deny, para beneficiar de TCPWrappers.
El host local puede cambiar la ruta del tráfico de la red hacia un host muerte.
Ultimo, el host local puede "echar" los paquetes via la herramienta local de filtraje de paquete.
Ahora que conocen un poco más la filosofía de portsentry, pueden empezar a escribir el fichero portsentry.conf.
- La primera sección del fichero de config concierne los puertos. Aquí se pueden elegir los puertos para atar. Recuerden, si usan los modos avanzados para Linux, esto ne se tomara en cuenta. Cuidado con los puertos que quieren atar (no aten el puerto 6000 por ejemplo, si usan X).
- La sección siguiente concierne las opciones de detección avanzada. El defecto es de vigilar cada puerto bajo 1024, sea por TCP, sea por UDP. Tambien pueden excluir los puertos que quieren ignorar. Eso es muy importante para evitar alarmas falsas y logging enormes, particularmente si tienen maquinas Windos en su red. Por ejemplo, cuidado con el puerto 111 si usan portmap y si los hosts no se encuentran en el fichero portsentry.ignore. Claro, sería loco, puesto que portmap significa servidores RPC tales como NFS, pero ahora saben. Es decir, NFS no esta muy seguro en maquinas Unix entonces, ni hablar de maquinas Windos.
Aquí llega la parte habitual fuera del asunto : cuando escribo "Windos", no es un error de máquina, solo es para insistir en el hecho que Windows es un entorno por encima del DOS (D por desgraciado ?)... y hace un carácter menos que teclar (que holgazán !). Perdón por la digresión.
- La sección de los ficheros de configuración concierne los ficheros usados por portsentry para objetivo histórico o para definir los hosts que quieren ignorar. Si hacen una instalación por defecto, no cambien eso.
- La sección de config diversa permite activar o no los DNS lookups.
- La sección de opciones de repuesta es el corazón de la configuración. Aquí van a definir cómo portsentry reacciona.
Primero, tienen las opciones para ignorar. Pueden elegir de bloquear los barridos, no bloquearlos o arrancar un comando externo.
Después, en la sección para "echar" las rutas, dicen a portsentry cómo "echar" la ruta o cómo beneficiar de la herramienta de filtraje de paquete instalada en la máquina. Hay muchos ejemplos para muchas plaformas. Elijan la que corresponde a lo que necesitan (solo una !).
- La sección TCPWrappers indica si quieren escribir en el fichero /etc/hosts.deny.
- La sección comando externo permite definir un comando para arrancar cuando un host se conecta.
- La sección del valor de iniciación de barrido permite definir el tiempo de reacción. El valor por defecto de "0" es el más inmediato puesto que manda una alarma a la primera tentativa de conexión.
- La última sección es para visualizar una bandera en caso de intento de intrusión. No funciona con los modos "stealth".
Cuando han acabado con esta parte, casi han terminado. De nuevo, para evitar alarmas falsas y enorme "logging", averiguen el fichero portsentry.ignore. Pueden añadir aquí la dirección de la red local con los bits del netmask, o la dirección IP de algunas maquinas.
Ya esta ! Ahora pueden teclar "make sistema" y "make install". El script de instalación lo hace todo puesto que da derechos restrictivos al directorio y a los ficheros. Ahora, basta con arrancar portsentry con las opciones que han elegido. Lean los logs para ver lo que ha pasado. Si todo ha salido bien, portsentry ha arrancado y ha mejorado la seguridad del host.

 

Qué pasa entonces ?

Usando herramientas tales como nmap, pueden simular un barrido de los puertos del host ahora más seguro. (Más sobre nmap allí). Aquí esta lo que pueden obtener :

portsentry funciona
 en el host barrido

Es decir que la máquina esa no da mucha información al pirata que han vuelto !
Normalmente, esta tentativa hubiera dado por lo menos, la versión del SO y los puertos abiertos en el host barrido. Este tipo de información es muy útil para un pirata puesto que sabe mejor a donde y como atacar. Con portsentry funcionando con un valor de 0 para la iniciación y en modo avanzado, el bloqueo es inmediato. Con un valor de 1 en modo normal, el ataquante hubiera obtenido una lista de los puertos abiertos y probablemente el tipo del SO de la máquina. Pero, después, tratando de conectar a un puerto conocido por ser abierto, sería un fracaso. Portsentry ha bloqueado el puerto después de la primera tentativa. Sencillo pero eficaz !
Es decir, si usan solamente TCPWrappers, la dirección IP ha sido escrita en el fichero /etc/hosts.deny. Si han decidido de echar la ruta redirigiendola hacia un host muerte, portsentry aún es eficaz pero no protege de los ataques UDP.
Si usan una herramienta de filtraje de paquete, el host atacado echa los paquetes llegando del ataquante por la herramienta esa.
Claro, es la mejor manera de beneficiar de toda la potencia de portsentry.
Otra vez, el modo avanzado bajo Linux es ideal. Esto no significa que portsentry no es tan bueno bajo otros SO, sólo tiene menos resultados... bueno, no realmente !
Para entender mejor, lean los logs siguiendo diferentes tentativas de intrusión bajo diferentes SO y usando portsentry en modos diferentes. Eso lo dice todo !
Según los modos usados, los logs pueden proveer unas alarmas falsas. Para mejorar la cualidad de la información, tendran que trabajar en el fichero de config. Después de unas pruebas, obtendran normalmente lo que quieren exactamente.

 

Se puede vivir sin portsentry ?

Absolutamente NO ! Hay muchos IDS, libres o no. Muchos de ellos son muy buenos. Podemos mencionar el muy conocido snort disponible desde http://www.snort.org.
Normalmente, estos IDS son pasivos. Es decir, se usan para informar de una intrusión. Fueron escritos por eso. Por ejemplo, snort es muy sofisticado, puesto que depiende de scripts de reglas, así permitiendo de escribir sus propios scripts. El sitio de snort provee un base de datos de reglas. Y, a propósito, si no tienen miedo a los logs enormes, pueden usar ambos portsentry y snort. No es tan estúpido !
Sin embargo, la fuerza de portsentry viene de que es un IDS activo. Su manera de reaccionar es increible. Combinado con una herramienta de filtraje de paquete, portsentry vuelve la herramienta obligatoria. Podríamos pedir la pregunta : es portsentry el complemente de filtraje de paquete o es filtraje de paquete el complemente de portsentry ?
Claro, hay mucho más que decir sobre portsentry. Por ejemblo, hay que tener mucho cuidado con la detección de barrido UDP en modo avanzado. Lean la documentación (de nuevo !) para entender los problemas relativos a UDP. Solaris tambien puede causar problemas puesto que usa puertos muy altos alrededor de 32700 (sea por TCP o UDP). Pero, ese artículo sólo toca el asunto por encima y en ningún caso es una revista completa de este gran software.
La seguridad informática es una responsabilidad y no solamente para los administradores de sistemas. El increible desarrollo de Internet hace las cosas aún peores. Es decir, el peligro de intrusión es cada día más grande. La comunidad del software libre provee muchas herramientas muy buenas : portsentry es una de ellas. No las dejen por detrás ! Pero, recuerden, estas herramientas sólo reducen el riesgo y en ningún caso hacen un sistema 100% seguro. Esto es otra razón para buscar en el área de las herramientas de seguridad.
Ultimo, la gente de Psionic trabaja en un producto comercial y dice "no seran decepcionados". Entonces, esperemos y vemos !
Antes de su llegada, bajen portsentry 1.1, tampoco seran decepcionados. La gente de Psionic hace un gran trabajo. A propósito, hostsentry también vale la pena de ser probado... y usado.
Que época más estupenda vivimos !

 

Referencias

Los sitios web siguientes son referencias absolutas cuando se trata de seguridad. Aún más, pueden mandarles hacia otros sitios, estos últimos mandandoles hacia todavía más sitios... Saben, las muñecas Rusas ? El único problema si quieren leerlo todo es que no viviran bastante tiempo !!!
http://www.linuxsecurity.com
http://www.sans.org
http://www.infosyssec.org
http://www.securityfocus.com is
http://www.cs.purdue.edu/coast/hotlist/

 

Formulario de "talkback" para este artículo

Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
 Ir a la página de "talkback" 

Contactar con el equipo de LinuFocus
© Georges Tarbouriech, FDL
LinuxFocus.org

Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus
Información sobre la traducción:
en -> -- Georges Tarbouriech
en -> es Georges Tarbouriech

2001-09-10, generated by lfparser version 2.9