Pull to refresh

Что не скрывает LastPass?

Information Security *
Думаю, все знают, что такое Lastpass. Многие доверили ему хранение всех своих логинов и паролей. И как не доверить, ведь, разработчики декларируют, что вся информация защищена и шифруется на стороне клиентов. Помятуя о недавней истории я решил разобрать плагин LastPass на кусочки и понять, что действительно защищено, а что нет и продолжить свой цикл статей про маленькие проблемы в крупных проектах.

Сначала мне все очень нравилось. LastPass создает хеш вашего логина и пароля, он и является ключом к AES алгоритму:

KEY = SHA256(EMAIL + PASSWORD)

Для авторизации, сервис использует двойной хеш, именно он отправляется на сервер и является проверочным ключом при авторизации:

AUTH_HASH = SHA256(KEY+PASSWORD)

Действительно, названия групп, учетных записей и данные передаются в зашифрованном виде, везде используется HTTPS. Но, как оказалось, есть вещи, которые отправляются на сервер без шифрования ключом пользователя. Например, это полный текущий URL сайта, на котором вы вводите пароль в LastPass в первый раз.

Вот запрос, который отправляет плагин на сервер (некоторые значения полей изменены):

POST /deliver_and_add.php HTTP/1.1
Host: lastpass.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 5045
Cookie: lang=en_US; sessonly=0; PHPSESSID=#;
X-LastPass: 1.74.0
X-wxsessid: #
Pragma: no-cache
Cache-Control: no-cache

sentms=#&data=#&ref=68747470733a2f2f7777772e676f6f676c652e636f6d2f6163636f756e74732f536572766963654c6f67696e3f736572766963653d6d61696c26706173736976653d7472756526726d3d66616c736526636f6e74696e75653d68747470732533412532462532466d61696c2e676f6f676c652e636f6d2532466d61696c253246253346756925334468746d6c2532367a792533446c266273763d23367a2673733d31267363633d31266c746d706c3d64656661756c74266c746d706c63616368653d3226686c3d656e2666726f6d3d6c6f676f7574&charset=UTF-8&iid=&data=#&name=#&localupdate=1&extjs=1&iid=&requid=#&wxsessid=#&sessonly=0&requesthash=#&requestsrc=ff&hasplugin=1.74.0

Как мы видим, поле ref содержит строчку:

https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=#6z&ss=1&scc=1&ltmpl=default&ltmplcache=2&hl=en&from=logout

Таким образом, совершенно случайно, на сервер LastPass в открытом виде передается информация о том, на каких сайтах вы зарегистрированы. А еще, иногда, в этих строчках бывают логины, пароли и другая чувствительная информация (на некоторых, не очень правильных ресурсах).

Также плагин не шифрует весь блок с данными форм при отправке, а шифрует только поля, оставляя имена полей открытыми, причем, при шифровании, он не добавляет соль в значения полей. Таким образом, путем нехитрых вычислений на сервере, можно будет понять на каких сайтах у вас одинаковые логины и пароли. Кстати, action формы тоже передается на сервер LastPass в открытом виде:

sentms=#&data=#REMOVED#&ref=687474703a2f2f6861627261686162722e72752f6c6f67696e2f&charset=UTF-8

Вот так выглядит информация в поле data, для логина на habrahabr.ru и именно в таком виде все передается на сервер LastPass:

0 undefined fieldset
0 act SuQP2miDnWPHD202CxqCLQ%3D%3D hidden
0 redirect_url 5RXHPEEbEv6DlWMaKxOdQZAnmxFM8k9gLCeYz10sh5I%3D hidden
0 login DEJ#REMOVED#D%3D text
0 password vT5yo#REMOVED#tkg%3D%3D password
0 captcha text
0 %D0%92%D0%BE%D0%B9%D1%82%D0%B8 submit
0 action http%3A%2F%2Fhabrahabr.ru%2Fajax%2Fauth%2F action
0 method post method

Итак, что же станет известно злоумышленнику, если он получил доступ к шифрованным данным, но не знает ваш пароль?
  1. Ваш почтовый адрес в LastPass
  2. Список всех сайтов, на которых у вас есть регистрация
  3. Список всех сайтов, на которых у вас одинаковые логины и/или пароли.
  4. Полные ссылки на формы на всех сайтах
  5. Полные ссылки из атрибута action форм на всех сайтах
Поэтому, будьте внимательны, когда добавляете очередной пароль в Lastpass. Обязательно посмотрите в строчку адреса, действительно ли вы хотите передать эту информацию на чужой сервер в открытом виде.

P.S. Я все думал, зачем сервису эта информация, ведь ничего не стоило зашифровать URL и все поля целиком, но тут на днях прочитал Privacy Statement на сайте, и мне все сразу стало ясно:

LastPass may collect aggregated statistics about the behavior of visitors to its websites. For instance, LastPass may monitor the most popular website account on the LastPass.com site. LastPass may display this information publicly or provide it to others. In addition, LastPass may use your behavioral data and other data you provide to LastPass to customize advertisements on its site to its users. In this way we try to keep the majority of our services free. However, LastPass does not disclose personally-identifying information other than as described below.

Как я понимаю, информация о том, на каких сайтах вы зарегистрированы может быть использована для составления вашего рекламного профиля. И это LastPass тоже не скрывает.
Tags: lastpassinformation securityresearchисследование
Hubs: Information Security
Total votes 102: ↑99 and ↓3 +96
Comments 82
Comments Comments 82

Popular right now