Warum ist es schlecht, offene Ports zu haben?

36

Hier ist etwas, das mich immer verblüfft hat. Warum ist es schlecht, offene Ports auf Ihrem Computer zu haben? Angenommen, Sie haben keinen Virus auf Ihrem Computer oder einem anderen Programm, das auf einen Port hört, der möglicherweise tatsächlich etwas bewirkt. Warum spielt es dann eine Rolle, wenn ein Port offen ist? Wenn eine böswillige Person anfängt, Pakete an einen Port zu senden, aber nichts da ist, um die Daten zu empfangen und etwas damit zu tun, warum ist das wichtig? Ein Computer führt nicht einfach willkürlich die empfangenen Daten aus. Ich verstehe, dass das Überfluten eines Computers mit Paketen zum Absturz führen kann, da es einfach nicht mit der Datenmenge umgehen kann, aber ich denke nur an Sicherheitsprobleme, die die Dateien auf dem Computer tatsächlich ändern.

Aktualisieren

Vielen Dank für die bisherigen Antworten. Ich verstehe jetzt, dass ein offener Port tatsächlich bedeutet, dass es ein Programm gibt, das über diesen Port empfangsbereit ist. Aber warum ist es so schwer, Software zu schreiben, die nicht ausgenutzt werden kann? Um einem Computer einen echten Schaden zuzufügen, müsste ein Programm nicht zulassen, dass eine oder mehrere Dateien hochgeladen werden, und dann müsste eine dieser Dateien ausgeführt werden. Es scheint so, als ob es unglaublich schwierig wäre, dies versehentlich zuzulassen.

aireq
quelle

Antworten:

36

Ein Port ist nicht geöffnet, wenn nicht auf eine Verbindung gewartet wird.

Der Grund, warum es eine schlechte Form ist, alle Ports überall offen zu haben, besteht darin, dass die Dienste, die diese Ports überwachen, Exploits ausgesetzt werden. Aus diesem Grund gibt es Firewalls, um die Verbindung zu bestimmten Ports einzuschränken und die von Diensten beanspruchte Fläche zu verringern.


BEARBEITEN

Um Ihre Frage zu beantworten, warum Leute nicht einfach Software schreiben können, die nicht ausgenutzt werden kann:

Dies ist für einfache Programme recht einfach, aber viele Programme, die einen Socket benötigen, sind komplex. Als solche haben sie viele Komponenten, von denen viele höchstwahrscheinlich nicht einmal vom Entwickler geschrieben wurden (eingeschlossene Bibliotheken). Sie können sich nicht darauf verlassen, dass andere Personen Ihr Netzwerk schützen, wenn Sie selbst bestimmte Absicherungsmethoden anwenden können, z. B. Firewalls.

Wie Sie bereits betont haben, ist die willkürliche / entfernte Codeausführung ein großes Risiko. Leider treten häufig Pufferüberläufe und andere Sicherheitslücken auf, die dies zulassen. Schauen Sie sich ein Microsoft-Sicherheitsupdate an und ich wette, es repariert entweder die Remotecodeausführung oder die Erhöhung von Berechtigungen. MS ist ein riesiges Unternehmen mit Hunderten von Entwicklern und Milliarden von Dollar.

MDMarra
quelle
4
Nur hinzufügen: Wenn Sie zum Beispiel wissen, dass ein Dienst einen Fehler hat, mit dem Code infiltriert werden kann, oder was auch immer, und Sie tatsächlich sehen, dass dieser Dienst ausgeführt wird, ist dies eine offene Einladung;)
Felix
9

In Bezug auf das Update, das Sie geschrieben haben:

Vielen Dank für die bisherigen Antworten. Ich verstehe jetzt, dass ein offener Port tatsächlich bedeutet, dass es ein Programm gibt, das über diesen Port empfangsbereit ist. Aber warum ist es so schwer, Software zu schreiben, die nicht ausgenutzt werden kann? Um einem Computer einen echten Schaden zuzufügen, müsste ein Programm nicht zulassen, dass eine oder mehrere Dateien hochgeladen werden, und dann müsste eine dieser Dateien ausgeführt werden. Es scheint so, als ob es unglaublich schwierig wäre, dies versehentlich zuzulassen.

Es ist sehr schwierig, Software zu schreiben, die nicht ausgenutzt werden kann!

Ich habe das Buch Building Secure Software gelesen und eines der Dinge, die darin besprochen wurden, war das Ausnutzen von Stapelüberläufen. Es gab zwei sehr beängstigende Tatsachen:

  • Es ist sehr einfach, ein Programm mit einem ausnutzbaren Stapelüberlauf-Fehler auszustatten, insbesondere wenn das Programm in C geschrieben ist. In der Programmiersprache C sind viele Funktionen standardmäßig nicht sicher, und der Programmierer muss wissen, um die anfälligen Funktionen zu vermeiden , oder muss besondere Maßnahmen ergreifen, um sicher zu sein.
  • Der Exploit, den ein Hacker einsetzen muss, ist kurz - sehr kurz. Es war weniger als eine halbe Seite Assemblersprache, was ungefähr 100 (erraten) Byte Maschinencode entspricht. Dieser Exploit-Code reicht aus, um der Hacker-Shell (Eingabeaufforderung) Zugriff auf Ihren Computer zu gewähren. Es ist kein Upload und keine Ausführung großer Dateien erforderlich - nur ein winziger Code, der in die Mitte legitimer Daten eingefügt werden kann.

Wenn ein Hacker also ein Programm findet, das (a) einen Stapelüberlauf-Fehler aufweist, der (b) über ein Netzwerk ausgenutzt werden kann und (c) ein paar 100 Byte in seinem Puffer hat, ist Ihr Computer pwned. Glücklicherweise ist das Wissen über Stapelüberlauf-Fehler mittlerweile weit verbreitet, doch sie tauchen immer noch auf. Vor 5 Jahren und länger war dies ein viel häufigeres Problem.

Kehren Sie zu Ihrer ursprünglichen Frage zurück und vermeiden Sie offene Ports, um Unfälle mit einem ausnutzbaren Programmfehler zu vermeiden. Sie haben jetzt einen zweiten Grund: Die Remote-Shell, die ein Hacker dann verwenden würde, ist ein weiterer offener Port. Wenn Sie eine Firewall haben, die alles blockiert, außer das, was Sie ausdrücklich erlaubt haben, würden Sie auch diese Remote-Shell blockieren (obwohl ein Hacker immer noch in der Lage wäre, andere böse Dinge an Ihrem Computer zu tun, seien Sie also nicht selbstgefällig!).

Richard Downer
quelle
2
IIRC, Donald Knuth (?) Hat gerade mathematisch bewiesen, dass eines der kleineren Programme, die er geschrieben hat, fehlerfrei ist, und es hat
Mannjahre gedauert
7
  • Offener Port: Wenn jemand fragt, antwortet der Computer, dass an diesem Port ein Dienst empfangsbereit ist. Dies bedeutet, dass alles, was an diesen Port gelangt, von einem Programm (einem Dienst) verarbeitet wird, das auf diesem Computer ausgeführt wird.
  • Geschlossener Port: Wenn jemand danach fragt, antwortet der Computer, dass an diesem Port keine Dienste empfangsbereit sind. Der Akser weiß, dass ein Computer an der Adresse antwortet.
  • Stealth Port: Wenn jemand fragt, bekommt er keine Antwort. Der Punkt ist, sich zu verstecken, wenn sich überhaupt ein Computer an der Adresse befindet. Es könnte jedoch nicht sehr effektiv sein, wie joschi in den Kommentaren darlegt.

Wenn Sie einen offenen Port haben, sind Sie sicher, sofern das Programm, das das eingehende Material verarbeitet, keine verfügbaren Exploits hat. Aber Exploits werden immer wieder gefunden, und es ist gut zu wissen, dass viele Port-Scans im Internet nach Zielen suchen.

Geschlossene Ports reagieren weiterhin auf den Akser, sodass ein möglicher Angreifer andere Ports überprüfen muss. Andererseits funktioniert das Internet auf diese Weise. Während Stealth-Ports versuchen, dem potenziellen Angreifer keine Informationen zu geben, brechen sie theoretisch die Spezifikation.

Aus Sicherheitsgründen ist jeder offene Port eine riesige Lücke, da Code zur Verarbeitung fremder Daten verwendet wird. Eine Firewall (oder ein NAT-Router) stellt sicher, dass kein eingehender Datenverkehr auf Ihren Computer gelangt, auch wenn das System über einige offene Ports verfügt. Auf diese Weise schließen sie effektiv alle Ports.

Ilari Kajaste
quelle
1
Ihre Definition eines "Stealth-Ports" ist Wunschdenken. Tatsächlich weiß ein Angreifer, dass es einen Computer gibt, wenn er keine Antwort erhält. Wenn diese IP-Adresse keinen Computer enthält, sendet der vorherige Router eine entsprechende Nachricht. Bei "Stealth Ports" passiert das nicht ...
joschi
@joschi: Nun, es ist ein Konzept, das ich im Internet gesehen habe, daher finde ich es gut, es zu definieren. Sie machen aber einen guten Punkt. Ich habe die Antwort so bearbeitet, dass sie Ihren Kommentar widerspiegelt. Zumindest sieht die Ziel-IP so aus, als stünde sie hinter einem NAT-Router. Ich war selbst noch nie ein Fan des Konzepts: Wenn Sie offene Ports haben, sollten Sie sicherstellen, dass diese einen sicheren Dienst ausführen. Und wenn Sie keine offenen Ports haben, ist es kein Problem, dem Netz mitzuteilen, dass Sie existieren. Stealth riecht für mich nach Sicherheitshype.
Ilari Kajaste
joschi: das machen nicht alle router. Viele Router leiten einfach blind an IP-Adressen weiter, an denen kein System vorhanden ist. Verbindungsversuche werden nur deshalb unterbrochen, weil es dem Client langweilig wird, ein Drei-Wege-Handsake durchzuführen.
benc
6

Meines Wissens bedeutet ein offener Port, dass ein Programm ihn abhört. Es gibt also eine Art Dienst, der die Daten verarbeitet.

Felix
quelle
3

Angenommen, Sie haben keinen Virus auf Ihrem Computer oder einem anderen Programm, das auf einen Port hört, der möglicherweise tatsächlich etwas bewirkt. Warum spielt es dann eine Rolle, wenn ein Port offen ist? Wenn eine böswillige Person anfängt, Pakete an einen Port zu senden, aber nichts da ist, um die Daten zu empfangen und etwas damit zu tun, warum ist das wichtig?

Annahme ist die Mutter aller eff-ups :)

ziemlich sicher als leid ... hier ist eine nette Lektüre für dich bei makeuseof.com:

Erklärte Technologie: Offene Router-Ports und deren Auswirkungen auf die Sicherheit


quelle
eine gute, kurze Lektüre.
DaveParillo
1

Ich habe keine Sicherheitsdaten exportiert, aber ein wenig nachgeforscht ... Ein "offener" Port ist ein Port, der so eingerichtet ist, dass er eine eingehende TCP-Verbindung akzeptiert.

Wenn Apps nur die Ports 9, 21 und 80 abhören und Ihre Firewall den Zugriff auf diese drei Ports blockiert, sind technisch keine Ports geöffnet. IOW, Port 25, ist zum Beispiel nicht offen, weil nichts darauf lauscht.

Um Ihre Frage zu beantworten: Der Grund, warum es schlecht ist, offene Ports auf Ihrem Computer zu haben, ist, dass diese Ports leicht erkannt werden können und dass diese Ports nach ihrer Entdeckung jetzt für Schwachstellen der empfangsbereiten Anwendungen anfällig sind.

Schuhlos
quelle
Ihre Definition eines Ports ist falsch. Ein Port ist in keiner Weise auf TCP beschränkt.
MDMarra
1
Ich nehme an, man sollte ALLES nicht glauben, was sie im Internet lesen :) 5 der Top 6 Google-Ergebnisse geben in ihrer Definition explizit "TCP" an. google.com/…
Shoeless
Nein, sie sagen TCP / IP. Großer Unterschied. TCP / IP enthält UDP
MDMarra
1
ICMP verwendet keinen Port, sondern ein Layer-3-Protokoll, das in der IP-Protokollsuite enthalten ist.
MDMarra
1
Der einzige Grund, den ich sage, ist, dass es in Bezug auf Firewalls sehr wichtig ist (worum es indirekt geht). TCP ist statusbehaftet, und daher werden Verbindungen gespeichert, bei denen UDP nicht der Fall ist. Häufig bedeutet dies, dass Ports für den intern initiierten UDP-Rückdatenverkehr geöffnet sein müssen, wenn dies für intern hergestellte TCP-Verbindungen nicht erforderlich ist.
MDMarra,
0

Aus dem gleichen Grund, dass Sie Ihre Türen und Fenster zu Hause schließen und verriegeln .

Steven A. Lowe
quelle
3
Ich schließe meine Türen und Fenster ab, weil es draußen kalt ist. was hat diese frage mit dämmung zu tun?
Quack Quijote
2
Isolieren Ihre Türen und Fenster nicht, wenn sie nur geschlossen sind? Bietet der zusätzliche Bolzen wirklich so viel mehr Isolierung?
Dentrasi
Guter Punkt, aber es ist erwähnenswert, dass nicht jeder seine Türen und Fenster zu Hause verschließt. Dies könnte sein: "Nicht jeder möchte sein Eigentum schützen" oder "Nicht jeder möchte in einer Kultur der Angst leben", abhängig von Ihrer Sichtweise.
Ilari Kajaste
-2

Sagen wir einfach, dass offene Ports wie offenes Fenster und offene Tür sind, aber wenn Ihr Fenster offen ist, kann ein Räuber oder eine Ratte und eine Spinne in #please kommen, sagen Sie mir, ob ich dumm oder asininisch bin Im Internet gibt es einen offenen Port. Ich denke, auch geschlossene Ports sind geschlossene Fenster, ohne die wir keine Verbindung herstellen oder browsen können. Ich denke, genau wie bei HTTP und SSH oder FTP, ohne die wir keine Verbindung herstellen können

Ich bin kein Sicherheitsexperte

user210203
quelle
Zum Anbieten von Diensten sind offene Ports erforderlich. Nur eines von zig möglichen Beispielen: Google Mail verwendet einen offenen Port (443 für die Website mit HTTPS). Sie werden jedoch aufgefordert, sich anzumelden, bevor etwas angezeigt wird.
Arjan