Kritische Terminologieentwickler müssen sie kennen

Da die Welt immer datengesteuerter wird, ist der sichere Umgang mit Benutzerdaten wichtiger denn je.

Als Entwickler sind unsere Jobs schon hart genug: Wir müssen uns mit hochkomplexen und fragilen Systemen mit mehreren Fehlerpunkten befassen, während wir flüchtige menschliche Wünsche in UIs und Backends übersetzen. Zu dieser Aufgabe kommt eine neue und wesentliche Überlegung hinzu: Datensicherheit. Und das aus gutem Grund: Wir als Kunden sind wütend, wenn unsere Daten missbraucht werden (daher ist es nur fair, dass wir unseren Benutzern ein sicheres und angenehmes Erlebnis bieten), und Regierungen und Unternehmen verlangen dies zur Einhaltung der Vorschriften.

Datensicherheit als Passing-the-Buck

Was die Sicherheit erschwert, ist, dass sie mehrere Ebenen hat und zu der Sache „Jeder ist verantwortlich ist niemand“ wird. In einem modernen Cloud-Team kontrollieren mehrere Teams direkt den Ein- und Ausgang von Daten: Entwickler, Datenbankadministratoren, Systemadministratoren (DevOps-Leute, wenn Sie so wollen), privilegierte Backoffice-Benutzer und so weiter. Diese Rollen/Teams können schnell die Augen verschließen und die Datensicherheit als das Problem der anderen betrachten. Die Realität sieht jedoch so aus, dass sie sich um ihre eigenen Welten kümmern müssen, da ein Datenbankadministrator die App-Seite der Sicherheit nicht kontrollieren kann, eine DevOps-Person absolut nichts gegen den Backoffice-Zugriff tun kann und so weiter.

Entwickler und Datensicherheit

Trotzdem haben Entwickler die größte Zugriffsfläche, wenn es um Daten geht: Sie bauen jeden Teil der App; sie verbinden sich mit verschiedenen Backend-Diensten; die Zugangsmarken für die Fähre hin und her; sie haben den gesamten Datenbank-Cluster zum Lesen/Schreiben auf ihren Befehl hin; Die Apps, die sie schreiben, haben uneingeschränkten Zugriff auf alle Teile des Systems (beispielsweise hat eine Django-App in der Produktion alle Privilegien, um die gesamte S3-Sammlung der letzten zehn Jahre zu löschen oder zu löschen) und so weiter. Infolgedessen besteht die größte Wahrscheinlichkeit für Nachlässigkeit oder Versehen in Bezug auf die Sicherheit auf der Quellcodeebene und liegt in der direkten Verantwortung des Entwicklers.

Nun, Datensicherheit ist ein bodenloses Kaninchenloch, und ich kann auf keinen Fall in einem einzigen Beitrag an der Oberfläche kratzen. Ich möchte jedoch die grundlegende Terminologie behandeln, die Entwickler kennen müssen, um ihre Apps sicher zu halten. Betrachten Sie es als App Data Security 101.

Lass uns anfangen!

Hashing

Wenn Sie eine sehr strenge Definition wünschen, gibt es immer Wikipedia, aber einfach ausgedrückt ist Hashing der Prozess der Konvertierung von Daten in eine andere Form, in der die Informationen nicht lesbar sind. Verwenden Sie zum Beispiel das bekannte (und sehr unsichere) Verfahren von Base64-Codierung, die Zeichenfolge „Ist mein Geheimnis bei dir sicher?“ kann in „SXMgbXkgc2VjcmV0IHNhZmUgd2l0aCB5b3U/“ umgewandelt („gehasht“) werden. Wenn Sie beispielsweise anfangen, Ihr persönliches Tagebuch im Base64-Format zu schreiben, kann Ihre Familie Ihre Geheimnisse auf keinen Fall lesen (es sei denn, sie wissen, wie man Base64 entschlüsselt)!

Diese Idee der Verschlüsselung der Daten wird beim Speichern von Passwörtern, Kreditkartennummern usw. in Web-Apps verwendet (eigentlich sollte es in allen Arten von Apps verwendet werden). Die Idee ist natürlich, dass der Angreifer im Falle einer Datenpanne nicht in der Lage sein sollte, die Passwörter, Kreditkartennummern usw. zu verwenden, um tatsächlichen Schaden anzurichten. Für dieses Hashing werden äußerst robuste und ausgefeilte Algorithmen verwendet. so etwas wie Base64 ist ein Witz und wird von jedem Angreifer sofort gebrochen.

Passwort-Hashing verwendet eine kryptografische Technik, die als Einweg-Hashing bekannt ist, was bedeutet, dass die Daten zwar verschlüsselt, aber nicht entschlüsselt werden können. Woher weiß die App dann, dass es Ihr Passwort ist, wenn Sie sich anmelden? Nun, es verwendet den gleichen Prozess und vergleicht die verschlüsselte Form dessen, was Sie gerade als Passwort eingegeben haben, mit der verschlüsselten Form, die in der Datenbank gespeichert ist; Wenn sie übereinstimmen, dürfen Sie sich anmelden!

  12 tragbare Projektoren, um ein Kino überall hin mitzunehmen

Wo wir gerade beim Thema Hashes sind, hier ist etwas Interessantes. Wenn Sie jemals Software oder Dateien aus dem Internet heruntergeladen haben, wurden Sie möglicherweise aufgefordert, die Dateien vor der Verwendung zu überprüfen. Wenn Sie zum Beispiel die Ubuntu Linux ISO herunterladen möchten, zeigt Ihnen die Download-Seite eine Option, um Ihren Download zu überprüfen; Wenn Sie darauf klicken, öffnet sich ein Popup:

Das Popup fordert Sie auf, einen Befehl auszuführen, der im Wesentlichen die gesamte gerade heruntergeladene Datei hasht und das Ergebnis mit der Hash-Zeichenfolge vergleicht, die Sie auf der Download-Seite sehen: 5fdebc435ded46ae99136ca875afc6f05bde217be7dd018e1841924f71db46b5. Diese Konvertierung wird mit dem durchgeführt SHA256-Algorithmusderen Erwähnung Sie in den letzten Teilen des Befehls sehen können: shasum -a 256 –check.

Die Idee ist, dass, wenn der durch Ihre Überprüfung erzeugte Hash anders ist, dies bedeutet, dass sich jemand in Ihren Download eingemischt und Ihnen stattdessen eine kompromittierte Datei zur Verfügung gestellt hat.

Einige bekannte Namen, die Sie im Bereich des Passwort-Hashing hören werden, sind MD5 (unsicher und jetzt nicht mehr existierend), SHA-1 und SHA-2 (Familien von Algorithmen, zu denen SHA-256 gehört, ebenso wie SHA-512). SCRYPT, BCRYPT usw.

Salzen

Jede Art von Sicherheit ist ein Katz-und-Maus-Spiel: Der Dieb lernt das aktuelle System kennen und kommt mit einem neuartigen Crack, der bemerkt wird, und die Schlosshersteller verbessern ihr Spiel und so weiter und so fort. Kryptographie ist keine Ausnahme. Während es unmöglich geworden ist, Hashes wieder in Passwörter umzuwandeln, haben Angreifer im Laufe der Zeit ausgeklügelte Techniken entwickelt, die intelligentes Rätselraten mit schierer Rechenleistung kombinieren; Infolgedessen können sie neun mal zehn das richtige Passwort vorhersagen, wenn sie nur den Hash erhalten.

„Herr. Rumpelstilzchen, nehme ich an?!“

Infolgedessen hat sich die Technik des Salzens entwickelt. Dies bedeutet lediglich, dass die Hash-Berechnung eines Passworts (oder beliebiger Daten) auf der Grundlage einer Kombination aus zwei Dingen erfolgt: den Daten selbst sowie einer neuen zufälligen Zeichenfolge, die der Angreifer nicht erraten kann. Wenn wir also beim Salting das Passwort superman009 hashen wollen, würden wir zuerst eine zufällige Zeichenfolge als „Salt“ auswählen, sagen wir bCQC6Z2LlbAsqj77, und dann die Hash-Berechnung für superman009-bCQC6Z2LlbAsqj77 durchführen. Der resultierende Hash weicht von den üblichen Strukturen ab, die vom Algorithmus erzeugt werden, wodurch der Spielraum für intelligentes Reverse Engineering oder Vermutungen erheblich eingeschränkt wird.

Sowohl Hashing als auch Salting sind unglaublich komplizierte Domänen und werden ständig weiterentwickelt. Als Anwendungsentwickler würden wir uns also nie direkt mit ihnen befassen. Aber es würde uns sehr helfen, wenn wir diese wüssten und bessere Entscheidungen treffen könnten. Wenn Sie beispielsweise ein altes PHP-Framework pflegen und zufällig feststellen, dass es MD5-Hashes für Passwörter verwendet, wissen Sie, dass es an der Zeit ist, eine weitere Passwortbibliothek in den Prozess der Benutzerkontoerstellung einzufügen.

Schlüssel

Der Begriff „Schlüssel“ ist Ihnen häufig im Zusammenhang mit Verschlüsselung begegnet. Bisher haben wir uns mit Passwort-Hashing oder Einwegverschlüsselung befasst, bei der wir die Daten irreversibel konvertieren und die ursprüngliche Form zerstören. Für die alltägliche Praxis ist das eine schlechte Idee – ein Dokument, das so sicher geschrieben und per E-Mail versendet wird, dass es niemals gelesen werden kann, nützt nichts! Wir möchten also Daten so verschlüsseln, dass die Informationen beim Sender und beim Empfänger offen sein sollen, aber während der Übertragung oder Speicherung nicht lesbar sein sollten.

Dafür existiert in der Kryptographie das Konzept eines „Schlüssels“. Es ist genau das, wonach es sich anhört: der Schlüssel zu einem Schloss. Die Person, der die Informationen gehören, verschlüsselt sie mit einem Geheimnis, das als Schlüssel bezeichnet wird. Solange der Empfänger/Angreifer diesen Schlüssel nicht hat, ist es unmöglich, die Daten zu entschlüsseln, egal wie ausgefeilt ihre Algorithmen auch sein mögen.

  So beheben Sie „Beim Lesen und Schreiben auf das iPhone ist ein Fehler aufgetreten“ in iTunes

Rotierende Schlüssel

Während Schlüssel die Verschlüsselung ermöglichen und zuverlässig machen, bergen sie die Risiken, die Passwörter haben: Sobald jemand den Schlüssel kennt, ist das ganze Spiel aus. Stellen Sie sich ein Szenario vor, in dem jemand einen Teil eines Dienstes wie GitHub hackt (wenn auch nur für ein paar Sekunden) und an 20 Jahre alten Code gelangen kann. Im Code finden sie auch die kryptografischen Schlüssel, die zum Verschlüsseln der Unternehmensdaten verwendet werden (eine schreckliche Praxis, Schlüssel zusammen mit dem Quellcode zu speichern, aber Sie wären überrascht, wie oft dies passiert!). Wenn sich das Unternehmen nicht die Mühe gemacht hat, seine Schlüssel (genau wie Passwörter) zu ändern, kann derselbe Schlüssel verwendet werden, um Chaos anzurichten.

Infolgedessen hat sich die Praxis des häufigen Änderns von Schlüsseln entwickelt. Dies wird als Schlüsselrotation bezeichnet, und wenn Sie einen seriösen Cloud-PaaS-Anbieter verwenden, sollte es als automatisierter Dienst verfügbar sein.

Bildnachweis: AWS

Beispielsweise hat AWS dafür einen dedizierten Service namens AWS-Schlüsselverwaltungsdienst (KMS). Ein automatisierter Dienst erspart Ihnen das lästige Ändern und Verteilen von Schlüsseln auf alle Server und ist heutzutage ein Kinderspiel, wenn es um große Bereitstellungen geht.

Public-Key-Kryptographie

Wenn das ganze bisherige Gerede über Verschlüsselung und Schlüssel Sie denken lässt, dass es sehr umständlich ist, haben Sie Recht. Schlüssel sicher aufzubewahren und sie so weiterzugeben, dass nur der Empfänger die Daten sehen kann, führt zu logistischen Problemen, die es der heutigen sicheren Kommunikation nicht ermöglicht hätten, erfolgreich zu sein. Aber dank der Public-Key-Kryptographie können wir sicher kommunizieren oder online einkaufen.

Diese Art der Kryptografie war ein großer mathematischer Durchbruch, und das ist der einzige Grund, warum das Internet nicht vor Angst und Misstrauen zusammenbricht. Das Details des Algorithmus sind kompliziert und hochgradig mathematisch, daher kann ich sie hier nur konzeptionell erläutern.

Bildnachweis: The Electronic Frontier Foundation

Die Kryptografie mit öffentlichen Schlüsseln beruht auf der Verwendung von zwei Schlüsseln zur Verarbeitung von Informationen. Einer der Schlüssel heißt Private Key und soll mit Ihnen privat bleiben und niemals mit jemandem geteilt werden; der andere heißt Public Key (woher der Name der Methode kommt) und soll öffentlich veröffentlicht werden. Wenn ich Ihnen Daten sende, muss ich zuerst Ihren öffentlichen Schlüssel abrufen und die Daten verschlüsseln und an Sie senden. An Ihrer Seite können Sie die Daten mit Ihrer Kombination aus privatem Schlüssel und öffentlichem Schlüssel entschlüsseln. Solange Sie Ihren privaten Schlüssel nicht versehentlich preisgeben, kann ich Ihnen verschlüsselte Daten senden, die nur Sie öffnen können.

Das Schöne an dem System ist, dass ich Ihren privaten Schlüssel nicht kennen muss und jeder, der die Nachricht abfängt, nichts tun kann, um sie zu lesen, obwohl er Ihren öffentlichen Schlüssel hat. Wenn Sie sich fragen, wie das überhaupt möglich ist, kommt die kürzeste und nicht-technische Antwort aus den Eigenschaften der Multiplikation von Primzahlen:

Für Computer ist es schwierig, große Primzahlen zu faktorisieren. Wenn also der ursprüngliche Schlüssel sehr groß ist, können Sie sicher sein, dass die Nachricht auch in Tausenden von Jahren nicht entschlüsselt werden kann.

Transport Layer Security (TLS)

Sie wissen jetzt, wie Public-Key-Kryptographie funktioniert. Dieser Mechanismus (den öffentlichen Schlüssel des Empfängers zu kennen und ihm damit verschlüsselte Daten zu senden) ist der Grund für die Popularität von HTTPS und veranlasst Chrome zu sagen: „Diese Website ist sicher.“ Was passiert ist, dass der Server und der Browser den HTTP-Verkehr (denken Sie daran, dass Webseiten sehr lange Textfolgen sind, die Browser interpretieren können) mit den öffentlichen Schlüsseln des jeweils anderen verschlüsseln, was zu Secure HTTP (HTTPS) führt.

  So finden Sie Freunde im Telegramm

Bildnachweis: MozillaEs ist interessant festzustellen, dass die Verschlüsselung nicht auf der Transportschicht als solcher stattfindet; das OSI-Modell sagt nichts über die Verschlüsselung von Daten. Es ist nur so, dass Daten von der Anwendung (in diesem Fall dem Browser) verschlüsselt werden, bevor sie an die Transportschicht übergeben werden, die sie später an ihrem Ziel ablegt, wo sie entschlüsselt werden. Der Prozess umfasst jedoch die Transportschicht, und am Ende des Tages führt alles zu einem sicheren Transport von Daten, sodass der lose Begriff „Sicherheit der Transportschicht“ geblieben ist.

In einigen Fällen stoßen Sie möglicherweise sogar auf den Begriff Secure Socket Layer (SSL). Es ist das gleiche Konzept wie TLS, außer dass SSL viel früher entstand und jetzt zugunsten von TLS eingestellt wird.

Vollständige Festplattenverschlüsselung

Manchmal sind die Sicherheitsbedürfnisse so groß, dass nichts dem Zufall überlassen werden kann. Beispielsweise können Regierungsserver, auf denen alle biometrischen Daten eines Landes gespeichert sind, nicht wie normale Anwendungsserver bereitgestellt und betrieben werden, da das Risiko zu hoch ist. Für diese Anforderungen reicht es nicht aus, dass Daten nur bei der Übertragung verschlüsselt werden; es muss auch im Ruhezustand verschlüsselt werden. Zu diesem Zweck wird die vollständige Festplattenverschlüsselung verwendet, um die gesamte Festplatte zu verschlüsseln, um sicherzustellen, dass die Daten auch bei einem physischen Angriff sicher sind.

Es ist wichtig zu beachten, dass die vollständige Festplattenverschlüsselung auf Hardwareebene erfolgen muss. Denn wenn wir die gesamte Festplatte verschlüsseln, wird auch das Betriebssystem verschlüsselt und kann nicht ausgeführt werden, wenn die Maschine gestartet wird. Die Hardware muss also verstehen, dass der Festplatteninhalt verschlüsselt ist, und die Entschlüsselung im laufenden Betrieb durchführen, wenn sie die angeforderten Festplattenblöcke an das Betriebssystem übergibt. Aufgrund dieser zusätzlichen Arbeit führt Full Disk Encryption zu langsameren Lese-/Schreibvorgängen, was von den Entwicklern solcher Systeme berücksichtigt werden muss.

Ende-zu-Ende-Verschlüsselung

Angesichts der anhaltenden Datenschutz- und Sicherheitsalpträume großer sozialer Netzwerke ist heutzutage niemandem der Begriff „Ende-zu-Ende-Verschlüsselung“ unbekannt, selbst wenn er nichts mit der Erstellung oder Wartung von Apps zu tun hat.

Wir haben zuvor gesehen, dass Full Disk Encryption die ultimative kugelsichere Strategie bietet, aber für den alltäglichen Benutzer ist es nicht bequem. Ich meine, stellen Sie sich vor, dass Facebook möchte, dass die Telefondaten, die es generiert und auf Ihrem Telefon speichert, sicher sind, aber es kann nicht darauf zugreifen, Ihr gesamtes Telefon zu verschlüsseln und alles andere dabei zu sperren.

Aus diesem Grund haben diese Unternehmen mit der Ende-zu-Ende-Verschlüsselung begonnen, was bedeutet, dass Daten verschlüsselt werden, wenn sie von der App erstellt, gespeichert oder übertragen werden. Mit anderen Worten, selbst wenn die Daten den Empfänger erreichen, sind sie vollständig verschlüsselt und nur über das Telefon des Empfängers zugänglich.

Bildnachweis: Google

Beachten Sie, dass die End-to-End (E2E)-Verschlüsselung keine mathematischen Garantien bietet wie die Public-Key-Kryptographie; Es handelt sich lediglich um eine Standardverschlüsselung, bei der der Schlüssel beim Unternehmen gespeichert wird, und Ihre Nachrichten sind so sicher, wie es das Unternehmen entscheidet.

Fazit 👩‍🏫

Von den meisten dieser Begriffe haben Sie wahrscheinlich schon gehört. Vielleicht sogar alle. Wenn ja, würde ich Sie ermutigen, Ihr Verständnis dieser Konzepte zu überdenken und zu bewerten, wie ernst Sie sie nehmen. Denken Sie daran, dass die Sicherheit von App-Daten ein Krieg ist, den Sie jedes Mal (und nicht nur einmal) gewinnen müssen, da selbst ein einziger Verstoß ausreicht, um ganze Branchen, Karrieren und sogar Leben zu zerstören!