Gemäß dem Kommentar, den ich zu der Frage gemacht habe:
Ein wichtiger Punkt wurde von fast allen sehr beschönigt ... Meine anfängliche Reaktion war @Michael Brooks sehr ähnlich, bis ich wie @stefanw feststellte, dass das Problem hier gebrochene Anforderungen sind , aber das sind sie.
Aber dann kam mir der Gedanke, dass dies möglicherweise nicht einmal der Fall ist! Der fehlende Punkt hier ist der unausgesprochene Wert der Assets der Anwendung. Einfach gesagt, für ein System mit geringem Wert wäre ein vollständig sicherer Authentifizierungsmechanismus mit allen damit verbundenen Prozessen übertrieben und falsch Sicherheitsentscheidung.
Für eine Bank sind die "Best Practices" natürlich ein Muss, und es gibt keine Möglichkeit, CWE-257 ethisch zu verletzen. Es ist jedoch leicht, sich Systeme mit geringem Wert vorzustellen, bei denen es sich einfach nicht lohnt (aber ein einfaches Passwort ist immer noch erforderlich).
Es ist wichtig, sich daran zu erinnern, dass echte Sicherheitskompetenz darin besteht, geeignete Kompromisse zu finden und NICHT die "Best Practices", die jeder online lesen kann, dogmatisch auszusprechen.
Als solches schlage ich eine andere Lösung vor:
Abhängig vom Wert des Systems und NUR WENN das System einen angemessen niedrigen Wert ohne "teures" Asset (einschließlich der Identität selbst) aufweist UND es gültige Geschäftsanforderungen gibt, die einen ordnungsgemäßen Prozess gewährleisten unmöglich (oder ausreichend schwierig / teuer), UND der Client wird auf alle Einschränkungen aufmerksam gemacht ...
Dann könnte es angebracht sein, einfach eine reversible Verschlüsselung zuzulassen, ohne dass spezielle Rahmen zum Durchspringen erforderlich sind.
Ich höre nur kurz auf, mich überhaupt nicht mit Verschlüsselung zu beschäftigen, da sie sehr einfach / billig zu implementieren ist (selbst wenn sie als passabel angesehen wird) Schlüsselverwaltung), und es bietet EINIGEN Schutz (mehr als die Kosten für die Implementierung). Es lohnt sich auch zu prüfen, wie Sie dem Benutzer das ursprüngliche Passwort geben können, sei es per E-Mail, Anzeige auf dem Bildschirm usw.
Da hier davon ausgegangen wird, dass der Wert des gestohlenen Passworts (auch insgesamt) recht niedrig ist, kann jede dieser Lösungen gültig sein.
Da in den verschiedenen Posts und separaten Kommentarthreads eine lebhafte Diskussion stattfindet, tatsächlich MEHRERE lebhafte Diskussionen, werde ich einige Klarstellungen hinzufügen und auf einige der sehr guten Punkte antworten, die an anderer Stelle hier angesprochen wurden.
Zunächst einmal denke ich, dass es allen hier klar ist, dass das Abrufen des ursprünglichen Passworts des Benutzers eine schlechte Praxis und im Allgemeinen keine gute Idee ist. Das ist überhaupt nicht umstritten ...
Außerdem werde ich betonen, dass es in vielen, ja den MEISTEN Situationen wirklich falsch ist, sogar schlecht, böse und hässlich .
Der Kern der Frage jedoch um ist das Prinzip , gibt es eine Situation , wo es nicht notwendig sein könnte , dies zu verbieten, und wenn ja, wie dies in der tun korrekteste Art und Weise die Situation angemessen .
Nun, wie @Thomas, @sfussenegger und einige andere erwähnt haben, besteht die einzig richtige Möglichkeit, diese Frage zu beantworten, darin, eine gründliche Risikoanalyse einer bestimmten (oder hypothetischen) Situation durchzuführen , um zu verstehen, worum es geht und wie viel es wert ist, geschützt zu werden und welche anderen Abhilfemaßnahmen spielen eine Rolle, um diesen Schutz zu gewährleisten.
Nein, es ist KEIN Schlagwort, dies ist eines der wichtigsten Werkzeuge für einen echten Sicherheitsexperten. Best Practices sind bis zu einem gewissen Punkt gut (normalerweise als Richtlinien für Unerfahrene und Hacks). Danach übernimmt eine sorgfältige Risikoanalyse.
Weißt du, es ist lustig - ich habe mich immer als einen der Sicherheitsfanatiker betrachtet und irgendwie bin ich auf der anderen Seite dieser sogenannten "Sicherheitsexperten" ... Nun, die Wahrheit ist - weil ich ein Fanatiker bin, und ein wirklicher Sicherheitsexperte aus dem wirklichen Leben - ich glaube nicht daran, "Best Practice" -Dogma (oder CWEs) OHNE diese wichtige Risikoanalyse auszusprechen .
"Passen Sie auf den Sicherheitseifer auf, der schnell alles in seinem Werkzeuggürtel anwendet, ohne zu wissen, gegen welches Problem sie sich tatsächlich verteidigen. Mehr Sicherheit bedeutet nicht unbedingt gute Sicherheit."
Eine Risikoanalyse und echte Sicherheitsfanatiker würden auf einen intelligenteren, wert- / risikobasierten Kompromiss hinweisen, der auf Risiko, potenziellem Verlust, möglichen Bedrohungen, ergänzenden Minderungen usw. basiert. Jeder "Sicherheitsexperte", der nicht auf eine fundierte Risikoanalyse hinweisen kann Die Grundlage für ihre Empfehlungen oder die Unterstützung logischer Kompromisse, aber sie würden es vorziehen, Dogmen und CWEs auszusprechen, ohne zu verstehen, wie eine Risikoanalyse durchzuführen ist, sind nichts anderes als Security Hacks, und ihre Expertise ist das Toilettenpapier nicht wert, auf dem sie es gedruckt haben.
In der Tat bekommen wir so die Lächerlichkeit, die Flughafensicherheit ist.
Bevor wir jedoch über die geeigneten Kompromisse in DIESER SITUATION sprechen, werfen wir einen Blick auf die offensichtlichen Risiken (offensichtlich, da wir nicht alle Hintergrundinformationen zu dieser Situation haben, stellen wir alle Hypothesen auf - da die Frage welche hypothetisch ist Situation könnte es geben ...)
Nehmen wir ein LOW-VALUE-System an, das jedoch nicht so trivial ist, dass es öffentlich zugänglich ist. Der Systembesitzer möchte einen gelegentlichen Identitätswechsel verhindern, doch "hohe" Sicherheit ist nicht so wichtig wie Benutzerfreundlichkeit. (Ja, es ist ein legitimer Kompromiss, das Risiko zu akzeptieren, dass ein erfahrener Script-Kiddie die Site hacken kann ... Warten Sie, ist APT jetzt nicht in Mode ...?)
Nehmen wir zum Beispiel an, ich arrangiere einen einfachen Ort für ein großes Familientreffen, damit jeder überlegen kann, wohin wir dieses Jahr auf unserem Campingausflug gehen möchten. Ich mache mir weniger Sorgen um einen anonymen Hacker oder sogar um Cousin Fred, der wiederholt Vorschläge macht, zum See Wantanamanabikiliki zurückzukehren, da ich befürchte, dass Tante Erma sich nicht anmelden kann, wenn sie muss. Nun, Tante Erma, eine Kernphysikerin, ist nicht sehr gut darin, sich Passwörter zu merken oder überhaupt Computer zu benutzen ... Also möchte ich alle für sie möglichen Reibungen beseitigen. Auch hier mache ich mir KEINE Sorgen um Hacks, ich möchte einfach keine dummen Fehler bei der falschen Anmeldung - ich möchte wissen, wer kommt und was sie wollen.
Wie auch immer.
Was sind hier unsere Hauptrisiken, wenn wir Passwörter symmetrisch verschlüsseln, anstatt einen Einweg-Hash zu verwenden?
- Benutzer imitieren? Nein, ich habe dieses Risiko bereits akzeptiert, nicht interessant.
- Böser Administrator? Nun, vielleicht ... Aber auch hier ist es mir egal, ob sich jemand als ein anderer Benutzer ausgeben kann, INTERN oder nein ... und trotzdem wird ein böswilliger Administrator Ihr Passwort erhalten, egal was passiert - wenn Ihr Administrator schlecht geworden ist, ist das Spiel sowieso vorbei.
- Ein weiteres Problem, das angesprochen wurde, ist die gemeinsame Nutzung der Identität zwischen mehreren Systemen. Ah! Dies ist ein sehr interessantes Risiko, das genauer betrachtet werden muss.
Lassen Sie mich zunächst behaupten, dass nicht die tatsächliche Identität geteilt wird, sondern der Beweis oder der Authentifizierungsnachweis. Okay, da ein gemeinsames Passwort mir effektiv den Zugang zu einem anderen System ermöglicht (z. B. meinem Bankkonto oder Google Mail), ist dies praktisch dieselbe Identität, also nur Semantik ... Außer, dass es nicht . Die Identität wird in diesem Szenario von jedem System separat verwaltet (obwohl es möglicherweise ID-Systeme von Drittanbietern wie OAuth gibt - dies ist jedoch von der Identität in diesem System getrennt - dazu später mehr).
Daher besteht das Hauptrisiko hier darin, dass der Benutzer bereitwillig sein (dasselbe) Passwort in mehrere verschiedene Systeme eingibt - und jetzt habe ich (der Administrator) oder ein anderer Hacker meiner Website Zugriff auf die Passwörter von Tante Erma für der Atomraketenstandort.
Hmmm.
Kommt Ihnen hier etwas vor?
Es sollte.
Beginnen wir mit der Tatsache, dass der Schutz des Nuklearraketensystems nicht in meiner Verantwortung liegt. Ich baue nur einen Ausflugsort für Frakkin-Familien (für MEINE Familie). Also, wessen Verantwortung ist es? Umm ... Wie wäre es mit dem Atomraketensystem? Duh.
Zweitens: Wenn ich jemandes Passwort stehlen wollte (jemand, von dem bekannt ist, dass er wiederholt dasselbe Passwort zwischen sicheren und nicht so sicheren Websites verwendet) - warum sollte ich mich dann die Mühe machen, Ihre Website zu hacken? Oder haben Sie Probleme mit Ihrer symmetrischen Verschlüsselung? Meine Güte, ich kann einfach meine eigene einfache Website einrichten und Benutzer dazu bringen, sich anzumelden, um SEHR WICHTIGE NACHRICHTEN über alles zu erhalten, was sie wollen ... Puffo Presto, ich habe ihre Passwörter "gestohlen".
Ja, die Benutzererziehung kommt immer wieder zurück, um uns in die Hienie zu beißen, nicht wahr?
Und Sie können nichts dagegen tun ... Selbst wenn Sie ihre Passwörter auf Ihrer Website hashen und alles andere tun wollten, was die TSA sich vorstellen kann, haben Sie ihr Passwort NICHT EINEN WEISSEN geschützt , wenn sie es behalten wollen Promiskuisch ihre Passwörter in jede Site stecken, auf die sie stoßen. Versuchen Sie es nicht einmal.
Anders ausgedrückt: Sie besitzen keine Passwörter . Versuchen Sie also nicht mehr , sich so zu verhalten, wie Sie es tun.
Also, meine lieben Sicherheitsexperten, als eine alte Dame nach Wendy's fragte: "WO ist das Risiko?"
Noch ein paar Punkte als Antwort auf einige der oben angesprochenen Fragen:
- CWE ist kein Gesetz, keine Vorschrift oder gar ein Standard. Es ist eine Sammlung allgemeiner Schwächen , dh die Umkehrung von "Best Practices".
- Das Problem der gemeinsamen Identität ist ein tatsächliches Problem, das von den Neinsagern hier jedoch missverstanden (oder falsch dargestellt) wird. Es geht darum, die Identität an und für sich (!) Zu teilen und NICHT darum, die Passwörter auf Systemen mit geringem Wert zu knacken. Wenn Sie ein Passwort zwischen einem System mit niedrigem und einem System mit hohem Wert teilen, ist das Problem bereits vorhanden!
- Im Übrigen würde der vorherige Punkt tatsächlich GEGEN die Verwendung von OAuth und dergleichen sowohl für diese Systeme mit geringem Wert als auch für die Bankensysteme mit hohem Wert zeigen.
- Ich weiß, dass es nur ein Beispiel war, aber (leider) sind die FBI-Systeme nicht wirklich die sichersten. Nicht ganz wie die Server Ihres Katzenblogs, aber sie übertreffen auch nicht einige der sichereren Banken.
- Geteiltes Wissen oder doppelte Kontrolle über Verschlüsselungsschlüssel kommt NICHT nur beim Militär vor. Tatsächlich verlangt PCI-DSS dies jetzt von praktisch allen Händlern, so dass es nicht mehr so weit draußen ist (WENN der Wert es rechtfertigt).
- Allen, die sich darüber beschweren, dass Fragen wie diese den Entwicklerberuf so schlecht aussehen lassen: Es sind Antworten wie diese, die den Sicherheitsberuf noch schlechter aussehen lassen. Auch hier ist eine geschäftsorientierte Risikoanalyse erforderlich, andernfalls machen Sie sich unbrauchbar. Zusätzlich zum Unrecht.
- Ich denke, dies ist der Grund, warum es keine gute Idee ist, einfach einen regulären Entwickler zu übernehmen und ihm mehr Sicherheitsverantwortung zu übertragen, ohne zu schulen, anders zu denken und nach den richtigen Kompromissen zu suchen. Nichts für ungut, für diejenigen von euch hier bin ich alles dafür - aber mehr Training ist angebracht.
Wütend. Was für ein langer Beitrag ...
Aber um Ihre ursprüngliche Frage zu beantworten, @Shane:
- Erklären Sie dem Kunden die richtige Vorgehensweise.
- Wenn er immer noch darauf besteht, erklären Sie etwas mehr, bestehen Sie darauf, streiten Sie. Bei Bedarf einen Wutanfall auslösen.
- Erklären Sie ihm das GESCHÄFTSRISIKO. Details sind gut, Zahlen sind besser, eine Live-Demo ist normalerweise am besten.
- WENN ER NOCH darauf besteht UND gültige geschäftliche Gründe vorlegt, ist es Zeit für Sie, ein Urteil zu fällen:
Ist diese Website von geringem bis keinem Wert? Ist es wirklich ein gültiger Business Case? Ist es gut genug für dich? Gibt es keine anderen Risiken, die Sie berücksichtigen können und die gültige Geschäftsgründe überwiegen würden? (Und natürlich ist der Client KEINE bösartige Site, aber das ist duh).
Wenn ja, fahren Sie einfach fort. Es ist nicht die Mühe, Reibung und den Verlust der Nutzung (in dieser hypothetischen Situation) wert, den notwendigen Prozess einzurichten. Jede andere Entscheidung (auch in dieser Situation) ist ein schlechter Kompromiss.
Unterm Strich und eine tatsächliche Antwort: Verschlüsseln Sie ihn mit einem einfachen symmetrischen Algorithmus, schützen Sie den Verschlüsselungsschlüssel mit starken ACLs und vorzugsweise DPAPI oder ähnlichem, dokumentieren Sie ihn und lassen Sie den Client (jemanden, der älter genug ist, um diese Entscheidung zu treffen) abmelden es.