Frage

Vor einiger Zeit trat ich neues Projekt. Es war in der Entwicklung für eine recht lange Zeit. Die Sache, die mich überrascht hat, war, dass alle Benutzer Passwörter in nicht verschlüsselter Form gespeichert werden .

Ich erklärte große Sicherheitslücken davon zu unserem Management - es sieht aus wie sie damit und wollen dafür Projekt sicherer zustimmen. Die Teammitglieder stimmen zu.

Wir haben über 20K Benutzer im System.

Eigentlich ist es ziemlich anstrengend diese Arbeit zu machen - Migration nicht-verschlüsselte Passwörter verschlüsselt . Wenn etwas schief geht, kann es zu Projekt Katastrophe führen.

Wie kann ich diesen Stress senken? Backup? Einheit-Tests (Tests Integrations)?

War es hilfreich?

Lösung

Nun, seien Sie vorsichtig mit Ihrem Backup, da sie unverschlüsselt Benutzer-Passwörter enthalten: -)

Unter der Annahme, dass die Passwörter in einer Datenbank gespeichert werden, eine einfache Lösung, so etwas wie dies gehen würde:

1) Stellen Sie eine sichere Backup der gesamten Tabellendaten

2) Erstellen Sie neue Spalte (PasswordEncrypted oder einem ähnlichen Namen)

3) Verwenden Sie Abfrage einer UPDATE jede Zeile der neue Spalte mit einem MD5 des unverschlüsselten Kennwort zu aktualisieren, während eines 32-Byte oder mehr Salz verwendet wird. So ziemlich jedes Datenbanksystem hat heute eine MD5-Funktion, so dass Sie nicht einmal müssen Ihre SQL-Eingabeaufforderung verlassen

4) die Klar Spalte in der Zwischenzeit halten und aktualisieren Sie Ihre Anwendung / scripts entsprechend mit dem gesalzenen Passwort zu arbeiten.

5) Benennen Sie die Klartext altes Passwort Spalte vorübergehend aus dem Spiel zu nehmen und Ihre anwendungs- testen, ob es dann irgendwelche Probleme zu Schritt 4 zurück und fixieren Sie Ihre Fehler.

6) Wenn alles ordnungsgemäß funktioniert, die Klartext-Passwort Spalte löschen

7) Benutzer ermutigen, ein neues Passwort wählen jetzt, dass Sie ein gewisses Maß an Sicherheit an der richtigen Stelle, die Auswirkungen der früheren Angriffe zu mildern, die erfolgreich gewesen sein kann.

Andere Tipps

Was für ein Projekt ist das? Eine Web-Anwendung, Desktop-Anwendung?

Wenn Sie die Refactoring-Straße hinunter sind, gibt es einen Grund, dass die Passwörter in etwas reversibel wie Verschlüsselung gespeichert werden müssen? Im Allgemeinen ist es empfehlenswert, Ihre Passwörter mit etwas Hash wie SHA dann die Eingabe mit dem gleichen Algorithmus Hash und die Ergebnisse vergleichen. Sie speichern nur die gehasht Werte, nicht die tatsächlichen Passwörter. Dies gibt Ihnen die Möglichkeit, zu überprüfen, ob jemand das richtige Passwort für die Möglichkeit, ohne die Offenlegung Ihrer Benutzer Ihrer Verschlüsselung ausgesetzt gebrochen und ihre Passwörter eingegeben hat.

spezifische Informationen zu Ihrem Ansatz ist nicht etwas, das ich zur Verfügung stellen kann (da ich nicht weiß, wie es funktioniert), aber Ihre beste Wette ist, eine zusätzliche Spalte erstellen, um die Hash-Passwörter zu speichern, die vorhandenen Passwörter Hash, dann halten sie mit all möglichen Passwort-Änderungen bis heute. Verwenden Sie diese neue Spalte für alle neue Entwicklung, dann, sobald der Umzug abgeschlossen ist und getestet, löschen Sie die Spalte mit den Text-Kennwörter.

Schreiben Sie eine Menge Tests, dass Test viele Eckfällen (Groß- und Kleinschreibung, Zahlen, Symbole, Unicode-Zeichen, lange Passwörter, etc.). Wenn Sie entwickeln und zu testen, erstellen Sie ein System, um wieder zu dem alten System zu bewegen (durch die alte Passwort Liste vorausgesetzt natürlich, denn sobald die Passwörter gehasht werden Sie sie nicht in der Lage sein, direkt zu konvertieren zurück). Speichern Sie eine Kopie der aktuellen Passwort-Liste. Konvertieren Sie die Passwörter über in einer Testdatei oder Test-Datenbank, und verwenden Sie dann die der Passwörter kopiert gerettet zu testen, ob alles funktioniert. Nun, das System in Produktion bewegen, und stellen Sie sicher, dass es für die Benutzer arbeitet. Wenn es nicht der Fall ist, haben Sie bereits getestet, um den Plan für die zurück zu dem alten System zu migrieren. Nachdem sich gezeigt hat, für ein paar Wochen zu arbeiten, können Sie die Kennwortliste löschen unverschlüsselt und du bist fertig.

Ich würde nur die aktuellen Passwörter Hash, speichern sie in einer neuen Datenbank-Feld und beginnen Sie das Feld mit, während das Passwortfeld zu löschen. Ich würde dann meine Benutzer mitteilen, dass jetzt ein guter Zeitpunkt wäre, Passwörter zu ändern, wie Sie mehr Sicherheitsmechanismen implementiert haben, ihre Daten sicher zu halten.

ein Backup haben, nur nicht SELECT * INTO Backup FROM UserData

Sie können zusätzliches Vertrauen erhalten, indem beid Authentifizierungsmethoden ausgeführt (verschlüsselt und unverschlüsselt) für jeden Login-Versuch, und wenn sie ein anderes Ergebnis liefern, eine Benachrichtigungs-E-Mail zugeschickt bekommen. Diese Änderung ist für Ihre Benutzer nicht sichtbar ist, so kann es für Wochen und sogar Monate. Sobald Sie sehen, dass die alte und die neue Authentifizierung für einen ausreichend hohen Prozentsatz der Anwender arbeitet, deaktivieren Sie die alte.

Wenn möglich, dass Sie dies ausprobieren können: Senden Sie eine E-Mail an alle Benutzer ihre Passwörter mit einem Zeitlimit zu aktualisieren, nach denen sie nicht arbeiten können, wenn sie nicht ihre Passwörter ändern. Hash diese neuen Passwörter und speichern Sie die Hash. Dies würde einige Änderungen am Frontend erfordern (das heißt, die Daten sendet sie zurück).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top