Пароли – наше все!

Давным давно, аж 5 лет назад, я уже задавался темой хранения паролей. Тогда я выбрал платный 1Password и до недавнего времени был полностью доволен.

За 5 лет изменилось довольно многое и к примеру тот 1Password уже не купить: нынче всё по подписке, за каждый чих требуют денег. Да и требования к хранению паролей лично у меня изменились. Немного, но значительно.

Во-первых, я больше не хочу верить. Все маркетинговые слова про “улучшенную защиту”, “aes-256”, “PBKDF2” и “SHA256” остаются словами до тех пор, пока не будет доказательств. Нет, в реальности это может быть и так, но проверить нечем.

Во-вторых, я не хочу больше отдавать контроль над моими паролями кому-то еще. Со старой версией 1Password все хорошо: она позволяет хранить пароли в iCloud, Dropbox или любом каталоге по выбору. Нынешняя, как и остальные, предлагают хранить пароли непонятно где и не понятно как защищенными. Специально сейчас прошелся по сайтам 1Password, Dashline, Lastpass, Roboform и прочим, все тот же набор маркетингового буллшита и никаких доказательств. А возможность доступа к паролям из браузера вообще считают за достоинство …

И наконец, я хочу халявы. Не то, что бы денег жалко, но садиться на иглу “платите нам $10 в месяц” не охота

По своей старой привычке “а оно надо?” я посмотрел профиль использования своих данных. Чаще всего мне надо использовать различные ключи к облачным сервисам. Вот эти вот все GCP_PROJECT, AWS_ACCESS_KEY_ID, pem файлы для ssh и так далее. А вот пароли как пароли у меня используются довольно редко. Ну раз, ну два в день. Лицензии и прочие подобные ключи я вообще использую раз в месяц, когда переустанавливаю все в рамках DRP.

Плюс я регулярно перемещаюсь между машинами, виртуалками и датацентрами, поэтому очень не охота оставить где-нибудь тот же pem фаил, дающий доступ к инфраструктуре с кучей очень дорогих данных.

Довольно специфичные условия, не так ли? Но нет предела совершенству!

Первым делом я пошел смотреть на KeePass. За прошедшие 5 лет он никуда не делся, все такой же монстр с кучей свистелок и перделок. И все так же хочет кучу всего, потому что и может практически все. Можно, не если честно, не вставляет.

Затем поиск вывел меня на довольно новый менеджер паролей Bitwarden. В нем все, как я люблю: у него открытый код и абсолютно прозрачная модель монетизации. За $10 в год можно получить абсолютно все, что необходимо от менеджера паролей в настоящее время. Более того, можно поставить свой собственный сервер и все клиенты будут синхронизироваться с ним, а не с сервером компании.

Попутно обнаружилась совершенно шикарная вещь: у битвардена есть консольный клиент. Выглядит это так (пароли все равно поменял)

[kiltum@mbook ~]$ bw unlock
? Master password: [hidden]
Your vault is now unlocked!

To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
$ export BW_SESSION="WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB=="
> $env:BW_SESSION="WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB=="

You can also pass the session key to any command with the `--session` option. ex:
$ bw list items --session WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB==

[kiltum@mbook ~]$ bw list items --session WgOBidzNy5wybOFgJ8t9MB3gHN2ZQww1ux0ovrbmaA0N21xRS0rrwlBofi8sp6bKe1+HmYaybCgIQnZxGqzkWB==
[{"object":"item","id":"de683640-15ca-4dc0-98ec-a95400951086","organizationId":null,"folderId":null,"type":1,"name":"kiltum.livejournal.com","notes":null,"favorite":false,"login":{"uris":[{"match":null,"uri":"https://kiltum.livejournal.com/"}],"username":"kiltum","password":"passwordwasdeleted","totp":null,"passwordRevisionDate":null},"revisionDate":"2018-09-07T09:02:43.6466667Z"},{"object":"item","id":"161cff1e-eeaf-4091-8c0f-a954009ee2ab","organizationId":null,"folderId":null,"type":1,"name":"www.facebook.com","notes":null,"favorite":false,"login":{"uris":[{"match":null,"uri":"https://www.facebook.com/"}],"username":"multik@multik.org","password":"herewaspassword","totp":null,"passwordRevisionDate":null},"revisionDate":"2018-09-07T09:38:29.0466667Z"}]

Как видно, на выход идет обычный json, из которого можно выдрать необходимые поля любым подручным средством.

Но после небольшой дискуссии в #unix.ru мне было предложено посмотреть на Pass. Поначалу я попробовал и весь расплевался. Этот менеджер паролей … ну в общем, он совершенно перпендикулярен всем остальным. В нем все не так и не туда. И вообще он какой-то кривой. Да, кривой и точка!

Но так как больше других менеджеров не находилось, решил оставить и попользоваться всеми тремя менеджерами (1password, bitwarden и pass) одновременно. Создавать новые пароли, ключи и токены, перемещаться между машинами и вообще пытаться вести обычную жизнь DevOps/SRE/SysAdmin/CTO/чебурашки.

Практически сразу выяснилось, что pass это просто развесистый bash скрипт, который в своей работе использует gpg и git. В теории это означает, что pass будет работать на всех платформах где есть эти программы. В реальности я его попробовал только под OS X и Linux

Что в итоге я получил?

Во-первых, мне больше не надо верить. Для шифрования используется gpg из дистрибутива с моим личным ключем. Каждая запись – это зашифрованный gpg файл. При желании можно взять и достать вручную.

$ gpg aws_prod.gpg 
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: encrypted with 4096-bit RSA key, ID B2698444DC05C50F, created 2017-09-11
      "Viacheslav Kaloshin "

Во-вторых, использование git на своем сервере снимает все вопросы про “кто еще получает доступ до моих данных”. Как и полную историю всех изменений с самого начала. Никаких “30 последних изменений”. Хранится всё.

$ git log|head -5
commit 8ab2f5fae8bf9a8b48dc97df908343c25a1745c1
Author: Viacheslav Kaloshin 
Date:   Mon Sep 24 15:41:37 2018 +0300

    Rename cs/ed_aws_qa to cs/ed/aws_qa.

И наконец, эта опенсорс, халява и возможность поправить и сделать по-своему.

Описывать, как устанавливать pass смысла нет: это и так прекрасно расписано на официальном сайте. Более того, на новых машинах можно просто склонировать репозиторий в ~/.password-store и на этом вся установка будет завершена.

И наконец, то, что мне больше всего понравилось.

Безопасное переключение между окружениями. В данном случае AWS, но этот же механизм работает с GCE, Azure и любым другим софтом, хранящим ключи в переменных окружения.

$ pass show cs/ed/aws_qa
AWS_ACCESS_KEY_ID=BKIAIELZCTWSJ7FECP4Z
...
$ pass show cs/ed/aws_prod 
AWS_ACCESS_KEY_ID=BKIAIN56RKIABTBHJXTW
...
$ export  `pass show cs/ed/aws_qa`
$ set|grep AWS_ACC
AWS_ACCESS_KEY_ID=BKIAIELZCTWSJ7FECP4Z
$ export  `pass show cs/ed/aws_qa`
$ set|grep AWS_ACC
AWS_ACCESS_KEY_ID=BKIAIN56RKIABTBHJXTW

Замена конструкции ssh -i key.pem user@hostname

$ pass show cs/qapem
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAw4AMstljzZRxvqNIO/ZsXnkCMm8O+FXuuTGqzII2ysH5fz8Q3pLZmKVXfz+7
....
eNK7UAHXBLGciXfFjlYlvZaLci93wtY4reWCgmsCmNx98WBMZUmF0R1VCjU/DYleIpMtNBY=
-----END RSA PRIVATE KEY-----
$ pass show cs/qapem| ssh-add -
Identity added: (stdin) ((stdin))
$ ssh user@hostname

В чем главный плюс? На машине ничего не остается в открытом виде. И стоит закрыть сессию, как все доступы магическим образом исчезнут. Никаких больше “оберегайте свой .aws от чужих глаз и прочее”.

В чем главный минус? На каждое изменение надо звать pass git push и не забывать при переходе на другую машину делать pass git pull. Но для любого современного разработчика это совершенно привычные действия, поэтому и минус-то не большой.

Бекапы – фигня. Восстановление – вот это да!

Пару дней назад все и везде прожужжали мантры про всемирный день бекапа и про то, что делать бекапы – это хорошо. Но почему-то никто нигде не жужжит про то, что бекапы сами по себе, без восстановления – фигня полная. Ну лежит где-то резервная копия, место занимает. И что вы с ней будете делать, если что-то случится? А как до неё доберетесь? А ключи и пароли откуда возьмете? И для любой системы таких вопросов можно задать сотни.

Будь готов!

Именно поэтому я изобрел лично для себя свой личный DIRT (Disaster Recovery Test). Где-то раз в месяц (или чаще, под настроение) я тупо сношу все с ноута и ставлю заново операционку и накатываю назад рабочее окружение. Первые разы длились все выходные и без потерь не обходилось. Зато сейчас мне требуется примерно час, что бы вернуться в строй. Около трех часов – что бы вернуть 100% окружения назад. Быстрее не получается, ибо ограничен скоростью ноутбука и интернета. Максимальные потери – с начала рабочего дня. Все, что мне необходимо на данный момент – это ноутбук и быстрый интернет.

Итак, что необходимо для получения аналогичного?

Во-первых, компьютер с нормальной и привычной вам инфраструктурой. Представьте себя в командировке в далеком городе. У вас сгорает синим пламенем ваш любимый ноутбук. Что делать? Лучшее решение: тупо идем в ближайший компьютерный магазин и покупаем новый ноутбук. Попытка ремонта или привоза “трупика” домой – все это потери времени, а его обычно всегда не хватает. Мой выбор на данный момент – MacBook. Просто, удобно и unix внутри.

Во-вторых, приучите себя использовать систему хранения паролей. Все пароли, ключи, сертификаты или конфигурационные файлы должны быть там. Все, что необходимо вам помнить – это как добраться до этой системы и мастер-пароль. В свое время я выбрал 1Password и ни капельки об этом не пожалел за 5 лет.

В-третьих, приучите себя использовать системы контроля версий. SVN, Git, Mercurial – что угодно, но в этой системе должны лежать все документы и файлы, которые представляют для вас хоть какую-то ценность. Да, поначалу будет тяжело, особенно если вы не представитель ИТшной области. Очень ограниченным паллиативом будет покупка аккаунта в дропбоксе или в другом хранилище файлов. Там тоже появляются возможности про сохранение версий документов и их “отката” при необходимости.

Так же очень полезно завести на каком-нибудь облачном хранилище файлов каталог, в который вы будете складывать дистрибутивы программ. Да, сейчас есть много магазинов приложений (например, встроенный в Apple или Steam. Что-то аналогичное есть у Windows), который после ввода заветного логина и пароля дадут поставить вам все назад. Но до сих пор есть куча приложений, авторы которых по каким-то причинам не могут или не хотят публиковаться в таких магазинах.

И когда вам потребуется поставить такое приложение, то легко можно столкнуться со следующими проблемами:

– Нужной версии уже нет. А доступная версия требует покупки. Да, можно списаться с автором или поискать в интернете, но это потеря времени.
– Для скачивания версии необходимо зарегистрироваться/залогиниться на сайте, потом они пришлют ссылку, по которой скачается “качальщик”, который и начнет скачивать нужное.
– Дистрибутив большой или лежит на медленных серверах. Пока скачаешь …

Наличие своего, персонального архива нивелирует эти проблемы практически одним махом.

И вот только после этого можно поставить какую-нибудь систему резервного копирования (Acronis Backup очень даже, не смотря на мелкие глюки). И натравить её на всё вот это скопом для создания последней “линии обороны”.

Ну и регулярно проводить восстановления накопленного непосильным трудом. Повторюсь, в первые разы вы обязательно что-нибудь потеряете или забудете и это нормально. Еще раз – абсолютно нормально. Это для того и надо, что бы когда это случилось внезапно, у вас был четкий план, что и когда делать.

Вот как у меня происходило это в последний и предпоследний раз (я пролил кофе на ноутбук и просто захотелось)

1. Сносим диск и ставим операционку с нуля.
2. Как только она поставилась, идем в родной магазин приложений и ставим хранилку паролей. Затем клиент для “облачных облаков”.
3. Запускаем все это. Доступ до паролей получен, основные файлы (типа инсталлятора vpn) пошли заливаться на ноутбук.
4. Запускаем установку необходимого из Apple store. Всякие slack, things и прочее.
5. По мере установки всего я уже могу начинать пользоваться ноутбуком. Да, почта не вся засинхронизировалась или индексатор не прошел по всем файлам, но я уже могу что-то делать.
6. Восстанавливаем из системы контроля версий последние проекты и разворачиваем файлы конфигурации.
7. По мере необходимости ставим тот софт, который не требуется “прямо сейчас”, но нужен регулярно.
8. Оцениваем потери и думаем над шагами, которые надо сделать, что бы это не повторилось.

Все. Первый раз сложно, в 10й – просто. Главное тут – регулярность.

Храни пароль!

Летом по интернету прокатилась волна новостей, как с того или иного ресурса стащили базу паролей. В принципе мне все эти новости довольно параллельны: я на тех ресурсах не бывал, да и есть у меня большой опыт именно в хранении паролей и другой “нежной” информации …

Но через некоторое время я раз за разом возвращался к этой теме. Ладно мои пароли, которые я генерирую по известным мне правилам и которые согласно всем канонам считаются достаточно трудно ломаемыми. Но что делать с паролями, которые вообще-то не мои, но мне приходится их использовать, не имея возможности сменить?

Одновременно опять возникло желание сделать что-нибудь этакое, что бы при моих переездах с машины на машину и с операционки на операционку весь этот шлейф паролей оставался бы управляемым …

Решение в лоб

Первое, что приходит в голову, это использовать обычный бумажный блокнотик. Э-э-э .. в общем, объяснять минусы не буду. Да и мы с компьютерами работаем, а не с бумажными архивами …

Затем мысль обычно доходит до создания какое-либо места для хранения паролей, которое с одной стороны будет неизменным при моих переездах, а с другой стороны, не будет ограничивать меня в моих извращениях.

Сразу на ум приходят два решения: папка в почтовом ящике и какое-нибудь облачное хранилище файлов.

Папка в почте хороша тем, что до почты-то в нынешнее время можно добраться несколькими способами: и через почтовый клиент и через браузер. Но как хранилище нежной информации оно ни о чем: до писем может добраться  администратор почтового сервера и любой, кто доберется до вашего компьютера. Более того, почту обожают индексировать  всякие роботы и нет никаких гарантий, что эти роботы, встретив ваши пароли, оставят их  вашими.

Использовать файлы в облаках тоже идея не на пять баллов, но гораздо лучше предыдущей. А если почесать затылок и начать использовать какую-нибудь кросс-платформенную систему шифрования вроде truecrypt, то данный вариант становится очень даже привлекательным.

Как вариант можно использовать evernote или catch или .. в общем, всем всё понятно.

Но … Опять эти “НО” …

Человек чудовищно ленивая скотина. Сначала ему будет лень постоянно открывать-закрывать контейнер или записывать в почту. Потом он плюнет на все и снова поставит галочку “запоминать пароли в почте”, а затем в очередной раз он обновится/сменит браузер и все начнется сначала.

Я тоже ленивая скотина. 

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

– максимальная кросс-платформенность. Решение должно позволить мне получить доступ до моих паролей на OS X, Windows, Linux и Android. IPhone хорошо, но совершенно не критично. Остальные платформы мне совершенно не критичны, ибо устройств под их управлением у меня нет.

– максимальное удобство при настройках по умолчанию. То есть загрузили, прошли через инсталлятор и вспоминаем о решении только когда возникает необходимость  зайти в какую-нибудь тьмутаракань.

– максимальное умение выживать при переездах. В идеале решению должно быть абсолютно все равно, где вводят пароли, а где их используют.

– ну и решение должно иметь минимальное число проблем в моей конфигурации (macbook air, samsung galaxy s, windows 7 дома и linux, windows7 и os x на работе)

На возражения в духе “ну как можно отдать свое самое сокровенное какой-то программе” я давно махнул рукой: то, что можно достать в результате взлома этих баз, мне принесет только моральные расстройства. А вот удобства они добавляют много.

Гугл всемогущий даст мне ответ

Пошел я в гугл искать на предмет “best password manager” и “лучший менеджер паролей”. Число страниц меня удивило …

В общем, на мой внутренний ринг выходят RoboForm, 1Password, LastPass и KeePass. Другие отсеялись еще на этапе просмотра сайтов. К примеру если я не понимаю, за счет чего зарабатывает проект, то я автоматом подозреваю его автора в самых нехороших намерениях.

Каждой программе был предоставлен снапшот виртуалки с windows7, где у меня стоит зоопарк из ie, firefox и safari. Затем борцы со всем арсеналом перемещались на аналогичные виртуалки с linux и os x, и только после отсутствия ошибок получали возможноcть показать себя на реальном ноутбуке с os x и на моем samsung galaxy s (рутованный на 2.3.6 и без каких-то особенных извращений)

На всякий случай выдам предупреждение: все ошибки и глюки мои, я вообще первый раз эти программы увидел и вообще, у вас может сложиться совершенно другое впечатление.

Шышел-мышел … в общем, первый вышел.

RoboForm. Еще во времена выпуска печатной версии “компьютерры” я читал много хвалебных отзывов о этой программе.  Голубицкий только что шоколадом онную не мазал. Ну и гугл при выдаче результатов не обделял данную программу вниманием.

Первый звонок прозвенел на этапе обустройства: для доступа в личный кабинет используется один пароль, а для открытия парольной базы – другой. И зная первый пароль, можно легко удалить аккаунт вместе с парольной базой. Неаккуратненько.

Второй звонок был чисто субъективный. RoboForm выглядит этаким монстром даже по меркам windows: куча менюшек, настроек и кнопочек. И вся эта куча этак неряшливо собрана под одним заголовком … Но на вкус и цвет все фломастеры разные, поэтому не стал обращать внимание: вдруг привыкну.

Но третий звонок стал завершающим для RoboForm: его сайт не принимал установленный из под Internet Explorer мастер-пароль, когда я его вводил из под Firefox под Linux. Поначалу я не понял и не поверил: ну взял и ошибся или на русском языке остался. Раз проверил, два. Менял пароль и вводил его с удвоенным вниманием … Не принимает.

Ну, такой менеджер паролей мне не нужен.

Даешь опенсурс!

Расстроенный предидущим обстоятельством, решил метнуться в стан открытых решений. KeePass.

Простой заход на страницу закачки подтверждает, что данное решение пользуется популярностью. Я попытался придумать вариант, который невозможно реализовать, но не смог: после первого же запроса “хренотень keepass howto” гугл тут же выдавал пару-тройку вполне внятных сайтов.

Но эта же открытость встала мне боком: что бы заставить работать это решение, потребовалось довольно много телодвижений. Может, мой опыт уже начал играть против меня, но мне уже стало как-то некомфортно … А зачем себя мучать?

В общем, я решил посмотреть на другие.

LastPass или “точно последний раз?”

Самый первый подход чуть было не завершился крахом: я забыл мастер-пароль к базе буквально через 5 минут после его ввода. А восстановить его нельзя.

Найти как пересоздать аккаунт удалось только с помощью гугла. Что, неужели такая неуверенность?

После установки LastPass бабахнул бальзамом на мои раны: после установки он единственный предложил забрать все пароли из браузеров и потом удалить их.

Поход по сайтам тоже не выявил никаких проблем за исключением категорического стилевого непопадания сообщений. Или говоря другими словами, он выглядит совершенно чужеродно. В принципе это хорошо, потому что будет очень тяжело пропустить или спутать LastPass с чем-то другим.

LastPass легко прошел все поставленные мной барьеры и без проблем обосновался на ноутбуке и смартфоне.

Последний 1Password

Скажу честно, на 1Password я глядел со скептицизмом. Во-первых, мне заранее было известно об отсутствии клиента под Linux и “только чтением” под Android. Во-вторых, я не понимал какой дурак будет платить 49 баксов за версию только под одну платформу, когда тот же LastPass предлагает тот же функционал за бакс в месяц для всех платформ, а если забыть про мобильные, то и вовсе бесплатно …

Расширенный функционал по хранению логинов-паролей ко всяким ftp и database серверам мне не нужен. Хранить лицензии можно и в записках. Всякие кредитки и прочее … В общем, совершенно ненужное мне.

Но оставлю, да. Должна же быть какая-нибудь конкуренция LastPass …

Жизнь – она многогранна …

Было довольно интересно наблюдать, как LastPass и 1Password наперебой предлагают мне сохранить или ввести пароли. Я оценивал установки по умолчанию, удобство управления и прочие характеристики, которые каждый примеряет на себя.

И по прошествии полутора недель (триал у LastPass составляет 14 дней, а мне еще хотелось запаса) ситуация оказалась перевернутой с ног на голову. Но давайте по-порядку.

1) Получив доступ к базе 1Password (скажем, сперев флешку), я могу легко узнать имена файлов, которые хранятся в базе. Нет, сами файлы вроде зашифрованы, но имена может прочитать любой.

2) LastPass при экспорте файлов из секретного хранилища (надо же их когда-нибудь использовать) зачем-то меняет им имена на хешеподобные. Совершенно убийственная вещь, особенно когда файл не один … .

3) LastPass предполагает что у вас всегда есть доступ к сети. Никаких флешек и прочих извращений. Облако и все хранится в нем. 1Password более демократичный: либо укажи сам где, либо я положу базу в DropBox.

4) Почему-то LastPass не предлагает никаких горячих клавиш для заполнения полей. 1Password в данном случае выглядит гораздо гуманней: Cmd- и он либо вводит все сам, либо предлагает выбрать из имеющихся.  Мне, как имеющему 5 логинов на nic.ru, такое поведение очень по душе.

5) Настройки по-умолчанию в 1Password более “секурные”. 12 символов в пароле вместо 8, программа раньше закрывает базу и тому подобное. В LastPass  все можно сделать аналогично, но кто-нибудь делает это?

6) LastPass переводили на русский автоматическим переводчиком: “взломать локальный логин” на титульном экране андроида оказалось в оригинале “force local login” …

7) 1Password есть в AppStore, а LastPass нет. Для маковладельцев это довольно весомый аргумент.

8) Доступ до базы 1Password можно получить практически на любой машине без установки чего-нибудь и в оффлайне!

И в качестве финального выстрела: LastPass не смогла обновить базу на моем Samsung Galaxy S. Просто сообщала, что нет соединения с сервером. Хотя браузер браузерил и facebook фэйсбучил. И такое “нет соединения” меня ну очень напрягло.  1Password рядом после ввода мастер-пароля сообщил, что он обнаружил обновления, забрал их и показал мне мою базу.

В общем, мои $49 уходит авторам 1Password. Я оказался одним из тех дураков, которых раньше не понимал.