Sicherheit von LastPass
Einleitung
LastPass ist ein Passwort Safe, der absolute Vertraulichkeit verspricht, obwohl die Daten auf einem Server in der Cloud abgelegt werden. Der grosse Vorteil dieses Produkts liegt darin, dass auf allen Geräten eines Benutzers ohne manuelle Interaktionen stets die aktuellen Passwörter vorliegen.
Vor den Einsatz von LastPass sollten Antworten auf die folgenden Fragen gefunden werden:
- Werden die Daten (Passwörter) tatsächlich mit dem dokumentierten Algorithmus verschlüsselt?
- Werden die Daten tatsächlich auf den Devices verschlüsselt, ohne eine Backdoor seitens des Anbieters?
Das Vorgehen
Mit Fiddler, einem Web Debug Proxy, der mit MITM auch HTTPS decoden kann, soll der HTTP und HTTPS Verkehr zwischen der lokalen Arbeitstation und LastPass.com mitgeschnitten werden, um zu belegen, dass LastPass nicht in den Besitz des MasterPasswortes gelangt, und dass auch keine anderen zu speichernden Passwörter in Klartext an LastPass übermittelt werden.
Um sicherzustellen, dass LastPass nicht einen Masterschlüssel zur Entschlüsselung der Passwörter auf Server Seite hat, wird überprüft, ob der Hash, welcher zur Verschlüsselung und zum Download der PW Datenbank benutzt wird, nur aus den vom Benutzer gewählten Angaben generiert wird. Dazu benutzen wir http://www.xorbin.com/tools/sha256-hash-calculator, einen SHA256 Hash Rechner, um aus unserem Benutzernamen und dem gewählten Passwort den Hash für den Key und die ID unabhängig von LastPass zu generieren:
LastPass Key = sha256(username+pw) = sha256(pascalbaumgartner@gmail.com1234asdfg) = 65b543935bf50ac5b80cd816d6be5334fe1861a119ef98a24d03db66b9edad4c
LastPass ID = sha256(key+pw) = sha256(65b543935bf50ac5b80cd816d6be5334fe1861a119ef98a24d03db66b9edad4c 1234asdf) = 2e20f589cbcb878f359c8b10c8b296389992e7faf74feb732da3cd9ba73277c7
Neuer Account
Beim Registrieren eines neuen Accounts bei LastPass wird der Benutzername sowie der Passwort Hint im Klartext (und URL encoded; siehe http://www.w3schools.com/tags/ref_urlencode.asp) an LastPass geschickt, wie im oben abgebildeten Screenshot von Fiddler ersichtlich ist. Das vom Benutzer gewählte Passwort wird nicht an LastPass gesendet und auch der ID Hash, der übermittelt wird, besteht nur aus den vom Benutzer gewählten Credentials. Die Frage, ob LastPass noch einen MasterKey in den Hash einbaut, um die Benutzerpasswörter zu entschlüsseln, kann somit klar mit Nein beantwortet werden.
Neues Login speichern
Nachdem wir nun einen neuen Account bei LastPass angelegt haben, soll getestet werden in welcher Form die Daten an LastPass übermittelt werden, wenn wir einen neuen Webseiten Login in LastPass abspeichern.
Für diesen Test, benutzen wir Daten von einem fiktiven Login und tragen die Daten manuell in LastPass ein:
URL | www.nureintest.ch |
Name | Test |
Benutzername | GlueTest |
PW | 9876qwert |
Notiz | test |
Durch einen Klick auf OK bestätigen wir, dass wir die Daten abspeichern wollen. Anschliessend betrachten wir wieder den mitgeschnittenen Verkehr in Fiddler.
Aus dem mitgeschnittenen Verkehr ist klar ersichtlich, dass alle abgespeicherten Werte in verschleierter Form an LastPass übermittelt wurden. Zur Verifikation, dass die obfuskierten Werte mit den vom Benutzer gewählten Credentials verschlüsselt wurden, stellt LastPass eine simple Webseite zur Verfügung: https://lastpass.com/js/enc.php.
Wenn wir die vorher eingegebenen Werte mit dieser Hilfsseite verschlüsseln, erhalten wir folgende verschlüsselte Werte:
Plain | Verschlüsselt | |
Name | Test | ySL87KmK3+7PudW2e8co1Q== |
Benutzername | GlueTest | 4UAtjhaQxcOvQNN4mBlCbQ== |
PW | 9876qwert | /vU0N1ivrURmlLgsnVgMVQ== |
Notiz | test | T8GggNdJSqwpbSHrsBwVZg== |
Plain | Verschlüsselt und URL codiert | |
Name | Test | ySL87KmK3%2b7PudW2e8co1Q%3D%3D |
Benutzername | GlueTest | 4UAtjhaQxcOvQNN4mBlCbQ%3D%3D |
PW | 9876qwert | %2fvU0N1ivrURmlLgsnVgMVQ%3D%3D |
Notiz | test | T8GggNdJSqwpbSHrsBwVZg%3D%3D |
Das URL Feld ist Hex Encoded, zur Verifikation benutzen wir http://chxo.com/scripts/hex2string.php :
Plain | Hex encoded | |
URL | www.nureintest.ch | 7777772E6E757265696E746573742E6368 |
Automatisches Speichern von Logins
Nachdem wir nun einen Login für eine Webseite manuell erstellt und die Sicherheit in Bezug auf Verschlüsselung der Daten überprüft haben, wollen wir auch den Prozess der automatischen Speicherung eines Logins verifizieren.
Dazu öffnen wir mail.google.com und loggen uns mit dem Usernamen und dem persönlichen Passwort, welche hier nicht bekannt gegeben werden, in den Account ein. Anschliessend sagen wir LastPass das wir den Login abspeichern wollen und sehen uns danach wieder den von Fiddler mitgeschnittenen Verkehr an.
Der verschlüsselte String in der Variablen “name” ergibt nach dem Decodieren und Entschlüsseln google.com.
Der Hex codierte Datenstring data sieht nach Decodierung wie folgt aus:
0 | ltmpl | ze1U1YjxvKz4teICVTj5zg%3D%3D | hidden |
0 | ltmplcache | 1zgMb8i%2FoDbI%2FGa2w5B6iQ%3D%3D | hidden |
0 | pstMsg | 9L2UK%2FHdgpbVJGJYLV9yBg%3D%3D | hidden |
0 | dnConn | GHOU2d8ZntXCCS1bIOUasqmS74%2BqXCd3Unh4kWrWKw0%3D | hidden |
0 | continue | 147H4ITKYI1pkewua5jqxeJ3oGRIcUrxH515z98oLKI%3D | hidden |
0 | service | 8n0F2s%2BPnr6X6IXK3lyeaA%3D%3D | hidden |
0 | rm | MbStx0JEuaBxqdbNKTv2Tw%3D%3D | hidden |
0 | dsh | xSOv%2BQRQqRAylpJL9PBPdM5T85UNrPqG3bSEXM%2FYiMw%3D | hidden |
0 | ltmpl | ze1U1YjxvKz4teICVTj5zg%3D%3D | hidden |
0 | scc | 9L2UK%2FHdgpbVJGJYLV9yBg%3D%3D | hidden |
0 | timeStmp | hidden | |
0 | secTok | hidden | |
0 | GALX | Cx3C%2FfPLAfkuKFfcrR5EzA%3D%3D | hidden |
0 | ** removed ** | text | |
0 | Passwd | ** removed ** | password |
0 | PersistentCookie | yes-0 | checkbox |
0 | rmShown | 9L2UK%2FHdgpbVJGJYLV9yBg%3D%3D | hidden |
0 | signIn | Anmelden | submit |
0 | asts | hidden | |
0 | action | https%3A%2F%2Fwww.google.com%2Faccounts%2FServiceLoginAuth | action |
0 | method | post | method |
Der in der Variable ref gespeicherte Wert ergibt decodiert:
https://www.google.com/accounts/ServiceLogin? service=mail&passive=true&rm=false&continue=http%3A%2F%2Fmail.google.com%2Fmail%2F %3Fui%3Dhtml%26zy%3Dl&bsv=llya694le36z&scc=1<mpl=default<mplcache=2&from=login
Requesthash enthält den verschlüsselten Login Namen für den LastPass Account. All dieser Verkehr ging über HTTPS, obwohl die Daten bereits verschlüsselt waren.
Logout/Login
Als nächsten Test melden wir uns nun noch einmal von LastPass ab und gleich wieder an, und verifizieren noch einmal den Verkehr der dabei erzeugt wird:
Logout:
Im Bild oben wird der Verkehr über HTTPS dargestellt, der bei der Abmeldung von LastPass an LastPass.com übermittelt wird. Der Verkehr enthält weder das MasterPasswort noch sonst irgendwelche abgespeicherten Passwörter. Es werden also keine sensiblen Informationen an LastPass gesendet.
Nun melden wir uns erneut bei LastPass an:
Als ersten Wert im mitgeschnittenen Verkehr sehen wir unseren Loginnamen in Klartext, der auch schon bei der Registrierung an LastPass geschickt wurde. Der nächste Wert der für uns interessant ist ist der hash 2e20f589cbcb878f359c8b10c8b296389992e7faf74feb732da3cd9ba73277c7, unsere
LastPass ID. Im encrpyted_username uOEgLn7jfoNmNrlqEqr4c2I0qMhU9kZjKZI7LU%2Bsk6s%3D ist wiederum unser URL codierter und verschlüsselter Username versteckt. Über die UUID, die Universally Unique Identifier, kann bei Bedarf der Zugriff für mobile Geräte zugelassen oder gesperrt werden.
Masterpasswort ändern
Als abschliessenden Test werden wir nun noch das MasterPasswort ändern und gleichzeitig wiederum den Verkehr aufzeichen und anschliessend analysieren.
Wie im Screenshot von Fiddler zu sehen ist, wird der gesamte Verkehr wieder codiert und verschlüsselt versendet. Das Verhalten ist gleich wie beim Erstellen des Accounts. Der Loginname und der Passwort Hint werden in Klartext versandt, die restlichen Werte sind alle verschlüsselt und codiert.
Zusammenfassung
Um die Sicherheit unserer in LastPass gespeicherten Logins (Username/Passwort) zu verifizieren haben wir
- Einen Account bei LastPass erstellt
- Bei LastPass eingeloggt
- Login Informationen von einem fiktiven Account manuell in LastPass gespeichert
- Login Informationen von einem Gmail Account automatisch speichern lassen
- Logout und Re-Login gemacht.
- Master-Passwort gewechselt
Während all diesen Vorgängen wurde der Webverkehr mit Fiddler, einem Web Debug Proxy mit Man- in-the-Middle Funktion für HTTPS, aufgezeichnet und auf unverschlüsselte Passwörter untersucht.
Die Analyse des Verkehr hat aufgezeigt, dass unser MasterPasswort nie an LastPass übermittelt wird. Anstelle von unserem Passwort wird die ID und unsere Email Adresse an LastPass übermittelt. Aufgrund der ID werden wir auf der Serverseite dem richtigen Datensafe, der unsere PW Datenbank enthält, zugeordnet. Da die ID ein sha256 Hash von unserem Benutzernamen und unseres MasterPasswortes ist, ist das Übermitteln dieser Daten absolut kein Sicherheitsrisiko. Die Verschlüsselung vor dem Senden von Daten sowie das Entschlüsseln nach dem Erhalt der Daten von LastPass geschieht lokal auf unserer Arbeitstation. Gespeicherte Logins von Webseiten oder andere Login Informationen werden verschlüsselt und Hex codiert über HTTPS an LastPass übermittelt
Im Weiteren wurde verifiziert dass kein MasterKey in die Hash Generation einfliesst, welcher es LastPass ermöglichen könnte unsere Daten allenfalls zu kompromitieren.
Die Schlussfolgerung von [2] “One Password Manager To Rule Them All: LastPass” , ebenfalls einem Test zur Sicherheit von LastPass, lautet:
“I am unaware of any other service that simultaneously addresses all of these security concerns, while being so convenient and easy to use. The product has been showcased and thoroughly reviewed by some of the most influential and trusted names in the technology and security fields, including PC Mag, Lifehacker and Steve Gibson. It offers both free and extremely affordable premium ($12/year for access to LastPass mobile applications, enhanced multifactor authentication, no ads and priority support) account types, and is easy enough for the average web user to pick up and start using, while offering the advanced features that would make even the most paranoid geek happy.”
Referenzen
- Sicherheitsanalyse von LastPass:
http://blog.tinisles.com/2010/01/should-you-trust-lastpass-com/ - One Password Manager To Rule Them All: LastPass
http://www.techedified.com/2011/02/one-password-manager-to-rule-them-all-lastpass-part-2/ - Sicherheitsanalyse durch einen LastPass User mit Hilfe von Joe Siegrist, CEO von LastPass:
http://forums.lastpass.com/viewtopic.php?f=6&t=4389 - The Easy, Any-Browser, Any-OS Password Solution
http://lifehacker.com/#!5483119/the-easy-any+browser-any+os-password-solution
Abschlussbemerkungen
Die Untersuchung wurde im August 2011 durchgeführt.