it-swarm-eu.dev

Ist es im Allgemeinen eine schlechte Idee, Datenbankfelder zu verschlüsseln?

Ich arbeite in einer winzigen Firma, es sind buchstäblich ich (der Programmierer) und der Besitzer. Der Eigentümer hat mich gebeten, mehrere Felder in einer Datenbank zu verschlüsseln, um die Kundendaten zu schützen. Dies ist eine Webanwendung, die Anwaltskanzleien bei der Verwaltung ihrer Daten hilft. Im Grunde speichert sie Informationen zu Personen und Klagen (wer wird verklagt, warum, für wie viel). Er betrachtet diese sensiblen Informationen als nicht leicht zu erkennen. Seine Angst ist "Ich möchte nicht, dass Unbefugte diese Informationen sehen". Nur andere Anwaltskanzleien könnten an diesen Daten interessiert sein, daher sollte dies nicht so wichtig sein wie beispielsweise Kreditkarten.

Ich habe im Web viel darüber gelesen und darüber nachgedacht, einfach symmetrische Verschlüsselung für diese Felder zu verwenden, damit die Leistung nicht so schlecht ist. Der Schlüssel würde auf dem Server gespeichert. this thread on stackoverflow sagt jedoch, dass dies eine schlechte Idee ist.

Ich verstehe nicht, wie nutzlos das Verschlüsseln der Felder und das Speichern des Schlüssels auf dem Server sein kann. Ich befürchte nicht, dass die Discs gestohlen werden, weil sie auf Amazon EC2 laufen. Ich bin kein Sicherheitsexperte, aber meiner Meinung nach, wenn etwas schief gehen könnte, würde ich sagen, dass die Datenbank undicht ist. Selbst dann würden die wichtigen Informationen verschlüsselt. Wenn der Typ es überhaupt schaffen würde, sich auf meinen EC2-Server zu hacken, dann würde es wohl wenig bis gar keinen Schutz geben, den ich tun könnte, um dies zu unterstützen. Da wir ein winziges Unternehmen sind, haben wir nur einen Server, der alles erledigt, von der Bereitstellung der Seiten bis zur Speicherung der Daten.

Meine Frage ist, wenn man bedenkt, dass wir uns nur einen Server leisten können, diese Felder mit einem symmetrischen Schlüssel zu verschlüsseln, der auf diesem Server gespeichert ist, ok?

65
Bhaskara

Allgemeine Kommentare. Es klingt so, als wäre es für Sie und Ihren Chef hilfreich, einige grundlegende Sicherheitskonzepte zu erlernen, bevor Sie fortfahren. Sicherheit ist ein Spezialgebiet. Sie würden keine zufällige Person auf der Straße bitten, eine Operation am offenen Herzen an Ihnen durchzuführen. und Sie sollten nicht erwarten, dass ein durchschnittlicher Softwareentwickler weiß, wie er Ihre Systeme schützt.

Ich spüre hier einige Missverständnisse. Zum Beispiel klingt es so, als hätte Ihr Chef Sicherheit mit Kryptographie gleichgesetzt. Aber das ist ein Fehler. Wie Bruce Schneier betont hat, ist Kryptographie kein magischer Elfenstaub, den Sie auf ein System streuen können, um es sicher zu machen . Und wie Roger Needham einmal berühmt sagte: Wenn Sie glauben, dass Kryptografie Ihr Problem lösen wird, verstehen Sie entweder die Kryptografie nicht oder Sie verstehen Ihr Problem nicht .

Ein wichtiges Konzept bei der Sicherung eines Computersystems ist das Bedrohungsmodell . Dies bedeutet, dass Sie sorgfältig überlegen müssen, welche Arten von Angriffen und Gegnern Sie stoppen möchten und welche nicht. Wenn das Bedrohungsmodell nicht klar durchdacht wird, kann dies zu Sicherheitstheater führen: Sicherheitsmechanismen, die auf den ersten Blick gut aussehen, in der Praxis jedoch völlig unzureichend sind. Gutes Sicherheitsmanagement beruht häufig auf Risikomanagement : sorgfältige Analyse der schwerwiegendsten Risiken und anschließende Entwicklung von Strategien zur Minderung oder zum Management dieser besonderen Risiken.

Es ist auch wichtig zu verstehen, dass Sicherheit eine Eigenschaft mit dem schwächsten Glied ist: Die Sicherheit Ihres Systems ist nur so stark wie die des schwächsten Glieds . Eine Sicherheitsanfälligkeit in einem Teil des Systems kann die Sicherheit des gesamten Systems gefährden. Dies bedeutet, dass es keine Antwort gibt, die ausreicht, um Ihr System zu schützen. Um Ihr System zu verteidigen, müssen Sie stattdessen an mehreren Stellen die richtige Sicherheit gewährleisten.

Eintauchen in Details. Es hört sich so an, als ob Ihr Ziel darin besteht, die unbefugte Offenlegung sensibler Daten zu verhindern. In diesem Fall müssen Sie sich auf eine Reihe von Elementen konzentrieren. Es gibt keine einfache magische Silberkugel, die dies für Sie lösen wird. Sie müssen allgemein an der Anwendungssicherheit arbeiten.

Lassen Sie mich einige Dinge vorschlagen, die für Sie Priorität haben sollten, wenn ich Ihre Ziele richtig verstanden habe:

  • Anwendungssicherheit. Sie müssen sich mit der Sicherheit von Webanwendungen befassen. Es spielt keine Rolle, wie viel Krypto Sie auf das Problem werfen. Wenn ein Angreifer eine Sicherheitslücke in Ihrem Anwendungscode findet, werden Sie abgespritzt. Für Hintergrundinformationen zur Sicherheit von Webanwendungen verfügt OWASP über viele hervorragende Ressourcen. Stellen Sie sicher, dass Sie mehr über die OWASP Top Ten, über XSS, SQL-Injection, Bereinigung/Validierung von Eingaben, Escape-Ausgabe, Whitelist und andere Konzepte erfahren.

  • Zugriffskontrolle. Ihre Webanwendung muss über solide Zugriffskontrollen verfügen, um sicherzustellen, dass ein Benutzer Ihres Systems nicht auf Informationen eines anderen Benutzers zugreifen kann (ohne Autorisierung). Die Details hierzu hängen von den Besonderheiten Ihres Systems ab. Wenn Sie also zusätzliche Hilfe benötigen, müssen Sie wahrscheinlich eine separate Frage mit weiteren Details zu Ihrer Anwendung und Ihrer aktuellen Strategie für die Zugriffskontrolle stellen.

  • Authentifizierung. Ihre Webanwendung benötigt eine Möglichkeit, ihre Benutzer zu authentifizieren. Das Standardschema mit dem geringsten Aufwand besteht darin, nur einen Benutzernamen und ein Passwort zu verwenden. Dies hat jedoch ernsthafte Einschränkungen in der Praxis, die gut verstanden werden. Wenn Benutzer ihre eigenen Kennwörter auswählen, wählen sie häufig schlechte Kennwörter. Dies kann die Sicherheit Ihres Systems beeinträchtigen.

  • Sicherer Softwareentwicklungslebenszyklus. Sie müssen die Sicherheit in den Softwareentwicklungsprozess integrieren. Wenn Sie die Softwarearchitektur erarbeiten, sollten Sie über die Sicherheitsanforderungen nachdenken und Bedrohungsmodellierung und Architekturrisikoanalyse durchführen. Wenn Sie Code schreiben, müssen Sie über häufige Implementierungsfehler informiert sein, die die Sicherheit verletzen können, und diese vermeiden. Nachdem die Software erstellt wurde, müssen Sie ihre Sicherheit testen und ständig bewerten, wie Sie bei der Sicherheit vorgehen. Wenn Sie die Software bereitstellen, müssen Ihre Mitarbeiter wissen, wie sie sicher verwaltet werden. Microsoft verfügt über einige hervorragende Ressourcen für den sicheren Software Development Lifecycle (SDL). Siehe auch BSIMM für mehr.

  • Sicherheitsbewertung. Wenn Sie Sicherheitsbedenken haben, empfehle ich, die Sicherheit Ihrer Anwendung bewerten zu lassen. Ein einfacher Ausgangspunkt könnte darin bestehen, dass jemand einen Pentest Ihrer Webanwendung ausführt, um nach bestimmten häufigen Fehlern zu suchen. Dies ist keineswegs eine Sicherheitsgarantie, kann aber manchmal als Weckruf dienen, wenn viele größere Probleme vorliegen. Sie können sich die Dienste von WhiteHat Security ansehen. Es gibt auch viele andere, die Web-Pentesting durchführen.

Wenn Sie das Gefühl haben, dass dies kein triviales Unterfangen ist, entschuldige ich mich, aber das ist in der Tat der Fall. Auf der anderen Seite ist die gute Nachricht, dass es viele Ressourcen gibt, und außerdem müssen Sie kein Sicherheitsguru auf Expertenebene werden: Sie müssen sich nur mit einigen grundlegenden Konzepten und einigen allgemeinen Sicherheitsvorkehrungen vertraut machen Fehler in der Webprogrammierung, und das wird die meisten Ihrer Bedürfnisse erfüllen.

101
D.W.

Durch das Verschlüsseln der Daten in der Datenbank werden die Informationen geschützt, wenn die Datenbank auf irgendeine Weise gestohlen wird. Es schützt jedoch nicht vor Angriffen auf die Website. Zum Beispiel durch Erraten eines Benutzernamens/Passworts. Es könnte jemanden verlangsamen, wenn er den Server kompromittiert hat, weil er den Schlüssel finden muss, aber es wird ihn nicht aufhalten. Es hat auch einen potenziell hohen Preis. Beispielsweise können die verschlüsselten Felder nicht mehr effizient durchsucht werden. Sie müssen sich auch der Auswirkungen der Sicherung bewusst sein und sicherstellen, dass der Schlüssel gesichert wird, vorzugsweise getrennt von den Datenbanksicherungen, um zu verhindern, dass die Datenbank entweiht wird, wenn ein Sicherungsband gestohlen wird. UND Sie müssen sicherstellen, dass Sie mehrere Kopien des Schlüssels haben, und diese regelmäßig testen.

15
pipTheGeek

Ein gutes Konzept von SoA ist es, einen Kryptodienst zu haben, der isoliert von anderen Prozessen auf Ihrem Server ausgeführt wird (Ihre Web-App sollte auch isoliert ausgeführt werden!). Wenn Sie dann ein Objekt/Feld verschlüsseln/entschlüsseln müssen, senden Sie Klartext/Krypttext an den Kryptodienst und erhalten Krypto/Klartext zurück. Auf diese Weise kann der Angreifer den Verschlüsselungsschlüssel nicht lesen, selbst wenn Ihre Webanwendung kompromittiert wird, da nur der Kryptodienst den Schlüssel kennt. Da Ihre Web-App isoliert ist, ist die Funktionsweise auf Ihrem System stark eingeschränkt. Die Service-Isolierung erfolgt normalerweise mit MAC-Systemen wie SElinux, TOMOYO (viel einfacher zu verwenden als SElinux imo) und AppArmor. Außerdem würde ich empfehlen, den neuesten Linux-Kernel auszuführen, der mit grsecurity gepatcht ist.

6
Matrix

Kurze Antwort: Ja, verwenden Sie eine symmetrische Verschlüsselung. Dies verhindert einige Angriffe wie das Lesen von SQL-Daten durch SQL-Injection. Wenn Ihre Webanwendung jedoch angegriffen wird, spielt dies möglicherweise keine Rolle. Wenn jemand genügend Zugriff auf Ihren Server erhält, können Sie so gut wie nichts tun. Auch bei asymmetrischer Verschlüsselung.

3
user5575