Es kommt nicht jeden Tag vor, dass Sie die Erkenntnisse aus der Kryptoanalyse des Zweiten Weltkriegs auf Ihre eigenen Webanwendungen anwenden können. Aber heute werden wir genau das tun. Wir werden uns nämlich ansehen, wie selbst eines der leistungsstärksten modernen kryptografischen Tools mit derselben Methode besiegt werden kann, mit der Alan Turing die Enigma-Maschine geknackt hat - das leistungsstärkste kryptografische Tool seiner Zeit -, wenn die Implementierer dieselben Fehler bei der Nachrichtenübertragung machen, die Turing gefunden hat.
Werfen wir einen Blick auf eine API, die ich kürzlich bewertet habe, um zu sehen, wie sie das Problem vermieden hat, das den Alliierten im Zweiten Weltkrieg zum Sieg über die Achsenmächte verhalf.
Eine eCommerce-API: Ein ziemlich süßer Honigtopf
Das Beispiel, das ich mir heute ansehen werde, ist die API eines eCommerce-Unternehmens für die Annahme von Zahlungen. Was die Angriffsziele angeht, so gibt es für böswillige Akteure kaum etwas Wertvolleres als eine API für Kreditkartenzahlungen. Deshalb beschloss dieses Unternehmen, einen öffentlichen Schlüssel zu veröffentlichen, mit dem API-Benutzer alle Kreditkarteninformationen verschlüsseln können, die zur Zahlungsabwicklung übermittelt werden.
Richtig, alle Daten, die mit diesem Formular übermittelt werden, werden verschlüsselt und niemals im Klartext gesendet. Das liegt daran, dass es wichtig ist, alle Daten vor Angriffen zu schützen, nicht nur die Kartennummer. Das Ablaufdatum und die CVV sind Teil des Pakets, das eine bestimmte Zahlungsmethode einzigartig macht, daher hat dieses Unternehmen alle Daten verschlüsselt. Das Unternehmen würde niemals etwas davon im Klartext versenden.
So sah eine Beispielanforderung aus, als sie über die Leitung kam, wobei ein Charles Proxy verwendet wurde, um den Datenverkehr als Man-in-the-Middle abzufangen:
Beachten Sie in diesem Beispiel, dass zwei Hash-Werte übermittelt werden: paymentHash und cvvHash. Denken wir über die Daten nach, die in diesen beiden Werten enthalten sind.
Für paymentHash haben wir die 16-stellige Kreditkartennummer, die mit dem für diese API veröffentlichten öffentlichen Schlüssel verschlüsselt ist. Natürlich variieren die Werte, die für die Verschlüsselung verwendet werden, stark.
Bei cvvHash gibt es diese Situation überhaupt nicht! CVVs bestehen nur aus 3 Ziffern. Wenn Sie nur dreistellige Kombinationen verschlüsseln, könnte ein Angreifer ein komplettes Wörterbuch mit nur 1.000 verschiedenen Werten erstellen (10 Werte für jede der 3 Ziffern). Mit diesem Wörterbuch kann er die CVV jeder Karte finden, die über diese API gesendet wird. Glücklicherweise wusste mein Kunde, wie man bekannte Klartextangriffe vermeidet, und hatte bereits randomisiertes Padding implementiert, um denselben Angriff zu verhindern, der die Nazis zu Fall brachte.
Das Enigma knacken
Die Enigma-Maschine war unter anderem deshalb so schwer zu knacken, weil sie eine sehr komplexe Struktur zur Verschlüsselung von Nachrichten hatte und die Einstellungen häufig geändert wurden. Da die Maschine jedoch für militärische Nachrichten verwendet wurde, begann Turings Team in Bletchley Park nach Text zu suchen, der in vielen der Nachrichten zu erwarten war.
Eine Art von Nachrichten, die häufig vom deutschen Militär verschickt wurde, war ein Wetterbericht, und diese Berichte enthielten das deutsche Wort für "Wetter" an der gleichen Stelle in jeder Nachricht, gefolgt von den bekannten Wetterbedingungen. Ein weiteres Beispiel war, dass viele Nachrichten mit "Heil Hitler" endeten und einige Betreiber Standardanreden verwendeten. Anhand dieser Beispiele war es auch möglich, einen Teil des Klartextes und der Einstellungen für jeden Tag zu ermitteln.
Diese Art von Verschlüsselungsschwachstelle hätte vorhanden sein können, wenn dieses eCommerce-Unternehmen keine zufällige Auffüllung für die CVV verwendet hätte, da die Anzahl der möglichen Werte so gering ist.
Den gleichen Fehler vermeiden
Durch die Verwendung eines zufälligen Pads stellte das Unternehmen sicher, dass zwei Zahlungsmethoden mit demselben CVV-Wert nichts über die übertragenen Daten verraten. Hier sind einige Beispiele dafür, wie der gleiche Wert "777" mit Hilfe eines Pads verschlüsselt werden kann, um unterschiedliche Werte zu erhalten:
$ echo -n 777 | openssl rsautl -inkey public_key.pem -pubin -pkcs |
Wie Sie sehen, sind die oben ausgeführten Befehle alle gleich, aber aufgrund der Standards bei der RSA-Verschlüsselung sind die ausgegebenen Werte alle völlig unterschiedlich.
Gute Verschlüsselungsalgorithmen sind nicht genug
Dieses Beispiel soll Ihnen verdeutlichen, dass es nicht ausreicht, ein gutes Verschlüsselungsverfahren zu verwenden. Selbst bei hochentwickelten Verschlüsselungsalgorithmen ist es möglich, dass die Daten, die Sie sicher übertragen wollen, aufgedeckt werden, wenn immer wieder dieselbe Eingabe verwendet wird. Es ist sehr wichtig - vor allem bei Zahlungsinformationen - sicherzustellen, dass die über die Leitung gesendeten Werte nicht leicht zu erraten sind.
Ein weiteres Beispiel für die Bedeutung von Polsterung ist die Speicherung von Kennwörtern. Die Entwickler wissen, dass sie eine gute Einweg-Hash-Funktion verwenden müssen, um sicherzustellen, dass nicht einmal sie selbst die Passwörter lesen können, die ihre Benutzer übermitteln. Zu diesem Zweck sollten die Entwickler vor dem Hashing eine zufällige Zeichenfolge ( salt genannt ) zu jedem Passwort hinzufügen.
Fazit
Die Integration der Sicherheit in Ihre Webanwendungen ist eine äußerst wichtige Aufgabe. Wenn Sie sicherstellen, dass die sensiblen Daten Ihrer Nutzer nicht einfach entschlüsselt werden können, schaffen Sie Vertrauen bei Ihren Kunden und sichern die Langlebigkeit Ihres Unternehmens. Schließlich möchte niemand, dass die Medien darüber berichten, dass auf seiner Website Zahlungsinformationen von Kunden abgeflossen sind. Wenn Sie sicherstellen können, dass Sie nicht immer wieder genau dieselben Werte verschlüsseln, vermeiden Sie einen grundlegenden Fehler und schützen gleichzeitig die Daten Ihrer Kunden.
Für weitere Informationen über bewährte Sicherheitspraktiken, schauen Sie sich Linode's umfangreichen Sicherheitsleitfaden an!
Kommentare