# ¿Que es CrowdSec? Federación de Blue Teams

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](https://www.crowdsec.net/) 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402468829/fcbb504d-5f98-4812-8512-b6a03fc78fe6.png align="center")

## Instalación de CrowdSec

Este paso es tan sencillo como cualquier otra instalación, primero los repositorios.

```yaml
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash
```

Hacemos el update.

```yaml
sudo apt-get update
```

Instalamos CrowdSec.

```yaml
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402493931/5abd3421-589f-469d-b864-e7b760a16c65.png align="center")

## 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402511432/cf2ff874-b7bc-4d4b-9b58-8c08398bd122.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402529854/4898657b-daa0-4f34-9d64-d5e91925bb4f.png align="center")

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](https://hub.crowdsec.net/browse/#collections) para que revisen colecciones, configuraciones y bouncers. En esta PoC vamos a instalar [cs-firewall-bouncer](https://hub.crowdsec.net/author/crowdsecurity/bouncers/cs-firewall-bouncer) y ya que estamos la colección de Apache2 con cscli, asi tiene algunas opciones.

```yaml
sudo apt install crowdsec-firewall-bouncer-iptables
```

Podemos ver la configuración en la siguiente ruta.

```yaml
sudo cat /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
```

Instalamos la colección de Apache2 y le decimos donde debería levantar los logs.

```yaml
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402557404/fbbbd009-86cd-43e8-bf9a-4fb74d6726b6.png align="center")

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.

```yaml
sudo cscli postoverflows install crowdsecurity/seo-bots-whitelist
```

Ahora restart!

```yaml
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402581981/32f445fd-9f3b-4b4c-843a-726b6fa823d4.png align="center")

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](https://github.com/r4stl1n/SSH-Brute-Forcer) 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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402605092/b87c26f5-3f8b-43b6-b64a-c28125887405.png align="center")

Ahora desde la consola del atacante, vamos a lanzar SSHBrute.py con el comando:

```yaml
python3 ssh-brute.py -ip 192.168.1.12 -p 22
```

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2023/01/ataante.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402631327/370b5961-7589-4ed1-ba69-a8a23bf46f42.png align="center")

Van a notar que automaticamente nuestro servidor deja de responder, por que **CrowdSec** hizo su magia. Revisamos la lista de decisiones.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402648742/3d75c073-f342-41eb-8e9f-9032d8b22ba7.png align="center")

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.

```yaml
sudo cscli scenarios install crowdsecurity/http-sensitive-files
```

Del lado de atacante hacemos algunas búsquedas, con curl.

```yaml
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402681088/ac3c036c-8d03-44f2-b80b-381caa252461.png align="center")

Esto es todo por ahora. Esto se puede visualizar, de una mejor manera en [crowdsec.net](https://app.crowdsec.net/), solo debemos enrolar nuestros servidores. Ahi veremos el banneo por el ataque SSH y el scanneo de directorios sensibles.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707402691519/bfa90a8e-49eb-412a-8037-e411521ad7ee.png align="center")

Creo que para cerrar seria interesante realizar una conexión a un canal de Telegram o Slack, esa parte la pueden ver [aqui](https://docs.crowdsec.net/docs/notification_plugins/slack/). 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.

```yaml
sudo cscli decisions add --ip XXX.XXX.XXX.XXX
```

Banneo de IP por 24 horas.

```yaml
sudo cscli decisions add --ip XXX.XXX.XXX.XXX --duration 24h
```

Banneo de rango.

```yaml
sudo cscli decesions add --range XXX.XXX.XXX.XXX/16
```

Eliminar banneos de IP o rango.

```yaml
sudo cscli decisions delete --ip XXX.XXX.XXX.XXX sudo cscli decesions delete --range XXX.XXX.XXX.XXX/16
```
