Erstellen Sie einen sicheren Chat in Netcat

Beginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie eine sichere Kommunikation zwischen zwei Endpunkten mithilfe von Netcat und OpenSSL herstellen können. Sie üben das Erstellen verschlüsselter Tunnel mit SSL-Zertifikaten und konfigurieren sowohl den Listener als auch die Clientkomponenten für geschützte Nachrichtenübertragung.

Durch praktische Übungen generieren Sie selbstsignierte Zertifikate, richten einen OpenSSL-Server ein und verbinden sich über Netcat, um die Ende-zu-Ende-Verschlüsselung zu überprüfen. Diese praktische Erfahrung wird Ihr Verständnis von grundlegenden Cybersicherheitstools zur Absicherung von Netzwerkkommunikationen verbessern.


Skills Graph

Netcat und OpenSSL installieren

In diesem Schritt installieren Sie zwei essentielle Netzwerktools: Netcat und OpenSSL. Netcat (oft als nc bezeichnet) ist wie ein digitales Schweizer Taschenmesser für die Netzwerkkommunikation – es ermöglicht Ihnen, direkt von der Befehlszeile aus Netzwerkverbindungen zu lesen und zu schreiben. OpenSSL ist ein leistungsstarkes Toolkit, das Verschlüsselungsfunktionen bereitstellt, die wir verwenden werden, um unsere Chatnachrichten zu sichern.

Bevor Sie irgendeine Software installieren, ist es eine gute Praxis, Ihre Paketliste zu aktualisieren. Dies stellt sicher, dass Sie die neuesten stabilen Versionen der Tools erhalten:

sudo apt update

Jetzt installieren wir Netcat. Dieser Befehl lädt das Paket automatisch herunter und installiert es:

sudo apt install -y netcat

Als Nächstes installieren wir OpenSSL. Dies bietet die Verschlüsselungsfunktionen, die wir für eine sichere Kommunikation benötigen:

sudo apt install -y openssl

Nach der Installation sollten wir überprüfen, ob beide Tools korrekt funktionieren. Die folgenden Befehle zeigen Versionsinformationen an – die erste Zeile zeigt die Netcat-Version und die zweite die OpenSSL-Version:

nc -h | head -n 1
openssl version

Sie sollten eine Ausgabe ähnlich dieser sehen, obwohl die Versionsnummern variieren können:

OpenBSD netcat (Debian patchlevel 1.217-2ubuntu1)
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

Wenn Sie Versionsinformationen wie diese sehen, herzlichen Glückwunsch! Sie haben beide Tools erfolgreich installiert und sind bereit, mit dem nächsten Schritt fortzufahren, in dem wir sie verwenden, um einen sicheren Chat zu erstellen.

Einrichten eines verschlüsselten Tunnels

In diesem Schritt erstellen Sie einen verschlüsselten Tunnel mithilfe von OpenSSL, um Ihre Netcat-Kommunikation zu sichern. Dieser Tunnel verschlüsselt alle Daten, die zwischen zwei Endpunkten übertragen werden, und bietet somit Vertraulichkeit für Ihre Netzwerkkommunikation. Verschlüsselung ist essentiell, da sie verhindert, dass unbefugte Parteien Ihre Chatnachrichten lesen können, während sie über das Netzwerk übertragen werden.

  1. Generieren Sie zunächst ein selbstsigniertes SSL-Zertifikat und einen privaten Schlüssel in Ihrem Projektverzeichnis. Ein Zertifikat ist wie eine digitale Personalausweis, der hilft, die Identität Ihres Chat-Servers zu verifizieren, während der private Schlüssel zur Verschlüsselung der Daten verwendet wird:
cd ~/project
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"

Dieser Befehl erstellt zwei wichtige Dateien: key.pem (Ihr privater Schlüssel) und cert.pem (Ihr öffentliches Zertifikat). Die Option -days 365 macht das Zertifikat für ein Jahr gültig, und -nodes bedeutet, dass der private Schlüssel aus Gründen der Einfachheit in diesem Lab nicht mit einem Passwort geschützt wird.

  1. Überprüfen Sie, ob die Zertifikatsdateien erfolgreich erstellt wurden, indem Sie sie auflisten:
ls -l key.pem cert.pem

Sie sollten beide Dateien mit einer Größe von etwa 3 - 4 KB sehen. Der -l-Schalter zeigt detaillierte Informationen, einschließlich Dateiberechtigungen und -größen. Wenn diese Dateien existieren, haben Sie Ihre Verschlüsselungsmaterialien erfolgreich erstellt.

  1. Starten Sie den OpenSSL-Server, der die verschlüsselte Kommunikation handhaben wird. Dieser Server fungiert als sicherer Vermittler für Ihren Chat:
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

Der -quiet-Schalter reduziert die Ausgabemeldungen, während -key und -cert die Dateien angeben, die wir gerade erstellt haben. Port 12345 ist der Port, an dem der Server auf eingehende Verbindungen wartet. Halten Sie dieses Terminal geöffnet und laufen lassen – es wartet jetzt darauf, sicher mit Clients zu kommunizieren. In den nächsten Schritten verbinden wir uns mit diesem sicheren Server.

Einen Listener starten

In diesem Schritt richten Sie einen Netcat-Listener ein, der verschlüsselte Kommunikation über den OpenSSL-Tunnel empfängt, den wir im vorherigen Schritt erstellt haben. Dieser Listener fungiert als Empfängerende unseres sicheren Kommunikationskanals. Stellen Sie sich vor, Sie richten eine sichere Postfach ein, das nur Sie zugreifen können, und alle Nachrichten werden automatisch verschlossen, bevor sie zugestellt werden.

  1. Stellen Sie zunächst sicher, dass Ihr OpenSSL-Server aus Schritt 2 noch in einem Terminal läuft. Dieser Server fungiert als Verschlüsselungs- und Entschlüsselungs-Vermittler zwischen unseren Chatteilnehmern. Wenn nicht, starten Sie ihn neu:
cd ~/project
openssl s_server -quiet -key key.pem -cert cert.pem -port 12345

Der -quiet-Schalter reduziert die Ausgabe von unnötigen Meldungen, während -key und -cert unsere Verschlüsselungsdokumente angeben. Port 12345 ist der Port, an dem unser sicherer Tunnel arbeitet.

  1. Navigieren Sie in einem neuen Terminalfenster (oder Tab) zu Ihrem Projektverzeichnis. Diese Auftrennung erleichtert die Verwaltung der verschiedenen Komponenten unseres sicheren Chat-Systems:
cd ~/project
  1. Starten Sie den Netcat-Listener, der sich mit unserem verschlüsselten Tunnel verbindet. Netcat übernimmt die eigentliche Nachrichtenübertragung, während OpenSSL die Verschlüsselung verwaltet:
nc localhost 12345

Hier bedeutet localhost, dass wir uns mit unserem eigenen Rechner verbinden, und 12345 entspricht dem Port, den unser OpenSSL-Server verwendet.

  1. Das Terminal scheint jetzt einzufrieren – dies ist normal, da Netcat auf eingehende Verbindungen wartet. Halten Sie dieses Terminal geöffnet – wir werden es im nächsten Schritt für die sichere Kommunikation nutzen. Das "Einfrieren" bedeutet, dass Netcat aktiv auf Verbindungen wartet, ähnlich wie ein Telefon auf einen Anruf wartet.

Hinweis: Die Verbindung zwischen Netcat und OpenSSL ist jetzt hergestellt, und alle Kommunikation wird von OpenSSL automatisch vor der Übertragung verschlüsselt. Das bedeutet, dass jeder Text, den Sie eingeben, zuerst von OpenSSL verschlüsselt, über das Netzwerk gesendet und dann vom Empfänger entschlüsselt wird – was es für potenzielle Lauscher unlesbar macht.

Verbinden und chatten

In diesem Schritt stellen Sie eine sichere Chat-Sitzung zwischen zwei Terminals mithilfe des von Ihnen erstellten verschlüsselten Tunnels her. Dies zeigt, wie man Nachrichten sicher über ein unzuverlässiges Netzwerk überträgt. Die Verschlüsselung stellt sicher, dass selbst wenn jemand die Kommunikation abfängt, er Ihre Nachrichten nicht lesen kann.

  1. Stellen Sie sicher, dass Sie drei Terminalfenster geöffnet haben:

    • Terminal 1: Ausführung des OpenSSL-Servers (aus Schritt 2) – Dieser übernimmt die Verschlüsselung/Entschlüsselung.
    • Terminal 2: Ausführung des Netcat-Listeners (aus Schritt 3) – Dieser empfängt und zeigt die entschlüsselten Nachrichten an.
    • Terminal 3: Wird zum Senden von Nachrichten verwendet – Ihre Eingabeschnittstelle.
  2. Verbinden Sie sich in Terminal 3 als Client mit dem verschlüsselten Tunnel. Dieser Befehl weist OpenSSL an, sich mit unserem sicheren Tunnel auf Port 12345 zu verbinden:

cd ~/project
openssl s_client -quiet -connect localhost:12345
  1. Geben Sie in Terminal 3 eine Testnachricht ein und drücken Sie die Eingabetaste. Diese Nachricht wird vor der Übertragung automatisch verschlüsselt:
Hello secure world!
  1. Wechseln Sie zu Terminal 2 (dem Listener) – Sie sollten Ihre verschlüsselte Nachricht im Klartext angezeigt sehen. Dies zeigt, dass die Nachricht am anderen Ende erfolgreich entschlüsselt wurde.

  2. Geben Sie jetzt in Terminal 2 eine Antwort ein und drücken Sie die Eingabetaste. Die Nachricht wird verschlüsselt, bevor sie zurückgesendet wird:

This is a secure reply!
  1. Die Antwort sollte in Terminal 3 erscheinen. Sie haben jetzt einen bidirektionalen sicheren Chat-Kanal, in dem beide Seiten verschlüsselte Nachrichten senden und empfangen können.

  2. Um den Chat zu beenden, drücken Sie am Ende in allen Terminals Strg+C. Dadurch werden alle Verbindungen ordnungsgemäß geschlossen und die Verschlüsselungsprozesse beendet.

Verschlüsselung überprüfen

In diesem letzten Schritt überprüfen wir, ob unsere SSL/TLS-Verschlüsselung korrekt funktioniert, indem wir den Roh-Netzwerkverkehr untersuchen. Diese praktische Demonstration zeigt Ihnen genau, wie die Verschlüsselung Ihre Daten davor schützt, von unbefugten Personen gelesen zu werden. Wenn wir OpenSSL mit Netcat verwenden, wird die gesamte Kommunikation während der Übertragung in unleserlichen Ciphertext umgewandelt.

  1. Zunächst benötigen wir ein Tool zur Inspektion des Netzwerkverkehrs. Installieren Sie tcpdump, ein leistungsstarkes Kommandozeilen-Paketanalysetool:
sudo apt install -y tcpdump
  1. Öffnen Sie ein neues Terminalfenster, um den Verkehr zu überwachen. Wir werden speziell die Loopback-Schnittstelle (lo) beobachten, die den lokalen Netzwerkverkehr auf Ihrem eigenen Computer handhabt. Der -X-Schalter zeigt sowohl hexadezimale als auch ASCII-Ausgaben an, während -n die DNS-Auflösung verhindert, um eine klarere Ausgabe zu erhalten:
sudo tcpdump -i lo -X -n port 12345
  1. In einem anderen Terminal starten wir unsere verschlüsselte Chat-Sitzung erneut genauso wie zuvor. Dieser Befehl stellt eine SSL-Verbindung zu unserem Chat-Server her, der auf Port 12345 läuft:
cd ~/project
openssl s_client -quiet -connect localhost:12345
  1. Senden Sie jetzt eine Testnachricht über diesen verschlüsselten Kanal. Geben Sie alles ein, was Sie möchten - wir verwenden dieses einfache Beispiel:
This message should be encrypted
  1. Schauen Sie in das tcpdump-Fenster. Anstatt Ihre lesbare Nachricht zu sehen, werden Sie eine ungeordnete Datenmenge aus hexadezimalen Werten und zufälligen ASCII-Zeichen beobachten. Dies ist Ihre Nachricht nach der Verschlüsselung - völlig unleserlich ohne den richtigen Entschlüsselungsschlüssel.

  2. Um den Unterschied zu verstehen, vergleichen wir dies mit unverschlüsseltem Verkehr:

    • Stoppen Sie zunächst alle laufenden Prozesse, indem Sie in allen Terminalfenstern Strg+C drücken.
    • Starten Sie einen normalen Netcat-Server ohne Verschlüsselung: nc -l 12345
    • Verbinden Sie sich von einem anderen Terminal aus damit: nc localhost 12345
    • Senden Sie die exakt gleiche Testnachricht.
    • Beobachten Sie, wie tcpdump jetzt Ihre Klartextnachricht deutlich in der Ausgabe anzeigt.

Dieser Vergleich zeigt deutlich, warum die Verschlüsselung wichtig ist - ohne sie kann jeder, der das Netzwerk überwacht, Ihre Nachrichten direkt lesen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie einen sicheren Chat-Kanal mit Netcat und OpenSSL erstellen. Der Prozess umfasste die Installation der erforderlichen Tools, die Generierung von SSL-Zertifikaten und die Einrichtung einer verschlüsselten Kommunikation über einen OpenSSL-Tunnel.

Sie haben sowohl die Server- als auch die Client-Konfiguration eingerichtet und die Effektivität der Verschlüsselung überprüft. Diese Kombination aus Netcat's Netzwerkfunktionen und OpenSSL's Sicherheitsfeatures zeigt, wie man die Datenübertragung vor potenziellen Lauschangriffen schützt.