it-swarm-eu.dev

Port Knocking ist das eine gute Idee?

Normalerweise sperre ich für einen Server SSH und andere nicht öffentliche Dienste, damit nur bestimmte IP-Adressen darauf zugreifen können. Dies ist jedoch nicht immer praktisch, wenn das Unternehmen keine statischen IP-Adressen hat oder wenn externe Entwickler Zugriff benötigen.

Ich habe vor einiger Zeit von Port Knocking gehört und hatte endlich Gelegenheit, es als Lösung für das oben genannte Problem zu untersuchen. Infolgedessen habe ich eine Menge Fragen, bei denen ich hoffe, dass mir die Leute helfen können.

  • Hat jemand es in seinem Unternehmen/seiner Organisation bereitgestellt und kann Ratschläge geben?
  • Was ist der beste Klopf-Daemon, der unter Linux ausgeführt werden kann?
  • Was sind die besten Clients für Linux, Windows und OSX?
  • Was ist die empfohlene Länge für die Klopfsequenz und ist es am besten, TCP, UDP oder beides zu verwenden?
  • Was sind die damit verbundenen Nachteile und Probleme bei der Verwendung?
  • Ist es nur Sicherheit durch Dunkelheit?
  • Gibt es Alternativen zum Ansatz des Hafenklopfens?
41
Mark Davidson

Obwohl ich es noch nicht bereitgestellt habe, kenne ich viele Leute, die es bereitgestellt haben. Jeder einzelne von ihnen hat eine signifikante Reduzierung des Bandbreitenverbrauchs von Dingen wie SSH-Brute-Force-Angriffen festgestellt.

Das heißt jedoch nicht, dass es keine Nachteile gibt. AFAIK, es gibt keine kernelbasierten Port-Knocking-Implementierungen, was für mich der eigentliche Schlüssel zur Einführung wäre. Port-Knocking-Daemons basieren auf dem Lesen fehlgeschlagener (und gefilterter/verbotener) Protokolldateieinträge von einem Firewall-System. Das ist alles in Ordnung und gut, aber was passiert, wenn das Dateisystem voll wird? Was passiert, wenn der Dämon aufgrund eines außer Kontrolle geratenen Prozesses getötet wird, der die RAM und Swap) des Systems auffrisst? Was passiert, wenn etwas anderes, von dem eines dieser beiden Dinge abhängt, einfach aufsteht und nicht mehr funktioniert? Wahrscheinlich haben Sie einen Server, auf den Sie physisch zugreifen müssen. Dies kann teurer sein als vernünftig, insbesondere wenn Sie mehr als ein paar zehn Meilen vom Server entfernt sind und niemanden haben, zu dem Sie anrufen können in Eile dorthin gelangen.

Eine Sache, die ich sagen kann, ist, dass es nicht "Sicherheit durch Dunkelheit" ist. Port Knocking ist eine Form der Authentifizierung und kann wie jedes Authentifizierungssystem so einfach oder komplex wie gewünscht gestaltet werden. Es kann etwas so Einfaches wie "Klopfen an Port 10.000 + realPortNumber" durchgeführt werden, was eine geringfügige Unterbrechung bedeuten würde, oder das Klopfen des Ports könnte selbst verwendet werden, um irgendeine Form der echten Authentifizierung zu übertragen (z. B. 1 Block von AES-codierten Daten, wenn a gegeben ist Schlüssel abgeleitet von einer anderen Methode). Es wäre jedoch nicht möglich, Port Knocking zum Übertragen großer Datenmengen zu verwenden, da dies erheblich länger dauern würde als nur das Senden eines einzelnen Pakets, und wenn das Paket über TCP als mindestens) liegt Es kann bekannt sein, ob es erfolgreich empfangen wurde oder auf einen Fehler gestoßen ist.

Eine interessante Frage, die sich daraus ergibt, ist jedoch, wie die Protokolldateien verwaltet werden. Für Userland-Implementierungen sind meistens die Protokolldateien erforderlich, um festzustellen, ob ein Klopfen erfolgreich gesendet wurde oder nicht. Was passiert, wenn diese Protokolle durchgesickert sind? Authentifizierungsdaten werden bekannt, und das ist offensichtlich keine sehr gute Sache.

Ich kann Ihnen nicht sagen, ob Sie Port Knocking in Ihrem Setup verwenden sollen oder nicht. Ich bin noch nicht und ich bin nicht 100% sicher, dass ich es jemals sein werde. Für mich ist es sinnvoller, starke Authentifizierungssysteme zu verwenden, die auf einer starken Kryptografie basieren (z. B. eine PKI-Infrastruktur), als Port-Knocking in die Quere zu bringen. Außerdem scheint es mir eine schlechte Idee zu sein, einen einzigen Fehlerpunkt für den Zugriff auf kritische Infrastrukturen hinzuzufügen, und es ist weitaus schwieriger, ihn mit einer Garantie zu unterstützen. Dies basiert jedoch wiederum auf der Vorstellung, dass die Port-Knocking-Software auf Kernel-Ebene des Betriebssystems nicht in die Firewall integriert ist. Wenn sich das jemals ändert, kann ich auch ändern, wie ich es benutze.

34
Michael Trausch

Port Knocking ist nicht nur ein weiteres Nur-Text-Passwort - zumindest nicht zum Schutz von Diensten, die einen TCP - Port wie SSH abhören. Port Knocking impliziert, dass die Diensterkennung mit nmap aufgrund von nicht mehr möglich ist Verwendung einer Standard-Drop-Firewall-Richtlinie. SSHD weist auch aus der Ferne ausnutzbare Sicherheitslücken auf, die nichts mit schwachen Kennwörtern zu tun haben. Ich möchte nicht, dass jemand nmap starten und feststellen kann, dass SSHD lauscht.

Es gibt auch eine stärkere Variante des Port-Knockings, die als "Single Packet Authorization" bezeichnet wird. Es handelt sich jedoch auch um ein vollständig passives Authentifizierungsschema, bei dem die Vorteile des Port-Knockings beibehalten werden, die Einschränkungen jedoch behoben werden (Wiederholungsangriffe sind einfach, DoS-Angriffe sind einfach usw.) .).

13
Michael Rash

Es ist leicht zu überprüfen, dass alle mit dem Internet verbundenen Dienste relativ häufig Sicherheitslücken aufweisen - Dienste wie SSH, OpenSSL usw. Angriffe auf diese werden im Internet massenhaft versucht und zielen auf Systeme ab, die über geeignete offene Ports verfügen.

Port Knocking hat meiner Meinung nach den Zweck, diese zufälligen Angreifer vom Internet fernzuhalten, die nach generischen Schwachstellen suchen. Das heißt, es soll keinen dedizierten Angreifer fernhalten oder einen Teil der tatsächlichen Sicherheit der Dienste ausmachen. Der Vorteil des Port-Klopfens sollte sein, dass es wirklich so einfach ist, dass es wahrscheinlich nie ausnutzbare Fehler enthält.

Diese Verwendung bedeutet, dass das Klopfen von Ports so lasch wie möglich sein kann, solange es die Mehrheit der Angreifer fernhält. Es kann nur Sicherheit durch Dunkelheit sein, aber ein besserer Weg ist es, es als schwache Form der "Passwort" -Authentifizierung zu haben.

Der "beste" Port-Knocking-Dienst wäre also ein Dienst, gegen den man sich keine Angriffe vorstellen kann, der jedoch für jeden legitimen Benutzer trivial genug ist, um ihn von jedem Client-Computer aus zu verwenden.

9
Nakedible

Portklopfen ist keine Sicherheit durch Dunkelheit. Es ist Verteidigung in der Tiefe. Es ist, als würde man sein Auto neben einem stehlbareren Auto parken - es wird nicht viel dazu beitragen, einen gezielten Angriff zu verhindern, aber es könnte Opportunisten dazu bringen, in die andere Richtung zu schauen.

8
jl6

Laut meinen Kommentaren an anderer Stelle kann es auf einem Linux-System implementiert werden, obwohl es viele Implementierungen gibt, die alle möglichen speziellen Tricks verwenden, um auf das Klopfen zu reagieren rein unter Verwendung von iptables . d.h. dies ist effektiv eine kernelbasierte Port-Knocking-Implementierung

Da das Klopfen im Netzwerk sichtbar ist, bietet die Verwendung von Sequenzen mit mehr als 3 Klopfen wenig Vorteile. Ich würde empfehlen, TCP - zu verwenden - obwohl es langsamer sein wird, haben Sie eine bessere Garantie dafür, dass das Klopfen geliefert wurde.

Obwohl es auf Userspace-Programmen basiert, bevorzuge ich fail2ban , da es keine zusätzlichen Schritte/Software zum Herstellen einer Verbindung erfordert, zuverlässig ausgeführt wird und wenn es jemals fehlschlägt, würde es mich nicht daran hindern, auf die Server zuzugreifen .

Es überrascht mich, dass verschlüsselte Identitäten so wenig angenommen werden - obwohl RFC1413 dies lediglich als möglichen Ansatz für die Verwendung des Protokolls erwähnt, anstatt zu definieren, wie es funktionieren soll.

Aber natürlich sollten Sie sicherstellen, dass Sie den Zugriff unabhängig davon so weit wie möglich eingeschränkt haben (d. H. Kein Root-Login, beschränken Sie den Zugriff auf eine nominierte Gruppe, falls dies praktikabel ist, erfordern Sie Schlüsselpaare). SSH ist auf Sicherheit ausgelegt - und in der Vergangenheit gab es relativ wenige Sicherheitslücken in den Hauptstromimplementierungen. Der Grund für den Erfolg von Angriffen liegt normalerweise in einer Kombination aus erratenen Benutzernamen, einfachen Passwörtern und Brute-Force-Angriffen oder Social Engineering. Beachten Sie, dass ich nicht befürworte, dass Sie eine komplexe Passphrase-Validierung (außer der Mindestlänge) erzwingen oder dass Benutzer ihre Passwörter ständig ändern müssen. Es gibt bessere Ansätze (z. B. Zwei-Faktor), aber leider nur sehr wenige Implementierungen.

7
symcbean

Ich habe seit einigen Jahren kein Port-Knocking mehr implementiert, vermute jedoch, dass es sich im Prinzip nicht wesentlich geändert hat. Andere Kommentare enthalten viele gültige Punkte und ich werde sie hier nicht einfach wiederholen.

Ein Aspekt des Port-Knockings, den ich immer selbstverständlich implementiert habe, besteht darin, die Knock-Sequenz auf einem pseudozufälligen, aber wiederholbaren Wert wie dem aktuellen Datum und der aktuellen Uhrzeit zu basieren. Diese Strategie schließt die Gefahr eines Wiederholungsangriffs nicht im großen Stil aus, begrenzt jedoch die Exposition einer bestimmten Klopfsequenz. Damit dies erfolgreich ist, wäre natürlich eine synchronisierte Zeit, in meinem Beispiel, eine Quelle für die Konsistenz erforderlich.

4
Tok

Port Knocking ist nur ein weiteres Klartext-Passwort. Es kann wie jedes andere Klartext-Passwort brutal erzwungen, entdeckt, erfasst und wiedergegeben werden. Warum Telnet-Logins neu erfinden?

Du musst etwas vertrauen. Nehmen wir also an, Sie vertrauen Ihrem Betriebssystem-Netzwerkstapel und Sie vertrauen sshd, wenn Sie mit verzögerter Komprimierung und Berechtigungstrennung arbeiten und nur eine vernünftige Form der Zwei-Faktor-Authentifizierung zulassen (z. B. schlüsselbasiert).

Sie können "einfache" Dienste wie sshd verwenden, die authpf aufrufen, um Ihre komplexeren, anfälligen Dienste zu schützen.

mit authpf können Sie Ihre Firewalls-Regelsätze basierend darauf ändern, wer sich erfolgreich bei sshd authentifiziert. Daher können nur IP-Adressen, die sich bei Ihren ssh-Gateways anmelden können, eine Verbindung zu Ihrer Compile-/Compute-/Datenbankfarm herstellen.

2
Alex Holst