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:

  1. Werden die Daten (Passwörter) tatsächlich mit dem dokumentierten Algorithmus verschlüsselt?
  2. 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
LP_Register

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.

LP_Save

 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.

LP_Enc

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==
Mit URL Encoding wird ein / zu %2F, ein + zu %2B und ein = zu %3D umgewandelt. Somit ergeben sich aus den Eingabewerten folgende verschlüsselte und URL codierte Werte:
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
Alle soeben verschlüsselten oder codierten Werte sind im untenstehenden Bild enthalten und nicht in Klartext sichtbar. Nur die URL könnte beim Abfangen dieser Werte enziffert werden, indem man den codierten Wert durch hex2string wieder sichtbar macht. Da diese Kommunikation allerdings über HTTPS geschieht, müsste ein Angreifer schon einen Man-in-the-Middle Angriff gegen uns ausführen, um an diese Werte zu gelangen. Während dem Verschlüsseln mit der Hilfspage wurde der Netzwerkverkehr aufgezeichnet, um sicherzustellen dass der JavaScript Code lokal auf der Arbeitsstation und nicht auf dem Server ausgeführt wird.

LP_Transfer

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.

LP_AutoSave

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 Email ** 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&ltmpl=default&ltmplcache=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:

LP_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:

LP_Login

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.

LP_PW-Change

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

  1. Einen Account bei LastPass erstellt
  2. Bei LastPass eingeloggt
  3. Login Informationen von einem fiktiven Account manuell in LastPass gespeichert
  4. Login Informationen von einem Gmail Account automatisch speichern lassen
  5. Logout und Re-Login gemacht.
  6. 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

  1. Sicherheitsanalyse von LastPass:
    http://blog.tinisles.com/2010/01/should-you-trust-lastpass-com/
  2. One Password Manager To Rule Them All: LastPass
    http://www.techedified.com/2011/02/one-password-manager-to-rule-them-all-lastpass-part-2/
  3. Sicherheitsanalyse durch einen LastPass User mit Hilfe von Joe Siegrist, CEO von LastPass:
    http://forums.lastpass.com/viewtopic.php?f=6&t=4389
  4. 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.