
Protegint les nostres màquines amb Crowdsec – Part I
Ull que això és l'òstia… ho sento, però és veritat… Per a qui encara no el conegui, en una sèrie de posts pretenc mostrar algunes de les marors de Crowdsec i com podem protegir la nostra infraestructura d'atacs o accessos indeguts.
Abans de començar a descriure el producte com a tal, de la seva arquitectura… Comencem pensant que jo era un usuari feliç de fail2ban fins que vaig descobrir Crowdsec. Resulta que Crowdsec, és un IDS i un IPS, detecta i bloqueja accessos a màquines, m'és igual que sigui una màquina en una LAN, que un servei publicat per internet, sigui un Linux, Windows o Contenidor. Crowdsec si detecta un atac DDoS, un escaneig de ports, un escaneig de vulnerabilitats, o simplement accessos incorrectes (a aquesta web si és una web, a aquest RDP si és que és un Windows, SSH, CIFS…). Crowdsec detectarà aquest accés indegut i realitzarà una acció, el més normal, fer-li un baneo, com? doncs entre d' altres des del mateix firewall del SO (del Windows, del Linux…). Així que Crowdsec crearà una regla al FW del SO per bloquejar aquesta IP origen. A més, com és obvi, Crowdsec també llegirà els logs de les nostres apps, serveis… i en base al que vegi, actuarà, ull atacants.
Bo, si només fos això, no us deia que fos l'òstia, segueixo, segueixo… Crowdsec és programari lliure, que té una part comercial si es desitja i no veurem en aquesta sèrie de posts, així que el que vam veure en aquesta sèrie serà tot open. Total, que Crowdsec detecta comportaments, es basa en reputacions i gestiona amenaces, però a més disposa d'una llista negra d'adreces IPs pública, compartida i alimentada per tots els que fem servir Crowdsec; així que quan hi hagi una majoria que detectin una amenaça, tots estarem alertats i previnguts!
Espera que no hem acabat, resulta que Crowdsec es pot instal·lar com hem dit als Windows, macOS, Linux, Kubernetes, Docker, OpenWRT… bo doncs gràcies a l'API de Crowdsec, les nostres màquines també podran compartir entre elles una llista negra d'IPs. O sigui, que si algú m'ataca una màquina, la resta li van a bloquejar l'accés abans que ho intenti, curiós… Bo, realment Crowdsec detectarà i el 'bouncer’ actuarà (després anem a això).
Queda molt més, ho anirem veient a poc a poc, que si notificacions per Telegram, la consola web que té, que s'integra amb Prometheus, Grafana… Però, voleu saber al meu parer el més curiós de tot? Igual us sembla una xorrada, per a mi és la bomba. ¡¡¡Atents!!! doncs resulta, que si tenim un firewall corporatiu a l'empresa, un de veritat, un Fortigate per exemple, un pfSense… podem fer que aquests firewalls s'alimentin al seu torn també d'aquestes llistes negres! Oh! I tenir unes regles als nostres firewalls (a dalt de tot) que deneguin l' accés a aquestes IPs negres a altres màquines, segments de xarxa… ¡Mare meva!
És llivià, modular, senzill de configurar… bo, vam anar arrencant que hi havia molt 😉
En aquest primer post vam conèixer: com instal·lar Crowdsec en un Linux, els comandaments bàsics, com instal·lar Crowdsec en un Windows, l' ús de la consola, fem un atac de prova i finalment com gestionar les alertes per Telegram. Gairebé res.
En altres posts veurem com fer una instal·lació multi-servidor, això és, que les nostres màquines es comparteixin la informació, o integrar-lo amb el nostre firewall Fortigate…
Sobra recomanar el seu doc oficial: https://docs.crowdsec.net
Instalar Crowdsec en Linux
La instal·lació és molt senzilla, partim d'exemple que volem protegir un Nginx que corre en un Ubuntu, instal·lem amb:
curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash sudo apt install crowdsec -y ... INFO[11/12/2022:04:24:15 PM] crowdsec_wizard: Installing collection 'crowdsecurity/linux' INFO[11/12/2022:04:24:21 PM] crowdsec_wizard: Installing collection 'crowdsecurity/nginx' INFO[11/12/2022:04:24:24 PM] crowdsec_wizard: Installing collection 'crowdsecurity/sshd' ...
Com veiem, en instal·lar l'agent de Crowdsec per a linux, ens detecta que disposem dels serveis SSHd i Nginx, i per tant automàticament i sense fer res més, ja detectarà anomalies.
El següent és, si volem que una acció baixi les adreces IP origen, doncs necessitem tenir un firewall instal·lat i aixecat al SO, que habitualment tots el porten, entenem que fem servir iptables, també seria compatible amb nftables, ipset o pf, depèn del nostre SO. I li instal·lem el bouncer corresponent:
sudo apt install crowdsec-firewall-bouncer-iptables -y
Doncs en principi ara estaria llesta, màquina protegida! 🙂 ¡Pren ja! Anem ara a fer el mateix procés en un Windows, per veure les similituds, i després seguim amb més detall potser els comandaments més interessants, parlarem de l'API… És cert que ens queden altres detalls, que ja anirem veient.
Instalar Crowdsec en Windows
El que s'ha dit, fem el mateix exercici, instal·lar Crowdsec en una màquina Windows, amb l' objectiu de protegir-la. I si algú intenta accedir per RDP i menteix malament la contrasenya (per defecte 5 vegades) doncs li raneu, o per CIFS, o pel que us de la gana, fer-li un escaneig 😉
Abans de res, descarreguem i instal·lem el requisit .NET Runtime: https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-6.0.11-windows-x64-installer (o una versió superior, depèn quan llegiu això).
I ja podrem procedir, descarreguem l'instal·lador MSI de https://github.com/crowdsecurity/crowdsec/releases/
“Següent”,
“Sí carinyo”,
“Sí”,
Esperem uns segons mentre instal·la…
I finalitzar! Ja tenim Crowdsec instal·lat!
Però ull que no hem acabat, igualment Crowdsec detectarà però no podrà realitzar accions, per a això necessitarem el bouncer per al firewall de Windows. Així que, el descarreguem i l'instal·lem: https://github.com/crowdsecurity/cs-windows-firewall-bouncer/releases
“Install”,
…
I ara sí que sí. Equip Windows protegit!
Realitzar atac de prova
Abans de res, per què no validem que això funciona? així veiem uns primers comandaments inicials. Res, molt senzill, sense por, Com provar-ho?
Doncs a l'equip Windows mateixament tracta de validar-te 5 amb credencials incorrectes per RDP (Escriptori Remot), o mitjançant CIFS i alguna carpeta compartida… si vols et compliques i li fas un escaneig de ports, o de vulnerabilitats… veuràs com la màquina Windows et bloqueja.
Crearà una regla en el firewall nadiu amb una excepció denegant qualsevol accés des de l'esmentada IP maligna.
I a l'equip Linux, si per exemple porta un Nginx com era el cas anterior, doncs podem baixar Nikto que és un escanejador de servidors web, i verificam si ens ho detecta:
git clone https://github.com/sullo/nikto cd nikto/program git checkout nikto-2.5.0 ./nikto.pl -h https://XXX.XXX.XXX.XXX
Després d'això el mateix, la màquina linux ens denegarà l'accés immediatament amb una excepció al firewall.
Comandament bàsics
Com a excusa passem al següent punt del document, comandaments mínims que potser ens interessi conèixer (ja coneixerem més posteriorment):
Veure la llista de bàndols o bloquejos:
sudo cscli decisions list
I això ens retornarà que no hi ha bagencs, si és que no fem el test.
O que ha detectat algun bloqueig i ens mostra el seu IP, la seva raó, el temps de bloqueig…
Banear manualment una IP:
sudo cscli decisions add --ip DIRECCIÓN_IP --reason "Descripció"
Desbanejar, o desbloquejar una adreça IP:
sudo cscli decisions delete --ip DIRECCIÓN_IP
Amb 'sudo cscli alerts list’ veurem les alertes que han saltat, amb 'sudo cscli alerts inspect ID’ tindrem més detalls de cada alerta.
Amb 'sudo /usr/share/crowdsec/wizard.sh -c’ podem habilitar/deshabilitar serveis a monitoritzar amb Crowdsec.
En aquest fitxer '/etc/crowdsec/parsers/s02-enrich/whitelists.yaml’ tindrem la possibilitat d'excloure alguna màquina i ficar-la en llistes blanques, per defecte porta 3 rangs exclosos i si no et va detectar l'atac de proves, igual per aquí et van els tirs 😉
name: crowdsecurity/whitelists description: "Whitelist events from private ipv4 addresses"
whitelist:
reason: "private ipv4/ipv6 ip/ranges"
ip:
- "127.0.0.1"
- "::1"
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"
Notificacions per Telegram
Bo això últim i un altre dia seguim, que hi ha molt a veure i comptar 🙂 Per defecte i sense despentinar-nos a part de Telegram podríem manar notificacions a Slack, Splunk, Email…
Editem el fitxer de perfils '/etc/crowdsec/profiles.yaml’ i descomentem aquestes 2 línies:
notifications: - http_default
Editem com diu a '/etc/crowdsec/notifications/http.yaml’ quedant-nos una cosa així, haurem de tenir en compte el canviar l'ID del grup de Telegram i el del Token:
type: http name: http_default log_level: info format: | { "chat_id": "-ID_CHAT_TELEGRAM", "text": " {{range . -}} {{$alert := . -}} {{range . Decisions -}} {{.Value}} will get {{.Type}} for next {{.Duration}} for triggering {{.Scenari}}.\rn https://www.shodan.io/host/{{.Value}} {{anà -}} {{anà -}} " } url: https://api.telegram.org/botTOKEN/sendMessage method: POST headers: Content-Type: "application/json"
Com sempre, qualsevol canvi cal reiniciar el servei de Crowdsec:
sudo systemctl restart crowdsec
¡et voila! Arribaran missatges de Telegram instantàniament!
Vingui, un altre dia seguim, se'n va de mares això, ens deixem moltíssimes coses per veure, cal parlar de més comandaments, de l' API, de la seva dashboard o consola web que us dieu que ho veuríem, però prffff… molt llarg queda això 🙂 Hem de fer que tots els nostres agents es parlin entre si, (si és que interessés), la part d'integrar-lo amb els nostres firewalls perimetrals… Veure la part de Prometheus, Grafana…
Bo, espero que sigui una solució d'interès, que estic segur que molts de nosaltres tenim serveis publicats a internet sense aquesta protecció. O per què no, implementar-lo en les màquines internes de la nostra organització, entre elles es fan una malla i es protegeixen…
Bo, que una abraçada grossa!