
psad: Intrusion Detection und Log-Analyse mit iptables
Der Port Scan Attack Detector psad ist ein leichtgewichtiger System-Daemon, der in Perl geschrieben ist und mit den Linux-Firewall-Komponenten iptables/ip6tables/firewalld zusammenarbeitet, um verdächtigen Datenverkehr wie Port-Scans und -Sweeps, Backdoors, Botnet-Kommandos und -Steuerungskommunikation und mehr zu erkennen. Er verfügt über eine Reihe hochgradig konfigurierbarer Gefahrenschwellen (mit sinnvollen Standardwerten), ausführliche Alarmmeldungen, die Quelle, Ziel, gescannten Portbereich, Anfangs- und Endzeiten, TCP-Flags und entsprechende nmap-Optionen, Reverse-DNS-Informationen, E-Mail- und Syslog-Benachrichtigungen, automatische Blockierung angreifender IP-Adressen durch dynamische Konfiguration von iptables-Regelsätzen, passives Betriebssystem-Fingerprinting und DShield-Meldungen umfassen. Darüber hinaus integriert psad viele der TCP-, UDP- und ICMP-Signaturen des Snort-Intrusion-Detection-Systems, um hochverdächtige Scans auf verschiedene Backdoor-Programme (z. B. EvilFTP, GirlFriend, SubSeven), DDoS-Tools (Mstream, Shaft) und fortgeschrittene Port-Scans (SYN, FIN, XMAS) zu erkennen, die leicht mit nmap gegen einen Rechner eingesetzt werden können. psad kann auch auf Snort-Signaturen alarmieren, die über fwsnort protokolliert werden, das die iptables-string-match-Erweiterung nutzt, um Datenverkehr zu erkennen, der Anwendungsschichtsignaturen entspricht. Ab Version 2.4.4 kann psad auch die Scanphase der Standard-Anmeldedaten des Mirai-Botnets erkennen.
Die vollständige Feature-Liste folgt unten.
--log-tcp-options), und eine TOS-basierte Strategie.psad Alarme für Pufferüberlauf-Angriffe auf der Anwendungsschicht, verdächtige Anwendungsbefehle und anderen verdächtigen Layer-7-Verkehr erzeugen.psad bietet eine Integration mit gnuplot und afterglow zur Erstellung von Graphen bösartigen Datenverkehrs. Die folgenden beiden Graphen stammen vom Nachi-Wurm aus der Honeynet Scan30-Challenge. Zunächst ein von afterglow nach der Analyse der iptables-Logdaten durch psad erstellter Link-Graph:
"Nachi Worm Link Graph"
Der zweite zeigt den Nachi-Wurm-Datenverkehr auf stündlicher Basis aus den Scan30-iptables-Daten:
"Nachi Worm Hourly Graph"
Informationen zu den von psad referenzierten Konfigurationsschlüsselwörtern finden Sie sowohl in der Handbuchseite psad(8) als auch hier:
http://www.cipherdyne.org/psad/docs/config.html
Alle von psad analysierten Informationen stammen aus iptables-Logmeldungen. Standardmäßig liest psad die Datei /var/log/messages auf neue iptables-Meldungen und schreibt sie optional in eine dedizierte Datei (/var/log/psad/fwdata). psad ist dann dafür verantwortlich, die Gefahrenschwellen- und Signaturlogik anzuwenden, um festzustellen, ob ein Portscan stattgefunden hat, entsprechende Alarm-E-Mails zu senden und (optional) angreifende IP-Adressen zu blockieren. psad enthält einen Signalhandler, sodass er bei Empfang eines USR1-Signals den Inhalt der aktuellen Scan-Hash-Datenstruktur in /var/log/psad/scan_hash.$$ ausgibt, wobei "$$" die PID des laufenden psad-Daemons darstellt.
HINWEIS: Da psad auf iptables angewiesen ist, um entsprechende Logmeldungen für unbefugte Pakete zu erzeugen, ist psad nur so gut wie die im iptables-Regelsatz enthaltenen Logging-Regeln. Wenn Ihre Firewall nicht so konfiguriert ist, dass sie Pakete protokolliert, erkennt psad KEINE Portscans oder irgendetwas anderes. Üblicherweise ist der beste Weg, die Firewall einzurichten, mit Standardregeln "Drop and Log" am Ende des Regelsatzes und darüberliegenden Regeln, die nur den Verkehr erlauben, der durchgelassen werden soll. Bei der Ausführung versucht der psad-Daemon festzustellen, ob eine solche Standardverweigerungsregel existiert, und warnt den Benutzer, wenn dies nicht der Fall ist. Siehe die Datei FW_EXAMPLE_RULES für Beispiel-Firewall-Regelsätze, die mit psad kompatibel sind.
Darüber hinaus wird psad umfassend im Buch "Linux Firewalls: Attack Detection and Response" (erschienen bei No Starch Press) behandelt, und ein zugehöriges Skript aus diesem Buch ist mit psad kompatibel. Dieses Skript finden Sie hier:
http://www.cipherdyne.org/LinuxFirewalls/ch01/
Abhängig von der Linux-Distribution kann psad bereits im Standard-Paket-Repository verfügbar sein. Zum Beispiel auf Debian- oder Ubuntu-Systemen erfolgt die Installation mit einem einfachen:
apt-get install psad
Wenn psad nicht im Paket-Repository verfügbar ist, kann es mit dem Skript install.pl aus dem psad-Quellcode installiert werden. Das Skript install.pl verwaltet auch Upgrades, wenn psad bereits installiert ist. psad benötigt mehrere Perl-Module, die möglicherweise bereits auf Ihrem Linux-System installiert sind oder nicht. Diese Module sind im Verzeichnis deps/ des psad-Quellcodes enthalten und werden vom Skript install.pl automatisch installiert. Die Liste der Module lautet:
psad enthält auch einen Whois-Client, der von Marco d'Itri geschrieben wurde (siehe Verzeichnis deps/whois). Dieser Client ist besser als andere darin, die korrekten Whois-Informationen für eine bestimmte IP-Adresse zu sammeln.
Die Hauptanforderung für eine mit psad kompatible iptables-Konfiguration ist einfach, dass iptables Pakete protokolliert. Dies wird üblicherweise erreicht, indem Regeln zu den Ketten INPUT und FORWARD wie folgt hinzugefügt werden:
iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG
Die obigen Regeln sollten am Ende der Ketten INPUT und FORWARD nach allen ACCEPT-Regeln für legitimen Datenverkehr und direkt vor einer entsprechenden DROP-Regel für Datenverkehr, der nicht durch die Richtlinie erlaubt werden soll, hinzugefügt werden. Beachten Sie, dass iptables-Richtlinien recht komplex sein können, mit Protokoll-, Netzwerk-, Port- und Schnittstellenbeschränkungen, benutzerdefinierten Ketten, Verbindungsverfolgungsregeln und vielem mehr. Es gibt viele Softwarelösungen wie Shorewall und Firewall Builder, die iptables-Richtlinien erstellen und die erweiterten Filter- und Logging-Funktionen von iptables nutzen. Im Allgemeinen sind die von solcher Software erstellten Richtlinien mit psad kompatibel, da sie spezifisch Regeln hinzufügen, die iptables anweisen, Pakete zu protokollieren, die nicht zu legitimen Verkehr gehören. Psad kann so konfiguriert werden, dass nur solche iptables-Meldungen analysiert werden, die bestimmte Log-Präfixe enthalten (die über die Option --log-prefix hinzugefügt werden), standardmäßig analysiert psad jedoch alle iptables-Logmeldungen auf Anzeichen von Portscans, Sondierungen nach Backdoor-Programmen und anderen verdächtigen Verkehr.
psad läuft im Allgemeinen auf Linux-Systemen und ist in den Paket-Repositories vieler großer Linux-Distributionen verfügbar. Bei Betriebsproblemen mit psad eröffnen Sie bitte ein Issue auf github.
psad wird als Open-Source-Software unter den Bedingungen der GNU General Public License (GPL v2+) veröffentlicht. Die neueste Version finden Sie unter https://github.com/mrash/psad/releases.
psad verwendet viele der TCP-, UDP- und ICMP-Signaturen aus Snort (geschrieben von Marty Roesch, siehe http://www.snort.org). Snort ist eine eingetragene Marke von Sourcefire, Inc.
Alle Feature-Anfragen und Fehlerbehebungen werden über das Issue-Tracking auf GitHub verwaltet. Sie können mir jedoch auch eine E-Mail senden (michael.rash_AT_gmail.com) oder mich über Twitter erreichen (@michaelrash).