Was muss man sich eigentlich unter einem Port vorstellen?

Um diese Frage zu beantworten machen wir einen sehr kleinen Exkurs in die Welt der Kommunikationsprotokolle. Ein Kommunikationsprotokoll ist eine Vereinbarung über den Ablauf einer Kommunikation. So wie Menschen in Deutschland deutsch sprechen mit einem bestimmten Wortschatz und einer bestimmten Grammatik und Regeln wie "Bitte" und "Danke" sagen oder "Hallo" und "Auf Wiedersehen", so gibt es etwas ähnliches auch für Computer, schließlich "unterhalten" sich Computer auch, wenn man z.B. surft oder emailt (ein Webserver ist ja auch nur ein Computer, genau so wie ein E-Mail-Server).

Diese Vereinbarung, wie man sich zu unterhalten hat, nennt man Protokoll, gäbe es keine Protokolle, könnten sich Computer auch nicht gegenseitig verstehen, denn jeder Computer muss den Sinn der geschickten Daten interpretieren können. Bei uns Menschen grunzt man im nüchternen Zustand ja auch nicht wild durch die Gegend, wenn man verstanden werden will.

Als nächstes muss man wissen, dass alle Daten, die im Internet so hin- und hergeschickt werden in kleine Pakete zerstückelt werden. Besucht man z.B. eine Webseite, so werden die Texte und Bilder in kleine Pakete vom Webserver zerteilt und vom eigenen Computer wieder zusammengesetzt, davon merkt man als Anwender gar nichts, geht alles automatisch. Selbst die Anwendungen wie Browser und E-Mail-Programm merken davon nichts, denn diese Aufgabe erledigt das Betriebssystem wie Windows oder Linux, denn es wäre etwas ineffizient, wenn jede Anwendung (wie Browser, E-Mail-Programm), die über das Netzwerk oder Internet kommunizieren wollte, diese Fähigkeit vom Programmierer der Anwendung eingebaut bekommen müsste.

Das ist die Stelle, wo jetzt das bzw. die Kommunikationsprotokolle ins Spiel kommen: da der Ablauf der Kommunikation ja auch geregelt werden muss, werden die Steuerdaten, die diese Kommunikation regeln, einfach auf die einzelnen Datenpakete vom Betriebssystem "draufgepappt", so dass ein Paket dann aus den Steuerdaten der Kommunikationsprotokolle und den eigentlichen Nutzdaten wie Texte und Bildern besteht.

Das Verfahren ist ähnlich wie beim Verschicken von Briefen: Man schreibt einen Brief, das sind die Nutzdaten, und packt ihn in einen Umschlag, der Absender- und Zieladresse enthält, das sind die Steuerdaten, die nichts mit dem Inhalt des Briefes zu tun haben. Das Betriebssystem nimmt sozusagen die Briefe der Anwendungen, die kommunizieren wollen (Browser, E-Mail-Programm etc.), entgegen, packt sie in Briefumschläge, schreibt die Adressen drauf und verschickt diese. Die Zieladresse bekommt das Betriebssystem von der Anwendung mitgeteilt, die eigene Adresse kennt es selbst. Da das Betriebssystem aber nur Briefumschläge einer bestimmten Größe zur Verfügung hat, müssen längere Briefe aufgeteilt und in mehreren Briefumschlägen verschickt werden.

Diese Briefe, verpackt in Briefumschlägen, erreichen dann den Zielcomputer, z.B. einen Webserver, dessen Betriebssystem die Briefumschläge wieder aufmacht, mehrteilige Briefe zu einem ganzen zusammensetzt und den eigentlichen Brief weitergibt an das Programm, dass Webseiten ausliefert. Dieses Programm liest sich den Brief durch und schickt gegebenenfalls einen Brief zurück, der dann vom Betriebssystem des Webservers verpackt und verschickt wird. In den meisten Fällen wird im Antwortbrief eines Webservers eine Webseite stehen, die dann vom Browser angezeigt werden kann.

Jetzt gibt es noch (mindestens :-)) eine offene Frage: Woher weiß das Betriebssystem des eigenen Computers oder des Webservers eigentlich, an welche Anwendung es den Inhalt des Briefes weitergeben muss? Ganz einfach: Jede Anwendung, die kommunizieren will, muss ich beim Betriebssystem anmelden, damit das Betriebssystem auch die Briefe verpackt, adressiert und verschickt bzw. Antworten entgegen nimmt. Gleichzeitig merkt sich das Betriebssystem eine Nummer für diese Anwendung. Diese Nummer nennt man auch Port-Nummer. Diese Port-Nummer wird auf jeden Briefumschlag ebenfalls mit draufgeschrieben und zwar für Absender und für Empfänger.

Ein Webserver-Programm meldet sich z.B. beim Betriebssystem in der Regel dafür an Briefe mit der Port-Nummer 80 zu erhalten. Wenn das Betriebssystem des Webservers nun Briefe erhält, die als Empfänger-Port-Nummer die Nummer 80 haben, dann gibt es die ausgepackten Briefe an das Webserver-Programm weiter, dass sich dann diese Briefe durchlesen und Antworten schicken kann.

Diesen Port 80 nennt man dann geöffnet, weil sich eine Anwendung dafür angemeldet hat, Briefe mit dieser Port-Nummer erhalten zu wollen. Hätte sich keine Anwendung angemeldet, so würde man den Port als geschlossen bezeichnen.

Der Unterschied bei der Kommunikation eines Webservers und einem Webbrowsers liegt darin, dass ein Webserver-Programm wirklich alle Briefe bekommt, die als Empfänger-Port-Nummer die Nummer 80 haben, ein solches Programm nennt man auch Server oder Dienst. Ein Webbrowser bekommt zwar auch Briefe mit der Port-Nummer, für die er sich angemeldet hat beim Betriebssystem, jedoch nur Antwortbriefe, ein solches Programm nennt man auch Client. Das Betriebssystem merkt sich nämlich, wen man schon angeschrieben hat und ob man von denen noch Antworten erwartet.

Einen Port, für den sich z.B. ein Webbrowser oder E-Mail-Programm angemeldet hat, nennt man nicht geöffnet, weil eben nur Antworten angenommen werden.

Wenn man also von offenen Ports auf einem Computer spricht, dann meint man, dass sich bei dem Betriebssystem des Computers Anwendungen angemeldet haben, die "Briefe" (eigentlich spricht man von Paketen) mit einer bestimmten Port-Nummer haben wollen. Wenn man keine offenen Ports haben möchte bzw. Ports schließen möchte, dann muss man einfach die Anwendungen beenden, die sich beim Betriebssystem zum Empfang von Paketen angemeldet haben.

Und wofür braucht man jetzt Ports?

Es kommt ja durchaus vor, dass mehrere Anwendungen gleichzeitig kommunizieren wollen. So kann man z.B. gleichzeitig E-Mails abholen und im Web surfen, oder man kann mehrere Webseiten gleichzeitig laden. Um diese gleichzeitige Kommunikation zu gewährleisten, muss man irgendwie die Datenpakete einer bestimmten Anwendung zuordnen können. Dies geschieht eben über die Port-Nummern.

Sind offene Ports gefährlich?

Ein offener Port bedeutet ja, dass sich eine Anwendung angemeldet hat beim Betriebssystem, Pakete mit einer bestimmten Port-Nummer empfangen zu wollen. D.h. eine Anwendung erhält dann den Inhalt dieser Pakete und verarbeitet den Inhalt dieser Pakete weiter, um dann später vielleicht eine Antwort zu schicken. Nun kann es passieren, das eine solche Anwendung einen Fehler enthält und bei der Verarbeitung von bestimmten Daten aus den Paketen etwas passiert, das nicht vorgesehen ist. Dies kann so weit gehen, dass bei speziell präparierten Nutzdaten in den empfangenen Paketen Programme gestartet werden oder in diesen Nutzdaten sogar eigene Programme enthalten sind, die dann gestartet werden.

Diese vom Programmierer dieser Anwendung nicht entdeckten Fehler bei der Verarbeitung von Nutzdaten sind der Grund, warum man empfiehlt, möglichst alle Ports zu schließen, denn rein theoretisch kann jede Anwendung Fehler enthalten. Wenn aber keine Anwendung Daten verarbeitet, die von außen kommen, kann auch kein möglicherweise oder tatsächlich vorhandener Fehler in diesen Anwendungen von einem Angreifer oder von einem Wurm ausgenutzt werden.

Der bekannte httpBlaster-Wurm z.B. (ein Wurm ist auch nur ein Programm, dass über das Internet kommuniziert, also sich beim Betriebssystem anmeldet zur Kommunikation, Nutzdaten versendet und empfängt und anschließend verarbeitet etc.) hat durch einen Fehler in einer solchen Windows-Anwendung, die von Windows beim Start automatisch ausgeführt wird, viele Rechner infiziert und von jedem infizierten Rechner Angriffe auf weitere Rechner, die mit dem Internet verbunden waren, gestartet, wobei man unter einem Angriff eben einfach das Senden speziell präparierter Nutzdaten an diese fehlerhafte Anwendung verstehen muss. Es ist also sinnvoll, möglichst alle Anwendungen zu beenden, die Daten von außen weiterverarbeiten, sprich möglichst alle Ports zu httpschließen.

Ich hab gehört, man soll seine Ports unsichtbar machen bzw. auf "stealthed" schalten, warum?

Wir wissen ja nun, dass man von einem geschlossenen Port spricht, wenn sich keine Anwendung beim Betriebssystem angemeldet hat, Pakete mit dieser Port-Nummer empfangen zu wollen. Wenn nun ein Paket eintrifft mit einer Ziel-Port-Nummer, für die sich keine Anwendung beim Betriebssystem angemeldet hat, dann schickt das Betriebssystem eine Nachricht an den Absender dieses Paketes, dass keine Anwendung dieses Paket haben möchte. Es gibt Menschen, die glauben, dass das Absenden dieser Nachricht gefährlich wäre und diese Nachricht unterdrücken z.B. mit einer sogenannten httpPersonal Firewall. Dieses Unterdrücken nennen Marketing-Fuzzis dann "Stealth-Modus". Warum das Senden einer Nachricht gefährlich sein soll, verstehen wohl nur die Menschen, die dieses unsinnige Marketing-Gebrabbel erfunden haben. In der ftpSpezifikation von TCP wird vorgeschrieben, diese Nachricht zu senden, aber zugegeben, es hört sich ziemlich cool an, wenn man voll stealthed ist. Außerdem darf man im Stealth-Modus bei einigen Anwendungen länger warten, das ist ja auch ein riesiger Vorteil und nebenbei hat man noch mehr Datenverkehr auf der Leitung, weil Anfragen mehrfach wiederholt werden, in der Annahme die Pakete gingen durch eine Störung verloren.

Und jetzt brauche ich bestimmt eine Personal Firewall oder?

Eine Personal Firewall nimmt ebenfalls Daten von außen entgegen und verarbeitet diese, dabei können wie bei allen anderen Anwendungen auch Fehler passieren. In der Regel öffnen Personal Firewalls jedoch keine Ports, aber sie müssen jeglichen Datenverkehr analysieren, um Teile dieses Datenverkehrs filtern zu können, was deren Aufgabe ja ist. Ziel soll aber sein gerade die verwendete Programmcodebasis zu verkleinern. Deswegen wollen wir ja auch offene Ports schließen, sprich Anwendungen beenden, die Daten von außen entgegen nehmen. Auch Personal Firewalls sind schon mehrfach durch Sicherheitslücken aufgefallen, es gab sogar schon einen httpWurm, der sich über eine Schwachstelle in einer Personal Firewall verbreitete. Da wir sowieso alle Ports schließen, sind wir von außen, also über das Internet oder Netzwerk, nicht mehr angreifbar, eine Personal Firewall würde die Angriffsfläche wieder erhöhen.