¿Que es CrowdSec? Federación de Blue Teams
CrowdSec es un Open Source comunitario, para nutrir y nutrirse de listas de Blacklist
Los que estamos en esto hace tiempo, siempre escuchamos que la Seguridad es una cebolla y la suma de las capas nos otorgará una mejor defensa en profundidad. CrowdSec llega para agregar una nueva capa de Seguridad, a nuestro servicios, con esté nuevo concepto de “Federating Blue Teams”. Lo que plantea está herramientas de código abierto es contribuir a elaborar una lista de bloqueo en tiempo real, añadiendo y eliminado direcciones IP que los delincuentes utilizan y abandonan. Nutrirse de esas listas.
Para los vieja escuela deberían de verlo con un fail2ban, colaborativo y mejorado. Consume muy pocos recursos, es multi plataforma, mutualización de direcciones IP con una base de datos compartida entre todos los usuarios de Crowndsec pero sobre todo es fácil de usar.
El proyecto posee un Marketplace donde se pueden descargar reglas para asegurar sus servidores, Nginx, Apache, Docker, Traefik, etc.!
Les paso a mostrar, antes de ir la prueba, la arquitectura. Es muy sencillo el concepto donde a través de nuestras experiencias generamos evidencias de los ataques recibidos y enviamos los reportes a la comunidad, la misma que nos nutre para tomar nuestras decisiones.
Instalación de CrowdSec
Este paso es tan sencillo como cualquier otra instalación, primero los repositorios.
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
Hacemos el update.
sudo apt-get update
Instalamos CrowdSec.
sudo apt-get install crowdsec
El proceso de instalación donde podemos ver el descubrimiento y la instalación y configuración automática para sshd y linux. Ya tenemos CrowdSec listo para usar, en instalación local. Si ya hubiésemos tenido Apache2 instalado, hubiese bajado la colección correspondiente. Como no estaba, lo instalaremos posteriormente, mas adelante les muestro como hacerlo.
Instalación
Antes de comenzar a configurar e instalar un bouncer, podemos jugar con el cscli client que sera de ayuda para reglas, métricas, listas y todo lo necesario.
Voy agregar la colección para Apache2, en nuestro Web Server. Vamos a ver la consola de métricas. Como podemos ver en la captura, podemos ver los ficheros fuente utilizados y sus estadísticas y también los diferentes parsers utilizados que permiten detectar.
Les dejo una lista de comandos, que les serviran para la PoC.
cscli alerts list | Listado de Alertas.
cscli alerts inspect ID | Detalle de la Alerta, que deseamos investigar.
cscli decisions list | Lista de los «bans» o bloqueados.
cscli parsers list | Listado de parseadores, que no es ni mas ni menos lo que nos habilita a leer e interpretar logs.
cscli scenarios list | Los escenarios son las configuraciones que detectarán los comportamientos y las acciones a realizar.
cscli postoverflows list | Lista de los servicios en «Whitelist» que exceptúan el bloqueo.
Instalación de Bouncer
Los bouncers son quienes nos habilitaran a bloquear ataques. Les dejo el enlace para que revisen colecciones, configuraciones y bouncers. En esta PoC vamos a instalar cs-firewall-bouncer y ya que estamos la colección de Apache2 con cscli, asi tiene algunas opciones.
sudo apt install crowdsec-firewall-bouncer-iptables
Podemos ver la configuración en la siguiente ruta.
sudo cat /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
Instalamos la colección de Apache2 y le decimos donde debería levantar los logs.
sudo cscli collections install crowdsecurity/apache2
cat << EOF | sudo tee -a /etc/crowdsec/acquis.yaml filenames:
/var/log/apache2/*.log labels: type: apache2
EOF
Vamos a ver las métricas para confirmar que hemos agregado la fuente de logs de apache2, algo que antes no estaba sumado.
Como he instalado Crowdsec en un servidor Web, vamos a instalar la lista blanca para los "crawlers".
En la página de configuración CrowdSec Hub encontramos la línea a ejecutar.
sudo cscli postoverflows install crowdsecurity/seo-bots-whitelist
Ahora restart!
sudo systemctl reload crowdsec
Antes de dejar esta sección voy a revisar que tenemos colecciones tenemos habilitadas con cscli hub list, ya estamos listos para estos diferentes ataques.
Vamos a parar la pelota, hasta ahora tenemos CrowdSec sobre un Web Server, que tenia Apache2, y estamos protegidos de ataques de Fuerza Bruta sobre SSH y Web.
En los próximos pasos emulamos un ataque, para ver como se comporta CrowdSec, en su hardening, y enviaremos los logs a unos tableros para tener visibilidad.
Ataque de Fuerza Bruta
Para esta parte voy a utilizar un Ubuntu, como atacante, y vamos a hacernos de un repositorio de GitHub que tiene una herramienta para este menester. Si estas leyendo esto seguramente sabes clonar un repositorio, si no Google It! 😎
Primero revisamos nuestro lista de alarmas o decisiones, como verán esta vacía.
Ahora desde la consola del atacante, vamos a lanzar SSHBrute.py con el comando:
python3 ssh-brute.py -ip 192.168.1.12 -p 22
Van a notar que automaticamente nuestro servidor deja de responder, por que CrowdSec hizo su magia. Revisamos la lista de decisiones.
Vamos a probar, como trabaja con el Bouncer de Apache2. Primero tengo que eliminar ese banneo, para darle la chance al atacante 😄. Vamos a probar lo aprendido e intentar activar el escenario crowdsecurity/http-sensitive-files accediendo a ficheros sensibles. Este escenario se activa tras 4 intentos de acceder a ficheros sensibles en menos de 5 segundos. Vamos a instalarlo y luego configurar el ataque.
sudo cscli scenarios install crowdsecurity/http-sensitive-files
Del lado de atacante hacemos algunas búsquedas, con curl.
URL="http://DIRECCIONDEWEBSERVER"
curl "$URL"/.git
curl "$URL"/.htaccess
curl "$URL"/.bashrc
curl "$URL"/.bash_history
curl "$URL"/.ssh
Uala! Ahora vemos que se banneo la ip del atacante, nuevamente, pero por otro escenario.
Esto es todo por ahora. Esto se puede visualizar, de una mejor manera en crowdsec.net, solo debemos enrolar nuestros servidores. Ahi veremos el banneo por el ataque SSH y el scanneo de directorios sensibles.
Creo que para cerrar seria interesante realizar una conexión a un canal de Telegram o Slack, esa parte la pueden ver aqui. Espero que les haya gustado. Creo que este IPs, tiene mucho potencial a la hora de hardenizar nuestros servicios.
Bonus Track
Desiciones Manuales
Lógicamente tenemos la posibilidad de hacer elecciones, manuales, de cada regla. Les voy a dejar algunas que pueden hacerle la vida más sencilla.
Banneo de IP por 4 horas.
sudo cscli decisions add --ip XXX.XXX.XXX.XXX
Banneo de IP por 24 horas.
sudo cscli decisions add --ip XXX.XXX.XXX.XXX --duration 24h
Banneo de rango.
sudo cscli decesions add --range XXX.XXX.XXX.XXX/16
Eliminar banneos de IP o rango.
sudo cscli decisions delete --ip XXX.XXX.XXX.XXX sudo cscli decesions delete --range XXX.XXX.XXX.XXX/16