Suricata Network IDS/IPs Cheat Sheet
Überblick
Suricata ist ein leistungsstarkes Netzwerk Intrusion Detection System (NIDS), Intrusion Prevention System (IPS) und Network Security Monitoring (NSM) Motor. Es bietet Echtzeit-Intrusionserkennung, Inline-Intrusionsvorbeugung, Netzwerksicherheitsüberwachung und Offline-Pcap-Verarbeitung. Suricata ist weit verbreitet in Unternehmensumgebungen zur Bedrohungserkennung, Netzwerküberwachung und Sicherheitsanalyse mit seiner vielseitigen Architektur und fortschrittlichen Erkennungsfunktionen.
ZEIT Note: Suricata erfordert eine korrekte Netzwerkpositionierung und Regelkonfiguration für eine effektive Bedrohungserkennung. Es sollte mit einem entsprechenden Netzzugang und regelmäßig aktualisierten Regelsätzen eingesetzt werden.
Installation
Installation des Paketmanagers
```bash
Ubuntu/Debian
sudo apt update sudo apt install suricata
CentOS/RHEL/Fedora
sudo dnf install epel-release sudo dnf install suricata
macOS with Homebrew
brew install suricata
Verify installation
suricata --version ```_
Quelle Installation
```bash
Install dependencies (Ubuntu/Debian)
sudo apt install libpcre3-dev libpcap-dev libnet1-dev libyaml-dev libjansson-dev libcap-ng-dev libmagic-dev libnetfilter-queue-dev libnetfilter-log-dev libnfnetlink-dev pkg-config
Install dependencies (CentOS/RHEL)
sudo dnf install pcre-devel libpcap-devel libnet-devel libyaml-devel jansson-devel libcap-ng-devel file-devel libnetfilter_queue-devel libnetfilter_log-devel libnfnetlink-devel
Download and compile Suricata
wget https://www.openinfosecfoundation.org/download/suricata-6.0.8.tar.gz tar -xzf suricata-6.0.8.tar.gz cd suricata-6.0.8
Configure with features
./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var \ --enable-nfqueue --enable-nflog --enable-unix-socket
Compile and install
make -j$(nproc) sudo make install
Create user and directories
sudo useradd -r -s /bin/false suricata sudo mkdir -p /var/log/suricata /var/lib/suricata /etc/suricata/rules sudo chown -R suricata:suricata /var/log/suricata /var/lib/suricata ```_
Docker Installation
```bash
Pull Suricata image
docker pull jasonish/suricata
Run Suricata in container
docker run --rm -it --net=host --cap-add=NET_ADMIN \ -v $(pwd)/suricata.yaml:/etc/suricata/suricata.yaml \ -v $(pwd)/logs:/var/log/suricata \ jasonish/suricata -i eth0
Create custom Dockerfile
cat > Dockerfile << 'EOF' FROM jasonish/suricata COPY custom-rules/ /etc/suricata/rules/ COPY suricata.yaml /etc/suricata/ ENTRYPOINT ["suricata"] EOF
docker build -t custom-suricata . ```_
Grundkonfiguration
Hauptkonfiguration (/etc/suricata/suricata.yaml)
```yaml
suricata.yaml - Main configuration file
Network interfaces
af-packet: - interface: eth0 cluster-id: 99 cluster-type: cluster_flow defrag: yes use-mmap: yes tpacket-v3: yes
Logging configuration
outputs: - fast: enabled: yes filename: fast.log append: yes
- eve-log: enabled: yes filetype: regular filename: eve.json types: - alert - http - dns - tls - files - smtp - ssh - flow
Rule configuration
default-rule-path: /etc/suricata/rules rule-files: - suricata.rules - emerging-threats.rules - local.rules
Detection engine
detect-engine: - profile: medium - custom-values: toclient-groups: 3 toserver-groups: 25
Threading
threading: set-cpu-affinity: no cpu-affinity: - management-cpu-set: cpu: [ 0 ] - receive-cpu-set: cpu: [ 0 ] - worker-cpu-set: cpu: [ "1-3" ] detect-thread-ratio: 1.0
Host OS policy
host-os-policy: windows: [0.0.0.0/0] bsd: [] bsd-right: [] old-linux: [] linux: [] old-solaris: [] solaris: [] hpux10: [] hpux11: [] irix: [] macos: [] vista: [] windows2k3: [] ```_
Regelverwaltung
```bash
Download Emerging Threats rules
sudo suricata-update
Update rules with specific sources
sudo suricata-update --reload-command="sudo systemctl reload suricata"
List available rule sources
suricata-update list-sources
Enable specific rule sources
sudo suricata-update enable-source et/open sudo suricata-update enable-source oisf/trafficid
Disable rules
echo "drop tcp any any -> any any (msg:\"Disabled rule\"; sid:1000001; rev:1;)"|\ sudo tee -a /etc/suricata/rules/disable.conf ```_
Basisnutzung
Laufende Suricata
```bash
Run in IDS mode on interface
sudo suricata -i eth0
Run with specific configuration
sudo suricata -c /etc/suricata/suricata.yaml -i eth0
Run in daemon mode
sudo suricata -c /etc/suricata/suricata.yaml -i eth0 -D
Process pcap file
suricata -r capture.pcap -c /etc/suricata/suricata.yaml
Run with specific log directory
sudo suricata -i eth0 -l /var/log/suricata/
Verbose mode
sudo suricata -i eth0 -v ```_
Service Management
```bash
Start Suricata service
sudo systemctl start suricata
Enable auto-start
sudo systemctl enable suricata
Check status
sudo systemctl status suricata
Restart service
sudo systemctl restart suricata
Reload rules without restart
sudo systemctl reload suricata
View logs
sudo journalctl -u suricata -f ```_
Regelprüfung
```bash
Test rule syntax
suricata -T -c /etc/suricata/suricata.yaml
Test specific rule file
suricata -T -S /etc/suricata/rules/local.rules
Validate configuration
sudo suricata --dump-config
Check rule statistics
sudo suricata --engine-analysis ```_
Artikel Entwicklung
Grundregel Syntax
```bash
Basic alert rule
alert tcp any any -> any 80 (msg:"HTTP traffic detected"; sid:1000001; rev:1;)
Drop rule (IPS mode)
drop tcp any any -> any 22 (msg:"SSH brute force attempt"; threshold:type both,track by_src,count 5,seconds 60; sid:1000002; rev:1;)
HTTP-specific rule
alert http any any -> any any (msg:"Suspicious user agent"; http.user_agent; content:"sqlmap"; sid:1000003; rev:1;)
DNS rule
| alert dns any any -> any any (msg:"DNS tunneling attempt"; dns.query; content:" | 00 | "; sid:1000004; rev:1;) |
TLS/SSL rule
alert tls any any -> any any (msg:"Self-signed certificate"; tls.cert_subject; content:"CN=localhost"; sid:1000005; rev:1;) ```_
Erweiterte Regelbeispiele
```bash
/etc/suricata/rules/local.rules
SQL injection detection
| alert http any any -> any any (msg:"SQL injection attempt"; http.uri; pcre:"/(\%27) | (\') | (--) | (\%23) | (#)/i"; reference:url,www.owasp.org; classtype:web-application-attack; sid:1000010; rev:1;) |
XSS detection
alert http any any -> any any (msg:"Cross-site scripting attempt"; http.uri; pcre:"/