LinuxClubWiki:Spielwiese

Aus Linupedia.org
Wechseln zu: Navigation, Suche

Die Spielwiese dient zum Ausprobieren für Wiki-Newbies --Yehudi 15:11, 18. Okt 2006 (CEST)



Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.


Dieser Beitrag dreht sich um die vielen Passworte die wir für die unzähligen Onlinedienste benötigen.

Firefox (steht aber hier nur stellvertretend für alle anderen Web-Browser) kann Benutzernamen und Kennwörter die ihr für Online-Dienste verwendet, speichern und wenn ihr die jeweilige Seite später wieder ansteuert, dort eure gespeicherten Anmeldedaten automatisch wieder eingeben oder euch automatisch anmelden. Das ist bequem, spart Zeit und man braucht sich nicht mehr ganz so viele Passwörter zu merken. Eine gute Idee, wenn man bedenkt bei wie vielen Internetseiten man sich heute anmelden muss. Dieser Artikel soll auch für den Laien etwas Licht in diesen Vorgänge und der damit in Zusammenhang stehenden "große Blackbox" mit Namen Verschlüsselung bringen. Es soll aufgezeigt werden, das "Gut verschlüsselt" nicht unbedingt auch "Sicher" bedeutet. die Beschreibung "verschlüsselt übertragen" nicht gleichzusetzen ist mit "verschlüsselt gespeichert", und dieses wiederum nicht, das "verschlüsselt gespeichert" nicht gleichzusetzen mit "von niemanden lesbar", und das eine "anonyme Auswertung" nicht unbedingt nur das ist, was ihr euch darunter vorstellen könnt. Es ist das Ziel hier etwas Aufklärung zu leisten und mit diesem Artikel einen normalen Anwender ein klein wenig Hintergrundwissen rund um den dem Umgang solcher Internetpasswörter zu vermitteln.
Nebenbei soll versucht werden bei wenigstens den Lesern dieses Artikels ein klein wenig mehr Interesse und Verantwortungsbewusstsein zu erzeugen welche Daten von den großen und kleine Datenkraken von euren Geräten abgegriffen werden können und auch werden, spätestens nachdem ihr ihr sorglos die Nutzungs- und Datenschutzbestimmungen der vielen kleinen und großen "hilfreichen" Tools bei der Installation einfach akzeptiert habt.

Grundlage für die Recherchen und Beispiele hier ist Firefox, aber eigentlich ist das in jedem Webbrowser gleich oder zu mindestens sehr ähnlich.


Passwörter und Browser

Passwörter sind heute unser täglicher Begleiter. Sie begegnen uns überall und besonders oft, wenn wir mit dem Webbrowser im Internet unterwegs sind. Die Beschreibungen, Erklärungen und Hilfen in den Browserdokus sind leider oft sehr dürftig und selbst einfache aber sehr wichtige Dinge im Umgang mit Passwörtern werden von vielen einfach aus Unkenntnis oder Sorglosigkeit ignoriert, zB das setzen von Masterpasswortern.


Passwortspeicherung auf dem Ziel-Server

Beschäftigen wir uns erstem damit wie die vielen Passwörter auf den Servern im Internet gespeichert werden.
Damit der Server euch eindeutig erkennen kann und auch eure Daten für euch verwalten kann benötigt man meistens einen Account dort auf dem Server. Zu diesem gehört ein Passwort mit dem ihr euch anmelden müsst. Dieses muss auf dem Server irgendwie gespeichert sein. Schauen wir uns mal an wie.

Passwort Hash

Meistens werden die Passwörter nur für die Authentifizierung benötigt, bedeutet das verschlüsselte Passwort das gespeichert wird muss nicht wieder entschlüsselt werden. Es ist also nur eine Einwegfunktion erforderlich. Zur Überprüfung wird das vom User eingegebene Passwort nach der selben Methode verschlüsselt und das Ergebnis mit dem gespeicherten Wert verglichen. Zum Einsatz kommen hier meistens Hashfunktionen und das verschlüsselte Passwort ist dann der Hash.
Stark vereinfacht und nur zur Demo. wir verwenden md5sum danach wird das noch in ein base64 Format umgewandelt, unser Passwort lautet "Test"

# echo -n "Test" | md5sum | cut -f1 -d " "| base64
MGNiYzY2MTFmNTU0MGJkMDgwOWEzODhkYzk1YTYxNWIK

Das Ergebnis ist jetzt der Passworthash der wird in einer Passwortdatenbank oder ähnlichem gespeichert. Wollen wir uns wieder anmelden, geben wir "Test" als Passwort ein, und es entsteht dort wieder der selbe Hash in der Hashfunktion, das wird mit dem gespeicherten vergleichen und damit haben wird uns ausreichend autorisiert und erhalten Zugang.
Der Nachteil, das Ganze ist leicht angreifbar. Wenn wir zB in die Passwortdatenbank schauen würden könnten wir sofort erkennen wenn 2 User das selbe Passwort benutzen würden. Und was noch viel schlimmer ist, nur mit die Kenntnis der verwendeten Hashfunktion könnten wir noch bevor wir überhaupt in die Datenbank schauen uns von ein paar tausend Wörtern schon einen Hashwert erzeugen, und würden nur noch nachschauen, ob von den von uns erzeugten Hashwerten zufällig welche in der Passwortdatenbank sind. Das wäre dann ein Wörterbuchangriff wenn wir der Reihe nach alle möglichen Kombinationen der Buchstaben ausprobieren würden, hatten wir dann einen Brute Force Angriff und für solche ganz einfachen Funktionen wie md5 gäbe es sogar komplette Tabellen mit Hashwerten Regenbogen Tabelle

SALT

Um das etwas sicher zu machen, kann der Hash versalzen werden. Dazu wird jedes mal wenn ein Passwort abgespeichet werden soll, erst eine zufällige Zeichenfolge gebildet der sogenannte SALT. Diese SALT wird jetzt zB dem Userpasswort vorangestellt und dann mit diesem zusammen verarbeitet und damit der Hashwert gebildet. Da aber genau der selbe zufällige SALT wieder benötigt wird bei derPasswort Überprüfung, muss dieser SALT auch jeweils mit dem entsprechendem Passwort zusammen gespeichert werden.
Auch dazu ein vereinfachtes Beispiel zum spielen. SALT wird hierbei mit der Randomfunktion der Bash erzeugt und dann mit einem Punkt getrennt vor dem Hashwert gesetzt und mit diesem abgelegt.

# SALT="$(printf "%04X" $RANDOM)";echo ${SALT}.$(echo -n "${SALT}Test"|md5sum|cut -f1 -d " "|base64)
5A11.NWE5MDk5MzEzMTIwODczNzZjYmMzMjEyYmQ0N2JlYTYK

Das "5A11" ist der von uns zufällig erzeugte SALT und nach dem Punkt kommt der Hash der vom SALT+Passwort erzeugt wurde.
Diese erzeugt jetzt selbst bei gleichem Passwort immer einen anderen Hash, und wenn soetwas jemand knacken wollte, musste er als erstes den kompletten gespeicherten Hash+Salt in die Hand bekommen, die verwendete Hashfunktion wissen, und wissen wo und wie SALT und Passwort vermischt wurden. Dann allerdings könnte er aber immer noch mittels Wörterbuch oder Brute-Force angreifen. Aber er müsste für jeden einzelnen Eintrag in der Datenbank neu rechnen und könnte durch die unterschiedlichen SALT-Werte ein Ergebnis nicht mit allen anderen Werten in der Datenbank vergleichen. Aber wenn er die Datenbank angreifen und knacken kann, könnte er immer noch auch die Hashwerte in der Datenbank gegen selbst erstellte austauschen und sich so Zugang zu den Userkonten verschaffen. Die richtigen User wären dann aber mit ihren dann nicht mehr funktionierenden Passwörtern ausgesperrt, dass fällt also schnell auf.

PEPPER

Um das jetzt noch komplizierter und vor allem sicherer zu machen, könnte man das noch pfeffern. Der PEPPER wäre noch eine zusätzliche Zeichenfolge mit der Passwort und der SALT vermischt wird, zB hinten angehängt. Der PEPPER ist jedoch jetzt für alle Passworte gleich und wird NICHT mit dem Passworthash zusammen abgespeichert sondern liegt gut geschützt irgendwo auf dem Rechner. Spätestens jetzt würden rein mathematisch alle normalen Angriffsmethoden hier irgendwelche Passworte zu knacken zur Jahrhundertaufgabe für ganze Rechenzentren.

Ausnahmen

Die oben aufgezeigten Methoden der Speicherung mit dem Passwort Hash sind typisch, und diese werden wir oft mit verschiedenen Algorithmen und Ausprägungen auch im Internet vorfinden wenn wir uns dort anmelden und einen User anlegen. Dennoch kann es gelegentlich vorkommen, das uns ein solcher Anbieter bei dem wir ein Passwort angegeben haben, im Falle wir hätten das Passwort vergessen uns unser eigenes Passwort per Mail zuschicken. Nicht etwa ein temporäres Neues, nein das Passwort das wir vorher irgendwann mal eingegeben haben. In diesem Fall sollten sofort die Alarmglocken klingen. Entweder die Passwörter dort sind überhaupt nicht gesichert und der Betreiber hat wenig Ahnung und Verständnis von Sicherheit, oder sie sind verschlüsselt dort auf dem Server gespeichert und können dort aber unkompliziert vom Betreiber und scheinbar sogar automatisch vom Server entschlüsselt werden. Alle Infos die man benötigen würde um die gesamte Passwortdatenbank zu entschlüsseln liegen dann mit auf diesem Server und sind diesem im Onlinemode bekannt. Würde solch ein Server ernsthaft professionell und bösartig angegriffen werden, erlangt der Angreifer eventuell an alle dort gespeicherten Informationen.
Sollte euch so ein Server im Internet auffallen, dann ist es empfehlenswert schon vorzeitig alle eventuell gleichen Passwörter auf anderen Seiten umzustellen und das Passwort das ihr dort verwendet habt, nirgends anders zu verwenden. Man sollte sich gut überlegen was man auf solchen Plattformen für Informationen angibt und was man dort macht.


Passwort Transport zum Server

Irgendwie muss aber das Passwort das ihr eingebt ja erst mal bis zum dem Server im Internet kommen bei dem ihr euch anmelden wollt. Im Browser habt ihr mehr oder weniger schön eine Anmeldeseite, diese enthält ein Formular. Dort setzt ihr Username und Passwort rein, und dann schickt ihr das los. Euer Passwort wird dabei entweder ganz unverschlüsselt im Klartext oder relativ leicht entschlüsselbar (ehr zu bezeichnen als nicht direkt lesbar) einfach mit den anderen Formulardaten an den Server geschickt.

Transport über HTTP

HTTP ist das normale unverschlüsselte Transport Protokoll für HTML und ähnliches das ihr im Browser anschaut. Ihr könnt es an der URL erkennen, dort steht "http://irgendwas.....". Zu erkennen ist das auch im Browser in der Adressenleiste, dort steht auch am Anfang "http://" oder neuerdings gar nichts mit "://" am Anfang. In diesem Fall würdet ihr euer Passwort also wirklich mehr oder weniger im Klartext bis zum Server schicken. Es geht dabei über viele Zwischenstationen (zB. Router) im Netz, und überall könnte das Passwort ausgelesen werden.
Zugegeben den Postboten zu überfallen in der Hoffnung in irgend einem der vielen Briefe die er gerade ausliefert steht etwas spannendes drin, ist eine schlechte Strategie. Aber im Internet ist vieles möglich und denkbar. Dort können irgendwo auf dem Weg bestimmte Protokolle ausgefiltert, Transportpakete dupliziert, ausgewertet und umgeleitet oder mit Debuging- oder Tracingfunktionen der Inhalt der Transport-Paketen absichtlich oder zufällig in Dateien abgespeichert werden. In einem solchem Transportpaket steht dann auch eure IP und die Adresse des Zielservers, mit etwas Aufwand ist das euch und die Funktion und Aufgabe die es auf dem Server erfüllen soll, eindeutig zuzuordnen. Euer Account auf dem Server also eigentlich nicht schwer zu knacken. Das die Transportpakete nicht nur gelegentlich mal im Netz in eine solche Falle laufen, sondern es eigentlich schon Standard ist, zeigen die Enthüllungsskandale rund um die Geheimdienste in letzter Zeit mehr als eindeutig.

Wann ist jetzt der Transport von Passwörtern über HTTP denn dann überhaupt für einen User noch akzeptabel. Solange es sich nur um unbedeutende Userkennungen zB bei irgendwelchen allgemeinen Balaber-Foren geht, solange außer der Mailadresse alle anderen Angaben nicht gemacht werden müssen, und von euch auch nicht gemacht werden, kann man das noch akzeptieren. Sobald aber weitere persönliche Daten ins Spiel kommen, wie zB Tel., Adresse, Anschrift, Kontoverbindungen usw., Finger weg von HTML. Geht es gar um Online-Shops, Banken, .... sofort STOP.

Transport über HTTPS

HTTPS ist jetzt das Sichere Transport Protokoll dazu. Dabei werden jetzt die einzelnen Pakete vom Server zu euch und wieder zurück verschlüsselt übermittelt. Ihr könnt auch das in der URL am https:// im Browser eindeutig erkennen. Oft werden auch noch zusätzliche Sicherheitssymbole dort in der Browser Adressleiste zu erkennen sein. Beim Verbindungsaufbau von eurem Rechner zu einem solchem Dienst auf dem Server wird zwischen eurem Rechner und dem Server ausgehandelt mit welchem Verschlüsselungsalgorithmus und mit welchem zufälligem Schlüssel sich die beiden unterhalten. Wie das aushandeln genau funktioniert ist etwas kompliziert aber man muss es auch gar nicht wissen. Es spielt sich dort eine ganze Menge Kartographie ab, und es geht ein paar Mal hin und her, aber am Ende sind sich beide einig. Jemand der dieses Aushandeln beobachten würde, könnte nicht erkennen auf welchem geheimen Schlüssel sich die beiden jetzt geeinigt haben und somit kann er auch die nachfolgenden Pakete nicht entschlüsseln. So gesendete Daten und Passwörter werden also sicher und von anderen nicht auslesbar an den Server übertragen.

Wenn auch das genaue Aushandeln der Verschlüsselung zwischen eurem Rechner und den Server unwichtig ist, wichtig dabei ist jedoch: Es geht hier unter anderem hierbei um ein Zertifikat vom Server, und das genau in dem Moment wenn ihr das erste mal mit HTTPS diesen speziellen Server ansprecht. Euer Browser (bzw ihr) müsst ein Zertifikat vom Server akzeptieren. In diesem Zertifikat steht unter anderem der public Key des Servers, und eine Menge Kryptografischer Kleinkram, wie die zugehörige URL, Gültigkeitszeitraum, Aussteller usw. Und dieses Zertifikat muss von einem anderem Zertifikat mit dessen privaten Key signiert sein. Auch dieses Zertifikat wird von eurem Rechner benötigt. Der Sinn dahinter ist, das Zertifikat vom Server muss zwingend von einer Zertifizierungsstelle zertifiziert sein. Dabei wird von der Zertifizierungsstelle genau geprüft ob die Angaben im Zertifikat des Servers auch wirklich alle korrekt und richtig sind und auch zutreffen, und nicht das ein Zertifikat mit der URL von deutsche.dank.de mit einer Mailadresse und Aussteller von Max.Mustermann.gmail.com stammt. Der Betreiber des Servers müsste also ein paar Euro in die Hand nehmen und sich bei einer offiziellen Zertifizierungsstelle ein Zertifikat bestätigen lassen. In diesem Fall würdet ihr dieses gar nicht merken. Euer Browser kennt eine ganze Menge von Zertifikaten von offiziellen Zertifizierungsstellen und wenn mit diesen ein Serverzertifikat signiert ist wird er es automatisch akzeptieren wenn die Angaben im Zertifikat mit der aufgerufenen Seite übereinstimmen.

Aber es gibt auch die Möglichkeit das sich der Betreiber eines Servers sich sein Serverzertifikat selbst signiert, das er also selbst für die Richtigkeit der Daten im Serverzertifikat bürgen will. Auch das geht, allerdings wird jetzt euer Browser eine Warnung bringen und euch fragen ob ihr das zulassen wollt. Voreinstellung dafür ist ablehnen, aber dann wird zu diesem HTTPS Server keine Verbindung aufgebaut. Wichtig hier nicht wahllos alles akzeptieren was dort rein kommt, und erstmal die Details des Zertifikates anschauen und euch gründlich überlegen ob ihr dieses wirklich akzeptieren wollt, eh ihr ein solches Zertifikat importiert. Einmal importiert ist es nicht ganz einfach dieses wieder loszuwerden.

Auch sonst wird Eurer Browser die Daten in den Zertifikaten überprüfen und zB Alarm schlagen wenn dort was nicht stimmt, zB das der Server eine andere URL benutzt als die die in dem Zertifikat steht, oder die Gültigkeitsdauer überschritten ist. solche Warungen nicht einfach weg drücken sondern erstmal genauer anschauen, ob das denn eventuell eine mögliche und akzeptable Erklärung dafür gibt. Wenn zB bei einer Bankverbindung plötzlich so ein Zertifikat akzeptiert werden soll, STOP, eine Bank sollte durchaus genügend Geld haben um sich sowas offiziell signieren zu lassen und auch genügend IT-Sicherheitsspezialisten die dieses richtig installieren und konfigurieren können.

Warum hier wachsam sein. Es gibt da die Möglichkeit des [1]. Der geht auch bei HTTPS. Dabei gibt sich jemand anders als der von euch gewünschte Zielserver aus. Ihr wollt den Zielserver ansprechen, landet aber erstmal unbemerkt nur auf einer gefakten Seite und diese baut eine verschlüsselte Verbindung zu Euch auf. Auf der anderen Seite baut dieser Rechner mit der gefakten Seite dann eine verschlüsselte Verbindung zu eurem Zielserver auf. Es wird von diesem Rechner in der Mitte dann einfach alles eins zu eins von einer Seite auf die andere übertragen, allerdings innerhalb dieses Angriffsrechners in der Mitte der sonst verschlüsselten Verbindung ist alles unverschlüsselt und somit von Angreifer alles mitlesbar. Weder ihr noch euer Zielrechner wird das bemerken. Ein solcher Angriff auf HTTPS ist nicht ganz einfach und in der Regel Profiarbeit da meist auch andere Internetprokolle mit angegriffen werden müssen, damit die Verbindung umgeleitet werden kann, aber das ist theoretisch und auch praktisch möglich. Dieses kann mit den default Sicherheitseinstellungen die für HTTPS im Internet genutzt werden, nicht vollkommen ausgeschlossen werden, da sich nur der Zielserver und nicht auch euer Rechner eindeutig identifizieren muss. (Wie soll auch ein öffentlicher Server im Internet jeden anderen Rechner der irgendwann mal ihn sprechen will, schon vorher eindeutig identifizieren können). Einen solchen Angriff wird dadurch begünstigen, in dem ihr zB ein nicht korrektes Zertifikat leichtsinnigerweise importiert.


Gespeicherten Passwörter im Firefox

Wenn sich Firefox ein Passwort für eine Anmeldung im Internet gemerkt hat, dann muss/kann es von Firefox beim nächsten Anmelden richig in das Anmeldeformular eintragen. Aber im Klartext, genau so als wenn ihr es selbst eingeben würdet. Es muss das Passwort also so verschlüsselt gespeichert sein, dass daraus von Firefox wieder das Passwort entschlüsseln werden kann. Es kann also nicht wie oben gezeigt als Hash gespeichert sein. Das schauen wir uns jetzt mal an.

Auf Linux befindet sich im Home Verzeichnis des Users ein verstecktes Verzeichnis ".mozilla". In einem Unterverzeichnis dann "firefox/.....default" (die Punkte sehen für eine zufälligen Wert, der bei jedem anders ist) befinden sich jetzt die ganzen Profil und Einstellungsdaten von Firefox. Dort liegt auch die Datei mit den verschlüsselten Passwörten. Bis Firefox V31 war das eine SQLITE Datenbank namens signons.sqlite und ab V32 ist es die Datei logins.json . Bei dem einem oder anderem ist es nach Updates auch möglich, das es beide Dateien gibt. Das Format von beiden ist unterschiedlich. Aber in beiden steht mindestens für jede gespeicherte Anmeldung die URL der Server im Klartext und jeweils dazu der verwendete Username und Passwort in verschlüsselter Form.
Schauen wir uns mal so ein verschlüsseltes Passwort an:

"encryptedPassword":"MDoEEPgAAAAAAAAAAAAAAAAAAAEwFAYIKoZIhvcNAwcECOuP+FR+vfyGBBCeJ/HBWkYc5bbcKS3LvrLC"

Ist natürlich wieder verpackt und wir können das noch etwas auspacken um genauer zu sehen aus was das Passwort besteht.

    0:d=0  hl=2 l=  58 cons: SEQUENCE          
    2:d=1  hl=2 l=  16 prim: OCTET STRING      [HEX DUMP]:F8000000000000000000000000000001
   20:d=1  hl=2 l=  20 cons: SEQUENCE          
   22:d=2  hl=2 l=   8 prim: OBJECT            :des-ede3-cbc
   32:d=2  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:EB8FF8547EBDFC86
   42:d=1  hl=2 l=  16 prim: OCTET STRING      [HEX DUMP]:9E27F1C15A461CE5B6DC292DCBBEB2C2

Als ersteres sehen wir einen Hex Dump beginnend mit F800 und endet mit 0001. Das ist die SchlüsselID für den Key mit dem das zu entschlüsseln ist. (diese ist von Mozilla festgelegt und immer die gleiche ID)
Weiter sehen wird "des-ede3-cbc" das ist das Verschlüsselungsverfahren. Dann kommt ein etwas kürzerer Hexdump dieses ist der InitialsierungsVektor (eine Art Voreinstellung des Verschlüsselsalgorythmus die für jedes Passwort anders ist)
Und das untere ist jetzt letztlich das verschlüsselte Passwort.

Das ist jetzt mehr als nur ausreichend gut verschlüsselt, denn ohne den Key von dem wir nur eine nichtssagende und immer gleiche ID haben, geht gar nichts. Das ist aber genau die Ausgangssituation wenn wir Firefox frisch gestartet haben. Auch Firefox kennt dann diesen Schlüssel noch nicht, und der steht auch nirgends auf dem Rechner. Erst wenn wir versucht haben uns irgendwo anzumelden oder einen neuen Passwort Eintrag dort machen wollten, oder uns mit Firefoxmitteln die Passwörter anschauen wollten, wird der Schlüssel von Firefox gebildet und dazu werden wir eventuell vorher nach dem Masterpasswort gefragt.

Hat Firefox jetzt aber einmal den Key erzeugt, dann bleibt diese im HauptSpeicher und Firefox kann mit dem Key dann beliebig oft Passworte entschlüsseln und braucht nicht noch einmal nach dem MasterPasswort zu fragen. Bis Firefox neu gestartet wird. Aber nicht nur Firefox kann auf den Key im Haupspeicher zugreifen, wahrscheinlich könnten alle Plugins die wir jetzt in Firefox gestartet haben auch darauf zugreifen. Also auch hier Vorsicht beim Installieren von Plugins für Firefox, auch hiermit könnte jemand ungewollt und von euch unbemerkt an die unverschlüsselten Passworte kommen und das obwohl ihr ein Masterpasswort gesetzt habt.


Der privat Key zum Entschlüsseln

Firefox muss den Schlüssel zum entschlüsseln des Passwort also nach dem Start immer erst einmal wieder neu erstellen, und zwar aus einem privat Key. Dieser privat Key wird erstellt wenn wir das erste mal ein Passwort speichern und befindet sich in einer Datei "key3.db" im selben Verzeichnis.
Der private Key ist mehr als 140 Zeichen lang, und auch wieder ein bisschen verpackt, also packen wir mal einen aus, um zu schauen was da drin ist.

    0:d=0  hl=3 l= 140 cons: SEQUENCE          
    3:d=1  hl=2 l=  40 cons: SEQUENCE          
    5:d=2  hl=2 l=  11 prim: OBJECT            :1.2.840.113549.1.12.5.1.3
   18:d=2  hl=2 l=  25 cons: SEQUENCE          
   20:d=3  hl=2 l=  20 prim: OCTET STRING      [HEX DUMP]:47AD0F306E90E8BD83E37B2C96F2D06246794918
   42:d=3  hl=2 l=   1 prim: INTEGER           :01
   45:d=1  hl=2 l=  96 prim: OCTET STRING      [HEX DUMP]:7327975D5375063597378DB34DB2DBD9C7B8DB2FA440528E8E3A46B0981F44BC952A0A188F5079C31F34875AFFADC8D5BF57A....

Dieser besteht jetzt erst mal aus 2 wichtigen Bestandteilen, der kleinere Hexdump ist ein SALT und das größere (hier abgeschnitten) ist etwas verschlüsseltes. Wenn wir das entschlüsseln können, dann würden wir dort wiederum eine Verpackung finden in der ist dann die Key-ID und letztlich auch der richtige Key enthalten mit dem wir die Passwörter wirklich entschlüsseln könnten.

Allerdings soweit sind wir noch nicht, noch ist dieses nicht entschlüsselt. Wir haben einen SALT (funktionell den Entry Salt) und in der Datei "key3.db" gibt es an einer anderer Stelle auch noch Pfeffer (funktionell den Global Salt). Aus Salz+Pfeffer+Masterpasswort kann man über mehrere Schritte und verschiedenen Hasch Funktionen einen "Key" und einen "InitialsierungsVektor" errechnen, und damit ließe sich der größe Brocken im Private Key entschlüsseln. Das Ergebnis müsste man dann noch auspacken und der darin enthaltene Key ist dann der Key der mit dem mittels des InitialsierungsVektors aus dem jeweiligem verschlüsselten Passwort, damit kann man dann endlich das Passwort entschlüsseln.


Wie sicher ist das Passwort denn jetzt verschlüsselt

Ersteinmal als Zusammenfassung, da davon ausgegangen werden kann, nicht jeder hat das Kryptografische Wirrwarr aus den vorherigen Abschnitten wirklich aufmerksam gelesen und richtig verstanden. Sowohl die im Firefox gespeicherten Online-Passwörter und Usernamen, als auch der Key mit dem diese entschlüsselt werden können, sind wirklich gut verschlüsselt.

Das bedeutet aber nicht das sie auch sicher sind. Im Gegenteil. Der Private-Key zu Entschlüsselung ist einzig von einem Masterpasswort abhängig, und das ist im Rechner nirgends gespeichert, das ist gut so, aber die default Einstellung des Firefoxes ist: "kein Masterpasswort"
Damit wird der Key nur mit Hilfe von "Salz und Pfeffer" verschlüsselt und Salz und Pfeffer steht auch noch in der selben Datei (key3.db) wie der private-key. Was noch erschwerend dazu kommt, aber hier nicht näher erklärt wird, diese Datei ist auch noch hervorragend geeignet für einen Wörterbuch- oder Brute-Force-Angriff auf das Masterpasswort.
In den Firefox Default-Einstellungen sind damit quasi die gespeicherten Online-Passwörter nur durch die Dateizugriffsrechte auf das Verzeichnis der Profildaten von Firefox gesichert, und natürlich dem Wissen oder Nichtwissen des verwendeten Verschlüsselungsalgorithmus. Zugegeben, wir befinden uns mitten in einem Volks-Webbrowser und nicht in einem Hochsicherheits-Rechenzentrum, wo man für jeden Schritt eine andere Genehmigung vorlegen muss und sich alle 2 Meter mit Geburtsurkunde, Fingerabdruck und Irisscan immer wieder neu identifizieren muss. Damit ist klar, wir müssen größere Abstriche in Punkto Sicherheit in Kauf nehmen, und irgendwo müssen schließlich auch die Daten zur Ver- und Entschlüsselung für den Webbrowser greifbar sein.
Wenn also in der Doku von Mozilla steht: "Wichtig: Ohne Master-Passwort kann jeder, der Zugriff auf Ihren Rechner hat, auch auf Ihre in Firefox gespeicherten Passwörter zugreifen.", ist das also wirklich keinesfalls übertrieben.


wie kompliziert ist jetzt die Entschlüsselung

Das genaue Ver- und Entschlüsselungsverfahren an sich ist wie die gesamte Kryptografie ein für Otto-den-Normverbraucher niemals wirklich zu durchschauendes Verfahren. Aber braucht ja niemand wirklich zu wissen. Eigentlich muss man nur das Verzeichnis mit den Einstellungen in ein anderes Profil kopieren, eventuell die Eigentumsrechte der Dateien anpassen und dann Firefox starten, und man kann die Passwörter mit Firefox auslesen. Aber auch nur einmal kurz im Internet nach den richtigen Worten gesucht, und man findet sofort dutzende fertige Programme um die Firefox Passworter zu entschlüsseln, auszulesen, zu sichern, wiederherzustellen, das Profil zu speichern und zu übertragen, die Passwörter und andere Einstellungen übers Internet mit all seinen anderen Geräten zu synchronisieren, usw. Es gibt darüber hinaus eine Vielzahl Projekten in den verschiedensten Programmiersprachen und fix und fertigen Quellcode die sich mit diesem Thema beschäftigen. Es gibt entsprechende Doku und Videos die das alles haar-genau erklären und nicht zuletzt insbesondere für Programmierer interessant auch die Librarys von Firefox selbst, die ja bei der Installation von Firefox sowieso auf jeden Rechner installiert werden, dort ist das alles schon als Bausteine drin, man braucht also gar nicht mehr viel eigenes dazu zu schreiben.
Das einzige was auf Anhieb mal nicht zu finden war, der Nachweis das man all diese Programme und Tools bei Linux eigentlich auch gar nicht wirklich braucht. Bei Linux ist alles was man benötigen würde um mit Hilfe der Konsole oder eines Script die Passwörter zu entschlüsseln per default schon installiert. Der Beweis wurde im Zusammenhang mit dem Schreiben diesem Artikel aber in Form eines Scriptes erbracht, (ob dieses Script hier veröffentlicht werden soll, muss noch besprochen werden) Es ist damit für jeden, und damit muss man die 98 jährige Oma die ein wenig Internetbegeistert ist, bewusst einschließen, also wirklich für jeden ist es problemlos möglich die Passworte auszulesen wenn kein Masterpasswort gesetzt ist. Ist eines gesetzt, nun gut, dann sollte man das schon kennen, sonst wird's schwierig.


Wer ist den nun "Jeder" der Zugriff darauf hat

Wer nun der Meinung ist: "Na-ja eigentlich bin ich ja alleine auf meinem Rechner, wer soll da schon Zugriff auf meine Passwörter haben. Und selbst wenn meine Frau oder mein Sohn theoretisch die Möglichkeit hat meine Passwörter auszulesen, zugegeben nicht schön, aber was soll's....."
dem muss man leider arg enttäuschen. Jeder bedeutet nicht nur jeder User der sich am Computer anmelden kann, sondern bedeutet auch jeder Prozess und jedes Programm das der User unter seiner Kennung am laufen hat. Nicht jedes Programm, Tool oder App wird davon Gebrauch machen sich für solche Dateien zu interessieren, aber es hätte trotzdem die Dateizugriffsrechte um auf jede Datei des Users lesend zuzugreifen, und mehr wird nicht benötigt als auf bestimmte Dateien des Users im Profile Verzeichnis vom Firefox Leserechte zu haben.
Was bei einer Linux Erstinstallation installiert wird, ist wohl diesbezüglich absolut harmlos, aber alles was wir insbesondere aus dem Internet nachinstallieren wird, könnte sich dafür interessieren, kostenlose Spiele und Apps, Firefoxplugins, Tools rund um Suchmaschinen oder Cloud Dienste oder Soziale Netze dürften wohl ganz oben auf die Liste der Verdächtigen vermutet werden. Bei den Browserplugins kommt noch erschwerend hinzu, hier würde eventuell nicht einmal das Masterpasswort ausreichend Schutz bieten. Die meisten dieser Tools oder Programme werden daraus nicht einmal ein Hehl machen, es steht nur nicht im Klartext in den Nutzungsbedingungen, das auch ausdrücklich die Passwörter gemeint und inbegriffen sind, wenn es um allgemeine Einstellungen und Profildaten geht, die regelmäßig eingesammelt, ausgewertet und "nach Hause" gesendet werden.


Was können "die" denn mit meinen oder unseren Passworten anfangen

Wenn eine einzelne Person oder Gruppe die Passwörter einer anderen Person oder Personen Gruppe auslesen würde, hätte sie natürlich damit dann theoretisch wahrscheinlich den Zugang zu allen Onlinediensten und den dort eventuell gespeicherten Daten. Streng genommen sind dann alle Internetkonten von denen die Passwörter so ausgelesen wurden, als gehackt zu bezeichnen.
Des weiteren, aus einer etwas größeren Liste von verwendeten Passwörtern eines Users lässt sich oftmals etwas mehr herauslesen. Da könnten zB auffallen das bestimmte Passwörter oft oder immer wieder genutzt werden, oder das Passwörter nach einer bestimmten Regel erzeugt werden, ZB immer mit einer Zahl oder Sonderzeichen an einer bestimmten Stelle, oder Auffälligkeiten bei der Groß-Kleinschreibung. Zwar ist jeder einzelne wohl etwas mehr oder weniger kreativ bei der "Generierung" seiner Passwörter, aber irgendwie will oder muss er sich das auch alles merken können. Da kann man bestimmt bei vielen wiederkehrende Besonderheiten aus einer Liste von Passwörtern herauslesen. Damit hätte man dann eine viel größere Chance auch Passwörter dieses Users zu knacken die gar nicht auf der Liste zu finden waren, und dieses könnten dann auch dienstlich oder für Internet-Geschäfte verwendete Passwörter sein, denn der User wird mit einiger Wahrscheinlichkeit auch dort Passwörter nach ähnlichen "Macken" generieren.

Und was die großen und kleinen Internet-Datenkraken mit solchen Daten anstellen wissen wir nicht wirklich, werden es auch wohl nie erfahren. Auf jeden Fall dürfte es außerhalb unseres Vorstellungsvermögens liegen. Vielleicht sammeln sie es nur ein um statistisch nachzuweisen das das Passwort 123456 wohl eines der häufigsten benutzten ist. vielleicht sammeln sie es auch nur erstmal ein und wissen selbst noch nicht was sie damit anfangen können. Zumindest dürfte klar sein, sie werden es nicht nutzen um sich selbst als User irgendwo mit unseren Passwörtern anzumelden.
Bei einigen kleineren Firmen muss man sich aber schon fragen wo sich denn nun wirklich die Geschäftsidee verbirgt wenn sie zB. Dienste wie zB das Synchronisieren von Passwörtern und Lesezeichen als Browserplugin kostenlos über das Internet anbieten. Alleine die Betriebskosten der Server, Administration, Entwicklungskosten, Büro usw. werden wohl 6 Stellige Beträge jährlich verschlingen, dazu kommen dann noch Lizenzen für Software die sind auch nicht gerade billig. Und sie müssen auch noch Werbung machen, damit überhaupt jemand ein solches Plugin im Internet findet und haben will. Was bitte verkaufen die, oder wo sind dort Einnahmen?

Nur mal so ein nicht ganz unwahrscheinliches Gedankenspiel, und dabei wird dann auch gleich noch ein Begriff beleuchtet der im Zusammenhang mit den Datenschutzbestimmungen immer wieder auftritt, "anonymisierte Verarbeitung/Speicherung/Weitergabe"
Eine Firma sammelt von ein paar Millionen Usern weltweit die gespeicherten Online Zugangsdaten aus dem Webbrowsern. Die Passwörter werden jetzt von den Usernamen, den URLs und IPs getrennt, also anonymisiert. Ein paar ganz grobe Eigenschaften bleiben aber weiterhin an den Passwörtern haften. zB welche Passwörter von ein und dem selben anonymen User stammen, welche Ländereinstellung der Browser hat, das Land das zur IP passt. und eventuell einiges mehr (Interessen oder sowas) was man zB aus den Lesezeichen im Browser ableiten könnte. Das wird jetzt verarbeitet. Heraus kommt dann für jedes Land ein Passwort-Wörterbuch erstellt aus der anonymen Auswertung der eingesammelten Passwörter. Sowas lässt dann schon mal verkaufen, und ist bestens geeignet um sehr gezielte Wörterbuchangriffe gegen irgendwelche Internet- oder Firmenserver durchzuführen. Eine Internetmafia aus dem kyrillischem Raum wird sich kaum vorstellen können wie Deutsche, Franzosen, Polen und Finnen gerne ihr Passwort zusammenbauen. Ein solches aus realen Passwörtern erstellte Wörterbuch hätte auf deutschen Servern auch bestimmt mehr Erfolg als eines erstellt aus den gesammelten Werken von Goethe und Schiller oder dem Duden.
Der, der sich regelmäßig mühsam und raffiniert seine Passwörter hochkompliziert erstellt und sie sich von dieser Firma einsammeln lässt, hat eventuell öfters bei solchen Passwortattacken Pech, da genau seine so schwer zu erraten Passwörter immer wieder genau in den verwendeten Wörterbüchern drin stehen. Das dieses aus anonymisierter Verarbeitung stammt, hilft diesem User hinterher aber wenig.