Простейший кейлоггер и безопасность в KeePass


    Для проверки безопасности вводимых паролей через KeePass я решил написать простейший кейлоггер с дополнительным захватом данных из буфера обмена. Весь код занял несколько строчек на FreePascal.

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

    Код кейлоггера помещен в цикл Timer, который обновляется каждые 10 ms. Используются модули: Windows и ClipBrd.

      //Сравниваем текущие состояние клавиш 
      for f := 0 to 255 do
        if a[f] <> GetAsyncKeyState(f) then
        begin
          //Реакция на отжатие клавиши
          if KeePass.Checked and (GetAsyncKeyState(f) = 0) then
             Memo1.Caption := Memo1.Caption + chr(f);
    
          //Реакция на нажатие клавиши
          if not KeePass.Checked and (GetAsyncKeyState(f) <> 0) then
             Memo1.Caption := Memo1.Caption + chr(f);
        end;
    
      //Сохраняем в массив текущее состояние клавиш
      for f := 0 to 255 do
        a[f] := GetAsyncKeyState(f);
    
      //Запись при изменении в буфере обмена
      if s <> Clipboard.AsText then
      begin
        s := Clipboard.AsText;
        Memo2.Caption := Memo2.Caption + s + ' ';
      end;
    

    Программа Simple Logger выглядит так:



    В окне -Keyboard- выводятся клавиши без учета регистра и языка ввода. Отображается символ, номер которого равен коду клавиши: chr(f). Можно доработать программу для корректного отображения всех символов, но это не требуется для настоящего исследования.

    В окно -Clipboard- происходит копирование при изменении содержимого буфера.

    Слабые места KeePass и их устранение


    1. Ввод основного пароля


    По умолчанию основной пароль в KeePass вводится без защищенного режима, поэтому он легко определяется в Simple Logger. Это самое критичное место в безопасности, т.к. здесь мы получаем доступ сразу ко всей базе паролей.

    Для устранения проблемы необходимо включить настройку Безопасности «Вводить основной пароль в защищенном режиме (подобно UAC в Windows Vista и выше)». Этот режим не позволяет логгеру получить доступ к клавиатуре. Кроме того, в нем невозможно сделать скриншот для определения расположения Ключевого файла.

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

    2. Буфер обмена


    Simple Logger реагирует на изменение буфера обмена с частотой 100 раз в секунду. Таким образом, попадание пароля в буфер и его последующее удаление через несколько секунд не дает защиты в данном случае.

    Для устранения этой проблемы можно использовать Автонабор.

    3. Автонабор


    Реакция на автонабор KeePass происходит на отжимание клавиши, а не нажатие. Это позволяет получить защиту от некоторых кейлоггеров. Для обхода этого в Simple Logger есть дополнительная настройка: «KeePass Auto-Type». Если она включена, то логгер срабатывает на отжимание клавиши.

    При автонаборе через KeePass: MyLoginName LongPassword123

    В Simple Logger появится запись:



    Simple Logger ни как не учитывает сочетания клавиш. Как видите, клавиша Shift отобразилась в виде спецсимвола (похожего на «+») и «?». Shift отпускается как до, так и после заглавной буквы. Тем не менее, этого достаточно, чтобы понять пароль.

    Для решения этой проблемы можно использовать настройку в KeePass «Двойное усложнение автонабора». В этом случае KeePass будет вводить часть пароля с клавиатуры, а часть через буфер обмена, перемешивая значения. Это позволяет обойти некоторые кейлоггеры.

    Simple Logger на Двойное усложнение автонабора отреагирует следующим образом:



    • Вставка из буфера обмена «Ctrl + V» отобразилась как «V◄?»;
    • Стрелка влево – «%» (код клавиши и символ #37);
    • Стрелка вправо – «'» (код клавиши и символ #39).

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

    От кейлоггера, который «заточен» под KeePass, могут помочь дополнительные средства защиты.

    4. Дополнительные средства защиты


    В некоторых программных комплексах есть такие возможности как:

    • Защита ввода данных с аппаратной клавиатуры;
    • Защищённый браузер.

    При включении защиты ввода данных с аппаратной клавиатуры Simple Logger уже не может получить данные при автонаборе KeePass, если они вводятся в браузере в форму для пароля. В этом случае слабым местом будет работа через буфер обмена.

    При использовании защищенного браузера получить доступ к буферу обмена и клавиатуре средствами Simple Logger не удалось. Кроме того, не было возможности делать скриншоты.

    Вместо заключения


    Посмотрев, как наши сотрудники используют KeePass, я обнаружил, что некоторые:

    • не используют UAC;
    • не используют автонабор, просто копируя пароли через буфер;
    • оставляют программу открытой, уходя с рабочего места;
    • используют настройки по умолчанию, не настраивая политику безопасности.

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

    Я тестировал последнюю версию KeePass 2.36 в среде Windows 8.1. Справедливости ради надо отметить, что данная проблема не является только проблемой KeePass. Есть множество других хранителей паролей с большей или меньшей степенью надежности, но это тема уже другого исследования.

    Ссылки


    1. Simple Logger на GitHub
      //Кому не страшно, в архиве «SimpleLogger_for_Win64.7z» можно найти exe-шник. Программа не позволяет вести полноценный кейлоггинг, предназначена для исследования безопасности и ознакомительных целей.
    2. Коды клавиш

    UPD (27.07.2017)

    Плагин для браузера


    Как заметил пользователь dartraiden, можно использовать модуль KeePassHttp совместно с дополнением для браузера PassIFox или ChromeIPass. Этот плагин (по заявлению разработчика) обеспечивает безопасное экспонирование записей KeePass через HTTP.

    Данная связка позволяет автоматически заполнять логин и пароль в браузере, когда KeePass разблокирован. Simple Logger ни как не реагирует в данном случае.

    Слабым местом ChromeIPass является генерация нового пароля, т.к. он копируется через буфер обмена и виден на экране. В этом случае, лучше генерировать новый пароль в самом KeePass.

    Создание нового мастер пароля


    Как заметил arthur_veber:
    При замене мастер пароля, а так же при создании нового, не применяется безопасный режим.

    В этом случае Simple Logger перехватывает вводимый в KeePass мастер пароль.

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



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

    Другие средства атаки


    Как первым заметил пользователь qw1, если система, на которой установлен KeePass, скомпрометирована, то могут использоваться друге средства атаки, помимо кейлоггера. В этом случае перечень действий по противодействию атаке будет зависеть от конкретной ситуации.

    К сожалению, невозможно осветить в одной статье все меры защиты, которые необходимы для хранения паролей.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 59
    • +11
      Довольно странные наблюдения.
      Если считать, что рабочая станция, на которой установлен KeePass, скомпрометирована, то простые защитные действия не помогут, т.к. кейлоггер — только одно направление атаки.

      Гораздо проще подменить исполняемый файл (благо, программа опенсорсная), добавив закладку, которая сливает мастер-пароль + базы в нужное место.
      • +1
        А смысл тогда вообще извращаться с автонабором? Не совсем понимаю
        • 0
          Есть же вирусы, собирающие данные без подмены исполняемого файла. Так что перестраховка лишней не бывает.
        • –1
          Я ранее думал о подобной возможности, но прошло много времени, и этот момент в статье упустил. Возможно, следует дополнить.

          Для защиты от такого рода атаки можно написать утилиту, которая контролирует:
          1. иконку запуска KeePass (положение в панели или рабочем столе и ссылку на файл);
          2. контрольную сумму файла KeePass;
          3. саму себя от изменений.

          Возможно, такая утилита или функция в антивирусе уже есть, нужно исследовать.
          • +4

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

            • 0
              Наверное, не существует защиты, которую нельзя было бы сломать.
              Однако, хорошую защиту ломать потребуется дольше.
              Потребуется ещё узнать, что такая утилита есть и найти способ обхода её самоконтроля.
              • +2
                Виртуалки. Например на хосте установлена только программа виртуализации, KeePass в виртуалке1, все остальные программы в виртуалке2. Посмотрите на Qubes OS. А ещё разрабатывается невзламываемое ядро SeL4, я не совсем понимаю что это, но кажется это невзламываемая система виртуализации.
                • 0
                  Кстати да — с учетом современных мощностей — иметь несколько VM (да хоть в том же VMware Player/VirtualBox) для разных нужд — суровая необходимость.

                  К Qubes OS тоже давно присматриваюсь… будет посвободнее — попробую на нее мигрировать.
                • 0
                  Нет смысла расчитывать на сценарий, когда взломщик at the other end of airtight hatch как частенько говорит Раймонд Чен.
                  Да, если защита хитра, это займет больше времени или помешает злоумышленнику. Но только если он пользуется чем-то универсальным, скажем, обычным логгером. Если он нацелен именно на пароли, хранимые этой утилитой, то и софт его будет заточен под ее хитрости.
          • +3
            Вместо автонабора можно использовать плагин для браузера, взаимодействующий с KeePass по защищённому каналу.

            http://keepass.info/plugins.html → раздел «Integration & Transfer».
            • 0

              А не выглядел ли бы более логично плагин, который реализует в браузере весть функционал KeePass, по типу того, как LastPass работает? Какие там потенциальные дыры по сравнению с существующим подходом?

              • 0
                Разделяй и властвуй, если реализовывать все в одном месте, достаточно компроментации только его и все пароли утекли.
              • 0
                Так пароли не только в браузер бывает необходимо вводить.
                • 0
                  Тогда комбинировать. Там, где можно без автоввода — там через плагин. Где нельзя без автоввода — стараться отказаться от паролей и перейти на ключи (например, доступ по SSH у меня настроен по ключу, который хранится там же, в базе KeePass и передаётся SSH-клиенту через KeeAgent).
              • +7
                Выше правильно написали, если хост система скомпрометированна, то поздно пить боржоми, уже всё потеряно.
                • +1
                  После компрометации идёт дальнейший сбор данных — чем он сложнее тем дольше. Чем больше времени требуется для дальнейшей компрометации — тем больше шансов что взлом будет обнаружен, и тем больше шансов провести блокировки, почистить следы, собрать логи, оповестить руководство и т.п.
                  Если придерживаться вашей логики — можно сидеть без антивируса, FW и под Enterprise админом. Все равно ведь, если скомпрометирована — то поздно пить боржоми.
                  • +1
                    Антивирус, fw, пользовательские учётки для того и нужны, что бы не допускать компрометации системы. А когда вы уже сдали админку, то творить на хосте можно всё что угодно.
                    • –1
                      Ок. Угнали твою админку.
                      Вариант 1: Ты не заморачиваешься по дальнейшей защите. Допустим удалённо отключили АВ, psexec«ом подсунули keylogger как у автора в статье — все пароли шустро перегнали себе.
                      Вариант 2: Ты заморочился. Шустро перегнать не удалось. По логам АВ и системы удалось понять, что ты скомпрометирован — выдернул шнурок, почистил ПК (если грубо выражаться).
                      Так вот в варианте 1 злоумышленник уже имеет все пароли от всех твоих систем, даже если ты его обнаружил и отрубил.
                      В варианте 2 он может не успеть.

                      Понятно, что это всё очень абстрактно. Но это так работает — чем больше ты заморачиваешься по ИБ, тем больше ты уменьшаешь вероятности разных событий.

                      Не зря всё начинает строиться с модели угроз и анализа рисков. Что по сути есть оценка вероятностей того или иного события ИБ, и уменьшение этих вероятностей.
                      • +1
                        Допустим удалённо отключили АВ, psexec«ом подсунули keylogger как у автора в статье — все пароли шустро перегнали себе.

                        В реальности будет keylogger настроенный именно на KeyPass со всеми хитростями. И пароли шустро перегонят к себе. Почему вы расчитываете на использование взломщиком исключительно примитивных инструментов широкого профиля?
                        • 0
                          «В реальности будет» — очень категорично. Я оперирую вероятностями. Да, выше я рассмотрел модель нарушителя именно с инструментами широкого профиля, который вкуривает, а что же тут происходит.
                          Вы предлагаете нарушителя, который уже провел разведку всех данных, до начала взлома.
                          Давайте уже тогда полные модели ситуации строить.
                          Я отталкивался от кейса, когда именно предложенное в статье автором может пригодиться.
                  • 0
                    То есть у обычного офисного сотрудника, который хранит пароль от своей личной почты в KeePass и к компьютеру которого есть полный доступ у админов — шансов нет? Остаётся только надежда на порядочность админов, либо не хранить пароли в KeePass.
                    • +2
                      Если точнее, не вводить личные пароли на рабочем компьютере. Либо надеяться на порядочность.
                  • 0
                    Здравствуйте. Благодарю за полезную статью.
                    Жду исследование безопасности lastpass, а также его сравнение с keypass. Благодарю.
                    • +6

                      Проприентарная программа, которая держит ваши пароли в своём облаке.
                      И её сервера уже взламывали, утащив пользовательские данные.

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

                          Это есть в плагинах. Для фаерфокса, например, это KeeFox.

                          • 0
                            А для Google Chrome. Поставил ChromeIPass (Или как-то так он пишется): не нашёл, как добавить базу (Видимо портабельный Keypass не поддерживает).
                            • 0
                              Для сопряжения c ChromeIPass в KeePass надо еще поставить плагин KeePassHttp.
                              • +1
                                Благодарю. Давно как-то об этом читал, но тогда не заинтересовался этим, поэтому забыл. А теперь перейду на Keypass.
                            • 0
                              Уже несколько лет пользуюсь связкой KeePass+KeeFox. Очень удобно. БД на шифрованом диске, ключ для входа в KeePass на флешке.
                      • 0
                        Код кейлоггера помещен в цикл Timer, который обновляется каждые 10 ms

                        Что с загрузкой процессора в этот момент?
                        Не сработает ли «проактивная» защита антивируса в данный момент?
                        • 0
                          1. Процессор (по данным диспетчера задач) во время работы кейлоггера на моём старом ПК загружен на 0%.
                          2. Программа не делает «вредных» действий и, возможно, поэтому антивирусы на нее пока не реагируют. См. подробнее отчет VirusTotal. Антивирус на моем ПК тоже молчал.
                          • 0
                            А разве VirusTotal не выполняет только сигнатурный анализ?
                            как он сможет поймать «вирусную» активность новой программы?
                            • 0

                              У VirusTotal есть виртуалки на которых запускают и анализируют исполняемые файлы. Причем их много и ваш файл будет много раз запускаться.


                              Файлы, которые сделали что-то очень подозрительные, попадают в базы антивирусников. Либо VirusTotal сотрудничает с антивирусными компаниями либо антивирусы на виртуалках сами отправляют подозрительные файлы.


                              Можете сами в этом убедится отправив на анализ программу, которая стучится к вам на сервак.

                        • 0
                          У меня несколько иной вопрос, далёкий от IT-составляющей. Автор пишет, что фирма у него небольшая. Зачем в небольшой фирме такие ухищрения с безопасностью? (Конечно, не в случае если фирма занимается секретными разработками).
                          Я работаю в действительно большой компании, конечно, у нас настроены все политики безопасности, но даже у нас айтишники не додумались до KeePass.
                          Кстати, погуглите — тут же на хабре/гиктаймс была статья, что корпоративные требования к сложности паролей приводят к обратному эффекту — сотрудники, не в силах запомнить неудобный пароль (который ещё и меняется по требованию раз в N месяцев), записывают его на бумажке, которую кладут под клавиатуру или клеят на монитор. Т.е., безопасность небезопасна.
                          • –1
                            У нас самые «круты» хранят пароли в Notepad. KeePass, конечно, удобнее, но разве их убедишь.
                            Аргумент у них такой (он озвучен выше в комментариях): если система скомпрометирована, то ничего не поможет.
                            • +1
                              Вот именно, что скомпрометирована только система, а не пароль. А пароль может применяться к следующей цепочке компрометации уже следующей системы. Взлом инфраструктуры происходит последовательно, и важно как можно сильнее усложнять эту последовательность. Как по мне это весомый аргумент.
                              Люди с рациональным мышлением должны это понимать.

                              P.S. В таком раскладе пароль на бумажке под клавиатурой — секьюрнее. Тут хотя бы физический доступ нужен, и знание что этот пароль именно под клавиатурой, и для чего он.
                            • 0

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

                              • 0
                                Есть еще такой нюанс — если каким либо образом, где либо была утечка не вашего пароля, а его Хеша (например NTLM), тогда для вскрытия самого пароля может потребоваться длительное время, в течении которого пароль уже может быть изменен.
                                Кроме того «хороший пароль» всё ещё прекрасно светится в mimikatz и WCЕ.
                                И есть шанс, что компрометация УЗ совпадёт с окончанием срока действия пароля — и злоумышленник временно потеряет полученный доступ, что может дать время на другие необходимые блокировки.
                              • 0
                                несколько иной вопрос, далёкий от IT-составляющей. Автор пишет, что фирма у него небольшая. Зачем в небольшой фирме такие ухищрения с безопасностью?

                                Это не ухищрения с безопасностью, это основы гигиены. Какая альтернатива-то? Запоминать десятки паролей? Надо быть или гением или пароли одинаковые. Записывать на бумажке/ноутпэде? Ну, так даже если не рассматривать вопртс безопасности, в кипассе это банально удобнее (при всей, кхм, "альтернативности" его интерфейса).


                                требования к сложности паролей приводят к обратному эффекту — сотрудники, не в силах запомнить неудобный пароль (который ещё и меняется по требованию раз в N месяцев), записывают его на бумажке, которую кладут под клавиатуру или клеят на монитор

                                И тут, внезапно(!), вы открываете для себя какой-нибудь из менеджеров паролей. Который как раз и решает проблемы бумажек. ;)

                                • –1
                                  Какая альтернатива-то? Запоминать десятки паролей? Надо быть или гением или пароли одинаковые.

                                  Можно формировать пароли по какому-то алгоритму, но разные, по контексту. взламываться они будут так же как и совершенно различные.
                                  • 0

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

                                    • 0
                                      Это уже зависит от сложности взлома одного отдельного пароля. Если он достаточно криптостойкий, то можно исключить эту угрозу, как маловероятную. Как всегда — баланс между двумя величинами. Удобством и безопасностью в данном случае.
                              • 0
                                Интересно было бы посмотреть такое же исследование для keepass запущеного под linux'ом. Надо полагать, что Mono, через которую оригинальный keepass работает на этих семействах ОС, только добавляет дыр?
                                • +5
                                  Очень странный пост.

                                  Во-первых, если хост скомпроментирован — там можно все что угодно сделать, даже Джигу сплясать.

                                  Во-вторых, использовать автозаполнение напрямую — это плохо само по себе. Если очень хочется — нужно использовать мост, например в виде плагина для браузера.

                                  В-третьих, если уж режим паранойи — используйте софтверную клавиатуру, и усиленные настройки KeePass и не использовать «послабления», добавляющие удобств, но снижающие безопасность.

                                  Ну и самое главное — все это очень слабо связано с уязвимостью самого KeePass — если Вы сами используете «облегчающие средства», понижаете свою безопасность — пенять нужно только на себя.
                                  • –9
                                    а можно просто использовать НОРМАЛЬНУЮ систему, которую устанешь компрометировать
                                    линукс или макос + шифрование диска + дополнительное шифрование хом директории
                                    хотел бы я посмотреть как кто-то без моего ведома установит кейлогер на такой компьютер

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

                                        Читал статью, думал о том как напишу коммент о том какая она плохая, но тут и так уже полно таких комментов.
                                        Но всё же добавлю — программы для шифрованного хранения паролей защищают ровно в двух случаях:
                                        1) у вас слили содержимое жёсткого диска (не важно как), но не смогли узнать мастер-пароль от базы паролей (с момента компрометации вы ни разу не работали за компом), вы об этом узнали и немедлено переставили систему на атакованном компе и на всякий случай сменили всё что было в базе
                                        2) вас пытается атаковать нуб, который сам плохо понимает что он делает — тогда любое, даже незначительное, препятствие, может ему помешать добиться желаемого
                                        Во всех остальных случаях это 100% тоже самое что хранить пароли в текстовом файле на рабочем столе.

                                        • +1

                                          Пароли могут быть не только на жёстком диске. Логично делать бэкап, и таскать с собой, например, на флешке. Флешку потерять — как нефиг делать. Думаю, никому, кто хоть немного задумывался, не придёт в голову хранить пароли в текстовом файле на флешке. Или, бывает, хранят на облачном хранилище. Оно тоже может быть скомпрометировано.

                                          • +1
                                            Пароли можно хранить где угодно, если они в хорошо зашифрованном контейнере. Последний можно монтировать на доверенных машинах, а уж внутри держать хоть менеджер паролей, хоть текстовый файл, что угодно. Доверенной машиной может быть даже старенький смартфон без подключения к сети, которому дали второй шанс.
                                        • +2
                                          Думаю что для 80% пользователей, KeyPass это не защита паролей, а удобство в работе с 58 системами у которых разные password policy и возможность не запоминать и придумывать эти пароли.

                                          В большинстве случаев, альтернатива это один пароль в этих 58 системах, что сильно хуже чем потенциальные проблемы с KeyPass когда хост и так скомпроментирован.

                                          Это не в критика статьи, а предположения по поводу типичного использования *Pass
                                          • 0
                                            Когда пришел читать, ожидал чего-то более захватывающего и более глубокого, однако, не нашел. Впрочем, все равно желаю автору успехов. Пишите еще. Статья для начала сойдет. :)
                                            • 0
                                              Стаья про иследование KeyPass — поэтому критика политик безопасности — нелогична.
                                              • +1
                                                Сделан update статьи с учетом замечаний от dartraiden, arthur_veber и qw1.

                                                Были протестированы:
                                                • модуль KeePassHttp совместно с дополнением для браузера ChromeIPass;
                                                • создание нового мастер пароля;
                                                • виртуальная экранная клавиатура.
                                                • 0
                                                  Интересно бы ещё про keepassx узнать на сколько всё плохо?
                                                  • 0
                                                    А форк KeePassXC?
                                                    https://keepassxc.org/
                                                    • +1
                                                      А по моему была утилита, которая пароли от keepass доставала из памяти, при открытом keepass
                                                      • 0
                                                        А кто-нибудь может прокомментировать уровень безопасности Bitdefender Wallet и его дополнение к Chrome?
                                                        • 0
                                                          Это вольная трактовка куска статьи из журнала Хакер

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.