Archives 2014

Transparencias «viejunas» sobre IDS

Hace muchos años (en el 2006) impartí unas clases en la Universidad de Almería sobre sistemas de detección de intrusos en el curso anunciado aquí.

Las transparencias que hice las he subido a Slideshare y he hecho un collage para presentarlas en este blog como anuncié hace unos días. Aquí lo tenéis.

Sobre SNORT, teoría:

Y prácticas:

Sobre Honeyposts, teoría:

Y práctica:

Y, por último, sobre Tripwire:

¡¡¡Espero que os sean útiles a pesar del tiempo que tienen!!!


Transparencias de clase sobre DHCP

Tal y como comentaba ayer en esta entrada, voy a ir dejando todas mis transparencias de clases, ponencias, conferencias y cursos en Slideshare.

Hoy toca el turno del servicio DHCP, clase que impartía en la asignatura de Administración e Instalación de Redes de Computadores en las titulaciones de Informática.

De las diferentes versiones (en función de los años) que tengo, he decidido publicar estas:


Transparencias de la clase sobre DNS en el Grado de Informática

Revisando el material de clase que tengo, he comprobado que creé transparencias de temas que, casi seguramente, no vuelva a utilizar y antes de que se pierdan en la profundidad de mi sistema, las he dejado (o dejaré ya que tengo que revisar muchas de ellas) en Slideshare.

De la asignatura de Administración de Redes de Computadores, he dejado, por ahora, la dedicada al servicio DNS.

Aquí la tenéis:

¡¡¡Espero que os sean útiles!!!


Más sobre WordPress

WordPress, como gestor de contenidos (CMS) ampliamente utilizado, se encuentra en el punto de mira de los «analizadores y aprovechadores» de agujeros de seguridad. Cualquier preocupación es poca y, por tanto, además de las tareas de fortalecimiento y análisis tratadas antes en este blog (I y II), debemos considerar aplicar otras: básicamente plugins que nos ayudan a mejorar la seguridad de nuestro sitio. Un listado bastante completo de ellos lo podéis encontrar en este gran trabajo recopilatorio de David Hernández.

Leer más


list open files (lsof)

lsof es una utilísima orden que nos muestra la información relacionada con los descriptores de archivo de nuestro sistema. Por ejemplo, cuando queremos desmontar un sistema de archivo y la respuesta es «Error: sistema ocupado», con ‘lsof +D /punto_de_montaje‘ podemos saber todos los procesos (la primera columna de la fila, o filas, que obtenemos como respuesta) que están utilizando dicho sistema de archivos (y actuar en consecuencia).

¿Qué más podemos saber con él? Pues conocer/obtener el listado de:

Leer más


Contraseñas, esas grandes desconocidas e ignoradas…

La forma en la que nos identificamos ante los gestores de nuestra identidad digital hará que esta sea más o menos fiable y, además, que no puedan «robárnosla» fácilmente. Aunque nada es imposible, como en muchos otros ámbitos de nuestra vida, nuestra seguridad digital reside en una serie de obstáculos que debemos situar entre los posibles atacantes y nosotros; complicarles en trabajo, sin complicárnoslo a nosotros mismos.

Al acceso a casi todos nuestros servicios reside, como mínimo, en una contraseña y la seguridad de esta empieza en una correcta selección de la misma:

Una buena contraseña:

  • Debe tener, al menos, seis caracteres alfanuméricos y uno o dos signos de puntuación, carácter numérico o especial o una mezcla de letras mayúsculas y minúsculas. Es decir, longitud más variedad.
  • Si se está cambiando una contraseña, la nueva debería tener al menos tres caracteres que no estuvieran en el password anterior.
  • Puede basarse en la concatenación de dos o más palabras o partes de palabras. Puede basarse en la inclusión de una palabra dentro de otra palabra. Por ejemplo, cladificilve que tiene la palabra difícil dentro de la palabra clave. Puede basarse en el intercalado de las letras de una o más palabras: por ejemplo, ‘glaotroo’ intercala ‘loro’ y ‘gato’.
  • Por supuesto, NO usar la misma contraseña para distintos servicios.
  • Importante: que siga un patrón fácil de recordad para nosotros y que implique el cumplimiento de las características anteriores y ninguna de las siguientes.

Y lo que no debe ser es:

  • Cualquier parte del nombre del usuario o el nombre de algún miembro de su familia o amigos.
  • No debe ser un número significativo para el usuario o para alguien cercano al usuario como números de la seguridad social, matricula del coche, número de teléfono, fechas de nacimiento, etc.
  • No debe formar parte de un diccionario.
  • No debe estar escrita en ningún sitio, solo debe residir en nuestra memoria y por supuesto, nunca, pero nunca, nunca, deberíamos comunicársela a otra persona.

Si tenemos dudas de lo buena que es, existen comprobadores como este

Si estamos interesados en mejorar nuestra seguridad digital, además, deberemos exigir, configurar y utilizar mecanismos MFA además de cambiar, periódicamente, de contraseña.

¡Ah! Y cuidado con los mecanismos de recuperación de contraseñas. Si la fortaleza de nuestra identidad recae en un elemento, debemos fortificar lo.

PD: Si no queremos calentarnos la cabeza, siempre podemos usar una aplicación de gestión de contraseñas. Haberlas, haylas…


Otra protección más con iptables y módulo recent

Al hilo de esta entrada, si lo que queremos es controlar, incluso, un posible escaneo de puertos desde una IP, y no solo peticiones abusivas a uno de nuestros servicios que es de lo que trataba la entrada anterior, tenemos:

iptables -I INPUT  --m state --state NEW -m recent  --set
iptables -I INPUT  --m state --state NEW -m recent  --update --seconds 60 --hitcount 5 -j DROP

Con la ejecución de estas 2 órdenes, cualquier intento de realizar más de 5 conexiones (destinados a cualquiera de nuestros puertos) desde una misma IP, producirá un bloqueo de las conexiones desde esta IP durante 60 segundos.

Este es un mecanismo fácil, rápido y eficiente de control de las peticiones que recibimos en nuestros servidores y más ligero que opciones como la comentada aquí, ya que detectamos y protegemos con el módulo recent de iptables, en un nivel más bajo y que apenas introduce carga al sistema.

Como ya comenté, lo podemos hacer también en routers, solo que afecta a otras tablas/cadenas (filter/FORWARD, nat/PREROUTING,…) y opciones a considerar.

¡Espero que os sea útil!

 Referencias

  1. man iptables

Port Knocking con iptables

Existe software desarrollado, como knockd, que nos permite utilizar una técnica de protección muy interesante: Port Knocking La idea es que, cuando se da una secuencia concreta de conexiones a determinados puertos, se habilita otro, que es nuestro objetivo final. Por ejemplo, tenemos deshabilitado el acceso al servidor SSH y, tras recibir una secuencia de conexión a los puertos 2000, 2002 y 50005, se activa la conexión, para esa IP de origen, al puerto 22 del SSH. Es una técnica más de las utilizadas para la fortificación de SSH (no es la panacea, ya que se puede descubrir la secuencia fácilmente, pero ya se sabe que cuanto más azúcar, más dulce).

Esta función se puede desarrollar  de manera muy sencilla con iptables y el módulo recent (que gestiona listas dinámicas de IPs  y que ya utilizamos para controlar el número de conexiones entrantes desde una misma IP en esta entrada). La siguiente lista de órdenes habilitaría el acceso al servicio SSH para la IP de origen desde la que se intente la conexión (en la secuencia correcta) a los puertos 2000 y 3000:

/sbin/iptables -N CADENA_PASO2
/sbin/iptables -A CADENA_PASO2 -m recent --name PASO1 --remove
/sbin/iptables -A CADENA_PASO2 -m recent --name PASO2 --set
/sbin/iptables -A CADENA_PASO2 -j LOG --log-prefix "ENTRANDO EN PASO 2: "
/sbin/iptables -I INPUT -m recent --update --name PASO1
/sbin/iptables -I INPUT -p tcp --dport 2000 -m recent --set --name PASO1
/sbin/iptables -I INPUT -p tcp --dport 3000 -m recent --rcheck --name PASO1 -j CADENA_PASO2
/sbin/iptables -I INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name PASO2 -j ACCEPT

Con estas reglas, debemos activar la política por defecto a DROP, para la cadena INPUT; también necesitamos una regla ACCEPT, para el puerto de origen 22 para cualquier destino en la cadena OUTPUT.

Para conectarnos, podemos ejecutar uno de los siguientes bloques de órdenes:

nmap -sn -PS2000 --host_timeout 200 --max-retries 0 servidor
nmap -sn -PS3000 --host_timeout 200 --max-retries 0 servidor
ssh [email protected] # Ahora está permitido 
telnet servidor 2000
telnet servidor 3000
ssh [email protected] # Ahora está permitido 

Con la segunda opción, los telnets estarán esperando a que salte el timeout y con 5″ de ventana de tiempo…

En cuanto a la primera:

  • «-sn»: No port scan
  • «-PS4000»: TCP SYN al puerto 4000
  • «–max-retries 0»: que no intente ningún reenvío
  • «–host-timeout 200»: que espere 200ms

Si queremos emular al conocido personaje Seldon Cooper,  y sus 3 «toques» cada vez que llama a una puerta, solo debemos añadir un puerto y su correspondiente fase más. Así, por ejemplo, para que la secuencia de activación de SSH sea: 4000, 2000, 3000, deberíamos configurar las iptables de la siguiente manera:

/sbin/iptables -N CADENA_PASO2
/sbin/iptables -A CADENA_PASO2 -m recent --name PASO1 --remove
/sbin/iptables -A CADENA_PASO2 -m recent --name PASO2 --set
/sbin/iptables -A CADENA_PASO2 -j LOG --log-prefix "ENTRANDO EN PASO 2: "
/sbin/iptables -N CADENA_PASO3
/sbin/iptables -A CADENA_PASO3 -m recent --name PASO2 --remove
/sbin/iptables -A CADENA_PASO3 -m recent --name PASO3 --set
/sbin/iptables -A CADENA_PASO3 -j LOG --log-prefix "ENTRANDO EN PASO 3: "
/sbin/iptables -I INPUT -m recent --update --name PASO1
/sbin/iptables -I INPUT -p tcp --dport 4000 -m recent --set --name PASO1
/sbin/iptables -I INPUT -p tcp --dport 2000 -m recent --rcheck --name PASO1 -j CADENA_PASO2
/sbin/iptables -I INPUT -p tcp --dport 3000 -m recent --rcheck --name PASO2 -j CADENA_PASO3
/sbin/iptables -I INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name PASO3 -j ACCEPT

Estas líneas que implementan la funcionalidad port knocking se deben añadir a los filtros que tengamos en nuestro servidor (o router, pero en este caso las reglas anteriores deben ir a la cadena FORWARD) y debemos tener en cuenta que:

  1. Las comunicaciones para SSH (o el servicio que sea) deben estar INHABILITADAS.  Con, por ejemplo, /sbin/iptables -P INPUT DROP lo logramos. La activación se hace con las órdenes del port knocking. Si no queremos ser tan drásticos: /sbin/iptables -A INPUT -p tcp –dport 22 -j DROP
  2. Debemos tener una regla que habilite las conexiones establecidas. Si no, nuestra sesión durará 5″ 🙁 Por ejemplo, una podría ser: /sbin/iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

¡Espero que os sea útil!

 Referencias

  1. man iptables
  2. Guía avanzada de nmap elaborada en conjunto por CSIRT-CV y el Centro Criptológico Nacional (CCN)

Más sobre fortificación de SSH

En cuanto ponemos un servicio SSH accesible desde cualquier parte de Internet, los ataques de fuerza bruta y demás se suceden casi al instante (es una licencia, evidentemente, hay un tiempo de «descubrimiento»). Nos llegan desde todo el globo terráqueo por lo que, hablando de protección y suponiendo que nunca accederá un usuario desde determinados continentes o países, aplicar la Geolocalización IP para deshabilitar conexiones se convierte en una opción muy interesante. Aún reconociendo la importancia de realizar buenos filtros y de implementar mecanismos de autenticación multifactor, en esta entrada nos vamos a centrar solo en las opciones de SSH básicas para su protección. He tomado como base, la clase que impartía en Administración de Servicios de Internet dedicada a SSH y su fortalecimiento.

Las opciones con las que vamos a intentar mejorar y adaptar la configuración de nuestro servicio a nuestra política de seguridad y a nuestras necesidades, las encontraremos en el fichero /etc/ssh/sshd_config.

Empecemos….

Leer más


Las cookies nos permiten ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas el uso que hacemos de las cookies. Más información.