Online Passwörter

Aus Linupedia.org
Version vom 6. September 2015, 16:02 Uhr von Robi (Diskussion | Beiträge) (Freigabe mit Empfehlung es auch mal zu lesen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Linux-Club-Konqui.png
Dieser Artikel wurde als lesenswert eingestuft. Weitere solche Artikel sind hier zu finden.
Linux-Club-Konqui.png


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 auch 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 Masterpasswörtern.


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.
In der Praxis werden dazu fertige Passwort-Hash-Funktionen verwendet, hier soll mal mit einfachen Bash Kommandos die prinzipielle Funktion demonstriert werden. 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 abgespeichert 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 der Passwort Überprüfung, muss dieser SALT auch jeweils mit dem entsprechendem Passwort zusammen gespeichert werden.
Auch dazu ein vereinfachtes mit einfachen Befehlen nachgestelltes Beispiel zum spielen. SALT wird hierbei mit der Random-Funktion 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 so etwas 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 ohne Kenntnis des PEPPER 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.

Wie sicher sind die Passwörter auf dem Server

Damit können wir eigentlich sicher sein, dass unser Passwörter im Internet auf den Servern gut verschlüsselt gespeichert sind, ja besser, eigentlich sind sie gar nicht dort gespeichert, sondern nur der Hash davon, und aus dem Hash lässt sich mit mathematischen oder anderen Funktionen kein Passwort errechnen, man müsste schon verschiedene/viele/unzählige Passwörter ausprobieren, um zufällig das richtige zu erwischen.
Aber die Speicherung ist nicht alles. Bevor ein Passworthash erstellt werden kann, muss das Passwort erst einmal irgendwie in den Server hinein kommen und ist dort bis zur Verhashung auch irgendwo wirklich in Form von Bits und Bytes da. Es ist also möglich es in dieser Zeit aus dem Speicher zu lesen, bzw. noch besser es mit Tracing- oder Debug-Methoden abzufangen und in Logs zu schreiben. Gehen wir mal davon aus, die Serverbetreiber sind alles zuverlässige und sicherheitsbewusste Leute, dann werden sie solche Indiskretionen auf ihren Servern nicht dulden, und auch mit genügend Sicherheitsmaßnahmen dafür sorgen, dass niemand anders es auf ihren Servern heimlich machen kann.
Im Gegensatz zu anderen Verschlüsselten Daten die auf den Servern abgelegt sein können, sind also die reinen Passwörter verhältnismäßig gut geschützt. Zwar hört man hin und wieder mal das bei Hackerangriffen auch Passwörter im großen Stiel dort abgezapft worden sind, doch beim näheren Hinschauen würde man feststellen es handelt sich meist nur um die Datenbank mit den gespeicherten Passworthash.



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 Kryptographie 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 ausstellen 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 erst mal 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 erst mal 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 so etwas 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 gleichzeitig dann eine eigene 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.

Wie sicher sind die Passworte beim Transport

Zusammenfassend können wir also sagen, solange wir nur mit HTML arbeiten, sind die Passwörter komplett ungeschützt. Bei HTTPS haben wir wesentlich mehr Sicherheit, aber auch da gibt es durchaus von unserer Seite ein paar Dinge die wir nicht leichtsinnig übergehen sollten. Die eigentliche Sicherheit im Netz ist damit nur die "relative" Anonymität inmitten und zwischen Milliarden von Datenpaketen die dort ständig kursieren. Angriffe dort sind kompliziert da irgendwo direkter Zugriff auf die Hardware von großen Netzen benötigt wird, oder Netzwerk Protokolle angegriffen werden müssen. Wir wollen mal davon aus gehen, dass Mitarbeiter die irgendwo Administrativ an großen Netzwerknoten arbeiten auch ausreichend Sicherheitstechnisch geschult sind, dass sie unbeabsichtig und zufällig in Logdateien eingefangene Informationen nicht nach außen tragen oder verkaufen. Größeres Risiko ist dort zu erwarten, wo die Datendichte nicht all zuhoch und schon spezifisch auf entweder EUCH oder dem Server ausgefiltert ist, also zB unmittelbar vor eurem Zielserver oder unmittelbar hinter eurem Router bis zum ersten größerem Netzwerkknoten. Aber leider gibt es staatlich geförderte und allumfassende Überwachung mitten im Herzen der Netze und außerdem wissen wir auch nicht immer was unsere Internetprovider so alles machen.



Gespeicherten Passwörter im Firefox

Wenn sich Firefox ( natürlich jeder andere Browser auch) ein Passwort für eine Anmeldung im Internet gemerkt hat, dann muss/kann es von Firefox beim nächsten Anmelden an dieser Seite automatisch richig in das Anmeldeformular eingetragen werden. 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 beim Firefox 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). Dort 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 ein JSON-Dokument und 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 Initialisierungsvektor (eine Art Voreinstellung des Verschlüsselungs-Algorithmus die für jedes Passwort immer 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 irgendwo im auf einer Seite 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. Denn wenn ein Masterpasswort gesetzt ist, kann Firefox von sich aus den richtigen Schlüssel gar nicht finden, dazu braucht er das Masterpasswort, und dieses ist nicht gespeichert, es muss also über Tastatur jedes mal neu eingegeben werden

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 jetzt 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 143 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 "Initialisierungsvektor" 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 mit dem das Passwort entschlüsselt werden kann. Zum Entschlüsseln bräuchten wird dann neben diesem Key noch den Initialisierungsvektor aus dem jeweiligem verschlüsselten Passwort, und das Verschlüsselte Passwort selbst.
Ganz schöner Schlüsselbund, schon beim ungefähren Beschreiben des Vorganges wird einem schwindelig vor lauter Keys ;-) .


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 Passwörter 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 an Programmierarbeit dazu zu leisten.
Das einzige was auf Anhieb mal nicht zu finden war, der Nachweis das man all diese Programme und Tools die mehr oder weniger schwierig zu installieren sind, 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, (Zur Abschreckung findet ihr das Script auf der Diskussionsseite dieses Artikels) Es ist damit für jeden, und damit muss man die 98 jährige Oma die ein wenig Computer- und 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 einiges was wir insbesondere aus dem Internet nachinstallieren, 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, das sie die Möglichkeit hatten auf den Key im Firefox zuzugreifen, nachdem wir nach dem Start von Firefox das Masterpasswort eingegeben haben. 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 User-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 und und.... 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 sich dann schon verkaufen, und ist bestens geeignet um sehr gezielte Wörterbuchangriffe gegen irgendwelche Internet- oder Firmenserver durchzuführen. Eine Internetmafia aus dem kyrillischem Sprachraum wird sich kaum vorstellen können wie Deutsche, Franzosen, Polen oder 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 hoch-kompliziert erstellt und erdenkt, und sich diese Passwörter 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 für die Angriffe verwendeten Wörterbüchern drin stehen. Das dieses aus anonymisierter Verarbeitung stammt, hilft diesem User hinterher aber wenig.



Was sollten wir daraus lernen

Unsere Passwörter auf den Internetservern sind sicher, eigentlich liegen sie dort gar nicht herum. Wenn ein solcher Server dennoch mal angegriffen wird und dort Passwörter abgefangen werden, hat die Sicherheit auf diesem Server komplett versagt, das können wir nicht beeinflussen.
Vorsicht jedoch, dort wo es möglich ist sich seine eigenen Passwörter per Mail zuschicken zu lassen. Die Administration und Sicherheit auf einem solchem Server ist wahrscheinlich keinen Pfifferling wert.

Wenn wir Passwörter oder anderes über Http Verbindungen versenden, können sie unterwegs abgefangen werden. Die Wahrscheinlichkeit das dieses bewusst ausgenutzt und ausgewertet wird, ist nicht sonderlich hoch aber permanent vorhanden. Spätestens sobald ihr oder die von euch genutzten Internetdienste durch einen dummen Zufall mal ins Fadenkreuz von Geheimdiensten und Sicherheitsbehörden rutschen ist bei Http der letzte Mantel der Verschwiegenheit eurer Internetprovider gefallen. Dennoch sollten wir darauf achten. Http nur dort wo sowie alles offen ist, und wo keine wichtigen, schützenswerten oder persönlichen Daten abgelegt sind. Sobald ihr (außer einer Email-Adresse) aufgefordert werdet irgend etwas ein- oder anzugeben, dass ihr nicht auch auf eurem T-Shirt geschrieben herumtragen würdet, ist dringend Https angesagt. Viele Dienste bieten sowohl http als auch https an, hier darauf achten, wenn ihr etwas eingebt, zB das Passwort, dass diese Seite https ist.
Bei Https ist noch zu bedenken und zu beachten, nicht alle Warnungen die euer Browser bringt einfach ignorieren. Das kann leicht dazu führen, dass euch vorsätzlich falsche Zertifikate unter geschoben werden. Mit bösartigen falschen Zertifikaten fühlt ihr euch zwar mit https immer noch sicher, und bekommt eventuell überhaupt nicht mit, dass ihr schon lange mitten auf dem Leim der Internet-Mafia sitzt.

Am gefährlichsten leben die Passwörter auf unseren eigenen Rechnern. Zwar werden sie vom Browser gut verschlüsselt abgelegt, doch das nützt nichts denn alles was man zum entschlüsseln braucht liegt gleich daneben. Und Programme, Tools und Anleitungen wie das geht, gibt es zu Hauf. Das einzige was die Passwörter schützt ist das Masterpasswort, und dieses hat wahrscheinlich nur ein ganz geringer Anteil der User überhaupt gesetzt. Selbst ein Masterpasswort "123" das einer Attake keine 10 Sekunden standhalten würde, ist dabei zig-Millionenmal sicherer als gar keines. Wer wird sich schon die Mühe machen überhaupt ein Masterpasswort anzugreifen, wenn Millionenmal nur einen Klick weiter die Passwörter ohne Masterpasswort mitten auf dem Präsentierteller rumliegen.

Wir sollten bewusst nicht unbedingt jedes Passwort im Browser speichern, auch wenn es bequem ist. Es gibt neben der Möglichkeit einfach NICHT immer auf "Speichern" zu drücken, auch die Möglichkeit das speichern der Passwörter prinzipiell in den Einstellungen auszuschalten und den "Privaten Modus", dort werden auch keine Passwörter gespeichert.

Bei dem was wir auf Rechner installieren, sollten wir wenigstens hin und wieder mal die Nutzungs- und Datenschutzrichtlinien aufmerksam und kritisch durchlesen, die wir dabei ganz bewusst akzeptieren müssen. Mag sein, die sind umfangreich, englisch und kompliziert geschrieben, mag sein kein normaler Mensch kann sowas jemals wirklich verstehen, aber der Wille das zu verstehen ist 100 Mal sicherer als dort gar nicht rein zu schauen. Wir sollten bedenken, wir erlauben mit diesen Bedingungen hier "Fremden" zT. ziemlich gravierende Dinge und wissen es gar nicht, weil das was wir akzeptieren uns überhaupt nicht angeschaut haben. Rein rechtlich gesehen, haben wir damit später wahrscheinlich keinerlei Handhabe mehr dagegen vorzugehen. Eventuell (zugegeben sehr selten) hilft manchmal sogar dieses einfach abzulehnen wenn es einen solchen Button gibt, dann kommt die Aufforderung zwar das nächste mal beim Start des Programms wieder, aber in der Zwischenzeit werden vom Programm keine Sicherheitsrelevanten Dinge eingesammelt und "Nach-Hause" geschickt.

Bei der Erstellung unserer Passwörter sollten wir durchaus einen Unterschied zwischen Wichtig, Privat, Allgemein, Dienstlich, Onlineshop, Bank usw machen. Dabei ist nicht nur gemeint nicht die gleichen Passwörter überall zu verwenden, sondern auch die Passwörter für jeden Bereich nach anderen Richtlinien zu erstellen. Gelegentlich mal im Browser nachschauen, was jetzt wirklich alles für Passwörter gespeichert sind, und dann eventuell auch mal das eine oder andere dort aus der Liste wieder löschen, ist bestimmt auch keine schlechte Idee.
Ob es praktisch ist überall wirklich "Random-Passwörter" zu verwenden, die wir zwingend immer entweder aufschreiben oder irgendwo im Browser oder in einem Passwort-Safe aufbewahren müssen? Sowas ist für einen Menschen extrem schwierig zu merken. Wenn man bedenkt wie sicher ein Spickzettel ist, meist ist er weg wenn man ihn braucht, und in welcher Hosentasche er verschwunden ist wird sich meist niemals klären. Wie sicher der Browser ist, haben wir hier eindeutig im Artikel bewiesen. Passwort-Safe ist aber schließlich und letztendlich auch nur ein Stück Software. Das einzige das ein Computer so schnell nicht knacken kann, ist das was nur bei uns im Kopf steht. Und was nur bei uns im Kopf gespeichert ist, kann man aber vielleicht auch schon mit nur einer "Bratwurst" als Belohnung wieder herauspressen, kommt ganz auf den Druck und die Argumente an, die ein anderer dafür einsetzt.

Einfach mal drüber nachdenken, das ist schon Aller Anfang von Sicherheit.