Ich habe gerade festgestellt, dass SSL-Man-in-the-Middle-Angriffe weitaus häufiger sind als ich dachte, insbesondere in Unternehmensumgebungen. Ich habe von mehreren Unternehmen gehört und mich selbst gesehen, die über einen transparenten SSL-Proxyserver verfügen. Alle Clients sind so konfiguriert, dass sie dem Zertifikat dieses Proxys vertrauen. Dies bedeutet im Grunde, dass der Arbeitgeber theoretisch sogar SSL-verschlüsselten Verkehr abfangen kann, ohne dass Warnungen im Browser auftauchen. Wie oben erwähnt, werden die Clients mit dem vertrauenswürdigen Zertifikat geliefert. Dies kann nur durch manuelle Validierung des verwendeten Zertifikats festgestellt werden.
Mir scheint, als würde der Arbeitgeber seine überlegene Position nutzen, um den SSL-Verkehr des Arbeitnehmers auszuspionieren. Für mich macht dies das gesamte Konzept von SSL nicht vertrauenswürdig. Ich habe ein ähnliches Setup selbst mit mitmproxy erfolgreich getestet und konnte die Kommunikation zwischen dem Client und meinem E-Banking-Server lesen. Dies sind Informationen, die niemandem preisgegeben werden sollten.
Daher ist meine Frage ziemlich einfach: Wie kann ich die Vertrauenskette auf der Serverseite überprüfen? Ich möchte sicherstellen, dass der Client das Zertifikat meines Servers und nur eine Vertrauenskette verwendet. Ich frage mich, ob dies durch die SSL-Konfiguration von Apache erreicht werden kann. Dies wäre praktisch, da es leicht auf viele Anwendungen angewendet werden könnte. Wenn dies nicht möglich ist, kennt jemand eine Möglichkeit, dies in PHP zu tun? Oder haben Sie noch andere Vorschläge?
quelle
Antworten:
Ich denke, diese Frage wäre besser für security.stackexchange.com geeignet, wo das Thema MITM in vielen Fragen diskutiert wird. Aber wie auch immer:
Die Validierung des Serverzertifikats erfolgt nur auf dem Client und kann nicht auf den Server verschoben werden, da der Validierungspunkt des Zertifikats auf dem Client darin besteht, dass die Clients sicherstellen müssen, dass es mit dem richtigen Server kommuniziert und dem nicht vertrauen kann (nicht vertrauenswürdiger) Server, um diese Entscheidung für den Client zu treffen.
Beim Abfangen von SSL ist der TLS-Client aus Sicht des Servers die SSL-abfangende Firewall / AV. Daher besteht das Problem auf der Serverseite darin, festzustellen, ob mit dem erwarteten Client (dem Browser) oder nicht (der Firewall / AV) gesprochen wird. Der sicherste Weg, dies zu tun, besteht darin, Client-Zertifikate zur Authentifizierung des Clients zu verwenden. Tatsächlich funktioniert das Abfangen von SSL nicht, wenn die Client-Authentifizierung verwendet wird, dh der TLS-Handshake schlägt fehl, da das MITM das erwartete Client-Zertifikat nicht bereitstellen kann.
Nur werden Client-Zertifikate selten verwendet. Ein fehlgeschlagener TLS-Handshake würde auch nicht bedeuten, dass der Client ohne SSL-Abfangen mit dem Server kommunizieren kann, sondern dass der Client überhaupt nicht mit dem Server kommunizieren kann. Eine alternative Möglichkeit wäre die Verwendung einiger Heuristiken, um die Art des TLS-Clients anhand des Fingerabdrucks des TLS-Handshakes zu ermitteln, dh Art und Reihenfolge der Chiffren, Verwendung bestimmter Erweiterungen ... Während ein SSL-Intercepting-Proxy theoretisch das Original emulieren könnte ClientHello perfekt die meisten nicht. Siehe auch Man-in-the-Middle-Erkennung auf der Serverseite für HTTPS oder Abschnitt III, Heuristiken für die TLS-Implementierung in Die Sicherheitsauswirkungen des Abfangens von HTTPS .
quelle
Das Problem liegt weder im Konzept von SSL noch in der technischen Implementierung, sondern darin, dass jemand anderes die volle Kontrolle über einen Endpunkt der Verbindung hat, dh Ihre Workstation.
Das ist die Wurzel des tatsächlichen Sicherheitsrisikos ...
Aus Sicherheitsgründen ist Ihre Workstation gefährdet, wodurch die Vertrauenskette unterbrochen wird, die unter normalen Umständen den Erfolg eines MITM verhindert.
Das kannst du nicht. Das geschieht clientseitig.
Abhängig von Ihrem Anwendungsfall können Sie RFC 7469 HTTP Public Key Pinning ausführen, bei dem Sie einen zusätzlichen Header mit einer Liste (Hashes) Ihrer tatsächlichen SSL-Zertifikate oder der von Ihnen verwendeten Zertifizierungsstellen an den Client gesendet haben.
quelle
Das ist der falsche Weg. Nicht der Server überprüft die Vertrauenskette. Es ist der Kunde. Der Grund, warum Unternehmen diese Methode verwenden, besteht darin, die Unternehmensumgebung zu sichern und zu überprüfen, was der Mitarbeiter in seiner Arbeitszeit tut.
quelle
Sie KöNNTEST (Art), aber die eigentliche Frage ist , ob Sie SOLL .
Aber Vorsicht, es ist nirgends so einfach wie das Ändern eines Flags in der apache.conf.
Da der "Angreifer" (z. B. der Arbeitgeber) den Client-Computer kontrolliert, kann er Ihre Versuche immer vereiteln, wenn er dazu neigt, genügend Aufwand zu betreiben (auf der positiven Seite, wenn Sie kein sehr großer Fisch sind, sind sie es höchstwahrscheinlich nicht geneigt, damit Sie Ihr Ziel erreichen, dass Ihre Benutzer keine Verbindung zu Ihnen herstellen können, es sei denn, es ist sicher))
Sie können TLS in Javascript erneut implementieren und dort überprüfen, ob das Zertifikat, mit dem der Client verbunden ist, das Zertifikat Ihrer Website ist.
Wenn Sie Glück haben , verwendet der Benutzer möglicherweise einen Browser, in dem clientseitiges Javascript Informationen zum verwendeten Remote-Zertifikat abrufen kann (und diese daher leicht anhand des fest codierten Werts des Zertifikats Ihres Servers überprüfen kann).
Sie können JavaScript verwenden, um Ihre benutzerdefinierte Verschlüsselung auszuführen . Selbst wenn das böse TLS MiTM des Unternehmens erfolgreich war, würde es ihm dennoch keinen Zugriff auf Ihre Daten gewähren. Wenn genügend Interesse besteht (und da sie den Client kontrollieren), können sie Ihr sicheres Javascript natürlich sofort durch ein eigenes ersetzen, das auch alle Informationen während des Transports protokolliert (oder ändert).
Da Unternehmen, die TLS MiTM-Proxys verwenden, normalerweise auch den Client-Computer vollständig steuern, können sie Bildschirm und Keylogger genauso einfach installieren, um einfach Videos von allem aufzuzeichnen, was der Benutzer sieht, und alle vom Benutzer eingegebenen Tastenanschläge (und Mausbewegungen) aufzuzeichnen. Wie Sie sehen können, wenn Angreifer SIND der Client gibt es keinen absolut sicheren Weg , um ihn zu täuschen. Es ist wirklich nur eine Frage, wie sehr sie sich die Mühe machen werden ... Und einige der oben genannten Lösungen könnten für Sie gut genug sein.
quelle