Для проверки безопасности вводимых паролей через 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. Есть множество других хранителей паролей с большей или меньшей степенью надежности, но это тема уже другого исследования.
Ссылки
- Simple Logger на GitHub — github.com/masterdakgit/SimpleLogger
//Кому не страшно, в архиве «SimpleLogger_for_Win64.7z» можно найти exe-шник. Программа не позволяет вести полноценный кейлоггинг, предназначена для исследования безопасности и ознакомительных целей. - Коды клавиш — filesd.net/kibor/codekeys.php
Автор: masterdak