Crowdsec SSH Bruteforce Beispiel: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Installation des CrowdSec SSH-Bruteforce-Schutzes =
+
==Wichtig==
 +
;Vorraussetzung Crowdsec ist installiert
 +
;Im Labor empfielt es sich die Whitelist zu bearbeiten.
 +
*vi /etc/crowdsec/parsers/s02-enrich/whitelists.yaml
 +
name: crowdsecurity/whitelists
 +
description: "Whitelist events from private ipv4 addresses"
 +
whitelist:
 +
  reason: "private ipv4/ipv6 ip/ranges"
 +
  ip:
 +
    - "::1"
 +
    - "192.168.178.1"
 +
  cidr:
 +
    # - "127.0.0.0/8"
 +
    # - "192.168.0.0/16"
 +
    # - "10.0.0.0/8"
 +
    # - "172.16.0.0/12"
 +
# expression:
 +
    #  - "'foo.com' in evt.Meta.source_ip.reverse"
 +
*systemctl restart crowdsec
  
 
== Installation der SSH-Collection ==
 
== Installation der SSH-Collection ==
*'''sudo cscli collections install crowdsecurity/sshd'''
+
* sudo cscli collections install crowdsecurity/sshd
*'''sudo systemctl reload crowdsec'''
+
* sudo systemctl reload crowdsec
  
 +
== Installation des nftables Bouncers ==
 +
; Wenn noch nicht geschehen
 +
* apt install crowdsec-firewall-bouncer-nftables
  
== Installation und Aktivierung des iptables-Bouncers ==
+
== Neustart des Bouncers ==
*'''sudo cscli bouncers add crowdsec-firewall-bouncer-iptables'''
+
* sudo systemctl restart crowdsec-firewall-bouncer
*'''sudo systemctl reload crowdsec'''
+
* sudo systemctl status crowdsec-firewall-bouncer
  
== API-Key für den Bouncer in die Konfiguration eintragen ==
+
== Überprüfen, ob der Bouncer mit CrowdSec verbunden ist ==
Ersetze `<API-KEY>` durch den generierten Schlüssel.
+
* sudo cscli bouncers list
*'''sudo vi /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml'''
 
<pre>
 
mode: nftables
 
daemonize: true
 
pid_dir: /var/run/
 
update_frequency: 10s
 
api_url: http://127.0.0.1:8080/
 
api_key: "<API-KEY>"
 
nftables:
 
  ipv4: true
 
  ipv6: false
 
</pre>
 
  
== Neustart des Bouncers ==
 
*'''sudo systemctl restart crowdsec-firewall-bouncer'''
 
*'''sudo systemctl status crowdsec-firewall-bouncer'''
 
==Überprüfen, ob der Bouncer mit CrowdSec verbunden ist==
 
*'''sudo cscli bouncers list'''
 
 
== Überprüfung der installierten SSH-Szenarien ==
 
== Überprüfung der installierten SSH-Szenarien ==
Bevor wir einen Angriff simulieren, stellen wir sicher, dass CrowdSec überhaupt SSH-Angriffe erkennt.
+
* sudo cscli scenarios list | grep ssh
*'''sudo cscli scenarios list | grep ssh'''
+
 
== Auf dem Attacker starten wir nun einen Angriff==
+
== Auf dem Attacker starten wir nun einen Angriff ==
;Passwortliste besorgen
+
; Passwortliste besorgen
*wget https://xinux.de/downloads/bad-passwords
+
* wget https://xinux.de/downloads/bad-passwords
;Hydra installieren
+
; Hydra installieren
*apt install hydra -y
+
* apt update
;Attacke
+
* apt install hydra -y
*hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://10.0.10.132 -V
+
; Attacke
 +
* hydra -l kit -P bad-passwords ssh://10.88.213.41 -s 6666 -V
  
== Überprüfung, ob der Bouncer Entscheidungen umsetzt ==
 
*'''sudo cscli decisions list'''
 
<pre>
 
╭───────┬──────────┬───────────────┬───────────────────────────┬────────┬─────────┬────┬────────┬────────────────────┬──────────╮
 
│  ID  │  Source  │  Scope:Value  │          Reason          │ Action │ Country │ AS │ Events │    expiration    │ Alert ID │
 
├───────┼──────────┼───────────────┼───────────────────────────┼────────┼─────────┼────┼────────┼────────────────────┼──────────┤
 
│ 15002 │ crowdsec │ Ip:10.0.10.99 │ crowdsecurity/ssh-slow-bf │ ban    │        │    │ 13    │ 3h58m41.750831936s │ 3        │
 
╰───────┴──────────┴───────────────┴───────────────────────────┴────────┴─────────┴────┴────────┴────────────────────┴──────────╯
 
1 duplicated entries skipped
 
</pre>
 
 
== Überprüfung der erkannten SSH-Angriffe ==
 
== Überprüfung der erkannten SSH-Angriffe ==
*'''sudo cscli alerts list'''
+
* sudo cscli alerts list
 +
 
 
<pre>
 
<pre>
 
+----+-------------------+---------------------------+---------+----+-----------+-----------------------------------------+
 
+----+-------------------+---------------------------+---------+----+-----------+-----------------------------------------+
Zeile 63: Zeile 59:
  
 
== Anzeige der gebannten IP-Adressen ==
 
== Anzeige der gebannten IP-Adressen ==
*'''sudo cscli decisions list'''
+
* sudo cscli decisions list
 +
 
 +
<pre>
 +
╭───────┬──────────┬───────────────┬───────────────────────────┬────────┬─────────┬────┬────────┬────────────────────┬──────────╮
 +
│  ID  │  Source  │  Scope:Value  │          Reason          │ Action │ Country │ AS │ Events │    expiration    │ Alert ID │
 +
├───────┼──────────┼───────────────┼───────────────────────────┼────────┼─────────┼────┼────────┼────────────────────┼──────────┤
 +
│ 15002 │ crowdsec │ Ip:10.0.10.99 │ crowdsecurity/ssh-slow-bf │ ban    │        │    │ 13    │ 3h58m41.750831936s │ 3        │
 +
╰───────┴──────────┴───────────────┴───────────────────────────┴────────┴─────────┴────┴────────┴────────────────────┴──────────╯
 +
1 duplicated entries skipped
 +
</pre>
  
== Detailansicht einer spezifischen IP-Adresse ==
+
* cscli decisions delete --ip 10.0.10.109
*'''sudo cscli decisions inspect <IP-Adresse>'''
 
  
 
== Live-Log der CrowdSec-Analyse anzeigen ==
 
== Live-Log der CrowdSec-Analyse anzeigen ==
*'''sudo journalctl -u crowdsec -f'''
+
* sudo journalctl -u crowdsec -f
  
 
== Überprüfung der installierten Parser, Szenarien und Bouncer ==
 
== Überprüfung der installierten Parser, Szenarien und Bouncer ==
*'''sudo cscli parsers list'''
+
* sudo cscli parsers list
*'''sudo cscli scenarios list'''
+
* sudo cscli scenarios list
*'''sudo cscli bouncers list'''
+
* sudo cscli bouncers list
  
 
== Test: Anzeige der letzten SSH-Fehlversuche ==
 
== Test: Anzeige der letzten SSH-Fehlversuche ==
*'''sudo journalctl -u ssh -g "Failed password" --no-pager | tail -n 20'''
+
* sudo journalctl -u ssh -g "Failed password" --no-pager | tail -n 20
 
 
== Optional: Hydra für SSH-Bruteforce-Simulation installieren ==
 
*'''sudo apt install hydra -y'''
 
 
 
== Simulieren eines SSH-Brute-Force-Angriffs mit Hydra ==
 
*'''hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://127.0.0.1 -V'''
 
 
 
== Überprüfung, ob CrowdSec den Angriff erkannt hat ==
 
*'''sudo cscli alerts list'''
 
 
 
== Überprüfung, ob die angreifende IP gesperrt wurde ==
 
*'''sudo cscli decisions list'''
 
 
 
== Eigene IP-Adresse entsperren (falls gebannt) ==
 
*'''sudo cscli decisions delete -i <deine-IP>'''
 
 
 
---
 
 
 
Jetzt kannst du **alles auf einmal kopieren** und hast den vollständigen Ablauf. **Passt das so?**
 

Aktuelle Version vom 2. Juli 2025, 13:09 Uhr

Wichtig

Vorraussetzung Crowdsec ist installiert
Im Labor empfielt es sich die Whitelist zu bearbeiten.
  • vi /etc/crowdsec/parsers/s02-enrich/whitelists.yaml
name: crowdsecurity/whitelists
description: "Whitelist events from private ipv4 addresses"
whitelist:
  reason: "private ipv4/ipv6 ip/ranges"
  ip:
    - "::1"
    - "192.168.178.1"
  cidr:
   # - "127.0.0.0/8"
   # - "192.168.0.0/16"
   # - "10.0.0.0/8"
   # - "172.16.0.0/12"
# expression:
   #   - "'foo.com' in evt.Meta.source_ip.reverse"
  • systemctl restart crowdsec

Installation der SSH-Collection

  • sudo cscli collections install crowdsecurity/sshd
  • sudo systemctl reload crowdsec

Installation des nftables Bouncers

Wenn noch nicht geschehen
  • apt install crowdsec-firewall-bouncer-nftables

Neustart des Bouncers

  • sudo systemctl restart crowdsec-firewall-bouncer
  • sudo systemctl status crowdsec-firewall-bouncer

Überprüfen, ob der Bouncer mit CrowdSec verbunden ist

  • sudo cscli bouncers list

Überprüfung der installierten SSH-Szenarien

  • sudo cscli scenarios list | grep ssh

Auf dem Attacker starten wir nun einen Angriff

Passwortliste besorgen
Hydra installieren
  • apt update
  • apt install hydra -y
Attacke

Überprüfung der erkannten SSH-Angriffe

  • sudo cscli alerts list
+----+-------------------+---------------------------+---------+----+-----------+-----------------------------------------+
| ID |       value       |          reason           | country | as | decisions |               created_at                |
+----+-------------------+---------------------------+---------+----+-----------+-----------------------------------------+
| 3  | Ip:10.0.10.99     | crowdsecurity/ssh-slow-bf |         |    | ban:1     | 2025-03-08 10:07:24.268224992 +0000 UTC |
| 2  | Ip:10.0.10.99     | crowdsecurity/ssh-bf      |         |    | ban:1     | 2025-03-08 10:07:24.268879637 +0000 UTC |
+----+-------------------+---------------------------+---------+----+-----------+-----------------------------------------+

Anzeige der gebannten IP-Adressen

  • sudo cscli decisions list
╭───────┬──────────┬───────────────┬───────────────────────────┬────────┬─────────┬────┬────────┬────────────────────┬──────────╮
│  ID   │  Source  │  Scope:Value  │          Reason           │ Action │ Country │ AS │ Events │     expiration     │ Alert ID │
├───────┼──────────┼───────────────┼───────────────────────────┼────────┼─────────┼────┼────────┼────────────────────┼──────────┤
│ 15002 │ crowdsec │ Ip:10.0.10.99 │ crowdsecurity/ssh-slow-bf │ ban    │         │    │ 13     │ 3h58m41.750831936s │ 3        │
╰───────┴──────────┴───────────────┴───────────────────────────┴────────┴─────────┴────┴────────┴────────────────────┴──────────╯
1 duplicated entries skipped
  • cscli decisions delete --ip 10.0.10.109

Live-Log der CrowdSec-Analyse anzeigen

  • sudo journalctl -u crowdsec -f

Überprüfung der installierten Parser, Szenarien und Bouncer

  • sudo cscli parsers list
  • sudo cscli scenarios list
  • sudo cscli bouncers list

Test: Anzeige der letzten SSH-Fehlversuche

  • sudo journalctl -u ssh -g "Failed password" --no-pager | tail -n 20