
Desplegando Crowdsec en una máquina Windows
Bueno, ya hemos visto en el documento anterior un poco los conceptos e ideas de cómo desplegar Crowdsec en nuestra organización, hoy lo que tenemos en el menú es cómo instalar Crowdsec en una máquina Windows y protegerla. Protegerla de botnets, ataques, curiosos, aburridos…
Así que vamos a ello, empezamos con un Windows! Habitualmente, se entiende que lo haremos en un Windows Server, un servidor que tenga algún servicio publicado y queramos proteger; no obligatoriamente tenga que estar en Internet. Comenzaremos instalándole el Crowdsec Security Engine, que es el agente que se encargará de todo, procesar sus logs, tomar sus decisiones… seguido le instalaremos el bouncer (o componente de remediación) para su firewall de Windows, de su SO, por si nos interesa que actúe y pueda dar de alta reglas en él, bloqueando accesos temporales a direcciones IP malvadas. Y acabaremos registrándolo en la Consola de Crowdsec.
Con eso casi lo tendremos, ya que el documento continuará, será opcional, pero si vas a querer una gestión centralizada, deberás de realizar algunos pasos más; y eso es, una decisión tuya. Si te interesa, debes leerte antes el post previo.
Este post tiene la siguiente estructura:
- Instalación del Agente de Crowdsec
- Instalación del bouncer de Crowdsec Windows Firewall
- Registrando Crowdsec contra la Consola de Crowdsec
- Colecciones
- Lista blanca
- Notificaciones
- Probándolo
- Registrando Crowdsec contra nuestro servidor LAPI
- Registrando el bouncer de Crowdsec contra nuestro servidor LAPI
Instalación del Agente de Crowdsec
Antes de seguir, será necesario previamente instalar el requisito .NET Runtime: https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-6.0.11-windows-x64-installer
Ya podremos proceder, descargamos el instalador MSI y comenzar la instalación de Crowdsec Engine, de https://github.com/crowdsecurity/crowdsec/releases/. Crowdsec durante la instalación necesitará acceso a Internet, para descargarse algunos elementos como las colecciones… así como para el funcionamiento habitual, el agente necesita acceso a un par de sitios de Crowdsec, os recomiendo leeros los sitios/puertos que pueda necesitar.
“Siguiente”,
“Install”,
Esperamos unos segundos mientras instala…
Y finalizar! Ya tenemos Crowdsec instalado!
Instalación del bouncer de Crowdsec Windows Firewall
Crowdsec detectará pero no podrá realizar acciones, para ello necesitaremos el bouncer para el firewall de Windows. Así que, lo descargamos: https://github.com/crowdsecurity/cs-windows-firewall-bouncer/releases y comenzamos su instalación,
“Install”,
…
Y ahora ya tenemos el bouncer, nos protegerá a nivel de firewall, “Finish”,
Registrando Crowdsec contra la Consola de Crowdsec
Si no tenemos una cuenta en https://app.crowdsec.net nos la podemos crear, para gestionar desde una consola GUI de manera centralizada todos nuestros Crowdsec, no es obligatorio, y tenemos una versión Community con la que también se pueden hacer muchas cosas, entre ellas, pues lo que hemos hablado alguna vez, ver las alertas de las máquinas, su estado, podemos suscribirlas a distintas blocklists…. Continuamos pues añadiendo nuestro Crowdsec, la instalación en ese Windows. Nos copiamos el comando que debemos ejecutar.
Y lo pegamos en una consola del sistema, ejecutamos:
cscli console enroll xxxxxxxxxxxxxxxxxx
Volvemos a la Consola de Crowdsec y aceptamos el enroll, si no nos sale, un F5 viene bien,
Sobre el Engine recién añadido, le editamos el nombre y le pondremos uno que nos haga referencia a quién es,
Habitualmente, indicamos el nombre de la máquina, Update,
Y si queremos, lo siguiente pueda ser añadirle algunos blocklists, para ello, podemos pulsar sobre “Browse available blocklists”,
Si ya estamos suscrito a algún blocklist, podremos seleccionarlo desde “Manage”
Y pulsar sobre “Add Security Engine” para añadir esta máquina a esta blocklist,
Elegimos un tipo de acción y confirmamos. Máquina suscrita!
Recordar que tras registrar Crowdsec contra la Consola hay que reiniciar el servicio de Windows que tenemos.
Colecciones
Por defecto Crowdsec cuando se instala en una máquina escanea en busca de los servicios que tenemos instalados y los intenta proteger, en este caso, en mi Windows me ha detectado que dispongo de IIS instalado, así como SQL Server, además de estas colecciones, nos habrá metido alguna adicional, así como las de Windows. Podemos ver las colecciones que tenemos instaladas con:
cscli collections list
Podremos buscar más colecciones en su Hub, colecciones realizadas por ellos o por la comunidad, que puedan proteger otros servicios que dispongamos, como si por ejemplo en este Windows tuviéramos Exchange Server… pues sería tan sencillo como ejecutar:
cscli collections install crowdsecurity/exchange
Y deberíamos añadir en su fichero de adquisiciones ‘C:\ProgramData\CrowdSec\config\acquis.yaml’ el contenido de abajo, no os preocupéis que en el Hub viene detallado en cada caso qué hay que hacer, corregimos los paths de los logs de Exchange y tras reiniciar el servicio de Crowdsec tendríamos la máquina lista, protegiendo ataques también de OWA, autenticaciones SMTP…
##Exchange SMTP use_time_machine: true #Process logs as if we were replaying them to get the timestamp from the filenames: - C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd\ProtocolLog\SmtpReceive\*.LOG labels: type: exchange-smtp --- ##Exchange IMAP use_time_machine: true #Process logs as if we were replaying them to get the timestamp from the filenames: - C:\Program Files\Microsoft\Exchange Server\V15\Logging\Imap4\*.LOG labels: type: exchange-imap --- ##Exchange POP use_time_machine: true #Process logs as if we were replaying them to get the timestamp from the filenames: - C:\Program Files\Microsoft\Exchange Server\V15\Logging\Pop3\*.LOG labels: type: exchange-pop --- ##Exchange OWA #OWA failed attempts are logged in the same way as RDP failed auth source: wineventlog event_channel: Security event_ids: - 4625 event_level: information labels: type: eventlog ...
Lista blanca
La lista blanca como podemos interpretar nos servirá para que podamos excluir por ejemplo una dirección IP de que pueda ser baneada o bloqueada por Crowdsec, habitualmente puedan ser las direcciones IP de algún puesto de control, equipo de salto, etc… Así como entre otras también podremos excluir paises, por ejemplo.
name: crowdsecurity/whitelists description: "Whitelist events from private ipv4 addresses" whitelist: reason: "private ipv4/ipv6 ip/ranges" ip: - "127.0.0.1" - "::1" - "192.168.1.33" cidr: #- "192.168.0.0/16" #- "10.0.0.0/8" - "172.16.0.0/12" # expression: # - "'foo.com' in evt.Meta.source_ip.reverse"
El fichero lo encontraremos en ‘C:\ProgramData\CrowdSec\config\parsers\s02-enrich\whitelists.yaml’, y veremos que podremos añadir sencillamente cualquier IP o rango IP en la lista blanca de exclusiones.
Si queremos excluir paises, debemos instalar antes el parser geoip-enrich que nos alimentará los logs con datos de geolocalización, como por ejemplo paises, ciudades o coordenadas GPS:
cscli parsers install crowdsecurity/geoip-enrich
Y bastará con añadir la siguiente expresión en el fichero de lista blanca:
expression: - evt.Enriched.IsoCode == 'ES'
Recordar al finalizar reiniciar el servicio de Crowdsec para recargar estos cambios.
Notificaciones
notifications: - slack_default - splunk_default - http_default - email_default
Podremos habilitar notificaciones editando el fichero ‘C:\ProgramData\CrowdSec\config\profiles.yaml’, donde podremos descomentar y seleccionar el tipo de notificación que nos interese, que pueden ser a Splunk, a Slack, por email, o con HTTP (por ejemplo Telegram).
Si queremos por ejemplo notificaciones de correo, en el directorio ‘C:\ProgramData\CrowdSec\config\notifications\’ editaríamos el fichero YAML email.yaml (o slack.yaml o splunk.yaml o http.yaml), donde configuraremos los parámetros de nuestro servidor de correo. Los de Telegram lo vimos en un post viejuno.
Probándolo
Finalizaremos probándolo ¿no? si no cómo nos fiamos de que esto funcione? 🙂 Podéis hacer las pruebas de accesos incorrectos que queráis, o validarlo con un escaner de vulnerabilidades, o de webs… en ese documento viejuno tenéis un ejemplo con nikto.
Podéis ver las decisiones que ha tomado vuestra máquina con:
cscli decisions list
En este caso ha baneado la dirección IP 192.168.1.253 por hacer un Windows Brute Force, será que he metido mal varias veces el usuario al acceder al servidor por RDP, o SMB…
O desde el servidor LAPI si es que lo hemos registrado (que es lo que viene a continuación)
docker exec -it crowdsec-crowdsec-1 cscli decisions list
Si ya hemos desplegado el Crowdsec Mirror, podremos verificar que la dirección IP baneada sale en la URL donde publicamos nuestra blocklist http://DIRECCION_IP_CROWDSEC_MIRROR:41412/security/blocklist
Si queremos banear una dirección IP, lo haremos con:
cscli decisions add --ip DIRECCIÓN_IP --reason "Descripción"
Si queremos desbanear una dirección IP, lo haremos con:
cscli decisions delete --ip DIRECCIÓN_IP
Podremos investigar las alertas que hemos tenido con:
cscli alert list
Con el comando anterior las listamos, y ahora seleccionando el ID de una alerta en particular y podremos saber qué fichero de log la generó, qué estaba haciendo, el path, el estado http… en este caso de la imagen son muchos 404 al path /apps/files_sharing/publicpreview/
cscli alert inspect ID_ALERTA [-d]
Y, si es que lo necesitamos, crear nuestro propio fichero de Whitelist para hacer exclusiones en casos de falsos positivos, pej en ‘C:\ProgramData\CrowdSec\config\parsers\s02-enrich\whitelist-permite-pdfs.yaml, pudiendo usar estas expresiones de ejemplo para hacer los filtros de exclusión:
name: crowdsecurity/mylistablancapdfs description: "Ignora PDFs" whitelist: reason: "ignora PDFs" expression: #- evt.Meta.http_path startsWith '/apps/files_sharing/publicpreview/' #- evt.Meta.http_status == '404' && evt.Meta.http_path startsWith '/apps/files_sharing/publicpreview/' - evt.Parsed.request contains '/apps/files_sharing/publicpreview/'
Como siempre, sin olvidar reiniciar el servicio de Crowdsec con cada cambio de configuración.
Registrando Crowdsec contra nuestro servidor LAPI
api: ... server: enable: false ...
Tenemos que deshabilitar el LAPI local, editamos el fichero ‘C:\ProgramData\CrowdSec\config\config.yaml’.
Ahora nos registramos contra el servidor LAPI que tenemos desplegado en la red:
cscli lapi register -u http://DIRECCION_IP_CROWDSEC_LAPI:8080 --machine NOMBRE_MAQUINA
En el servidor LAPI podremos ver la petición de registro de la máquina Windows, listamos con:
sudo docker exec -it crowdsec-crowdsec-1 cscli machines list
Aceptamos la petición de registro y volvemos a listar para confirmar el estado:
sudo docker exec -it crowdsec-crowdsec-1 cscli machines validate NOMBRE_MAQUINA
Ahora nuestro Crowdsec en Windows comunicará y leerá del servidor LAPI cualquier decisión, usando por tanto el servidor central. Si el resto de agentes de Crowdsec harían lo mismo, todas ellas tendrían la misma información en común, y por tanto, cuando una máquina sospeche de que una IP es malvada, el resto de agentes de Crowdsec lo sabrán al momento.
Registrando el bouncer de Crowdsec contra nuestro servidor LAPI
Y para finalizar, debemos registrar también los bouncers que tengamos, en este caso el bouncer del firewall de Windows, si queremos que ese bouncer lea del LAPI central, deberemos seguir estos pasos, así lo dicho, cuando alguien o algo añada una IP al LAPI central, este firewall de sistema operativo hará una regla de denegación de acceso a dicha IP maligna.
Desde el servidor LAPI, podremos primero si queremos listar los bouncer que tenemos registrados con:
sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers list
Y para dar de alta al bouncer del firewall de este Windows ejecutaremos:
sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers add NOMBRE_MAQUINA-FW
Anotamos la API Key que nos ha dado,
En el Windows, editamos el fichero C:\ProgramData\CrowdSec\config\bouncers\cs-windows-firewall-bouncer.yaml y ponemos la IP del LAPI, su puerto y la API Key que nos dio el comando anterior. Guardamos el fichero y reiniciamos el servicio “Crowdsec Windows Firewall Bouncer”.
Y ya saldrá el FW del equipo Windows registrado, lo verificamos
sudo docker exec -it crowdsec-crowdsec-1 cscli bouncers list
Y listo! Final! Por ahora yo creo que ya vale, no? 🙂 Ya hemos visto cómo desplegar Crowdsec para proteger un servidor de Windows, con sus servicios, así como algunas configuraciones basicas, y la parte de centralizarlo, espero que os haya podido servir de algo, darle un poquito de cariño a vuestra infraestructura con este tipo de soluciones, os mando un saludo, esperando que os vaya muy bien, un abrazo,