Ich habe gerade eine Anwendung bei der Arbeit geerbt und zu meinem Entsetzen festgestellt, dass die in der Datenbank gespeicherten Benutzerkennwörter mit einer internen Verschlüsselungsfunktion verschlüsselt werden, die auch die Entschlüsselungsfunktion umfasst.
Alles, was jemand wirklich tun muss, ist, die Benutzertabelle zu kopieren und die Verschlüsselungsassembly zu kopieren (jeder mit Zugriff auf die Datenbankproduktion), und dann hätte er Zugriff auf 100.000 E-Mail-Adressen und potenzielle Kennwörter für ihn.
Ich versuche dem Unternehmen zu erklären, warum dies keine gute Idee ist, aber die Sicherheitskonzepte scheinen über den Kopf zu gehen, da sie technisch nicht so aufgeschlossen sind (es ist für die Regierung). Außerdem gibt es in der Anwendung tatsächlich Funktionen, mit denen Benutzer mit Administratorrechten Benutzerpasswörter abrufen können, um sich als Benutzer anzumelden und Dinge zu erledigen (die sie angegeben haben und die sie benötigen).
Sie verstehen also die Auswirkungen auf die Sicherheit nicht. Und um eine strengere Sicherheitsrichtlinie zu implementieren (Kennwörter zu haschen, damit sie nicht einfach abgerufen werden können), muss ich vorhandene Funktionen für sie entfernen.
Was sollte ich tun? Ich habe das Passwortsystem nicht in erster Linie erstellt, daher kann ich nicht beschuldigt werden, wenn etwas schief geht. Andererseits geht es mir nicht gut und ich möchte auch nicht auf 100.000 potenzielle E-Mail-Anmeldungen zugreifen können.
quelle
Antworten:
Implementieren Sie die benötigten Funktionen auf sichere Weise. Administratoren, die sich als ein anderer Benutzer anmelden, können implementiert werden, ohne dass sie das Kennwort des Benutzers kennen. Sie können sich als sie selbst anmelden und dann über eine Funktion zum Ändern der Identität verfügen.
Das Sichern einer Kennwortdatenbank ist kein geschäftliches Problem, sondern ein technisches Problem. Das nicht zu tun ist ein Fehler. Wenn das Unternehmen Sicherheit als einen Kompromiss zwischen Funktionen ansieht, verliert die Sicherheit. Sie sollten ihnen keinen Grund geben, dies so zu sehen.
quelle
Sie müssen sie davon überzeugen, dass sie für den Fall, dass in ihren Server eingebrochen wird , wirklich nicht haftbar sein müssen. Sie brauchen auch nicht die Gegenreaktion einer informierten Nutzerbasis, die erkennt, dass sie fahrlässig sind.
Manchmal gibt es eindeutige Fälle, in denen eine Partei falsch und die andere richtig liegt. Dies ist eine dieser Zeiten.
Schau dir an, was gerade mit Sony passiert ist. Außerdem wurde unsere Website kürzlich gehackt, und eines der Dinge, die verhinderten, dass es sich um eine uneingeschränkte Katastrophe handelte, war die Verwendung einer (relativ) guten Einweg-Hashing-Funktion (SHA512). Wir sind seitdem auf bcrypt umgestiegen, um auch Brute-Force- / Dictionary-Angriffe zu verhindern (oder zumindest unhaltbar zu machen). Sonst finde ich einfach nichts Gutes.
quelle
Fakt ist: Auf vielen Websites wird das gleiche Passwort verwendet
Ihr Chef merkt wahrscheinlich nicht, dass die Leute häufig ein einziges Passwort (oder einen sehr begrenzten Satz davon) für alle Arten von Diensten verwenden (einschließlich Banking oder Facebook und ähnliches). Wenn Benutzer ihr Kennwort in Ihrem System ändern können, verwenden sie höchstwahrscheinlich dasselbe Kennwort wie an anderer Stelle.
Wenn Ihr Chef der Ansicht ist, dass dieser Kennwortzugriff kein Problem darstellt, sollten Sie ihm dies ebenfalls mitteilen, und er wird möglicherweise anders denken. Auch wenn sich Ihre App hinter der Wand befindet und nicht öffentlich zugänglich ist, kann sie für andere Onlinedienste eine Sicherheitsbedrohung darstellen. Benutzernamen (besonders wenn es sich um E-Mails handelt) sind ziemlich leicht zu erraten. Ich kann mir nicht vorstellen, wie lustig es wäre, sich in den Facebook-Account von Boss einzuloggen und etwas an die Pinnwand zu hängen.
Benutzerkennwörter sollten immer als vertrauliche Informationen der obersten Ebene behandelt werden, auf die nur eine begrenzte Anzahl von Personen Zugriff hat. Es ist am besten, solche flüchtigen Informationen nicht zu speichern. Und selbst wenn Sie dies tun, sollte Ihnen jeder einzelne Zugriff auf diese Informationen gewährt werden. Als ob Sie ein vertrauliches Dokument aus einem hochsicheren Safe erhalten, der nur mit mehreren Schlüsseln geöffnet werden kann. So wissen die Leute, wem der Zugang gewährt wurde und wann.
Implementieren der Kontodelegierung
Die Kontodelegierung in Ihrer Anwendung sollte anders erfolgen.
Es sollte auf keinen Fall durch Anmelden mit der Kombination Benutzername + Kennwort geschehen .
Es ist wahr, dass ein neuer Bildschirm entwickelt werden sollte, um eine delegierte Anmeldung zu ermöglichen, aber dennoch.
Warum ist delegierte Anmeldung besser?
Sie können auch zusätzliche Funktionen bereitstellen, die verdeutlichen, dass der Administrator im Namen eines Benutzers Maßnahmen ergriffen hat (die Sie jetzt nicht kennen, da Administratoren als Götter fungieren und sich als derjenige anmelden, der möglicherweise Dinge tut, die weh tun können reale Mitarbeiter Reputation).
Man muss sich einig sein, dass Menschen Fehler machen. Administratoren sind auch Menschen. Und wenn sie im Namen anderer einen Fehler machen, werden sie versuchen, ihnen die Schuld zu geben. Da bin ich mir 100% sicher. Dies macht es sicherer für Benutzer ohne Administratorrechte, damit ihr realer Ruf nicht unter Fehlern anderer Personen leidet.
quelle
Sie erwähnen nicht, was die Anwendung tut. Wenn es sich um Passanträge handelt, die voller Identitätsdiebstahlsinformationen sind, die geschützt werden müssen, verdient sie den maximalen Schutz. Aber wenn es heißt "Erzählen Sie mir die Verkehrsunfälle auf meiner Heimreise", was sind die Folgen einer Passwortverletzung? Einige Systeme, die ich geschrieben habe, haben nicht einmal Passwörter - Sie geben einfach Ihre E-Mail-Adresse, Ihre Schülernummer oder eine andere Kennung ein, die die Leute oft kennen, und die Besitzer des Systems schätzen die Benutzerfreundlichkeit und die Unfähigkeit, gesperrt zu werden über die mögliche Verletzung der Privatsphäre, wenn Menschen sich gegenseitig imitieren. Auch damit habe ich kein Problem. Warum benötige ich ein Passwort, um beispielsweise meinen Zeitplan für bevorzugte Sitzungen bei einer Konferenz einzurichten?
Wenn ich also zur Codeüberprüfung herangezogen würde und Sie mir dies vorstellten, würden wir damit beginnen. Was beschützt du? Was sind die negativen Konsequenzen, wenn sich eine Person als eine andere Person anmeldet? Was sind die negativen Konsequenzen, wenn alle gespeicherten Daten offengelegt werden? Vielleicht sind sie schrecklich. Sie würden sie für mich auflisten. Was sind dann die Folgen, wenn Benutzer nicht auf "E-Mail an mein Passwort senden" klicken können, sondern stattdessen auf "Passwort zurücksetzen" klicken müssen? Würden sie die Website nicht mehr nutzen? Und was ist mit dem Personal, das sich als Person anmeldet? Spart das Zeit, Geld, verlorene Verkäufe oder was?
Das letzte Stück der Kosten-Nutzen-Rechnung, das Sie nur dann erhalten, wenn es einen wirklich großen Unterschied zwischen den Negativen gibt, denen Sie jetzt ausgesetzt sind, und den Negativen, die Sie erhalten, wenn Sie die Funktionalität entfernen, sind die Kosten, um sie zu beheben. Würde ich eine Million ausgeben, um mir die Chance eines Tausend-Dollar-Engagements zu ersparen? Was ist umgekehrt? Kommt auf die Chancen an, denke ich, aber meine erste Antwort wäre ja.
ps - Die kanadische Regierung hat eine Website zur Beantragung Ihres Reisepasses mit IDs in der URL eingerichtet: Wenn Sie die URL mit einer anderen ID bearbeitet haben, haben Sie das halb ausgefüllte Formular eines zufälligen anderen Bürgers gesehen. Und ich habe Kunden, die sich zu allgemeinen Zufriedenheitszwecken als Kunden für den Kundenservice anmelden. Daher sehe ich die gute Seite, obwohl ich nicht dafür einstehen würde, wenn die Daten hinter dem Passwort für Fremde tatsächlich wichtig wären.
quelle
Es könnte gegen das Gesetz verstoßen und sie für eine Klage öffnen. Wenn persönliche Informationen über den Benutzer gespeichert werden oder das System mit anderen Systemen als dem Benutzer interagiert, müssen Sie möglicherweise überprüfen, ob das System unter die Datenschutzgesetze oder -gesetze des Staates oder des Bundes fällt. dh Sarbanes / Oxley, Kalifornien OOPA usw.
Abgesehen von den potenziellen rechtlichen Problemen können Sie auch darauf hinweisen, dass jeder Administrator jederzeit die gesamte Tabelle auf einen tragbaren Datenstick kopieren und sich als jeder Benutzer anmelden und Chaos anrichten oder die Daten verkaufen kann.
Selbst wenn Sie davon ausgehen, dass alle Administratoren vertrauenswürdig sind, ist der Kompromiss eines Administratorkennworts verheerend.
Sie benötigen auch kein Benutzerkennwort, um Vorgänge auszuführen. Sie können eine
sudo
ähnliche Funktion implementieren .quelle
Dies kann unmöglich ein System der Bundesregierung sein, da FIPS- und FISMA-Anforderungen die umkehrbare Verschlüsselung von Passwörtern verbieten und die übergeordnete Abteilung sie auf den Mond hauen würde.
Bei meiner vorherigen Firma habe ich weiter darum gekämpft, E-Mails zum Zurücksetzen von Passwörtern zu senden, um dieses Problem zu umgehen. Und ich wurde immer wieder überstimmt. Am Ende hatte ich es satt, Kacke gegen die Flut zu schaufeln, also ging ich. Dies war auch ein spitzer Chef, der dachte, dass die dummen Fragen, die einige Bank-Websites stellten, als "2-Faktor-Authentifizierung" gewertet wurden. Mit ihm zu streiten war wie ein Dilbert-Cartoon (er war wie der PHB geformt).
Ich habe dies bei einem Finanzinstitut implementiert gesehen. Die Personen im Kundensupportbereich meldeten sich mit ihren eigenen Anmeldeinformationen an und könnten sich, wenn sie dazu berechtigt wären, als Kunde anmelden. Dabei wurden sie nicht als Kunde angemeldet, sondern nur als Kunde imitiert . Wenn der Kundendienstmitarbeiter beschließt, Geld abzuheben, wird dies nicht in den Protokollen des Kunden angezeigt: Der Kundendienstmitarbeiter versucht dies (und sendet eine Warnmeldung, damit der Kunde sofort entlassen wird) Die Rentacop könnten es bis zu ihrem Stockwerk schaffen.
Schlecht gemacht, würde es dem Kundendienstpersonal ermöglichen, den Eindruck zu erwecken, dass der Endbenutzer eine Tätigkeit ausübt, die zu schwerwiegenden finanziellen oder rechtlichen Verpflichtungen führen könnte.
Die letzte Bundeswebsite, an der ich gearbeitet habe, sammelte 1/4 Milliarden US-Dollar pro Jahr von Endbenutzern (von denen es ungefähr 400 Benutzer gab), sodass die Protokollierung sehr eng sein musste und nur der autorisierte Endbenutzer etwas anfassen durfte die Webseiten, auf denen sie die Sachen meldeten, für die sie Verbrauchssteuern gezahlt hatten.
Sony war eines der Unternehmen mit der neuesten Sicherheitsverletzung. Es war nicht nur das PS3-Netzwerk, sondern auch das Netzwerk der MMORPG-Spiele mit insgesamt mehr als 25.000.000 Namen, Adressen, Kreditkartennummern, Benutzernamen und Passwörtern. Sie können glauben, dass ich überhaupt nicht glücklich bin (ich will meinen Evercrack!).
quelle
Ich verweise auf den Software Engineering Code of Ethics in Bezug auf solche Bedenken. Meine Interpretation, Ihre erste Priorität ist es nicht, das öffentliche Interesse zu untergraben (nicht wie in diesem Beispiel, in dem eine Firma Dell-Laptops so modifiziert hat, dass die Vermieter ihre Mieter ausspionieren können, ohne dass sie es wissen). Danach liegt es in Ihrer Verantwortung, Ihren Kunden über mögliche Risiken zu informieren und diese berücksichtigen zu lassen. Das ist natürlich die Mindestbasis. Sie müssen sich selbst ein Urteil darüber bilden, ob Sie das Gefühl haben, dass dies noch mehr ist, als Sie bereitstehen und zulassen können.
Wenn Sie ein Regierungsprojekt erwähnen und die privaten Informationen der Bürger aufgrund dieser Praktiken gefährdet sind, untergraben sie natürlich das öffentliche Interesse.
quelle
Sie können die Liste der E-Mails und des entschlüsselten Passworts ausdrucken und auf dem Schreibtisch Ihres Chefs ablegen. Auf dem Deckblatt finden Sie eine große Warnung: "Vertraulich".
Machen Sie die Schrift winzig, um jedoch kein Papier zu verschwenden.
Sie können ihnen auch zeigen, wie Administratoren mithilfe von Bugzilla die Identität von Personen ohne Verwendung ihres Kennworts annehmen können.
quelle
Zuallererst stimme ich den anderen Antworten zu, in denen darauf hingewiesen wird, dass es viel sicherer ist, dies zu vermeiden und nur Hashes von Passwörtern zu speichern, nicht die Passwörter selbst oder alles, was zurück in ein Passwort umgewandelt werden kann.
Es gibt jedoch Situationen, in denen Sie die Wiederherstellung mehr oder weniger berücksichtigen müssen. Bei Kennwörtern möchten Sie im Allgemeinen eine Wiederherstellung durchführen, indem Sie einem Administrator einfach erlauben, das Kennwort bei Bedarf zu ändern, anstatt das vorhandene Kennwort wiederherzustellen.
Eine andere Möglichkeit ist jedoch, dass Sie dem Benutzer erlauben, Daten auf dem Server zu speichern, der mit seinem eigenen Passwort verschlüsselt ist. In diesem Fall reicht es nicht aus , nur einem Administrator das Ändern des Kennworts zu gestatten . Mit dem neuen Kennwort können die Daten nicht entschlüsselt werden, und die meisten Benutzer können nicht auf alle verschlüsselten Daten zugreifen, wenn sie ein Kennwort vergessen oder verloren haben. Für diese Situation gibt es eine Alternative, die einigermaßen sicher ist und bei Bedarf dennoch eine Wiederherstellung ermöglicht.
Anstatt das Kennwort des Benutzers zum Verschlüsseln der Daten zu verwenden, erstellen Sie einen zufälligen Schlüssel, um die Daten selbst zu verschlüsseln. Anschließend speichern Sie diesen Schlüssel an mehreren Stellen: einmal mit dem Kennwort des Benutzers und an einer anderen Stelle, die mit einem Administratorkennwort verschlüsselt ist. Wenn der Benutzer dann (nicht wirklich, wenn) sein Kennwort verliert und nicht mehr direkt auf die Daten zugreifen kann, können Sie das Administratorkennwort zum Entschlüsseln des tatsächlichen Schlüssels und zum Wiederherstellen der Daten und / oder zum erneuten Verschlüsseln des Schlüssels mit verwenden das neue Passwort des Benutzers.
Wenn Sie einem einzelnen Administrator nicht vollständig vertrauen möchten, können Sie dies auch verwalten. Sie können beispielsweise festlegen, dass 5 Personen über Administratorschlüssel verfügen, und Sie möchten, dass mindestens drei Personen zustimmen, bevor ein Schlüssel wiederhergestellt werden kann. In diesem Fall wird das verschlüsselte Kennwort beim Speichern zu Verwaltungszwecken mehrmals gespeichert, und zwar jeweils einmal für jeden Satz von drei der fünf Administratoren (was nicht viel Platz beansprucht, da Sie nur mehrere Schlüssel speichern) . bei ~ 256 Bits pro Stück, nicht mehrere Kopien der Daten). Jede dieser Kopien wird nacheinander mit (den Hashes von) jedem der Kennwörter für diese drei Administratoren verschlüsselt.
Um es zu entschlüsseln, müssen Sie die drei Administratoren identifizieren, die ihre Kennwörter eingeben, den richtigen verschlüsselten Schlüssel für diesen Satz von drei auswählen und dann mit jedem der drei Kennwörter entschlüsseln, um schließlich den Originalschlüssel zu erhalten. Sie können das dann verwenden, um die Daten selbst wiederherzustellen, oder Sie können sie einfach mit dem (Hash) des neuen Passworts des Benutzers neu verschlüsseln, damit dieser weiterhin auf seine Daten zugreifen kann.
Wenn Sie dies jedoch tun, müssen Sie wirklich einen Standardverschlüsselungsalgorithmus und (stark bevorzugt) eine bekannte, gründlich untersuchte Standardimplementierung verwenden.
quelle
Das beunruhigt mich, da es sich um ein Regierungsprojekt handelt. Das Abrufen des Kennworts eines Benutzers, um eine Aktion unter seiner ID auszuführen, macht aus jeder Art von Sicherheitsüberprüfung einen Unsinn. Der einzige Grund, warum ich das sehe, ist die Erstellung eines gefälschten Audit-Trails.
Es ist wirklich nicht erforderlich, eine umkehrbare Verschlüsselung für Kennwörter zu verwenden. Wenn es jemals einen legitimen Grund gibt, eine Benutzer-ID zu fälschen, kann dies folgendermaßen geschehen:
Ich würde mich mit dem letzten Schritt unwohl fühlen - wer immer im System verkörpert war, sollte wissen, dass es passiert ist. Vielleicht können Sie das Geschäft überzeugen, indem Sie sagen: "Es ist, als ob Ihre Bank mir erlaubt, ohne Ihr Wissen auf Ihr Konto zuzugreifen, weil ich sagte, ich müsste es wirklich tun."
quelle
Ihr Glaube an ein besseres Passwortsystem ist nicht das Problem. Erstellen Sie eine Lösung, mit der ein Administrator / Support die Identität eines Benutzerkontos annehmen und Ihre Korrektur für die Kennwörter vornehmen kann. Sicherheit leidet oft unter Bequemlichkeit. Machen Sie es bequem und sicher.
Bearbeiten: Sie werden das Problem der Passwortsicherheit niemals vollständig verstehen, aber sie verstehen, dass Funktionen verloren gehen. Machen Sie diesen Vorschlag und prüfen Sie, ob Sie die Genehmigung erhalten, die erforderlichen Änderungen vorzunehmen. Sie wissen nicht einmal, ob es eine Stunde oder ein Jahr dauern wird. Es handelt sich um eine Funktionsänderung und nicht um eine vollständige Neuerstellung.
quelle
Angesichts der aktuellen Ereignisse (das Epsilon-Datenleck und das Playstation-Netzwerk-Datenleck) würde man hoffen, dass die Probleme offensichtlich werden.
Manchmal können Sie als Entwickler die Richtlinien jedoch einfach nicht beeinflussen.
Ich würde mein Bestes tun, um das Skandal- und Kostenpotential aufzuzeigen, das angesichts der aktuellen Ereignisse leicht sein dürfte. Aber wenn das nicht gelingt, was können Sie dann wirklich tun? Nicht viel. Geben Sie aus Protest auf und demonstrieren Sie die Anfälligkeit, Aufmerksamkeit zu erregen. Weder klingt nach großartigen Optionen.
quelle
Ich rate davon ab, aber wenn Sie unbedingt in der Lage sein müssen, Kennwörter zu entschlüsseln, sollten Sie die Verschlüsselung mit öffentlichen Schlüsseln verwenden. Auf diese Weise können Sie alle Kennwörter mit dem öffentlichen Schlüssel verschlüsseln. Sie können Kennwörter überprüfen, indem Sie sie mit dem öffentlichen Schlüssel verschlüsseln und vergleichen, und Sie können den privaten Schlüssel an einem anderen Ort aufbewahren (nicht auf dem Produktionscomputer).
quelle
Normalerweise besteht der Grund für einen Administrator, das Benutzerkennwort anzuzeigen, darin, dass er es dem Benutzer geben kann, falls er es verliert. Soweit ich das beurteilen kann, lässt Windows den Administrator das Kennwort auch nicht sehen. Warum sollte Ihre Anwendung das tun? Jede interne Verschlüsselungsbibliothek ist mit Sicherheit kaputt, da ich mir sicher bin, dass derjenige, der sie geschrieben hat, für die NSA nicht funktioniert.
quelle