sep 09 2011

“Seguridad Por Niveles”, el libro. Descarga gratuita en PDF (700 pag).

Cuando el amigo Alejandro Corletti te envía un e-mail, ya sabes que es sinónimo de buen material. Tanto aquí como en Daboweb, más de una vez nos hemos hecho eco de sus trabajos y el que hoy os recomiendo, es sencillamente impresionante. En este caso con un prólogo y presentación firmado por Arturo Ribagorda Garnacho y Jorge Ramió Aguirre.

En el libro “Seguridad por niveles” (Con licencia Copyleft) se da un excelente repaso a lo que alguien interesado en redes o seguridad informática puede necesitar, desde las capas más bajas del sistema (Modelos OSI, DARPA, etc) a las más altas, desgranando el protocolo TCP-IP, pasando por el análisis de tráfico de red (algo que hace muy bien nuestro gran colaborador y redactor de Daboweb Alfon de “Seguridad y Redes“) con herramientas como Wireshark, tcpdump, etc además de introducirnos en el mundo de los “sniffers”. Hablando de estos temas, puedes ver el gran trabajo que está realizando Alfon en Daboweb desde este enlace con su sagaAnálisis de capturas de Red“.

En el libro también se habla también de; ARP, ICMP, IGMP, DHCP, IPV6, DNS, Telnet, FTP, SSH, SMTP, SSL-TLS, los Honey Pots, Criptografía, PKI, etc, además de cómo se pueden detectar vulnerabilidades en estos protocolos así como los procesos por los cuales se pueden ver comprometidos (ARP o DNS Spoof).

Hay un capítulo dedicado a los IDS (Sistemas de detección de intrusiones) y no podían faltar en un libro como este herramientas Open Source tan populares y efectivas como Snort, Nikto, OpenSSH, Netcat, Nmap, Iptables y un largo etc.

Al final del libro podrás encontrarte con capítulos en los que se habla de auditorías de seguridad, la familia ISO 27000 (sistema de gestión de la seguridad de la información), IPsec o lo que es un Plan de Continuidad de Negocio.

En definitiva, una guía bajo mi punto de vista que resume muchos aspectos imprescindibles para aficionados y profesionales tanto de la gestión de sistemas, redes o seguridad desde la base hasta niveles más altos en cuestiones técnicas.

Muchas gracias Alejandro una vez más por tu aportación a la comunidad, la forma de distribuir tu libro y tu profesionalidad -;).

Acceso a la información sobre el libro en darfe.es

Descarga directa del libro en PDF (709 páginas, 22 mb).

 

Tags: , , , , , , , , , ,


oct 16 2010

Bloqueo de ataques de fuerza bruta en servidores GNU/Linux con BFD

Lo primero que os recomiendo antes de empezar a leer esta entrada, es dar un vistazo (los asiduos a DaboBlog ya lo conoceréis) a este post sobre el resumen de mi participación junto a Oreixa en el pasado EFIMP (Eset Foro Internet Meeting Point) de Gijón en el que hablo de diferentes tipos de ataques web y control del tráfico en nuestro servidor GNU/Linux con herramientas como Mod Evasive, Apache Status, Mod Security, Medusa, Whatweb, Pentbox, APF Firewall, etc.

Más que nada lo digo porque cuando hablamos de ataques de fuerza bruta, solemos dar prioridad (obviamente) a servicios como ssh con soluciones como fail2ban o DenyHosts tal y como reseño en esa entrada pero ¿qué pasa por ejemplo con el FTP u otros tan sensibles como el correo?

Ahí es donde entra en escena BFD, una herramienta más de los creadores de APF Firewall (que por cierto, su trabajo es impresionante, mirad la lista, tengo que probar LSM, Linux Socket Monitor)

¿Qué es y cómo actúa BFD?

BFD es una aplicación creada por Ryan MacDonald con licencia GPL que una vez instalada, se ejecuta por defecto cada 3 minutos en el cron, buscando en logs relevantes del sistema (/var/log/secure, /var/log/auth.log, /var/log/messages, esto puede variar según la distro) rastros de posibles huellas de ataques de fuerza bruta (fallos de autenticación) en servicios como courier, cpanel, exim, proftpd , pure-ftpd, sshd, etc.

¿Cómo actúa? una vez que localiza el ataque (por defecto el valor que viene en su configuración es “TRIG=”15″, 15 intentos) ejecuta un comando del sistema para bloquear el host que lo ha provocado (por defecto usa el bloqueo de APF Firewall, asumiento, erróneamente a mi modo de ver, que se tiene instalado APF, este es el comando (BAN_COMMAND=”/etc/apf/apf -d $ATTACK_HOST {bfd.$MOD}”)

Aspectos a tener en cuenta. (Probado en Debian Lenny)

Pero en ese valor, (BAN_COMMAND=) podéis usar comandos de iptables, Shorewall, etc, u otro del tipo BAN_COMMAND=”route add -host $ATTACK_HOST reject”. Eso queda a vuestra elección y depende de qué tengáis instalado en el servidor web.

En el fichero de configuración principal que está en; /usr/local/bfd/conf.bfd también se puede definir además de los intentos de bloqueo, comando para rechazar el host atacante y el resto de opciones, que se envíe un e-mail (EMAIL_ADDRESS=”aquí el mail”) avisando del ataque y posterior bloqueo.

Su instalación es muy sencilla, una vez descargado con tipear un ./install.sh es suficiente pero en mi caso, me daba este error en el cron; Error: bad minute; while reading /etc/cron.d/bfd . No era el tiempo de ejecución sino que ahí también va un valor referido al email que hay que rellenar al igual que en /usr/local/bfd/conf.bfd;

MAILTO=aquí el mail, por defecto vacío
SHELL=/bin/bash
*/3 * * * * root /usr/local/sbin/bfd -q

Por lo que además de incluir el mail en la configuración principal; /usr/local/bfd/conf.bfd, también deberéis tener en cuenta este campo a rellenar en el cron; /etc/cron.d/bfd.

Para ver que funciona correctamente, hablando del cron, os recomiendo tener una consola con el siguiente comando;

tail -f /var/log/syslog | grep -i bfd

Y si todo va bien y no os sale el error de “bad minute”, se debería ver cada 3 minutos esto;

Oct 16 21:24:01 server /USR/SBIN/CRON[5017]: (root) CMD (/usr/local/sbin/bfd -q)

Oct 16 21:27:01 server /USR/SBIN/CRON[5468]: (root) CMD (/usr/local/sbin/bfd -q)

Oct 16 21:30:01 server /USR/SBIN/CRON[5468]: (root) CMD (/usr/local/sbin/bfd -q)

También en /var/log hay un fichero que se crea referido a BFD (/var/log/bfd_log).

Lo último que os recomiendo, es que miréis bien tanto la documentación sobre BFD (Brute Force Detection) y como estamos viendo, leer tranquilamente los valores incluidos en el fichero de configuración principal (/usr/local/bfd/conf.bfd).

Este concretamente “syslog auth log path” puede variar, ya que por defecto incluye /var/log/secure y en Debian por ejemplo es /var/log/auth.log. A este tipo de detalles me refiero con mirar bien cada valor.

Además de todo esto, no paséis por alto comprobar las reglas (en /usr/local/bfd/rules) que incluye por defecto para las aplicaciones a proteger, borrando las que no tengáis en el sistema, o cambiando el valor “TRIG” para el bloqueo independiente deseado para cada servicio.

Si se escribe sin ningún parametro bfd en el prompt del sistema, veréis esto;

-s|–standard …….. run standard with output

-q|–quiet ……….. run quiet with output hidden

-a|–attackpool …… list all addresses that have attacked this host

Por defecto si os fijáis en la entrada del cron, se ejecuta con la opción “-q”, para ver la lista de IPs que han sido bloqueadas se usa el parámetro “-a”. Para comprobar su funcionamiento podéis usar Medusa con este comando para atacar una cuenta FTP;

medusa -h ip-host-a-atacar -u usuario_ftp -P passwords.txt -e ns -M ftp

Asumiendo que desde el directorio que estáis tipeando el comando, tenéis una lista de passwords llamada passwords.txt. (Podéis usar esta del proyecto Openwall aunque hay muchas y muy variadas).

Suerte con la instalación y espero que esta entrada os sea de ayuda para que deis menos vueltas que las que he dado yo para configurarlo, ciertamente no es que sea complicado, pero sí un poco farragoso por las conf que trae por defecto.

Tags: , , , , , , , , , , , , , , , ,


jul 11 2010

“Sobrevive a tu tráfico web” Impresiones y la parte de mi charla, seguridad a nivel de servidor en el #FIMP

Hola amigos, alguno me pidió que publicase enlaces y algún texto sobre la parte que me tocó a mi (Servidores web y seguridad) en el pasado ESET Foro Internet Meeting Point que se celebró en Gijón.

Foto cortesía de mi gran amigo Fernando (SInLaVeniA), su crónica.

En su momento, hablé más o menos aquí de lo que iba a hablar en esos 30 min que me tocaban a mi en el EFIMP, después, os comenté en esta otra entrada que tendría el placer de compartir mesa con Fernando De La Cuadra (ESET), muchas gracias por todo, además de con un gran amigo Oscar Reixa (Oreixa) que ya ha publicado su parte de la charla (Seguridad en WP y optimización), alguien que no dudo en estar conmigo allí cuando le comenté la posibilidad de hacer algo juntos para la ocasión.

No voy a intentar referenciar o enlazar a todos los amigos que estuvieron allí además de los que conocí “in situ”, porque seguro que me olvido de alguno así que sólo puedo decir que gracias, por todo.

Lo cierto es que el tiempo era justo y después estaba el partido de Paraguay, (que no lo pude ver entero ya que Oreixa tuvo que llevar a Julia a casa por un asunto familiar y me quedé encerrado en su coche 20 min, con radio, eso sí -;) pero quizás contra lo que más tuve que luchar fue contra mi mismo, el Sábado por la mañana andaba todavía con fiebre del gripazo que me pillé unos días antes.

Pude estar ahí gracias a los antibióticos, el Bisolgrip, la excelente organización con su máximo exponente en Ana Fernández Ordíz, tutelada por un gran profesional como Carlos Urioste y a esos grandes amigos que tengo -;).

El Viernes no pude estar por razones obvias, pero desde las 9,30 del Sábado, estuve asistiendo a las interesantes charlas que nos precedían y conseguí “desquitarme” un poco el Sábado por la noche cuando acabó todo y compartí unos cuantos buenos momentos con varios de los participantes del EFIMP.

Me precedieron como os decía Fernando De La Cuadra (ESET) que habló de seguridad local con algunos conceptos fundamentales y Oscar Reixa (Oreixa) que tomó el testigo hablando de seguridad a nivel de WordPress (El CMS más usado de los que estábamos allí) y cuestiones de optimización como podéis ver en el enlace de superior de su parte).

Luego seguí yo hablando de seguridad web a nivel del servidor (cuando publiquen el vídeo lo enlazaré desde aquí), cada ejemplo lo acompañé de una demostración práctica ya que no quería quedarme sólo en la teoría y me basé en experiencias propias usando para ello un par de servidores web dedicados en producción bajo Debian, el mismo S.O que corría en mi MacBook (con KDE 4x). Todo ello dentro de mis limitados conocimientos adquiridos a base de muchas noches intentando “comprender”.

Algún participante comentó que quizás mi parte era muy técnica pero en el programa y donde iba mi ficha de participante ya puse esto “Todo ello apoyado con escenarios reales de ataques web de diversos tipos” y vaya, Internet es tan real como lo que se pudo ver(me quedé corto, os lo aseguro).

Conocer los riesgos o amenazas antes de montar tu flamante negocio online (que se habló mucho de ello) por citar un ejemplo y saber a qué te enfrentas y cómo hacerlo o qué deberías contratar caso de que no quieras pasarte media vida frente un terminal, creo que es fundamental. Ya hablé en esta entrada de la situación inicial en la que te encuentras contratando un servidor virtual/dedicado administrado sólo con un Plesk, DA o Cpanel.  Mucha responsabilidad y más riesgo.

Todo ello partiendo de la base de que como dije allí, hablamos de ataques automatizados en la mayor parte de los casos, si esos ataques se realizan de un modo directo por alquien que tenga los motivos, conocimientos o dinero suficiente para llevarlos a cabo, tienes un buen problema ya que de un modo u otro, acabaría por conseguir su objetivo…

Parte 1; Seguridad por oscuridad.

Como complemento a lo que comentó Oreixa a nivel de WordPress, di algún repaso a cuestiones de Apache y PHP frente a posibles ataques automatizados buscando versiones obsoletas como pueden ser las siguientes;

Ocultar la versión de Apache y PHP (con ello también la del sistema operativo a veces y PHP, SSL, etc)

Primero vimos cómo con una simple extensión de Firefox se podía conseguir una valiosa información acerca del servidor web que está ejecutándose en una web, se trata de Server Spy.

En apache2.conf (normalmente estaría en /etc/apache2/apache2.conf) cambiamos los siguientes valores; ServerTokens por defecto está en “Full”, lo cambiamos a “Prod”.
ServerSignature por defecto está en “On”, lo cambiamos a “Off”.

Luego vimos como con esto no es suficiente ya que el “flag” de PHP por defecto revela información acerca de estas cuestiones tal y como se comprobó con una simple petición con curl;
curl -i aqui-la-web.com y mediante la herramienta whatweb con un ./whatweb aqui-la-web.com

Para ello, editamos el fichero de configuración de PHP, php.ini (normalmente en /etc/php/apache2/php.ini)
El valor expose_php por defecto está en “On”, hay que ponerlo en “Off”, esto, además de revelar que está ejecutándose de facto PHP, algo que no es un riesgo para la seguridad realmente, revela la versión de PHP como se pudo ver también mediante una petición con curl, el mismo whatweb o vía un escaneo con nmap del tipo nmap -sS -sV -P0 aquí-la-web.com.

Para que todos estos cambios se hagan efectivos, es necesario recargar la configuración de apache, por ejemplo con /etc/init.d/apache2 reload.

Para testar cómo es nuestra configuración de PHP a nivel de seguridad, aconsejé el uso de phpsecinfo, sólo tenéis que descargarlo y descomprimirlo dentro de la raíz de vuestro site y acceder vía el navegador.

Parte 2; Rootkits, puertos, servicios ejecutándose en la máquina.

Aquí primero hice un par de demos con dos herramientas para buscar Rootkits-Troyanos además de cambios (al estilo Tripwire) en comandos esenciales en el sistema, configuración de algunos servicios y versiones, en este caso rkhunter, además de otra aplicación muy potente como chkrootkit.

También puse algún ejemplo de cómo controlar el estado de las conexiones viendo tanto puertos abiertos como qué servicios se ejecutan en dichos puertos con herramientas como;

iptraf, lsof o netstat o nmap pudiéndose añadir alguno más, varios ejemplos;

netstat -an
lsof -i
ps ax | grep apache | wc -l (Procesos que origina Apache)
netstat -n -p | grep SYN_REC | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -n (Tráfico SYN).

También hablé de la importancia de controlar el tráfico que enviamos o recibimos y además del uso de Munin (que se vio en la parte de Oreixa), puede ser una buena opción el comando vnstat, ejemplos;

vnstat -m (mes)

vnstat -d (dia)

vnstat -h (hora)

Parte 3, diferenciando el tráfico legítimo del no deseado y bloqueo con Mod Evasive.

En esta parte además de hablar de algún ejemplo de picos de tráfico supuestamente legítimos que al final no lo eran tanto (Robots de Yahoo, algún ataque de una Botnet, etc), recomendé para monitorizar en tiempo real el tráfico que llega a nuestras webs, el uso del módulo para Apache Server Status (ahí se puede ver en el sitio web de Apache a Mod Status en acción).

Luego, para los casos en los que sea necesario bloquear picos de tráfico puntuales (más que parar un ataque DoS como se lee mucho por ahí), otro módulo para Apache como Mod Evasive puede ayudarnos, hice una demo del script en Perl que viene con él, (test.pl) para ver cómo bloqueaba un intento masivo de 200 conexiónes a la vez.

Parte 4, acceso al servidor vía SSH, FTP, riesgos y medidas de seguridad.

Hablé de algún consejo para usar con mayor seguridad estos servicios, realizando una demo con Medusa de un ataque de fuerza bruta contra una cuenta FTP y el mejor consejo que pude dar es que no se use como nombre de usuario del FTP, el mismo que tiene la web, para que un ataque de fuerza bruta no sea tan fácil de realizar.

Recalqué lo importante también que es además de cambiar el puerto por defecto del SSH (el 22) y de no usar la cuenta de “root” para conectar vía SSH, revisar los logs del sistema con regularidad ya que este tipo de ataques dejan un rastro fácil de seguir a poco que se observen con atención esos logs (authlog, secure.log, etc).

Para proteger los intentos no deseados de conexión vía SSH, recomendé el uso de DenyHosts (también puede servir Fail2ban) que bloquea tras el número de intentos que definamos una conexión añadiendo la IP a “hosts.dey” y enviando un mail con la IP del bloqueo. También BFD os puede ayudar hablando de ataques de fuerza bruta.

Parte 5, APF Firewall trabajando junto a Iptables.

Para usuarios que no estén familiarizados con el uso de iptables, el firewall por excelencia en sistemas GNU/Linux, recomendé el uso de APF Firewall, puede trabajar junto a paneles como Plesk, CPanel, DA, etc, contando con un fichero de configuración (/etc/apf/conf.apf) muy faćil de interpretar, pudiendo cambiar valores del sistema a nivel de Kernel para paliar ataques DoS (sysctl, etc), descargar listas de IPs maliciosas de lugares como Dshield, etc, recargar la configuración pasado un tiempo (muy válido para DNS dinámicas) o al estilo de “Porsentry” detectar y bloquear un escaneo u otros ataques definiendo los valores deseados TOS o proteger ciertos rangos de puertos previamente definidos.

Hice una demo de ataque (DoS Flood Syn) y detección-bloqueo con una gran herramienta como es Pentbox creada por Alberto Ortega, por cierto, esa demo fue sólo una parte de lo mucho que puede hacer Pentbox.

Parte 6, Mod Security para Apache.

Aquí expliqué algo acerca de las bondades del módulo para Apache Mod Security, potente firewall de aplicaciones y del por qué de su uso en hostings compartidos donde el admin no puede controlar todo lo que instalan o no actualizan sus “inquilinos”. Pero ojo con matar moscas a cañonazos…

Repasé a grosso modo las opciones de detección y bloqueo que se pueden definir en sus extensas reglas (CRS) de ataques XSS, inyección SQL, robots maliciosos, peticiones malformadas HTTP, etc.

Hice una demo de un ataque XSS con bloqueo incluido con la “Hackbar” para Firefox.

Parte 7, control del tráfico y servicios con Logcheck y Monit.

Aquí ya el tiempo apremiaba, como os digo esto fue en 30 min aprox y hablé de Logcheck para estar al tanto cada hora en tu e-mail de todos los avisos relevantes del sistema que rastrea buscando en los logs de un modo tan efectivo Logcheck.

Para monitorizar servicios como SSH, FTP, MySQL, etc, recomendé el uso de Monit que avisa caso de que algún servicio esencial caiga, pudiendo levantarlo o ejecutar un comando previamente definido.

Espero que os pueda ser de utilidad, se podría hablar mucho más sobre todo esto y seguro que mucho mejor, pero creo que puede ser un punto de partida para quienes estén interesados en estos temas.

Tags: , , , , , , , , , , , , ,


sep 12 2006

Bloqueando tráfico indeseado con “Apache Server Status”, Iptraf, Whois, Google e Iptables.

seguridad4.gifHola -;) Solo quería comentaros desde aquí un pequeño ejemplo de como usando el mod de Apache “Mod_Status” (También llamado “Server Status”) se puede detectar tráfico indeseado sobre vuestro server.

Un amigo llevaba varias semanas con problemas de tráfico en su servidor dedicado, me lo comentó y quedé en darle un vistazo, en la máquina me decía que tenía picos muy altos de carga y repentinos.

Me puse manos a la obra a ver si veía algo raro y sobre todo a ver los logs y monitorizar el server , una máquina con Debian GNU/Linux funcionando.

Estaba haciendo un “top” a la máquina cuando vi que el índice de carga subió de repente a un 4,40 y llevaba una carga (load average) de un 0,40 de media, un valor normal en estos casos.

Yo había instalado previamente Iptraf , (algo he comentado aquí sobre esa utilidad de red) y el “Apache Status” para llegado el caso ver que sucedía en la máquina. (aquí os linko a un ejemplo del mod_status rulando de apache.org para que veáis como funciona, da datos sobre ips conectadas, Kb consumidos, carga de la CPU a que host etc etc, abajo hay una leyenda de esos valores).

Lo primero que hice fue creo que un ps -aux para ver si algún proceso del “cron” había saltado o alguna aplicación tipo Spam-Assasian o similar etc lo provocaba.

Vi que no y que era el Apache quien tenía una carga más alta de la normal, abrí en una ventana Iptraf y en otra hice un netstat -an | grep :80 para ver el tráfico del puerto 80.

Leer el resto de;”Bloqueando tráfico indeseado con “Apache Server Status”, Iptraf, Whois, Google e Iptables.”

Tags: , , , , , ,