Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Passwortspeicherung für E-Mail-Konten im Java/Mysql-Serverprogramm

Die Kommentare, die darauf hinweisen, dass SMTP keine Authentifizierung erfordert, sind korrekt. Das heißt, alle drei der von Ihnen angegebenen Optionen sind unsicher, vorausgesetzt, der Server verwendet handelsübliche Hardware und Software. Ich werde zeigen, warum jeder unsicher ist, obwohl ich Ihrer ursprünglichen Reihenfolge nicht folgen werde.

Was wäre, wenn jemand den Server stehlen würde? Dann könnten sie einfach die Datei oder die Datenbank öffnen, das Passwort lesen und sofort Zugriff auf alle wichtigen Informationen im Unternehmen haben. Wenn Sie also nicht Tag und Nacht bewaffnete Wachen um den Server haben, ist dies bereits ziemlich unsicher.

Aber es kommt noch schlimmer. Kein Computersystem ist vollständig vor Angriffen geschützt, und mehrere gut publizierte Angriffe (z. B. das PlayStation Network von Sony) in den letzten Jahren haben gezeigt, dass ein Angreifer ohne physischen Zugriff auf den Inhalt von Festplattendateien und Datenbanken zugreifen kann. Außerdem geht aus Ihrer Frage hervor, dass der betreffende Server Pakete (HTTP-Anfragen, eingehende E-Mails usw.) von der Außenwelt akzeptieren soll, was Ihre Angriffsfläche erhöht.

Das ist verlockend, aber noch schädlicher als Option 2 oder Option 3. Zum einen wird in der vom Java-Compiler generierten .class-Datei ein privates abschließendes String-Feld gespeichert, sodass Sie mit dieser Option bereits das unverschlüsselte Passwort speichern auf der Festplatte des Servers. Nachdem der Server wie in Option 2 oder 3 kompromittiert wurde, kann ein Angreifer einfach javap ausführen um das Klartext-Passwort aus der .class-Datei zu bekommen.

Dieser Ansatz erweitert Ihre Angriffsfläche jedoch noch mehr. Wird das Passwort als Teil des Quellcodes gespeichert, steht es plötzlich allen Entwicklern zur Verfügung, die am Code arbeiten. Nach dem Prinzip der geringsten Rechte sollten die Entwickler keine zusätzlichen Passwörter kennen, und dafür gibt es einen sehr guten Grund. Wenn einer der Entwickler Wenn ein Computer von außen gestohlen oder kompromittiert wird, kann der Angreifer die Festplatte des kompromittierten Computers durchsuchen und das Klartext-Passwort erhalten. Dann gibt es Quellcodeverwaltung. Einer der wirklich wichtigen Vorteile der Quellcodeverwaltung besteht darin, dass Sie jede frühere Version Ihres Codes überprüfen können. Selbst wenn Sie in Zukunft zu einer sicheren Methode wechseln, ist der Quellcodeverwaltungsserver ein potenzieller Angriffspunkt, wenn das Kennwort jemals in die Quellcodeverwaltung gelangt ist.

All diese Faktoren summieren sich, um zu zeigen, dass, selbst wenn die Sicherheit des HTTP/Mail-Servers erstklassig ist, Option 1 die Angriffsfläche so sehr vergrößert, dass die Sicherheit des HTTP/Mail-Servers nicht wirklich hilft.

Zusätzliches Detail:Am Anfang habe ich angegeben „unter der Annahme, dass der Server handelsübliche Hardware und Software verwendet“. Wenn Sie keine handelsübliche Hardware und Software verwenden, können Sie beispielsweise von einem schreibgeschützten Speicher booten und nur eine verschlüsselte Datenbank verwenden, sodass bei jedem Start eine Person den Entschlüsselungsschlüssel bereitstellen muss. Danach leben die entschlüsselten Informationen nur noch im Arbeitsspeicher und werden nie auf die Festplatte geschrieben. Auf diese Weise muss ein Angreifer, wenn der Server gestohlen wird, den Server ausstecken und verliert so alle entschlüsselten Informationen, die sich jemals nur im Speicher befanden. Diese Art von Setup wird manchmal für ein Kerberos-KDC verwendet (mit dem Server in einer verschlossenen Box für zusätzliche Sicherheit), wird aber sonst selten verwendet und ist ehrlich gesagt übertrieben, wenn es eine einfache Möglichkeit gibt, Ihr Problem zu lösen, ohne all dies extra tun zu müssen Kosten.