Psionic Portsentry 1.1, der Verteidiger der Ports

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image form you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Georges Tarbouriech 

en to de Tilmann Preuße 

AboutTheAuthor:[A small biography about the author]

Georges ist seit langer Zeit Unixnutzer. Er ist der Meinung, daß Computersicherheit die Herausforderung des Jahrzehnts ist.

Abstract:[Here you write a little summary]

Psionic Portsentry ist Teil der Abacus Projekt Sammlung von Tools ( neben Portsentry bietet die Sammlung noch logcheck und hostsentry ). Es handelt sich um ein IDS (Intrusion Detection System), zur Feststellung von Portscans und der aktiven Verteidigung. Es arbeitet auf verschiedenen Unix Derivaten, einschließlich Mac OS X. Die Hauptfunktion eines IDS ist es, den Sysadmin �ber einen Einbruchsversuch zu informieren. Portsentry geht noch weiter, es kann auf einen Angriff aktiv reagieren. Die aktuellste Version (1.1) von diesem großartigem Tool ist unter http://www.psionic.com zu finden. Und nur mal am Rande, Version 1.0 ist mittlerweile bei vielen Linux Distributionen mit dabei (Debian, RedHat ...).

ArticleIllustration:[This is the title picture for your article]

[illustration]

ArticleBody:[The article body]

Warum Portsentry nutzen ?

In der letzten Dekade nahm die Arbeit mit Netzwerken in einer unvorstellbaren Geschwindigkeit zu. Das Ziel war es, die Kommunikation zwischen Maschinen mit unterschiedlichen BS'en zu ermöglichen. Deshalb wurden propriet�re Netzwerksysteme kontinuierlich durch TCP/IP ersetzt. Das Internet erledigte dann den Rest ! Heutzutage wird fast das gesamte Netzwerk mit TCP/IP betrieben und TCP/IP basiert auf Ports. Um es kurz zu machen, Ports sind mit Programmen verbunden (Clients oder Servern). Die Server lauschen, bis ein Client versucht eine Verbindung aufzubauen. Die Dienste (die o.g. Programme) sind mit speziellen Ports verbunden. Auf Unix Systemen findet man das Schema in der Datei /etc/services. Jeder kennt so die Ports und die dazugeh�rigen Dienste. Wenn jeder das weiß, weiß es der Cracker noch besser ! Wenn ein Port eine Tür wäre und dieser Port offen ist (d.h. er lauscht), ist es wie eine unverschlossene Tür. Und wie kommt man in ein Haus ? Normalerweise durch die Tür (oder es wird der Weg durch ein Fenster vorgezogen, es liegt bei Ihnen !). So kommen die grauen Männer in Ihren Computer ...
Das Erste was zu tun ist, um das Risiko zu mindern ist, so viele Ports wie m�glich zu schließen, also die Dienste zu stoppen. Je weniger, desto besser. Nur nicht jeden einzelnen Port auf einer Netzwerk Maschine schließen : ansonsten kann gar keine Kommunikation stattfinden und das wäre wirklich dumm !
Die Limitierung der aktiven Dienste oder das Schließen der Ports ist nicht das Ziel dieses Artikels. Informationen zu diesem Thema kann man unter Linux Documentation Project finden oder man sucht in den Ausgaben von LinuxFocus (z.B. Bastille Linux oder Security tools ). Soweit zum anderem Weg zum Schutz der Maschine oder des Netzwerks. Auf Linux Systemen ist Bastille Linux ein absolutes Muß.
An dieser Stelle kommt Portsentry. Portsentry kann die Ports überwachen und kann auch blocken, wenn man es so will. Es verfügt dabei über verschiedene Benutzermodi, wobei einige nur für ein bestimmtes BS verfügbar sind. BS steht an dieser Stelle für Linux.
Portsentry ist in der Lage von Packet Filtern, wie ipfwadm, ipchains oder iptables je nach Kernel Version, zu profitieren. Für andere Unix Derivate kommen andere Tools zum tragen (später mehr dazu). Hier wären wir nun: Portsentry's bestes Feature ist wahrscheinlich "auto-blocking".
Wie funktioniert das nun ? Legen wir los !

Wie installiert man Portsentry ?

Portsentry kommt als kleines Tar-Packet daher. Nach dem Entpacken des Archivs hat man die Quellen, verschiedene Konfigurationen und README Dateien. Natürlich sind es alle Dateien wert gelesen zu werden. Da wir schließlich über Sicherheit reden: nicht vergessen die PGP Dateien herunterzuladen (Signatur und Schlüssel).
Installation von Portsentry ist klar: make (Ihr System) und make install . Jedoch vor der Installation an das Anpassen von Portsentry denken. Als da wären: Das Lesen der Dokumentation, das Anpassen der portsentry.conf Datei an die eigene Umgebung und die Makefile Datei wie auch die portsentry_config.h Datei pr�fen.
Damit Portsentry effektiv arbeitet, wird mindestens der TCPWrapper benötigt. Mindestens, da es noch besser wäre, es in Verbindung mit einem Packet Filter zu nutzen. Wenn man natürlich Linux nutzt, ist bereits alles vorhanden. Wie sieht es bei anderen Unixen aus ?
Da wir Portsentry auf verschiedenen Plattformen getestet haben, hier die Voraussetzungen.
Auf Mac OS X ist es wie bei Linux: Alles ist vorhanden, es gibt den TCPWrapper und ipfw (Die BSD Version). Also einfach "make osx" und schon geht's los.
Auf Solaris 2.6 (Sparc) gibt es keinen TCPWrapper. Unter ftp://ftp.porcupine.org/pub/security gibt es einen. Man kann auch unter ftp://coombs.anu.edu.au/pub/net/ip-filter/ip-fil3.4.9.tar.gz einen IPFilter bekommen (jedoch nur, wenn man den Solaris Compiler hat !!!).
Auf Irix 6.5 Systemen, gibt es ebenfalls keinen TCPWrapper. Man kann es als Paket auf http://freeware.sgi.com/index-by-alpha.html finden. Zum filtern der IP Pakete gibt es ipfilterd, jedoch ist er nicht als standardmäßig installiert.
Und zum Schluß, es sei denn es findet sich ein funktionierendes vsnprintf(), ist es nicht möglich Portsentry auf NeXTSTEP zu installieren ... und ich habe keins gefunden !
Wie auch immer, man sollte zuerst Portsentry konfigurieren bevor es installiert wird. Na gut, es liegt an Ihnen, aber es ist besser vor dem Weitermachen erst die Philosophie zu verstehen ... aber das ist nur ein Standpunkt !

Wie arbeitet Portsentry ?

Sehr gut, danke !
Noch wichtiger, Portsentry beruht auf Konfigurationsdateien. Die wichtigste ist portsentry.conf. Hier wird Portsentry gesagt, wie es auf Widersacher reagieren soll.
Bevor wir mit der Datei arbeiten, ist es nötig die Unterschiede der Arbeitsmodi zu kennen und was sie machen.
Portsentry arbeitet mit sechs verschiedenen Modi, abhängig von der beim Start gewählten Option.
- Die Erste ist "-tcp" und ist der Basis Modus. Mit dieser Option, verbindet sich Portsentry mit den TCP Ports, die in der Konfiguration im Abschnitt "port configuration" stehen. Es kann sich mit bis zu max. 64 Port verbinden.
- Die Zweite ist "-udp" und macht das gleiche wie zuvor, nur für die UDP Ports.
- Die Dritte ist "-stcp", das "s" steht für verstecken (stealth). Diese Option und die nächsten sind nur unter Linux verfügbar. Mit der "-stcp" Option, nutzt Portsentry Sockets um die eingehenden Pakete zu überwachen, d.h. die Ports sind mit keinen Diensten verbunden.
- Die Vierte ist "-sudp" und macht das gleiche wie zuvor, nur für die UDP Ports.
- Die F�nfte und Sechste sind "-atcp" und "-audp". Dies sind die effektivsten Optionen ("a" steht für erweitert (advanced)). Bei Nutzung dieser Optionen erstellt Portsentry eine Liste der lauschenden Ports, TCP und UDP, wenn beides gewählt wurde, und blockt kontaktierende Hosts auf den Ports, es sei denn, der Host soll von Portsentry ignoriert werden.
Das ganze ist besser in den README Dateien, welche Portsentry mitbringt, erklärt. Dementsprechend wollen wir das Rad nicht neu erfinden und die Dokumentation neu schreiben. Diese README Dateien sind zwingend zu lesen.

Wie reagiert Portsentry ?

Offensichtlich kann Portsentry auch Protokoll führen. Sollten Sie der Typ Sysadmin sein, der keine Protokolle liest (Schmach und Schande), dann kann natürlich auch logcheck als Ergänzung zu Portsentry genutzt werden. Bei diesem Weg verschickt Portsentry eine Mail zur Information, sobald ein Einbruchsversuch stattgefunden hat.
Es kann dabei den Zielhost in die Datei /etc/hosts.deny schreiben, um sie mit dem TCPWrapper weiter zu nutzen.
Der lokale Rechner kann dabei die Netzwerk Pakete an einen "toten Rechner" (dead host) weiterleiten.
Und zu guter letzt, der lokale Rechner kann die Pakete mit Hilfe der lokalen Paket Filter Tools wegwerfen.
Jetzt ist die Portsentry Philosophie etwas besser bekannt und wir können mit dem Schreiben der portsentry.conf Datei beginnen.
- Der erste Abschnitt der Konfiguration betrifft die Ports. Hier wählt man die zu verbindenden Ports. Nicht vergessen, das wird ignoriert, wenn die erweiterten Optionen unter Linux genutzt werden. Obacht beim Verbinden mit den Ports (Nicht den Port 6000 wählen, wenn mit X gearbeitet wird, z.B.).
- Der nächste Abschnitt ist für die erweiterten Erkennungs-Optionen. Der Standard ist es, die Ports kleiner 1024 zu überwachen, sowohl TCP als auch UDP. Hier können ebenfalls Ports ausgeschlossen werden. Zur Verhinderung von Fehlalarmen und zu langen Protokollen ist es wichtig die Ports zu schließen, besonders wenn sich Windos Rechner im Netz befinden. Als Beispiel, beachtet man Port 111 bei Verwendung von portmap und die Rechner werden nicht in portsentry.conf ignoriert. Sicher, das wäre schon verrückt, da portmap für NFS steht, aber Sie sind gewarnt. D.h. NFS ist nicht das sicherste auf Unix Maschinen, aber reden wir nicht von Windos Rechnern.
Hier nun der typische off-topic Abschnitt: Wenn ich "Windos" schreibe ist es kein Tippfehler : es ist nur, daß ich auf dem Fakt, daß Windows ein Desktop Environment auf der Basis von DOS (D für dreckig ?) bestehe ... und es ist auch ein Zeichen weniger zu tippen (ich bin ja so faul !). Sorry für diesen Exkurs.
- Die Abschnitt der Konfigurationsdateien betrifft die Dateien, welche von Portsentry aus historischen Gründen genutzt werden oder um die zu ignorierenden Rechner zu bestimmen. Sollte eine Standardinstallation gemacht werden, braucht man nichts zu ändern.
- Der Abschnitt Gemischtes erlaubt das An- / Abschalten von DNS Anfragen.
- Der Abschnitt Reaktionsoptionen ist das Herz der Konfiguration. Hier wird definiert, wie Portsentry reagieren soll.
Erstens kommen die Optionen zum Ignorieren. Hier kann gewählt werden zu blocken, nicht zu blocken, oder ein externes Kommando zu starten.
Als nächstes kommt der Abschnitt zum Verlieren der Weiterleitungen. Hier wird Portsentry gesagt, wie es Routen wegwerfen soll oder wie es die Paket Filter des Systems nutzen soll. Hier stehen viele Beispiele für viele Systeme. Einfach ein passendes Beispiel aussuchen (nur eins !).
- Der Abschnitt TCPWrapper zeigt, wie man Einträge in die Datei /etc/hosts.deny schreibt.
- Der Abschnitt externe Kommandos erlaubt es Kommandos zu starten, sobald ein Rechner Kontakt aufnimmt.
- Der Abschnitt "scan trigger value" erlaubt die Definition der Reaktionszeit. Der Standardwert ist "0" und der Unmittelbarste, denn er alarmiert beim ersten Kontaktversuch.
- Der letzte Abschnitt ist zum Anzeigen einer Nachricht im Falle eines Einbruchsversuches. Das funktioniert jedoch nicht im "stealth" Modus.
Sobald wir hiermit durch sind, haben wir es fast geschafft. Prüfen wir nochmals die Datei portsentry.ignore, um Fehlalarme und riesige Protokolle zu vermeiden. Hier kann man die lokalen Netzwerkadressen mit Netzwerkmasken eintragen oder die IP-Adressen von ein paar Rechnern.
Das wärs ! Jetzt können wir "make yoursystem" and "make install" starten. Das Installationsskript erledigt den ganzen Job, da es eingeschränkte Rechte für das Verzeichnis und die Dateien erteilt. Gerade ausreichend, damit wir Portsentry mit den gewünschten Optionen starten können. Nun die Protokolle prüfen, um zu sehen was passiert ist. Sollte alles gut verlaufen, ist Portsentry gestartet und hat das System gesichert.

Und was passiert nun ?

Nutzt man nun Tools wie nmap, kann man einen Portscan auf unserer neues gesichertes System durchführen. (Mehr zu nmap dort ). Und diese Antwort bekommt man :

portsentry is running on the scanned host

Das wärs, dieses System gibt kaum Informationen für einen Cracker !
Normalerweise liefert der Versuch die BS Version und alle offenen Ports des geprüften Systems. Diese Informationen sind für einen Cracker sehr nützlich, da er dann besser über das Wie und Wo eines Angriffes Bescheid weiß. Portsentry mit ein "scan trigger" Wert von "0" im erweiterten Modus wird sofort geblockt. Bei einem Wert von "1" im normalen Modus, erhält der Angreifer Informationen zu den geöffneten Ports und vielleicht auch das BS des gescannten Systems. Allerdings würde der Versuch, sich mit einem Port zu verbinden, fehlschlagen. Portsentry hat den Port nach dem ersten Versuch geblockt. Einfach, aber sehr effektiv !
Soweit so gut, solange TCPWrapper genutzt werden, wird die IP Adresse des Angreifers in die Datei /etc/hosts.deny geschrieben. Sollte Portsentry jedoch dazu genutzt werden, die Pakete an ein "totes" System weiterzuleiten, ist es nicht weniger effektiv, jedoch ist dann kein voller Schutz vor UDP Angriffen mehr möglich.
Bei Verwendung eines Paket Filter Tools verwirft das angegriffene System die Pakete des Angreifers.
Natürlich ist dies der beste Weg, um die ganze Macht von Portsentry zu nutzen.
Und wieder einmal ist der erweiterte Modus unter Linux der Ideale. Das soll nicht heißen, daß Portsentry mit anderen BS'en nicht gut ist, es ist nur nicht ganz so "performant" ... na ja, nicht wirklich !
Zum besseren Verständnis sollten die Protokolle nach unterschiedlichen Einbruchsversuchen auf verschiedenen Systemen mit Portsentry in unterschiedlichen Modi geprüft werden. Das sagt doch eigentlich alles !
Die Protokolle können den Modi entsprechend, Fehlalarme enthalten. Damit die Qualität der Informationen gesteigert wird, sollte an der Konfiguration gearbeitet werden. Nach einigem Testen sollte das gewüschte Ergebnis zu erzielen sein.

Kann man ohne Portsentry leben ?

Natürlich NICHT ! Es gibt eine Vielzahl von IDS, frei oder nicht. Die meisten von Ihnen sind nicht schlecht. Doch wenden wir uns dem bekannten Snort zu, zu bekommen unter http://www.snort.org.
Üblicherweise handelt es sich um Passive, d.h. sie informieren nur über einen Einbruchsversuch. Dafür sind Sie ja auch gemacht. Z.B. Snort ist recht kompliziert, da es auf Regel-Skripten basiert, die das Schreiben eigener Regeln erlauben. Die Website von Snort bietet eine Regel-Datenbank. Man kann ja auch beide, Snort und Portsentry, zusammen verwenden, wenn man keine Angst vor riesigen Protokollen hat. Das ist kein Quatsch !
Wie auch immer, die Stärke von Portsentry ist, daß es ein aktives IDS ist. Die Möglichkeit zu reagieren ist wahrlich atemberaubend. In Kombination mit einem Paket Filter macht es das zum Pflichtprogramm. Stellen wir mal eine Frage: Ist Portsentry das Gegenstück zum Paket Filter oder ist der Paket Filter das Gegenstück zu Portsentry ?
Egal, wir können noch mehr über Portsentry sagen. Wir sollten sehr vorsichtig mit UDP Portscans im erweiterten Modus sein. Bitte hierzu die Doku lesen (mal wieder !), damit wir die Probleme im Zusammenhang mit UDP verstehen. Dieser Artikel ist jedoch nur ein Überlick und in keiner Weise eine komplette Übersicht dieses großartigen Stücks Software.
Computersicherheit ein wichtiges Anliegen, nicht nur für den Sysadmin. Das unglaubliche Wachstum des Internets macht alles nur schlimmer, d.h. die Gefahr eines Einbruchs wird von Tag zu Tag größer. Die Gemeinde freier Software versorgt uns gut mit Tools : Portsentry ist nur eins davon. Lassen Sie diese Tools nicht beseite. Jedoch sollten Sie sich stets daran erinnern, daß diese Tools nur das Risiko mindern, aber kein 100% sicheres System sind. Ein weiterer Grund, die Sicherheits-Tools zu untersuchen.
Und zu guter letzt: bei Psionic wird an einem kommerziellen Produkt gearbeitet "was uns nicht enttäuschen" wird. Warten wir's ab !
In der Zwischenzeit einfach Portsentry 1.1 besorgen, auch hier werden Sie nicht enttäuscht sein. Psionic leistet wirklich gute Arbeit. Nur mal am Rande, Hostsentry ist gleichfalls wert getestet zu werden ... und genutzt zu werden.
Leben wir nicht in einer großartigen Zeit ?

Referenzen

Die folgenden Webseiten sind eine absolute Referenz in Sachen Sicherheit. Darüber hinaus verweisen Sie auf weitere Webseiten, die widerum auf weitere Webseiten verweisen .... Sie kennen doch die russische Puppe ? Der einzige Nachteil an der Sache ist, das wir nicht lange genug leben, um alles zu lesen !!!
http://www.linuxsecurity.com
http://www.sans.org
http://www.infosyssec.org
http://www.securityfocus.com
http://www.cs.purdue.edu/coast/hotlist/