После прочтения этой статьи мне захотелось провести исследование другого менеджера паролей на наличие похожих уязвимостей.

В комментариях к статье пользователем Dark_Angel был задан вопрос:
А что скажите насчет SafeInCloud?


Исследование проводилось над бесплатной Windows версией SafeInCloud v.19.0.2

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

В отличии от 1Password, SafeInCloud хранит все ваши пароли в открытом виде даже в заблокированном состоянии(после первой разблокировки).

Для получения пароля от базы данных достаточно просто прочитать память приложения. Обфускация данных полностью отсутствует! Мастер-пароль(и все остальные пароли и записи) не перезаписывается никогда после первой удачной разблокировки базы данных, даже если пользователь заблокирует её.

Ваши пароли могут утечь в случаях:

+ Отправка отчёта об ошибке в каком-либо ПО. Очень часто разработчики делают дампы памяти всех приложений в целях отладки.
+ Если Вы пользуетесь компьютером не только Вы.
+ При получении физического доступа к компьютеру злоумышленников.
+ При запуске вредоносного ПО.
+ Что-нибудь ещё…

Приложение под Windows написано на .net, что значительно упрощает анализ исходного кода.



Приложение написано на .net

После успешной расшифровки базы данных (XDatabase) расшифрованная база и мастер-пароль сохраняются как поля класса в Singleton instanc'е класса DatabaseModel.



Установка полей с базой данных и мастер-паролем от неё

Все записи и пароли хранятся в памяти в открытом виде даже после блокировки приложения пользователем. Мастер-пароль лежит в открытом виде рядом.



Пароль хранится в свойстве Password, _database — поле класса XDatabase, содержащего расшифрованную базу данных.


База данных в формете XML.

При повторной разблокировке приложение выполняет элементарную проверку:



Если пароль, введенный пользователем, совпал с сохраненным в памяти — разблокировка выполнена.

Для автоматизации извлечения мастер-пароля была написана простая утилита SafeInCloudExtractor.
Утилита выполняет извлечение мастер-пароля и локальный путь к файлу базы данных.

А каким менеджером пароля пользуетесь Вы? Напишите в комментариях!

Комментарии (25)


  1. zhnikita
    22.03.2019 23:23

    Keepassxc на linux.


    1. mikevmk
      23.03.2019 12:14

      Много лет использую KeePassX, увидев в этом обсуждении KeePassXC, решил его попробовать. Выглядит неплохо и интеграция с браузером облегчает жизнь. Единственное, что немного раздражает — в окошке KeePassX можно табуляцией переключаться между списком групп и списком паролей и вообще между полями, что позволяло вообще не пользоваться мышкой (учитывая, что я и вызываю это окошко с клавиатуры, используя функционал scratchpad из i3 wm, это было очень удобно), а в KeePassXC приходится использовать мышь


  1. linux_id
    23.03.2019 01:31

    KeePass


  1. AgentSIB
    23.03.2019 01:58

    pass. Шифрует сертификатом gpg, расшифровывает по одному, xdotool сразу для вставки куда необходимо. Синхронизация через git. Удобная гиковская штука.


    1. AgentSIB
      23.03.2019 20:23

      Блин, неужели никто реально не использует pass (https://www.passwordstore.org/).

      Ранее юзал KeePassX, на линухе оказался глюченым. Так же в плане поиска нужного пароля неудобен
      LastPass — хранение критически важных паролей в чужом облаке — для меня не вариант. К тому же он условно бесплатен. Если нужно приложение на телефон — нужна подписка. Нативный клиент плохой, если юзать не для веб — вообще не удобен.

      Pass — это парольный менеджер изначально написанный на bash. Каждый файл пароля хранится в отдельно зашифрованном gpg сертификатом файле. Хранить можно не только пароль (первая строчка файла), но и любую дополнительную информацию в текстовом виде.
      Работает на Linux, MacOS, Win. Android и iOS тоже есть.

      Преимущества:

      1. Синхронизация через git репозиторий (свой скрытый или внутри компании). (pass git pull, pass git push)
      2. Возможность шифровать пароли для нескольких человек (общие папки). Каждый пароль шифруется для нескольких gpg сертификатов. Есть возможность перешифровать добавив или удалив его ИД.
      3. Пароли расшифровываются не группой, а по одному
      4. Есть gui клиенты для различных операционных систем
      5. Есть плагины для тех же TOTP, git credetials, update (обновление паролей), pwned для проверки утечки и многие другие
      6. Есть плагины для браузеров для автозаполнения логинов и паролей
      7. Есть приложения для мобильных (все бесплатно)

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

      Из минусов — нет автозаполнений форм (карточные данные и тп, но я думаю мерж реквесты в репозиторий экстеншена приветсвуются). Но я без этого живу нормально (pass ls my_cards/sbrf/visa)

      Еще автор pass так же является автором WireGuard но это уже другая история.


  1. demoded
    23.03.2019 05:32
    +1

    LastPass бесплатный… чет даже страшно уже :)


    1. sheknitrtch
      23.03.2019 14:39

      Посмотреть в backend код LastPass-а не представляется возможным. Но у меня складывается ощущение, что там хватает говнокода:

      • Backend написан на PHP
      • Web сервисы возвращают XML, причём форматирование поломано — табуляции вперемешку с проблемами
      • Расширение иногда перестаёт работать в приватной вкладке Firefox
      • Постоянно отваливается синхронизация логина между Firefox и Opera
      • На Android отваливается синхронизация логина между Lastpass и Authenticator

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


  1. Maslukhin
    23.03.2019 06:08

    Тоже LastPass. Можно ли посмотреть его?


    1. AndreyKu
      23.03.2019 12:28

      Тоже самое. Пароли в памяти хранятся в открытом виде, даже после того как вы вышли (разлогинились из приложения). И они об этом знают, потому что репорт на багбаунти приняли как duplicated


  1. FeNUMe
    23.03.2019 07:20

    KeePassXC, хоть и жутко неудобный после LastPass.


    1. linux_id
      23.03.2019 07:36

      а в чем неудобство?


      1. sheknitrtch
        23.03.2019 14:27

        В KeePass можно хранить только пароли. В то время как в LastPass и файлы (сканы документов, закрытые ключи, пароли от Wifi, данные платёжных карт, простые заметки, прочее). Конечно в KeePass можно хранить вложения и свои кастомные поля, такие как номер карты, CVV, пр. Но LastPass делает это удобнее.

        Но для меня главное преимущество LastPass, 1Password и Buttercup в том, что для всех платформ софт пишет один разработчик и функциональность одинаковая на iOS, Android, Browser, Windows, Linux. В случае с KeePass декстопное приложение написано на C++/Qt (или на JS как в случае с KeeWeb), расширение для браузеров писали другие люди, мобильные приложения — третьи. Поэтому выглядит всё по разному и функциональность отличается (где-то есть TOTP, где-то нет, какие-то расширения умеют с desktop-клиентом синхронизироваться, другие нет).

        Очень надеюсь, что Buttercup по функциональности догонят Lastpass или 1Password. Но пока они далеки от идеала.


        1. sheknitrtch
          23.03.2019 14:42

          Забыл добавить про многофакторную аутентификацию через Lastpass Authenticator, TOTP, Toopher, Duo Security, Transakt, Grid, YubiKey, отпечаток пальца, Sesame или Salesforce Authenticator. А также возможность делиться отдельными записями или целыми папками с другими пользователями.


  1. Pro-invader
    23.03.2019 08:14

    Одно только хранение пароля в String -это большой косяк. Правильно хранить в массиве [].


    1. hex_none Автор
      23.03.2019 09:56

      Лучше бы его вообще не хранить. Они базу всё равно уже расшифровали. Как вариант для более быстрой разблокировки — использовать обфускацию. Как в 1Password. Однако и при таком подходе извлечение пароля возможно. Если пользлватель нажал "Заблокировать", то почему бы действительно не почистить полностью память?


      1. Pro-invader
        23.03.2019 16:55

        Я не знаю, поэтому спрашиваю, разве можно в C# почистить память? В Java массив можно занулить, а String так и будет в памяти висеть.


        1. hex_none Автор
          23.03.2019 17:12

          Действительно, в c# строки не изменяемые. Как вариант, использовать SecureString, конструируя объект, вызывая метод appendChar, а после использования уничтожить, вызвав Dispose().


  1. Aleho
    23.03.2019 08:25

    Пользуюсь KeePass Password Safe уже много лет.
    Не так давно они БигБаунти запустили по KeePass 2.x.
    Серьезный недостаток — отсутствие официального клиента для мобильных устройств, и соответственно синхронизации между ними.
    Приходится использовать на телефоне неофициальный, только название разработчика «Flush Software, LLC» смущает.


  1. Aelliari
    23.03.2019 11:33

    Bitwarden, серверная часть на собственной железке, благо бесплатная версия это допускает. Но он не имеет адекватного клиента под декстоп, только под Андроид (что для iOS — не видел за неимением) и браузерные расширения.


  1. RealEgo
    23.03.2019 14:42

    Начинал, наверное как и все, с KeePass, а как началось бурное развитие мобилок и пароли понадобились не только на десктопе перешел на 1password. Удобство оказалось важнее безопасности. К тому же не доверяю критически важных данных менеджерам, в большинстве случаев есть второй фактор и данные банковской карты храню только для одной, специально для интернет покупок. Если не ошибаюсь bobuk в каком-то из выпусков Радио-Т Bitwarden хвалил, поставил жене, вроде нормально, давно хотел её от LastPass отучить.


  1. Sing303
    23.03.2019 14:43

    Ещё бы Enpass проверить. Много кто недавно на него перешёл с KeePass


    1. bzz11g
      24.03.2019 07:44

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


  1. periskop
    23.03.2019 16:13

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


    Ну и так для истории: https://defcon.ru/penetration-testing/3353/


  1. abrwalk
    23.03.2019 22:17

    Все уже забыли о Password Safe? Тем не менее он до сих пор живой, и старина Шнайер на этой волне проверок заметил что его балалайка пароли в плейн тексте не хранит www.schneier.com/blog/archives/2019/02/on_the_security_1.html


  1. thebestzorro
    24.03.2019 00:22

    Недавно смотрел на разные менеджеры паролей.
    После сравнений и проб остановился на bitwarden. Пока доволен удобством и безопасностью.