OPNsense Suricata Eigene Regeln

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Eigene Regeln

  • Eigene Regeln kommen nach /usr/local/etc/suricata/rules
  • Mann kann sie nicht auf der Weboberfläche erstellen
  • Am besten man macht eine eigene Datei mit der Endung *.rules
  • Man findet sie auf der Weboberfläche dann direkt unter
  • Indrusion Detection
    • Administration
      • Rules
  • Sie müssen aber noch aktiviert werden.
  • Wenn man den IPS Modus ausgewählt hat, kann man zwischen Alert und Drop auswählen.
  • Drop funktioniert momentan nur bei einem Interface.

Untersuchungen mit Chrome

Beispiele

  • cat own.rules
# ICMP: einfacher Ping/Traceroute (schneller Funktionstest)
# Test: ping -c1 <ZIEL>
alert icmp any any -> any any (msg:"ICMP Test"; classtype:misc-activity; sid:41;)

# HTTP: mögliches Command-Injection-Merkmal (Semikolon) in POST-Body
# Test: curl -X POST http://<ZIEL>/ -d "q=test%3Bls"
alert http any any -> any any (msg:"Command Injection - Semicolon in POST DATA"; classtype:web-application-attack; flow:established; content:"%3B"; nocase; http_client_body; sid:2;)

# HTTP: mögliches SQLi-Merkmal (einfaches Hochkomma) in POST-Body
# Test: curl -X POST http://<ZIEL>/login -d "u=a&p='%20OR%201=1"
alert http any any -> any any (msg:"Possible SQL Injection (singlequote in POST)"; classtype:web-application-attack; flow:established,to_server; content:"%27"; nocase; http_client_body; sid:3;)

# DNS: Policy – verbietet "google" in DNS-Queries
# Test: dig google.com @<FW>
drop dns any any -> any any (msg:"Kein Googlen"; dns.query; content:"google"; nocase; classtype:policy-violation; sid:43;)

# DoS: viele identische kurze HTTP-GETs (LOIC-ähnlich)
# Test: ab -n 1000 -c 500 http://<ZIEL>/
drop tcp any any -> any any (msg:"ET DOS Terse HTTP GET Likely LOIC"; flow:to_server,established; dsize:18; content:"GET / HTTP/1.1|0d 0a 0d 0a|"; depth:18; threshold:type both,track by_dst,count 500,seconds 60; classtype:own-dos; sid:54; rev:2; metadata:created_at 2014_10_03, confidence Medium, signature_severity Major, updated_at 2019_07_26;)

# Scan: TCP SYN-Sweep (viele SYN in kurzer Zeit)
# Test: nmap -sS -p1-100 <ZIEL>
drop tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"OWN SCAN TCP SYN sweep"; flow:stateless,to_server; flags:S; detection_filter:track by_src,count 20,seconds 5; classtype:attempted-recon; sid:60; rev:1;)

# Scan: TCP NULL-Scan (keine Flags gesetzt)
# Test: nmap -sN -p1-100 <ZIEL>
drop tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"OWN SCAN TCP NULL scan"; flow:stateless,to_server; flags:0; detection_filter:track by_src,count 5,seconds 10; classtype:attempted-recon; sid:61; rev:1;)

# Scan: TCP FIN-Scan (nur FIN)
# Test: nmap -sF -p1-100 <ZIEL>
drop tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"OWN SCAN TCP FIN scan"; flow:stateless,to_server; flags:F; detection_filter:track by_src,count 5,seconds 10; classtype:attempted-recon; sid:62; rev:1;)

# Scan: TCP XMAS-Scan (FIN+PSH+URG)
# Test: nmap -sX -p1-100 <ZIEL>
drop tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"OWN SCAN TCP XMAS scan"; flow:stateless,to_server; flags:FPU; detection_filter:track by_src,count 5,seconds 10; classtype:attempted-recon; sid:63; rev:1;)

# Scan: UDP-Sweep mit leerer Payload
# Test: nmap -sU --min-rate=1000 <ZIEL>
drop udp $EXTERNAL_NET any -> $HOME_NET 1:65535 (msg:"OWN SCAN UDP sweep (empty probes)"; flow:to_server; dsize:0; detection_filter:track by_src,count 15,seconds 10; classtype:attempted-recon; sid:64; rev:1;)

# Scan: ICMP Ping-Sweep (viele Echo-Requests)
# Test: nmap -sn <NETZ>/24
drop icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"OWN SCAN ICMP ping sweep"; itype:8; detection_filter:track by_src,count 10,seconds 5; classtype:attempted-recon; sid:65; rev:1;)

Weitere

# --- ICMP Flood / Ping Flood (klassischer DDos) ---
alert icmp any any -> $HOME_NET any (msg:"ICMP Flood Potential Detected"; threshold: type both, track by_dst, count 100, seconds 10; sid:1000001; rev:1;)

# --- UDP Flood ---
alert udp any any -> $HOME_NET any (msg:"UDP Flood Potential Detected"; threshold: type both, track by_dst, count 200, seconds 5; sid:1000002; rev:1;)

# --- TCP SYN Flood (Sehr häufiger DDos-Typ) ---
alert tcp any any -> $HOME_NET any (flags:S; msg:"TCP SYN Flood Potential Detected"; threshold: type both, track by_dst, count 150, seconds 10; sid:1000003; rev:1;)

# --- HTTP Flood (Layer 7 Attacke) ---
alert http any any -> $HOME_NET any (msg:"HTTP Flood Potential Detected"; threshold: type both, track by_dst, count 300, seconds 10; sid:1000004; rev:1;)

# --- DNS Amplification / große DNS Antworten ---
alert udp any 53 -> $HOME_NET any (msg:"Possible DNS Amplification Attack"; dnsize: > 512; threshold: type both, track by_src, count 50, seconds 5; sid:1000005; rev:1;)

# --- (Optional) Einfacher "Hello World" Treffer für Tests ---
alert tcp any any -> $HOME_NET any (msg:"TEST - SSH Connection Attempt"; content:"SSH"; nocase; sid:1000006; rev:1;)
Schlüsselwort Beschreibung
alert Dieses Schlüsselwort gibt an, dass ein Alarm ausgelöst werden soll, wenn das Muster in der Regel erkannt wird. Ein Alarm kann eine Benachrichtigung an den Administrator oder eine andere Reaktion auf das erkannte Muster sein.
icmp Dies steht für das Internet Control Message Protocol, das für den Austausch von Nachrichten und Diagnoseinformationen in IP-Netzwerken verwendet wird. Diese Regel überwacht den Verkehr, der das ICMP-Protokoll verwendet.
any Dieser Platzhalter steht für jedes mögliche Quell- oder Zielattribut. In diesem Fall bedeutet any any, dass sowohl der Quell- als auch der Ziel-IP-Adressbereich nicht eingeschränkt sind.
-> Dieser Pfeil zeigt die Richtung des Datenverkehrs an. In diesem Fall bedeutet any any -> any any, dass der Datenverkehr in beide Richtungen (hin und zurück) überwacht wird.
(msg:"ICMP Test";) Dies ist eine optionale Nachricht, die dem Administrator mitteilt, warum der Alarm ausgelöst wurde. In diesem Fall lautet die Nachricht "ICMP Test".
classtype:icmp Dies gibt an, zu welcher Klasse von Angriffen oder Ereignissen die Regel gehört. In diesem Fall ist es ein ICMP-Typ.
sid:1 Dies ist die ID (Signatur-ID) der Regel. Sie dient dazu, die Regel eindeutig zu identifizieren. In diesem Fall ist die ID 1.

alert http any any -> any any (msg: "Command Injection - Semicolon in POST DATA"; ;classtype:command-injection ; flow:established; content:"%3B"; nocase; http_client_body; sid:5;)

Schlüsselwort Beschreibung
alert Dieses Schlüsselwort gibt an, dass ein Alarm ausgelöst werden soll, wenn das Muster in der Regel erkannt wird. Ein Alarm kann eine Benachrichtigung an den Administrator oder eine andere Reaktion auf das erkannte Muster sein.
http Dies steht für das Hypertext Transfer Protocol, das für die Übertragung von Daten über das World Wide Web verwendet wird. Diese Regel überwacht den HTTP-Verkehr.
any Dieser Platzhalter steht für jedes mögliche Quell- oder Zielattribut. In diesem Fall bedeutet any any, dass sowohl der Quell- als auch der Ziel-IP-Adressbereich nicht eingeschränkt sind.
-> Dieser Pfeil zeigt die Richtung des Datenverkehrs an. In diesem Fall bedeutet any any -> any any, dass der Datenverkehr in beide Richtungen (hin und zurück) überwacht wird.
(msg: "Command Injection - Semicolon in POST DATA";) Dies ist eine optionale Nachricht, die dem Administrator mitteilt, warum der Alarm ausgelöst wurde. In diesem Fall lautet die Nachricht "Command Injection - Semicolon in POST DATA".
classtype:command-injection Dies gibt an, zu welcher Klasse von Angriffen oder Ereignissen die Regel gehört. In diesem Fall ist es ein Befehlseinjektionstyp.
flow:established Dieser Parameter gibt an, dass die Regel nur auf etablierten Verbindungen überprüft werden soll.
content:"%3B" Dies ist der Inhalt, auf den die Regel prüft. In diesem Fall wird nach dem Semicolon (%3B) im HTTP-Client-Body gesucht.
nocase Dieser Parameter gibt an, dass die Groß- und Kleinschreibung beim Vergleich des Inhalts ignoriert werden soll.
sid:5 Dies ist die ID (Signatur-ID) der Regel. Sie dient dazu, die Regel eindeutig zu identifizieren. In diesem Fall ist die ID 5.

drop http any any -> any any (msg: "Possible SQL Injection attack (Contains singlequote POST DATA)"; flow:established,to_server; content:"%27"; nocase; http_client_body; sid:4;)