original in en Georges Tarbouriech
en to de Tilmann Preuße
Georges ist seit langer Zeit Unixnutzer. Er ist der Meinung,
daß Computersicherheit die Herausforderung des Jahrzehnts ist.
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 ...).
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 !
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 !
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.
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.
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 :
Das wärs, dieses System gibt kaum Informationen für einen Cracker !
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 ?
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/