W pierwszej części artykułu omówiliśmy, czym są ataki typu brute force i jakie podstawowe metody można zastosować, aby chronić serwery przed tego rodzaju zagrożeniami. W tej części skupimy się na bardziej zaawansowanych rozwiązaniach zapewniających ochronę przed atakami brute force, w tym na narzędziu CrowdSec – otwartoźródłowym systemie, który nie tylko wykrywa ataki, ale także tworzy społeczność dzielącą się informacjami o zagrożeniach. Dzięki CrowdSec możemy podnieść poziom bezpieczeństwa naszych serwerów i skutecznie minimalizować ryzyko ataków brute force.
Statystyki CrowdSec
- Ponad 190 krajów reprezentowanych przez społeczność CrowdSec
- Ponad 65 000 aktywnych użytkowników
- Oznaczono 50 milionów złośliwych adresów IP
- Zgłoszono 100 milionów sygnałów ataków tygodniowo
Pełny raport tutaj
„CrowdSec pokazuje, jak współpraca między użytkownikami i dzielenie się danymi o zagrożeniach może wzmocnić obronę przed atakami typu brute force i innymi formami cyberzagrożeń”
— Guillaume Valadon, inżynier bezpieczeństwa w ANSSI (Agence Nationale de la Sécurité des Systèmes d’Information)
1. Jak CrowdSec chroni serwery przed atakami zdalnymi?
CrowdSec to rozwiązanie bezpieczeństwa oparte na crowdsourcingu, które chroni serwery przed atakami zdalnymi poprzez wykrywanie szkodliwych adresów IP i blokowanie ich za pomocą zapory sieciowej. Działa w oparciu o model „wykryj i zareaguj”, w którym:
CrowdSec wykrywa ataki na podstawie analizy logów systemowych i zachowań użytkowników, a bouncery (moduły wykonawcze) podejmują działania w odpowiedzi na wykryte ataki, np. blokują adres IP atakującego.
Wykrywanie ataków:
- CrowdSec analizuje logi systemowe, takie jak logi SSH, Apache, Nginx, w poszukiwaniu podejrzanych wzorców zachowań, które mogą wskazywać na atak. Przykłady takich wzorców to:
- Próby brute force: Wielokrotne nieudane próby logowania na serwerze SSH.
- Skanowanie portów: Próby połączenia z wieloma portami serwera w krótkim czasie.
- Ataki DDoS: Duża liczba żądań wysyłanych do serwera z jednego adresu IP.
Blokowanie ataków:
- CrowdSec korzysta z bouncerów, czyli modułów wykonawczych, które blokują wykryte ataki. Najpopularniejszym bouncerem jest firewall bouncer, który tworzy reguły zapory sieciowej blokujące adresy IP atakujących.
2. Instalacja CrowdSec
Aby zainstalować CrowdSec na swoim serwerze, należy przejść przez kilka kroków, poczynając od dodania repozytorium, a kończąc na instalacji bouncerów, które są kluczowe dla działania tego rozwiązania. Poniżej przedstawiamy szczegółowy przewodnik.
2.1 Dodanie repozytorium CrowdSec
Zanim przystąpimy do instalacji, musimy dodać oficjalne repozytorium CrowdSec:
curl -s https://install.crowdsec.net | sudo sh
2.2 Instalacja pakietu CrowdSec
Po dodaniu repozytorium, instalacja samego CrowdSec jest prosta:
# Instalacja Debian/Ubuntu sudo apt install crowdsec # Instalacja RedHat/CentOS/Rocky Linux/Alma Linux sudo dnf install crowdsec
Po zakończeniu instalacji, CrowdSec powinien automatycznie rozpocząć działanie i monitorowanie logów systemowych.
Sprawdzamy czy usługa jest uruchomiona:
[kamil@test ~]$ sudo systemctl status crowdsec ● crowdsec.service - Crowdsec agent Loaded: loaded (/usr/lib/systemd/system/crowdsec.service; enabled; preset: enabled) Active: active (running) since Sun 2024-10-13 15:19:04 UTC; 1min 19s ago Main PID: 3253 (crowdsec) Tasks: 8 (limit: 10914) Memory: 38.5M CPU: 6.483s CGroup: /system.slice/crowdsec.service └─3253 /usr/bin/crowdsec -c /etc/crowdsec/config.yaml Oct 13 15:18:57 test systemd[1]: Starting Crowdsec agent... Oct 13 15:19:04 test systemd[1]: Started Crowdsec agent. [kamil@test ~]$ sudo crowdsec -version version: v1.6.3-rpm-pragmatic-amd64-4851945a Codename: alphaga BuildDate: 2024-09-10_12:58:21 GoVersion: 1.22.2 Platform: linux libre2: C++ User-Agent: crowdsec/v1.6.3-rpm-pragmatic-amd64-4851945a-linux Constraint_parser: >= 1.0, <= 3.0 Constraint_scenario: >= 1.0, <= 3.0 Constraint_api: v1 Constraint_acquis: >= 1.0, < 2.0
Do poprawnego działania trzeba jeszcze zainstalować przynajmniej jeden bouncer co opisuję w punkcie 3.5
3. Konfiguracja CrowdSec
Po zainstalowaniu CrowdSec, kolejnym krokiem jest jego konfiguracja. Konfiguracja domyślna CrowdSec jest zazwyczaj wystarczająca dla większości zastosowań, jeśli jednak chcesz możesz dostosować ją do swoich preferencji. W tej części omówimy najważniejsze opcje konfiguracyjne oraz sposób uruchomienia panelu dashboard, który jest opcjonalny, ale może być pomocny w monitorowaniu aktywności CrowdSec.
3.1 Główne opcje konfiguracyjne
W pliku konfiguracyjnym /etc/crowdsec/config.yaml
można ustawić opcje związane z konsolą, takie jak poziom logowania, adres serwera, który ma odbierać informacje o wykrytych zagrożeniach, oraz inne parametry związane z komunikacją z centralnym serwerem CrowdSec.
3.2 Scenarios (Scenariusze):
Definicja: Scenariusze to reguły, które definiują specyficzne zachowania lub wzorce aktywności, które są uznawane za podejrzane lub szkodliwe. Mogą obejmować różne typy ataków, takie jak ataki brute force, skanowanie portów czy próby SQL injection.
Działanie: Scenariusz działa jako „detektor” określonych zdarzeń na podstawie logów przetworzonych przez parsery. Gdy system rozpozna określony wzorzec (np. 5 nieudanych prób logowania w ciągu 5 minut), scenariusz może zareagować, np. poprzez zablokowanie adresu IP.
Przykład: Scenariusz crowdsecurity/ssh-bf
(brute force na SSH) monitoruje logi SSH w poszukiwaniu wielokrotnych nieudanych prób logowania i może zablokować atakujący adres IP.
Przeglądanie listy dostępnych scenariuszy:
[kamil@test ~]# sudo cscli scenarios list SCENARIOS ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Name 📦 Status Version Local Path ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── crowdsecurity/apache_log4j2_cve-2021-44228 ✔️ enabled 0.6 /etc/crowdsec/scenarios/apache_log4j2_cve-2021-44228.yaml crowdsecurity/CVE-2017-9841 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2017-9841.yaml crowdsecurity/CVE-2019-18935 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2019-18935.yaml crowdsecurity/CVE-2022-26134 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2022-26134.yaml crowdsecurity/CVE-2022-35914 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2022-35914.yaml crowdsecurity/CVE-2022-37042 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2022-37042.yaml crowdsecurity/CVE-2022-40684 ✔️ enabled 0.3 /etc/crowdsec/scenarios/CVE-2022-40684.yaml crowdsecurity/CVE-2022-41082 ✔️ enabled 0.4 /etc/crowdsec/scenarios/CVE-2022-41082.yaml crowdsecurity/CVE-2022-41697 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2022-41697.yaml crowdsecurity/CVE-2022-42889 ✔️ enabled 0.3 /etc/crowdsec/scenarios/CVE-2022-42889.yaml crowdsecurity/CVE-2022-44877 ✔️ enabled 0.3 /etc/crowdsec/scenarios/CVE-2022-44877.yaml crowdsecurity/CVE-2022-46169 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2022-46169.yaml crowdsecurity/CVE-2023-22515 ✔️ enabled 0.1 /etc/crowdsec/scenarios/CVE-2023-22515.yaml crowdsecurity/CVE-2023-22518 ✔️ enabled 0.2 /etc/crowdsec/scenarios/CVE-2023-22518.yaml crowdsecurity/CVE-2023-49103 ✔️ enabled 0.3 /etc/crowdsec/scenarios/CVE-2023-49103.yaml crowdsecurity/CVE-2024-38475 ✔️ enabled 0.1 /etc/crowdsec/scenarios/CVE-2024-38475.yaml crowdsecurity/f5-big-ip-cve-2020-5902 ✔️ enabled 0.2 /etc/crowdsec/scenarios/f5-big-ip-cve-2020-5902.yaml crowdsecurity/fortinet-cve-2018-13379 ✔️ enabled 0.3 /etc/crowdsec/scenarios/fortinet-cve-2018-13379.yaml crowdsecurity/grafana-cve-2021-43798 ✔️ enabled 0.2 /etc/crowdsec/scenarios/grafana-cve-2021-43798.yaml crowdsecurity/http-admin-interface-probing ✔️ enabled 0.4 /etc/crowdsec/scenarios/http-admin-interface-probing.yaml crowdsecurity/http-backdoors-attempts ✔️ enabled 0.6 /etc/crowdsec/scenarios/http-backdoors-attempts.yaml crowdsecurity/http-bad-user-agent ✔️ enabled 1.2 /etc/crowdsec/scenarios/http-bad-user-agent.yaml crowdsecurity/http-crawl-non_statics ✔️ enabled 0.7 /etc/crowdsec/scenarios/http-crawl-non_statics.yaml crowdsecurity/http-cve-2021-41773 ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-cve-2021-41773.yaml crowdsecurity/http-cve-2021-42013 ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-cve-2021-42013.yaml crowdsecurity/http-cve-probing ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-cve-probing.yaml crowdsecurity/http-generic-bf ✔️ enabled 0.6 /etc/crowdsec/scenarios/http-generic-bf.yaml crowdsecurity/http-open-proxy ✔️ enabled 0.5 /etc/crowdsec/scenarios/http-open-proxy.yaml crowdsecurity/http-path-traversal-probing ✔️ enabled 0.4 /etc/crowdsec/scenarios/http-path-traversal-probing.yaml crowdsecurity/http-probing ✔️ enabled 0.4 /etc/crowdsec/scenarios/http-probing.yaml crowdsecurity/http-sensitive-files ✔️ enabled 0.4 /etc/crowdsec/scenarios/http-sensitive-files.yaml crowdsecurity/http-sqli-probing ✔️ enabled 0.4 /etc/crowdsec/scenarios/http-sqli-probing.yaml crowdsecurity/http-wordpress-scan ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-wordpress-scan.yaml crowdsecurity/http-xss-probing ✔️ enabled 0.4 /etc/crowdsec/scenarios/http-xss-probing.yaml crowdsecurity/jira_cve-2021-26086 ✔️ enabled 0.3 /etc/crowdsec/scenarios/jira_cve-2021-26086.yaml crowdsecurity/netgear_rce ✔️ enabled 0.3 /etc/crowdsec/scenarios/netgear_rce.yaml crowdsecurity/nginx-req-limit-exceeded ✔️ enabled 0.3 /etc/crowdsec/scenarios/nginx-req-limit-exceeded.yaml crowdsecurity/pulse-secure-sslvpn-cve-2019-11510 ✔️ enabled 0.3 /etc/crowdsec/scenarios/pulse-secure-sslvpn-cve-2019-11510.yaml crowdsecurity/spring4shell_cve-2022-22965 ✔️ enabled 0.3 /etc/crowdsec/scenarios/spring4shell_cve-2022-22965.yaml crowdsecurity/ssh-bf ✔️ enabled 0.3 /etc/crowdsec/scenarios/ssh-bf.yaml crowdsecurity/ssh-cve-2024-6387 ✔️ enabled 0.2 /etc/crowdsec/scenarios/ssh-cve-2024-6387.yaml crowdsecurity/ssh-slow-bf ✔️ enabled 0.4 /etc/crowdsec/scenarios/ssh-slow-bf.yaml crowdsecurity/thinkphp-cve-2018-20062 ✔️ enabled 0.6 /etc/crowdsec/scenarios/thinkphp-cve-2018-20062.yaml crowdsecurity/vmware-cve-2022-22954 ✔️ enabled 0.3 /etc/crowdsec/scenarios/vmware-cve-2022-22954.yaml crowdsecurity/vmware-vcenter-vmsa-2021-0027 ✔️ enabled 0.2 /etc/crowdsec/scenarios/vmware-vcenter-vmsa-2021-0027.yaml ltsich/http-w00tw00t ✔️ enabled 0.2 /etc/crowdsec/scenarios/http-w00tw00t.yaml ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Następnie możemy aktywować wybrany scenariusz dla naszego serwera:
sudo cscli scenarios install crowdsecurity/http-wordpress-scan sudo systemctl reload crowdsec
Warto zwrócić uwagę na popularne scenariusze, takie jak „SSH Brute Force” czy „Nginx DDoS”, które są często używane do blokowania ataków brute force.
3.3 Collections (Kolekcje):
Definicja: Kolekcje to zbiory scenariuszy, parserów i innych zasobów, które mają na celu ochronę konkretnej usługi lub aplikacji. Są one wygodnym sposobem na wdrożenie zestawu narzędzi do ochrony przed specyficznymi zagrożeniami dla danej usługi.
Działanie: Kolekcje grupują różne elementy CrowdSec (parsery, scenariusze, a nawet konfiguracje bouncerów), aby kompleksowo zabezpieczyć konkretną aplikację lub usługę. Instalując kolekcję, wdrażasz wszystkie jej składowe naraz, co upraszcza konfigurację.
Przykład: Kolekcja crowdsecurity/sshd
obejmuje zarówno parsery do analizy logów SSH, jak i scenariusze wykrywające ataki brute force na SSH, oferując kompleksową ochronę tej usługi.
Lista kolekcji zainstalowanych automatycznie:
[kamil@test ~]# sudo cscli collections list COLLECTIONS ───────────────────────────────────────────────────────────────────────────────────────────────────────────── Name 📦 Status Version Local Path ───────────────────────────────────────────────────────────────────────────────────────────────────────────── crowdsecurity/base-http-scenarios ✔️ enabled 1.0 /etc/crowdsec/collections/base-http-scenarios.yaml crowdsecurity/http-cve ✔️ enabled 2.7 /etc/crowdsec/collections/http-cve.yaml crowdsecurity/linux ✔️ enabled 0.2 /etc/crowdsec/collections/linux.yaml crowdsecurity/nginx ✔️ enabled 0.2 /etc/crowdsec/collections/nginx.yaml crowdsecurity/sshd ✔️ enabled 0.5 /etc/crowdsec/collections/sshd.yaml ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
Instalacja kolekcji dla ssh:
sudo cscli collections install crowdsecurity/sshd sudo systemctl reload crowdsec
3.4 Parsery
Parsery w CrowdSec to kluczowe komponenty odpowiedzialne za analizowanie logów (plików dzienników) z różnych usług i aplikacji, aby identyfikować potencjalne zagrożenia. Działają one jak „tłumacze”, które przetwarzają dane logów w czytelny format dla systemu CrowdSec, umożliwiając mu wykrywanie i reagowanie na określone wzorce zdarzeń. Podczas instalacji CrowdSec automatycznie wykryje uruchomione w systemie usługi i uruchomi odpowiednie parsery.
Sprawdzanie listy parserów
[kamil@test ~]# sudo cscli parsers list PARSERS ────────────────────────────────────────────────────────────────────────────────────────────────────────────── Name 📦 Status Version Local Path ────────────────────────────────────────────────────────────────────────────────────────────────────────────── crowdsecurity/dateparse-enrich ✔️ enabled 0.2 /etc/crowdsec/parsers/s02-enrich/dateparse-enrich.yaml crowdsecurity/geoip-enrich ✔️ enabled 0.5 /etc/crowdsec/parsers/s02-enrich/geoip-enrich.yaml crowdsecurity/http-logs ✔️ enabled 1.2 /etc/crowdsec/parsers/s02-enrich/http-logs.yaml crowdsecurity/nginx-logs ✔️ enabled 1.6 /etc/crowdsec/parsers/s01-parse/nginx-logs.yaml crowdsecurity/sshd-logs ✔️ enabled 2.8 /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml crowdsecurity/syslog-logs ✔️ enabled 0.8 /etc/crowdsec/parsers/s00-raw/syslog-logs.yaml crowdsecurity/whitelists ✔️ enabled 0.2 /etc/crowdsec/parsers/s02-enrich/whitelists.yaml ──────────────────────────────────────────────────────────────────────────────────────────────────────────────
Instalacja i zarządzanie parserami:
Parsery można instalować i zarządzać nimi za pomocą komendy cscli
# instalacji parsera dla SSH sudo cscli parsers install crowdsecurity/sshd-logs sudo systemctl reload crowdsec
3.5 Bouncery (moduły wykonawcze)
Bouncery w CrowdSec to komponenty odpowiedzialne za egzekwowanie decyzji o blokadzie lub ograniczeniach w dostępie do systemu na podstawie wykrytych zagrożeń. Podczas gdy CrowdSec analizuje logi i identyfikuje potencjalnie szkodliwe adresy IP (np. w przypadku ataku brute force), to właśnie bouncery podejmują akcje, takie jak blokowanie ruchu sieciowego, odrzucanie żądań HTTP, czy inne formy ograniczenia dostępu dla zidentyfikowanych zagrożeń.
Instalacja bouncerów:
### Bouncer dla IPTables### # Instalacja Debian/Ubuntu sudo apt install crowdsec-firewall-bouncer-iptables # Instalacja RedHat/CentOS/Rocky Linux/Alma Linux sudo dnf install crowdsec-firewall-bouncer-iptables ## Bouncer dla NFTables # Instalacja Debian/Ubuntu sudo apt install crowdsec-firewall-bouncer-nftables # Instalacja RedHat/CentOS/Rocky Linux/Alma Linux sudo yum install crowdsec-firewall-bouncer-nftables #Sprawdzamy sudo cscli bouncers list
Wyświetlanie statystyk dotyczących bouncerów:
[kamil@test ~]# sudo cscli metrics show bouncers Bouncer Metrics (cs-firewall-bouncer-1728842670) since 2024-10-13 18:19:37 +0000 UTC: ╭────────────────────────────┬──────────────────┬───────────────────┬────────────────────╮ │ Origin │ active_decisions │ dropped │ processed │ │ │ IPs │ bytes │ packets │ bytes │ packets │ ├────────────────────────────┼──────────────────┼─────────┼─────────┼─────────┼──────────┤ │ CAPI (community blocklist) │ 16.47k │ 5.78k │ 129 │ - │ - │ ├────────────────────────────┼──────────────────┼─────────┼─────────┼─────────┼──────────┤ │ Total │ 16.47k │ 5.78k │ 129 │ 8.54M │ 15.90k │ ╰────────────────────────────┴──────────────────┴─────────┴─────────┴─────────┴──────────╯
Jest to przydatne do monitorowania, czy bouncery działają zgodnie z oczekiwaniami i skutecznie blokują ruch z niepożądanych źródeł.
3.6 CrowdSec Console (opcjonalnie)
Do wersji 1.7.0 CrowdSec oferował również opcjonalnie panel dashboard, który umożliwia monitorowanie i zarządzanie systemem w czasie rzeczywistym. Jednakże z powodu wielu problemów, lokalny dashboard został zastąpiony przez Consolę. CrowdSec Console to narzędzie centralizujące zarządzanie i monitorowanie bezpieczeństwa z różnych instancji CrowdSec. Umożliwia ono analizę i wizualizację prób ataków w czasie rzeczywistym. Dzięki CrowdSec Console możesz monitorować wiele serwerów jednocześnie i zyskać wgląd w alerty, takie jak próby brute force, oraz inne niebezpieczne działania związane z adresami IP. Platforma korzysta z rozbudowanego systemu Threat Intelligence, który analizuje zgromadzone dane z całej społeczności CrowdSec, umożliwiając lepsze wykrywanie i blokowanie zagrożeń.
Instalacja CrowdSec Console jest stosunkowo prosta i wymaga założenia konta na platformie CrowdSec. Konto jest darmowe, jednakże, istnieją pewne ograniczenia w darmowym planie, takie jak dostęp do historii alertów ograniczonej do 7 dni lub 500 alertów. Po założeniu konta wystarczy już tylko podłączyć nasz serwer do konsoli za pomocą polecenia dostępnego w sekcji „Enroll your CrowdSec Security Engine”:
sudo cscli console enroll -e context xxxxxxxxxxxxxxxxxxxxxxxxxx
Po zarejestrowaniu instancji, będziesz mógł monitorować ataki na swoje serwery i analizować dane z różnych źródeł w ramach tej samej platformy.
4. Obsługa CrowdSec
CrowdSec dostarcza swój Command Line Interface cscli
do obsługi i zarządzania konfiguracją systemu z poziomu wiersza poleceń.
- Sprawdzenie zablokowanych IP:
sudo cscli decisions list
To polecenie wyświetli listę IP, które zostały zablokowane na Twoim serwerze przez CrowdSec
- Odblokowanie konkretnego adresu IP:
sudo cscli decisions delete --ip <adres_IP>
- Usunięcie wszystkich zablokowanych IP
sudo cscli decisions delete --all
- Dodanie adresu IP do białej listy polega na stworzeniu pliku yaml z definicją:
vim /etc/crowdsec/parsers/s02-enrich/mywhitelists.yaml
dopisujemy
name: crowdsecurity/whitelists description: "Whitelist events from my ip addresses" whitelist: reason: "MY IP Ranges" ip: - "x.x.x.x/24"
następnie restart
sudo systemctl reload crowdsec
- Logi
Po skonfigurowaniu, możesz przetestować działanie systemu, monitorując logi CrowdSec:
sudo tail -f /var/log/crowdsec.log
5. Przykładowa ochrona SSH
Te kroki pozwolą Ci ustawić ochronę dla SSH i zablokować IP po 5 nieudanych próbach logowania.
sudo apt install crowdsec sudo cscli parsers install crowdsecurity/sshd-logs sudo cscli collections install crowdsecurity/sshd sudo systemctl restart crowdsec sudo tail -f /var/log/crowdsec.log
Parametry tego scenriusza możesz dostosować w pliku /etc/crowdsec/scenarios/ssh-bf.yaml
Podsumowanie
CrowdSec to skuteczne narzędzie zapewniające ochronę przed atakami brute force. Wykorzystuje społecznościowe podejście do ochrony serwerów, blokując podejrzane adresy IP na podstawie zgromadzonych danych. Rozwiązanie to ma dużo zalet, ale także jedną wadę:
Zalety:
- Crowdsourcing: CrowdSec korzysta z informacji o atakach od wielu użytkowników, co pozwala na szybsze i skuteczniejsze blokowanie ataków.
- Prosta instalacja i konfiguracja: Instalacja CrowdSec jest łatwa i szybka, a konfiguracja domyślna jest wystarczająca dla większości zastosowań.
- Wsparcie dla wielu aplikacji: CrowdSec obsługuje wiele popularnych aplikacji, takich jak serwery WWW, SSH, bazy danych.
Wady:
- Pewną niedogodnością jest fakt, że aby graficznie zarządzać atakami i alertami w CrowdSec, musisz skorzystać z narzędza takiego jak CrowdSec Console co wiąże się z założeniem konta w serwisie https://app.crowdsec.net, a nawet wykupienie odpowiedneij subskrypcji.