TLS wird dank BoringSSL sicherer

2023 hat Fastly große Investitionen in die TLS-Sicherheit getätigt. In diesem Blogpost erfahren Sie mehr über den Wechsel zu BoringSSL. In einem künftigen Post gehen wir näher auf die Implementierung von Neverbleed zur Isolierung von Private-Key-Operationen ein.

Bei OpenSSL kommt es immer wieder zu gravierenden Sicherheitslücken, beispielsweise dem berüchtigten Heartbleed Bug. Neben dem Missbrauchsrisiko sehen sich Nutzer bei Bekanntgabe einer neuen Sicherheitslücke auch erheblichen Betriebskosten für das schnelle Testen und Implementieren von Patches gegenüber. Unser Hauptziel beim Wechsel von OpenSSL zu BoringSSL war, die Wahrscheinlichkeit und die Auswirkungen von CVEs zu reduzieren und die Sicherheit unseres TLS-Terminierungssystems für unsere Kunden zu erhöhen.

BoringSSL ist ein Ableger von OpenSSL, der von Google erstellt und gepflegt wird. Aufgrund seiner geringeren Komplexität gilt BoringSSL grundsätzlich als sicherer als OpenSSL. OpenSSL ist nach wie vor das Rückgrat der SSL-Bibliotheken und in den vergangenen Jahren wurde viel daran optimiert, aber für uns und unsere Kunden bietet BoringSSL den besseren Schutz.

Der Wechsel

Unsere Arbeit startete vor etwa einem Jahr mit der ehrgeizigen Idee, OpenSSL für alle eingehenden Verbindungen auf unserer Edge zu ersetzen. Nach Abwägung einiger Alternativen hielten wir an unserem ursprünglichen Plan fest, auf BoringSSL umzusteigen. Dies bietet uns folgende Vorteile:

  • Kleinere und modernere Codebasis

  • Sicherere API

  • „BoringSSL ist ein Ableger von OpenSSL und größtenteils mit dem Quellcode kompatibel“, was die Migration erleichtert.

  • Umfangreiches Fuzzy Testing

  • Von Großunternehmen genutzt und von Google verwaltet

  • Mit OpenSSL vergleichbare Performance

Insgesamt war man sich einig, dass BoringSSL im Vergleich zu OpenSSL, wo unzählige veraltete Codezeilen nötig sind, eine gezieltere und damit eine sicherere Codebasis bietet.

Benötigte Codezeilen im Vergleich:

BorringSSL image 1

Wie bereits erwähnt, spielte es für uns eine wichtige Rolle, dass BoringSSL das gleiche Maß an Performance wie OpenSSL bot. Beim Performance-Vergleich zwischen den Bibliotheken wandten wir verschiedene Strategien an.

Vorab nahmen wir insbesondere im Hinblick auf kryptografische Vorgänge Performance-Bewertungen vor.

Key Exchange (ECDH Vorgang/Vorgänge) in verschiedenen TLS-Bibliotheken:

BoringSSL image 2

Sobald uns eine BoringSSL Binärdatei zum Testen vorlag, begannen wir mit Canary-Tests. Wir stellten also den neuen Code auf einigen wenigen Servern in der Produktivumgebung bereit. So konnten wir die Performance anhand realer, nur schwer zu simulierender Traffic-Muster vergleichen. Abschließend führten wir Überlastungstests durch, bei denen bestimmten Fastly Servern, darunter auch der Server, auf dem die Testbinärdatei ausgeführt wurde, zu Kontrollzwecken mehr Live-Traffic zugewiesen wurde.

Kein Zuckerschlecken

Es war von Anfang an klar, dass der Entwicklungsaufwand sehr hoch sein würde. Wir mussten auch davon ausgehen, dass eine so große Veränderung in unserem Netzwerk zusätzliche Anstrengungen seitens Operations und Kundensupport erfordern würde. Schließlich sollte der Wechsel ohne weitere Auswirkungen auf unsere Kunden erfolgen.

Außerdem wussten wir, dass wir uns von Folgendem verabschieden mussten: 

  • Im Gegensatz zu OpenSSL gibt es bei BoringSSL keine regelmäßigen Releases. Daher müssen wir die Versionsverwaltung selbst in die Hand nehmen und Upstream-Änderungen nicht nur proaktiv verfolgen, sondern auch selbst entscheiden, ob sie relevant sind oder nicht.

  • Tooling und Konfigurationsskripte 

  • OCSP Stapling

  • Unterstützung für bestimmte schwache Verschlüsselungen (z. B. CBC-Modi)

Probleme bei der Sitzungsfortsetzung

Auf halber Strecke – zumindest dachten wir das zu dem Zeitpunkt – stießen wir auf das erste Problem: OpenSSL und BoringSSL Sitzungen sind nicht kompatibel. Sitzungen, die in einer H2O Instanz unter Verwendung von BoringSSL begonnen wurden, konnten nicht von einer H2O Instanz unter Verwendung von OpenSSL übernommen werden und umgekehrt. Es war also nicht möglich, Ticket- und Cache-Sitzungen über mehrere Bibliotheken hinweg fortzusetzen.

So wie Fastlys Loadbalancer-Architektur aufgebaut ist, ist es wahrscheinlich, dass vom selben Kunden ausgehende Verbindungen unterschiedliche Zielserver erreichen. Folglich käme es bei der Implementierung des Wechsels zu einer Unmenge an bibliotheksübergreifenden Sitzungsfortsetzungsversuchen.

Da diese allerdings nur während der Implementierungsphase erfolgen würden, konnte das Problem gelöst werden, indem lediglich die TLS-Sitzungscaches segmentiert und der vorübergehende (teilweise) Verlust von TLS-Handshake-Fortsetzungen abgefangen wurden.

Probleme bei der Verschlüsselung

BoringSSL ist auch deshalb sicherer, weil die Unterstützung für einige ältere Cipher Suites eingestellt wurde. Der Wechsel zu BoringSSL hatte zur Folge, dass alle schwachen CBC-Verschlüsselungen automatisch wegfielen. Selbst wenn nur äußerst wenige Fastly Kunden auf diese Verschlüsselungen angewiesen sind, kann auch ein kleiner Traffic-Anteil in einem Großunternehmen viel bewirken. Bei unseren Tests spürten wir vor allem eine häufig genutzte Verschlüsselung auf, die den Wechsel zu BoringSSL untergrub. Wir führten ein simuliertes Cipher-Matching-Feature ein, wonach „als ob BoringSSL verwendet würde“ galt. So konnten wir den Verlust der Abwärtskompatibilität evaluieren.

Dieses Problem wurde von den Entwicklern von BoringSSL anerkannt, woraufhin sie eine einzige schwache CBC-Verschlüsselung („ECDHE-RSA-AES128-SHA256“) wiedereinführten. Nachdem Daten gesammelt, analysiert und erneut getestet worden waren, konnten wir fortfahren.

Wie aus der nachstehenden Grafik ersichtlich, ist die Anzahl der inkompatiblen Verschlüsselungen angesichts dieser einen schwachen CBC-Verschlüsselung vernachlässigbar. Und höchstwahrscheinlich blähen Bots und Scanner, die unsere TLS-Konfigurationen durchsuchen, diese Zahl ohnehin zusätzlich auf.

BoringSSL Image 3

OCSP

Viele Clients verwenden das Online Certificate Status Protocol (OCSP) nicht mehr, um nach gesperrten Zertifikaten zu suchen. In Chrome verlässt sich Google auf CRLSets, weshalb die OCSP-Verifizierungsfunktion aus BoringSSL entfernt wurde. Zahlreiche Clients führen nach wie vor OCSP-Prüfungen durch, und standardmäßig beeinträchtigen blockierende Network Calls die Performance. OCSP Stapling geht einen Schritt weiter. Der Server kann hier die OCSP-Antwort im Handshake liefern und zusätzliche Network Calls auf diese Weise umgehen. Ohne dieses Feature auszukommen war für Fastly ein Ding der Unmöglichkeit. Deswegen haben wir sie kurzerhand zu BoringSSL hinzugefügt.

Fazit

Eine frühe und erfolgreiche Idee von uns war es, Funktionen, die auf OpenSSL-spezifische API-Funktionen angewiesen sind, vorbeugend so zu konvertieren, um sie so unabhängig wie möglich von TLS-Bibliotheken zu machen. 

Neben den erwarteten Mehrkosten stehen wir nun vor der zusätzlichen Aufgabe, alle kürzlich in BoringSSSL erfolgten Upstream-Änderungen zu analysieren und zu ermitteln, ob wir Aktualisierungen durchführen müssen oder sollten. Außerdem haben wir ein Auge auf noch mehr automatischen Verlust von Abwärtskompatibilität, wie es beispielsweise bei der oben erwähnten CBC-Verschlüsselung der Fall war.

Auch wenn BoringSSL einige zusätzliche Herausforderungen mit sich bringt, freuen wir uns insgesamt über unsere Entscheidung, in bessere TLS-Sicherheit zu investieren.

Roberto Guimaraes
Principal Software Engineer
Wayne Thayer
Senior Director of Engineering
Veröffentlicht am

Lesedauer: 4 Min.

Sie möchten sich mit einem Experten austauschen?
Sprechen Sie mit einem Experten
Diesen Beitrag teilen
Roberto Guimaraes
Principal Software Engineer

Roberto Guimaraes ist ein erfahrener Softwareentwickler, der sich auf große, datenintensive und verfügbarkeitsorientierte Systeme spezialisiert hat. Auf Fastlys Edge-Servern konzentriert er sich auf TLS.

Wayne Thayer
Senior Director of Engineering

Wayne Thayer kümmert sich bei Fastly um Sicherheitsprodukte und TLS. Bevor er zu Fastly kam, leitete er Mozillas Certificate-Authority-Programm und die offizielle Certificate Authority (CA) von GoDaddy. Außerdem ist Wayne in der Mozilla Sicherheits-Community sowie im CA/Browser Forum aktiv, wo er sich auf die Verbesserung der Vertrauenswürdigkeit von CAs konzentriert.

Sie möchten loslegen?

Setzen Sie sich mit uns in Verbindung oder erstellen Sie einen Account.