Бесплатный менеджер паролей KeePass 2: инструкция по эффективному использованию. Часть 1

Как настроить KeePass для входа на сайты. Автоматическое определение адреса. Эквивалентные домены. Нестандартная авторизация, автонабор отдельных полей. Облачная синхронизация между устройствами. Резервное копирование базы

Речь пойдет об использовании KeePass, в основном, на Windows. При этом сама программа кросплатформенная, а также имеет ряд форков, из которых уделим внимание KeePass2Android. Чтобы база была общей на разных устройствах, обеспечим облачную синхронизацию.

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

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

Обычному пользователю™ достаточно прочитать пункт Основы, не раскрывая в нем спойлеры.

Достоинства и недостатки предлагаемой конфигурации

Предложенный вариант использования KeePass'а — лишь один из многих. Его качества:

  • портативность;
  • защищенный ввод мастер-пароля;
  • усложнение автонабора для защиты от килоггеров;
  • резервное копирование без плагинов;
  • облачная синхронизация без плагинов;
  • нестандартный автонабор, в т.ч.:
    • двухстраничная авторизация,
    • набор произвольного поля,
    • набор с задержкой и/или без усложнения (плагин TCATO_Placeholder);
  • интеграция в браузеры, не требующая их настройки (плагин WebAutoType);
  • глобальный автонабор в нестандартных случаях, например, для ввода одного пароля (плагин AutoTypeShow);
  • поддержка эквивалентных доменов (опционально — с использованием регулярных выражений);
  • меню выбора браузера (в т.ч. портативного или браузера в песочнице);
  • запуск из KeePass'а приложений с одновременным автонабором (монтирование томов VeraCrypt, соединение по AmmyyAdmin и др.);
  • способность KeePass'а работать с правами администратора (понижаются права открываемых им браузеров и других приложений);
  • работа с несколькими базами:
    • совместно используемые пароли,
    • автооткрытие нескольких баз;
  • быстрая блокировка PIN-кодом;
  • возможность открывать базу без ввода пароля;
  • возможность поддерживать совместимость с версией KeePass 1.x (на случай отсутствия .NET).

Недостатки:

  • медленный вызов глобального автонабора (при использовании плагина WebAutoType и/или поддержки эквивалентных доменов);
  • посимвольный автонабор вместо мгновенной вставки учетных данных;
  • нет подхвата данных, введенных в браузере;
  • необходимость создавать записи по шаблонам;
  • необходимость выполнять XML-замену при импорте данных из другой базы.

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

Основы

Подготовка программы

Распакуем в какую-нибудь пустую папку архив с portable-вариантом KeePass версии 2.x, туда же — архив с русским переводом и архив KeePass_Settings.zip (пароль KeePass). Добавим плагины Favicon Downloader, TCATO Placeholder, WebAutoType и AutoTypeShow — просто поместим файлы с расширением .plgx в подпапку Plugins. В отдельное от программы место распакуем архив just_a_photo.zip.

KeePass 2.x требует .NET Framework 2 или выше, а плагин WebAutoType — .NET Framework 4. В отсутствие .NET Framework 4 можно использовать плагин WebAutoType версии 3.x (работает медленно) или отказаться от этого плагина.

Если используются жесткие средства защиты, наподобие Comodo Internet Security, понадобится добавить файлы BackUp.js, GlobalAutoTypeHelper.js, RunActivate.js и OpenWith.hta в доверенные.

Содержимое каталога KeePass'а

Проверка подлиности

Чтобы убедиться, что программа не поддельная, проверим подписи, как рекомендует ее автор. У каждого exe- и dll-файла откроем окно свойств и перейдем на вкладку «Цифровые подписи». Удостоверимся, что имя подписавшего — Open Source Developer, Dominik Reichl. Затем нажмем Сведения и удостоверимся, что подпись действительна. Не иметь подписи могут только файлы плагинов в папке PluginCache.

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

Как это настроено

KeePass сам по себе обеспечивает портативность, в частности, запоминает именно относительный путь к базе паролей. Поэтому базу удобно держать в папке программы и переносить вместе с ней. Однако по умолчанию KeePass помещает скомпилированные плагины в папку %LOCALAPPDATA%\KeePass, что несколько отступает от портативности. Чтобы они помещались в папку программы, отредактирован файл KeePass.config.xml: параметру Application/PluginCachePath задано значение {APPDIR}{ENV_DIRSEP}PluginCache, т.е. после строки <Application> вставлена строка <PluginCachePath>{APPDIR}{ENV_DIRSEP}PluginCache</PluginCachePath>.

Чтобы опробовать настройку смогли даже те пользователи, у которых уже запущен свой KeePass, в разделе Сервис → Настройка → Дополнительно отключена опция Ограничивать одним экземпляром.

Открытие базы и изменение мастер-пароля

Запустив KeePass, введем мастер-пароль myCoolMasterPassword и укажем ключевой файл just a photo.jpg.

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

Изменим мастер-пароль (меню Файл → Изменить основной пароль): зададим свой сложный пароль и, при желании, ключевой файл. Ключевым может быть любой личный файл, который доступен на всех синхронизируемых устройствах и ни в коем случае не может быть утерян или изменен. Данные учетной записи Windows не будем использовать для авторизации.

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

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

Смена мастер-пароля

Как это настроено

Чтобы обычные килоггеры не могли перехватить ввод мастер-пароля, в разделе Сервис → Настройка → Безопасность включена опция Вводить основной пароль в защищенном режиме. На вкладке Дополнительно включена опция Запоминать и автоматически открывать последнюю базу паролей при запуске, как и по умолчанию; но в то же время отключены опции Запоминать источники ключа и Запоминать рабочие папки, поскольку расположение ключевого файла — это все-таки секретная информация.

Поиск нужной записи и авторизация

Опробуем разные способы ввода учетных данных. Воспользуемся «учебной» учетной записью, которая имеет название Учебный аккаунт, логин myLogin, пароль myPassword, адрес http://keepass.info/help/kb/testform.html, тег демо и комментарий Тренировка

Заодно проверим, перехватываются ли данные тестами, следящими за нажатием клавиш и буфером обмена.

Начнем с чисто клавиатурного способа. Откроем KeePass сочетанием клавиш Ctrl+Alt+Shift+K и сразу же наберем фрагмент названия записи, или логина, или адреса, или тега, или даже комментария, нажмем Enter. Стрелками выберем нужную запись из найденных и нажмем Ctrl+U — ссылка откроется. Поставим курсор в поле ввода логина и нажмем Ctrl+Alt+Shift+F9 (или Fn+Ctrl+Alt+Shift+F9, в зависимости от конфигурации клавиатуры). Нажмем кнопку Submit — и страница покажет сообщение с введенными данными.

Аналогичное можно проделать одной мышью: в поле поиска раскроем недавние запросы, выберем нужный. В найденной записи сделаем двойной клик по полю Ссылка. Когда ссылка откроется, кликнем по полю ввода (не обязательно очищать поле — KeePass сделает это сам). Вернемся к KeePass'у и нажмем на панели инструментов кнопку Выполнить автонабор.

Кликать по полю ввода желательно всегда, даже если там уже мигает курсор. В частности, этого требует автонабор для Google или ProtonMail.

Автонабор на тестовой странице KeePass

«Продвинутый» способ авторизации: просто кликнем в поле ввода, нажмем Ctrl+Alt+Shift+A — и KeePass сам найдет подходящую запись. Более подробно эту функцию — глобальный автонабор — рассмотрим отдельно.

Если вам понадобится набрать отдельное значение, например, пароль — нажмите кнопку [F] на панели инструментов и выберите поле из списка.

Вместо автонабора можно перетащить логин и пароль в поля ввода прямо из списка записей KeePass. Еще один вариант — временно скопировать эти данные в буфер обмена, это делается двойным кликом; через 20 секунд буфер обмена автоматически очищается (но только если там будут учетные данные; «чужое» содержимое KeePass не удалит).

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

Как это настроено

В разделе Сервис → Настройка → Политика включены опции Автонабор, Автонабор без контекста, Перетаскивание и Копирование, как и по умолчанию.

На вкладке Интеграция заданы глобальные горячие клавиши Ctrl+Alt+Shift+F9 для автонабора выбранной записи, а также добавлена клавиша Shift в комбинации, имеющиеся по умолчанию. Можно сделать комбинации и более простыми, но возрастет риск случайного нажатия и конфликта с другими программами.

Чтобы упростить поиск, на вкладке Внешний вид в разделе Быстрый поиск включены все три опции вида Помещать фокус на...

На вкладке Безопасность включена автоочистка буфера обмена через 20 секунд. Также включена опция Использовать формат буфера обмена 'Clipboard Viewer Ignore', чтобы некоторые легальные программы, следящие за буфером обмена, не запоминали учетные данные (замечание, что эта опция «не рекомендована» устарело: оно относится к старой версии, конфликтовавшей с Microsoft Office).

В самой базе изменена верхняя группа: на вкладке Автонабор задано использование последовательности {CLEARFIELD}{UserName}{TAB}{DELAY 100}{Password}, как самой универсальной. В учебной записи включена опция Двойное усложнение автонабора.

Кнопка [F] реализована с помощью триггеров (Сервис → Триггеры). Сначала создан триггер Добавить кнопки на панель инструментов:

  • событие: Приложение запущено и готово;
  • условия: отсутствуют;
  • действие: Добавить свою кнопку на панель инструментов:
    • идентификатор: btn_TypeField,
    • имя: [F],
    • описание: Набрать поле....

Затем добавлен триггер Набрать произвольное поле при нажатии на кнопку [F]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeField,
  • действие: Выполнить автонабор для выбранной записи с последовательностью {PICKFIELD}.

Создание записи

Откроем в браузере какой-нибудь форум и попробуем на нем зарегистрироваться. Запустим KeePass, и войдем в группу Общие. Кликнем по стрелке справа от кнопки добавления записи и выберем шаблон _Обычная_запись_. Дадим записи желаемое название, в поле Ссылка скопируем адресную строку браузера.

Перейдем на страницу регистрации и заполним требуемые поля, кроме пароля. Скопируем в соответствующее поле KeePass'а выбранный логин, а в поле Комментарии укажем прочие данные, которые использовали для регистрации: имейл, имя и т.п. Нажмем кнопку Генерация пароля (напротив поля Пароль) и выберем профиль Автогенерируемые пароли для новых записей. Теперь нажмем Ok в окне создания записи — и KeePass ее запомнит. Чтобы запись обрела значок сайта, выберем в ее контекстном меню пункт Download Favicons.

Перетащим пароль из KeePass'а в положенное место на странице регистрации (как вариант, можем поставить курсор в это место, нажать кнопку [F] и выбрать поле Пароль). Завершаем регистрацию.

Теперь опробуем регистрацию на Яндексе. Чтобы не ошибиться в адресе, откроем сайт двойным кликом по полю Ссылка в шаблоне Yandex из группы templates. Войдем в группу Почта и добавим запись по шаблону Yandex.

Перейдем на страницу регистрации, укажем имя, определимся с логином. Занесем в KeePass логин, укажем в коммментарии имя и фамилию. Сгенерируем пароль (Автогенерируемые пароли для новых записей) и нажмем Ok. Перетащим пароль на страницу регистрации.

Однако Яндекс требует также придумать ответ на секретный вопрос. Этот ответ должен быть таким же секретом, как и пароль, поэтому мы и сгенерируем его подобно паролю.

Войдем в группу <service> и вызовем контекстное меню на записи <Генератор паролей>. Выберем Копировать строковое поле → Создать обычный пароль. Вставим свежесозданный «ответ на вопрос» на страницу регистрации, это нужно сделать за 20 секунд. Теперь сохраним наш «ответ» в KeePass: сделаем двойной клик по полю Пароль записи <Генератор паролей>, чтобы еще раз скопировать тот же «ответ», потом откроем свою запись Yandex, перейдем на вкладку Дополнительно и вставим «ответ» в поле Secret — на все про все снова 20 секунд. Готово.

Создание записи KeePass

Помимо поля Secret, вы можете добавлять на вкладку Дополнительно свои поля с произвольными названиями, чтобы хранить, например, телефонные номера, номера банковских карт, коды восстановления и т.п. Если содержимое дополнительного поля секретно, отметьте опцию Включить защиту в памяти — тогда это поле не будет расшифровываться без надобности, в частности, его не будет видно в панели просмотра. Впоследствии можно будет копировать содержимое этих полей через контекстное меню записи или набирать кнопкой [F].

Если вы уже пользуетесь каким-нибудь менеджером паролей, то можете перенести свою базу в KeePass, выполнив импорт и небольшую обработку данных.

Как это настроено

В базе создана группа шаблонов templates. Шаблоны — это обычные записи, в которых заранее проставлены названия, ссылки, добавлены дополнительные поля, установлены значки, включено усложнение автонабора, заданы его последовательности и т.д. В поле комментария дана инструкция по использованию шаблона, ее можно удалить. Пароли в шаблонах сделаны пустыми. В настройке базы (Файл → Настройка базы паролей → Дополнительно) указано, какая именно группа состоит из шаблонов. Для самой группы templates отключен автонабор и поиск записей (Изменить группу → Поведение). В ней создана подгруппа unused для хранения временно неиспользуемых шаблонов.

В окне Сервис → Генератор паролей заданы профили паролей. Основной профиль задан так: установлена длина 20, выбраны алфавитно-цифровые и некоторые другие символы, нажата кнопка Сохранить текущую настройку как новый профиль (дискета справа вверху) и указан вариант Автогенерируемые пароли для новых записей. Другие профили заданы подобным образом: простой пароль состоит из 16 алфавитно-цифровых символов, сложный — из 30 символов широкого набора; они сохранены под именами Simple и Strong.

Запись <Генератор паролей> — это обычная запись, в которой на вкладку Дополнительно добавлено строковое поле Создать обычный пароль со значением {NEWPASSWORD} и обязательной опцией Включить защиту в памяти. Каждый раз, когда это строкое поле раскрывается (копируется в буфер обмена или вводится автонабором), значение в поле Пароль заменяется новым. Новый пароль генерируется согласно профилю Автогенерируемые пароли для новых записей. Можно указать другой профиль кодом {NEWPASSWORD:/имя_профиля/}.

Общая база на всех устройствах

Пришло время наладить синхронизацию. Откроем запись KeePassCloudStorage в группе <service> и зарегистрируемся на облачном хранилище mydrive.ch: придумаем логин, сгенерируем пароль — все как обычно. Учетные данные сохраним в этой записи, только оставим нетронутыми название, ссылку и первую строку комментария. Зайдем в хранилище и отправим туда файл нашей базы, что лежит в папке Base (Upload → using Standard → Save → Обзор... → Upload). Вот и все.

Облачная синхронизация базы KeePass

Теперь при каждом закрытии база будет синхронизироваться с облаком. Кнопкой ↑↓ можно синхронизировать базу, не закрывая KeePass.

Если пожелаете вместо синхронизации просто заменить файл в облачном хранилище, это можно сделать через браузер: удалить старый файл и отправить новый. Ссылка на страницу авторизации есть в комментарии к записи KeePassCloudStorage.

Если не хотите, чтобы синхронизация выполнялась при каждом закрытии, откройте окно Сервис → Триггеры → Автоматически синхронизировать и отключите опцию Включить (другие параметры менять не нужно). Включение выполняется аналогично.

Как это настроено

В самой базе создана запись под названием KeePassCloudStorage с пустыми полями логина/пароля, ссылкой https://webdav.mydrive.ch/{T-CONV:/{DB_NAME}/Uri/} (KeePass впоследствии трансформирует эту ссылку в WebDAV-адрес файла, который расположен в корне облачного хранилища и имеет имя текущей базы паролей) и комментарием, начинающимся строкой https://www.mydrive.ch/login. Затем подготовлено несколько триггеров.

На случай, если открыто несколько баз, создан триггер Активировать базу перед закрытием:

  • событие: Закрытие файла базы паролей (до сохранения), фильтр оставлен пустым;
  • действие: Активировать базу, фильтр: Выполняющая триггер.

Ниже создан триггер Автоматически синхронизировать:

  • событие: Закрытие файла базы паролей (после сохранения), фильтр оставлен пустым;
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • Строка:
      • строка: {REF:T@T:KeePassCloudStorage},
      • операция: Равно,
      • значение: KeePassCloudStorage;
    • Строка:
      • опция Отрицание включена,
      • строка: {REF:U@T:KeePassCloudStorage},
      • операция: Равно,
      • поле Значение пусто;
    • существует файл: {T-REPLACE-RX:/{REF:N@T:KeePassCloudStorage}/\n[\s\S]*//};
  • действия:
    • Изменить состояние триггера:
      • поле Имя триггера пусто,
      • новое состояние: Выключить,
    • Синхронизировать текущую базу паролей:
      • файл/ссылка: {REF:A@T:KeePassCloudStorage},
      • логин: {REF:U@T:KeePassCloudStorage},
      • пароль: {REF:P@T:KeePassCloudStorage};
    • Изменить состояние триггера:
      • поле Имя триггера пусто,
      • новое состояние: Включить.,

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

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

Создан триггер Добавить кнопки на панель инструментов:

  • событие: Приложение запущено и готово;
  • действие: Добавить свою кнопку на панель инструментов:
    • идентификатор: btn_Sync,
    • имя: ↑↓,
    • описание: Синхронизировать.

Создан триггер Синхронизировать при нажатии на кнопку синхронизации:

  • событие: Нажата пользовательская кнопка с идентификатором btn_Sync;
  • действие Синхронизировать текущую базу паролей:
    • файл/ссылка: {REF:A@T:KeePassCloudStorage},
    • логин: {REF:U@T:KeePassCloudStorage},
    • пароль: {REF:P@T:KeePassCloudStorage}.

Чтобы избежать сбоев при синхронизации, отключена опция Сервис → Настройка → Дополнительно → Использовать файловые транзакции. Когда эта опция включена, KeePass использует при сохранении базы промежуточный временный файл: такой метод сохранения призван предотвратить потерю данных, но иногда из-за него некорректно работает синхронизация. Вместо файловых транзакций, для защиты от потери данных предусмотрено автоматическое резервное копирование.

Вместо myDrive.ch можно использовать другие хранилища, предоставляющие доступ по WebDAV или FTP. Например, для pCloud.com в записи KeePassCloudStorage ссылкой будет https://webdav.pcloud.com/{T-CONV:/{DB_NAME}/Uri/}, а первой строкой комментария — https://my.pcloud.com. Достоинства pCloud.com, по сравнению с myDrive.ch: корректная работа с файловыми транзакциями и бесплатная история файлов. Недостатки: синхронизация работает медленнее; при повторе синхронизации раньше чем через несколько секунд происходит сбой; поддержка WebDAV не заявлена.

Обновление программы

Когда KeePass оповестит нас о выходе новой версии, закроем программу, скачаем заново архив с portable-вариантом версии 2.x, архив с переводом и просто заменим все соответствующие файлы в папке программы новыми. Наша настройка при этом сохранится.

Автор программы намеренно не сделал обновление автоматическим, чтобы исключить всевозможные риски подмены. Перед запуском рекомендуется проверить подлинность exe- и dll-файлов программы.

Используем KeePass2Android

Установим KeePass2Android стандартным образом. Затем перейдем в настройку системы и разрешим использование клавиатуры KeePass2Android. Настроим эту клавиатуру: в пункте Языки ввода отметим Английский и Русский, далее на ваш выбор.

Остальную конфигурацию KeePass2Android менять не обязательно. Нажмем Открыть файл, выберем HTTPS (WebDAV) и укажем те же данные, что в записи KeePassCloudStorage (ссылку следует указать в явном виде, скопировав ее из KeePass'а клавишами Ctrl+Shift+U). Логин и пароль облачного хранилища можно сохранить, это не самая чувствительная информация. Откроем базу, указав мастер-пароль и ключевой файл, если используется.

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

Клавиатура KeePass2Android

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

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

Дополнительные возможности

Вернемся в Windows и продолжим разбираться с KeePass'ом.

Автонабор: обычный и нестандартный

Позаботимся, чтобы для наших записей корректно работал автонабор. Для верхней группы задана самая общая последовательность автонабора, которая работает в большинстве случаев: {CLEARFIELD}{UserName}{TAB}{DELAY 100}{Password}, т.е. очистка поля, набор логина, нажатие Tab, короткая задержка и набор пароля (многие добавляют в конце нажатие Enter, но я нахожу это лишним: окончательный шаг лучше выполнить самостоятельно). Эта последовательность наследуется подгруппами и самими записями, поэтому в большинстве случаев все будет Ок. А если авторизация совсем нестандартная?

Во-первых, можно отредактировать саму запись: открыть вкладку Автонабор и указать нужную последовательность. Например, для Google это будет что-то вроде {UserName}{ENTER}{DELAY 1500}{Password}: набрать логин, нажать Enter, выждать полторы секунды и набрать пароль.

В последовательности автонабора можно ссылаться не только на логин с паролем, но и на дополнительные поля. Например, для авторизации на ProtonMail нужно вводить логин и два разных пароля — сохраним второй пароль в поле Secret и назначим последовательность {UserName}{TAB}{Password}{ENTER}{DELAY 3000}{S:Secret}: набор логина, нажатие Tab, набор пароля, нажатие Enter, 3-секундная задержка и набор поля Secret. Аналогично вы можете добавлять на вкладку Дополнительно поля с любыми именами на свой вкус и использовать их в автонаборе. Например, если добавить поле PhoneNumber, то в последовательность автонабора можно будет вставить код {S:PhoneNumber}, означающий содержимое этого поля.

Более того, можно указать различные последовательности автонабора для различных окон (кнопка Добавить). Например, при подключении к клиенту TeamViewer'ом сначала вводится идентификатор клиента, а потом, если удалось соединиться, в отдельном окне вводится пароль. В этом случае подойдет такая конфигурация автонабора: для окна TeamViewer набирать идентификатор {UserName}, а для окна Идентификация TeamViewer — пароль {PASSWORD}.

Также на вкладке Автонабор можно включить или отключить его двойное усложнение. Усложнение автонабора частично защищает от килоггеров, однако его невозможно использовать в некоторых окнах, например, в консольных. Можно настроить усложнение автонабора более тонко, например, включить его в целом для записи, но определенным окнам назначить последовательность без усложнения, наподобие {TCATO:false}{Password}{ENTER}. Код {TCATO:false} в последовательности принудительно отключает усложнение автонабора, а код {TCATO:true} включает; это обеспечивается плагином TCATO_Placeholder.

Во-вторых, можно раскладывать записи по группам в соответствии с автонабором. Так, учетные данные Google или Microsoft можно помещать в группу 2-страничные. В параметрах этой группы (Изменить группу → Автонабор) задана последовательность {UserName}{ENTER}{DELAY 1500}{Password}, и записи ее наследуют. Недостаток этого варианта — на уровне группы нельзя задать автонабор для разных окон.

В-третьих, можно создавать записи по шаблонам: в них уже прописаны последовательности автонабора, в т.ч. и для определенных окон. Это рекомендуемый вариант.

Новые шаблоны будем создавать в группе templates, беря за основу шаблон _Обычная_запись_. Чтобы редко используемые шаблоны не занимали место в выпадающем списке, можно переместить их в подгруппу unused: когда они понадобятся, просто вернем их в группу templates.

Некоторые окна, делаясь активными, теряют фокус ввода. Например, эту проблему имеет окно Skype. В таких случаях помогает задержка перед автонабором. Чтобы выполнить автонабор с задержкой, нажмем кнопку [A] на панели инструментов, а затем поставим курсор в поле ввода.

Авторизация в Skype с помощью KeePass

С задержкой можно набрать и любое отдельное поле. Нажмем кнопку [C], выберем поле в появившемся окне и поставим курсор — автонабор выполнится в «режиме совместимости»: с задержкой, замедленно и без усложнения. (Пригодится, например, при вводе в окно виртуальной машины или удаленного рабочего стола.)

На другие нестандартные случаи остаются запасные варианты:

  • поставить курсор в поле ввода, вызвать на записи контекстное меню и выбрать подходящую последовательность в разделе Начать автонабор;
  • или кнопкой [F] набрать любое отдельное поле без задержки;
  • или перетащить логин и пароль из KeePass'а в требуемые поля;
  • или временно скопировать любое поле в буфер обмена (через контекстное меню записи).

Если понадобится изменить, например, задержку между вводом логина и пароля на Google, не придется редактировать все гугловские записи — достаточно внести изменения в запись <delays> (группа settings). Задержка для двухстраничной авторизации задается в миллисекундах паролем этой записи, задержка перед началом автонабора — логином, замедление автонабора — ссылкой. Все эти параметры можно регулировать.

Как это настроено

В базе создана запись <delays> логином 4000, паролем 1500 и ссылкой 100. В различных последовательностях автонабора паузы и замедления заданы ссылками на эту запись. Так, в шаблоне Google и в группе 2-страничные указана последовательность автонабора {CLEARFIELD}{UserName}{ENTER}{DELAY {REF:P@T:<delays>}}{Password}, а в шаблоне _Консоль/игры_ последовательностью {DELAY={REF:A@T:<delays>}}{Password} задан замедленный автонабор.

По-особому сделан автонабор в шаблоне Mail.ru. Для авторизации на e.mail.ru необходимо указать логин вместе с определенным почтовым доменом: mail.ru, bk.ru и др. Если в поле логина вводить полный почтовый адрес, наподобие example@mail.ru, то из-за усложнения автонабора окажется непредсказуемым, как перейти к вводу пароля: один или два раза нажать Tab. Найдено решение: использовать усложнение автонабора не для всего адреса сразу, а по отдельности для имени пользователя и для домена. Эти части выделяются из логина с помощью регулярных выражений, а в случае, если домен не указан в логине, берется домен mail.ru. Чтобы разделить усложнение автонабора, между частями вставлена фиктивная пауза. Вся последовательность:

{CLEARFIELD}{T-REPLACE-RX:/{USERNAME}/([^@]*).*/$1/}{DELAY 0}@{DELAY 0}{T-REPLACE-RX:/{USERNAME}@mail.ru/[^@]*@([^@]*).*/$1/}{TAB}{DELAY 100}{Password}

На случай, если в каком-нибудь другом почтовом сервисе будет такая же особенность авторизации, подобным образом сделан и автонабор в шаблоне _Почта_:

{CLEARFIELD}{T-REPLACE-RX:/{USERNAME}/([^@]*).*/$1/}{DELAY 0}{T-REPLACE-RX:/{USERNAME}/[^@]*(@?).*/$1/}{DELAY 0}{T-REPLACE-RX:/{USERNAME}/[^@]*@?(.*)/$1/}{TAB}{DELAY 100}{Password}.

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

Чтобы активировать подменю Начать автонабор, в разделе Сервис → Настройка → Внешний вид включена опция Показывать дополнительные команды меню автонабора.

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

  • Добавить кнопку... с идентификатором btn_TypeFieldCompatible, именем [C] и описанием Набрать поле... (режим совместимости);
  • Добавить кнопку... с идентификатором btn_DelayedAutoType, именем [A] и описанием Обычный автонабор с задержкой.

Создан триггер Обычный автонабор с задержкой при нажатии на кнопку [A]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_DelayedAutoType,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\ping.exe,
      • аргументы: -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222,
      • опция Ждать выхода включена,
      • стиль окна: Скрытое;
    • Выполнить автонабор для выбранной записи, поле Последовательность пусто.

Таким образом, пауза реализована отправкой эхо-запроса на несуществующий адрес: в качестве времени ожидания ответа подставляется логин записи <delays>.

Создан триггер Набрать произвольное поле в режиме совместимости при нажатии на кнопку [C]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_TypeFieldCompatible;
  • действие: Выполнить автонабор для выбранной записи с последовательностью {TCATO:false}{DELAY={REF:A@T:<delays>}}{T-REPLACE-RX:!{PICKFIELD}![^\s\S]+!{CMD:#ping -n 1 -w {T-REPLACE-RX:/{REF:U@T:<delays>}/^(.*\D.*|)$/4000/} 192.0.2.222#WS=H#}!}.

Глобальный автонабор. Список эквивалентных доменов

До сих пор мы своими руками отыскивали подходящую запись для авторизации на сайте. Однако KeePass способен найти ее сам сообразно открытому сайту, и запустить автонабор: достаточно кликнуть в поле ввода, нажать клавиши Ctrl+Alt+Shift+A (или кнопку [G] на панели инструментов KeePass'а) и в появившемся окне подтвердить выбор учетной записи.

Авторизация в Google глобальным автонабором KeePass

Запуск глобального автонабора KeePass мышью

Бывает, что на одном и том же сайте нужны разные последовательности автонабора. Например, при некоторых операциях запрашиваются дополнительные данные: пароль, ответ на секретный вопрос, какие-либо коды и т.п. В таких случаях нажмем клавиши Ctrl+Alt+Shift+S и в появившемся окне подтвердим выбор записи. В результате автонабора не произойдет: просто откроется KeePass с уже отмеченной записью, и мы сможем набрать нужное поле кнопкой [F] или другим способом.

Если один интернет-ресурс имеет несколько страниц авторизации с разными доменными именами, занесем эти домены в список экивалентных. Для этого в группе domains создадим новую запись или изменим существующую, перечислив в ее названии эквивалентные домены, разделенные знаком | без пробелов, без протокола и без префикса www. Название должно начинаться и оканчиваться тоже знаком |. Например: |yandex.ru|yandex.by|passport.yandex.ru|. Теперь глобальный автонабор будет работать, даже если в поле Ссылка указана страница passport.yandex.ru, а открыта www.yandex.by.

Кроме того, KeePass может подхватывать данные при регистрации на сайтах: если поставить курсор на место логина и нажать Ctrl+Alt+Shift+W, то откроется окно создания записи, в котором будет уже подставлен заголовок, логин и адрес, а также сгенерирован пароль. Однако для записей, созданных таким способом, не будет работать поддержка эквивалентных доменов. Поэтому я все же рекомендую создавать записи по шаблонам: вручную копировать логин и адрес, вручную генерировать пароль.

Чтобы поддержка эквивалентных доменов заработала для записей, которые созданы не по шаблонам, понадобится выполнить для них такую же XML-замену, как при импорте.

В то же время полезно воспользоваться клавишами Ctrl+Alt+Shift+W, чтобы узнать адрес фрейма, в котором находится форма авторизации. Дело в том, что при поиске записи KeePass опирается на адрес фрейма, куда вводятся данные, а не на адресную строку браузера, — поэтому именно адрес фрейма следует указывать в поле Ссылка (или в списке эквивалентных доменов). Например, авторизация на странице https://e.mail.ru в действительности происходит через фрейм https://account.mail.ru.

Определение адреса посредством браузерных расширений (для K-Meleon, Pale Moon, песочниц и др.)

За считывание адреса страницы/фрейма отвечает плагин WebAutoType (см. системные требования). Однако он не работает с некоторыми видами браузеров, а также с браузерами, выполняющимися в песочнице (Sandboxie, Comodo).

Решение: вместо использования плагина установить в браузер какое-либо из расширений, добавляющих к оконному заголовку адрес открытой страницы. Тогда KeePass будет подбирать записи на основании этого заголовка.

Браузер, в который установлено расширение, понадобится отметить в базе: в группе settings открыть запись WindowAssociation и вписать название браузера в поле Логин. Название должно быть тем самым, которое браузер добавляет в конец своего заголовка. Можно перечислить несколько браузеров, разделяя их знаком |:

Pale Moon|K-Meleon

Если какой-либо браузер запускается в песочнице Sandboxie, понадобится дополнительно указать его название с символами [#] на конце, например:

Pale Moon|K-Meleon|K-Meleon [#]|Google Chrome [#]

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

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

Как задать множество эквивалентных доменов регулярным выражением

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

При этом в поле Название должны быть явно перечислены все доменные имена, которые встречаются в поле Ссылка у различных учетных записей. Например, если в базе есть учетные записи со ссылками https://passport.yandex.ru/ и https://www.yandex.by/?ncrnd=1851, то для записи об эквивалентных доменах Яндекса подойдет название |passport.yandex.ru|yandex.by| и логин ((mail|passport)\.)?yandex\.(ru|by|ua|com).

Внимание! Регулярное выражение должно быть таким, чтобы ему соответствовали только доменные имена, иначе возникнет угроза фишинга. Например, выражение .*\.livejournal\.com неприемлемо, потому что ему соответствует адрес http://bad-site.com#www.livejournal.com. Более безопасный вариант, охватывающий поддомены 3-го уровня, — выражение [\w\-]*\.livejournal\.com. А чтобы одновременно охватить и сам домен livejournal.com, и все его поддомены всех уровней, подойдет выражение ([\w\-\.]*\.)?livejournal\.com.

Как изменить работу с эквивалентными доменами

За поддержку эквивалентных доменов отвечает запись WindowAssociation в группе settings. Ее пароль определяет ассоциации с оконным заголовком браузера, а ссылка — с адресной строкой.

Можно сделать так, чтобы каждый домен подходил всем своим поддоменам, т.е. чтобы любая запись вида http://example.com подходила странице http://sub.example.com. Для этого отредактируйте запись WindowAssociation:

  • пароль: //(?i) \W*(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//
  • ссылка: //^(?i)(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?$//

Если глобальный автонабор работает слишком медленно, можно упростить поддержку эквивалентных доменов: не проверять их по списку, а лишь выяснять, находится ли сайт в поддомене того, что указан в поле «Ссылка». Для этого отредактируйте запись WindowAssociation так:

  • пароль: //(?i) \W*(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//
  • ссылка: //^(?i)(?:\w+\:\/\/)?(?:[\w\-\.]+\.)?(?=\w)(?:{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!})(?:[\:\/#]\S*)?$//

Если вы используете для глобального автонабора только плагин WebAutoType, можно сделать пустым пароль в записи WindowAssociation, а если только браузерные расширения — ссылку. Это уменьшит задержки.

Как это настроено

Глобальному автонабору назначены горячие клавиши Ctrl+Alt+Shift+A (Сервис → Настройка → Интеграция).

Добвлен плагин WebAutoType, считывающий адрес фрейма. В его опциях настроено создание записи по горячим клавишам Ctrl+Alt+Shift+W.

Чтобы можно было вместо автонабора выполнять лишь поиск нужной записи, добавлен плагин AutoTypeShow, в его настройке заданы горячие клавиши Ctrl+Alt+Shift+S.

Работу кнопки [G] обеспечивают триггеры и скрипт GlobalAutoTypeHelper.js. В уже имеющийся триггер Добавить кнопки на панель инструментов добавлено действие: Добавить кнопку... с идентификатором btn_GlobalAutoType, именем [G] и описанием Глобальный автонабор. Создан триггер Глобальный автонабор при нажатии на кнопку [G]:

  • событие: Нажата пользовательская кнопка с идентификатором btn_GlobalAutoType,
  • действия:
    • Выполнить команду/ссылку:
      • файл/ссылка: %windir%\System32\wscript.exe,
      • аргументы: "{APPDIR}\GlobalAutoTypeHelper.js",
      • опция Ждать выхода включена;
    • Выполнить глобальный автонабор,

Скрипт GlobalAutoTypeHelper.js симулирует нажатие клавиш Alt+Esc, чтобы убрать окно KeePass'а на задний план, перезапускается, чтобы триггер перешел к следующему шагу (глобальному автонабору), а затем активизирует окно выбора записи. Код скрипта:

var WshShell = WScript.CreateObject("WScript.Shell");
if (WScript.Arguments.Count() == 0) {
	WScript.Sleep(100);
	WshShell.SendKeys("%{ESC}");
	WshShell.Exec("%windir%\\System32\\wscript.exe \"" + WScript.ScriptFullName + "\" 0");
} else {
	for (var attempt = 1; attempt != 20; ++attempt) {
		WScript.Sleep(500);
		if (WshShell.AppActivate("Выбор записи для автонабора")) {
			break;
		}
	}
}

Чтобы реализовать поддержку эквивалентных доменов, в группе settings создана запись WindowAssociation. В ее поля Пароль и Ссылка соответственно вписаны значения:

//(?i) \W*(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?\W* (?:{T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/})$//

//^(?i)(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{{}T-REPLACE-RX:/{{}REF:T@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{{}T-REPLACE-RX:/{{}REF:U@T:|{{}T-REPLACE-RX:!{{}URL:HOST}!^www\.!!}|}/^\{{}.*//})(?:[\:\/#]\S*)?$//

В различных шаблонах записей задано два целевых окна автонабора (Автонабор → Добавить) с последовательностью по умолчанию и заголовками {T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/} и ??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}.

Как получены эти значения

Предположим, в браузеры Pale Moon и K-Meleon установлены расширения, добавляющие адрес сайта в заголовок. Обычно такие расширения отделяют адрес от остальной части заголовка пробелами и размещают его в конце, перед названием браузера. Некоторые из расширений заключают адрес в скобки и т.п. В качестве адреса они могут брать как полный URL, так и голое имя хоста. В результате можно задать целевое окно автонабора следующим регулярным выражением:

//(?i) \W*(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{T-REPLACE-RX:/{REF:T@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{T-REPLACE-RX:/{REF:U@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/^\{.*//})(?:[\:\/#]\S*)?\W* (?:Pale Moon|K-Meleon)$//

Поясню построение этого выражения. Двойные слеши в начале и в конце сообщают KeePass'у, что строка является регулярным выражением. Код {T-REPLACE-RX:!{URL:HOST}!^www\.!!} отбрасывает от доменного имени префикс www, если он есть. Выражения {REF:T@T:|...|} и {REF:U@T:|...|} ищут запись, название которой содержало бы доменное имя, окруженное знаками |. Если запись найдется, то первое выражение превратится в название этой записи (т.е. в список доменов), а второе — в ее логин (т.е. в регулярное выражение, задающее множество доменов). Если запись не найдется, то выражения {REF:T@T:|...|} и {REF:U@T:|...|} останутся самими собой, и в этом случае выражение {T-REPLACE-RX:/.../^\{.*//} превратит результат поиска логина в пустую строку (в случае успешного поиска оно ничего не изменит). Выражение {T-REPLACE-RX:/.../([^\w\s\|])/\$1/} экранирует списке доменов все спецсимволы, кроме знака |. Получившиеся строки — явный список доменов и регулярное выражение — вместе заключаются в скобки, образуя группу. Код (?=\w) перед этой группой (вкупе с кодом после нее) предписывает выбирать из группы только строки, начинающиеся алфавитно-цифровым символом (таким образом исключаются пустые строки, а также обрывки кода, полученные при неудачном поиске: {REF:T@T: и }). Выражения (?:\w+\:\/\/)?(?:www\.)? и (?:[\:\/#]\S*)? позволяют опознавать адрес в заголовке независимо от того, содержит ли он протокол, префикс www, порт или путь. Фрагменты  \W* и \W*  означают, что адрес отделен от остальной части заголовка пробелами и, возможно, спецсимволами, наподобие скобок, дефисов и т.п. Коду (?:Pale Moon|K-Meleon)$ соответствует название браузера, расположенное в конце заголовка.

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

Для плагина WebAutoType целевое окно задается похожим выражением. Оно отличается знаком ^, указывающим на начало строки, а также отсутствием пробелов и разделителей \W* вокруг адреса и отсутствием названия браузера:

//^(?i)(?:\w+\:\/\/)?(?:www\.)?(?=\w)(?:{T-REPLACE-RX:/{REF:T@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/([^\w\s\|])/\$1/}{T-REPLACE-RX:/{REF:U@T:|{T-REPLACE-RX:!{URL:HOST}!^www\.!!}|}/^\{.*//})(?:[\:\/#]\S*)?$//

Чтобы не дублировать эти выражения в каждой записи, они размещены в полях Пароль и Ссылка специальной записи WindowAssociation, а в обычных записях целевые окна автонабора заданы ссылками на эти поля. Поскольку браузеры, заголовок которых содержит адрес, перечисляются в поле Логин этой записи, фрагмент Pale Moon|K-Meleon заменен выражением, которое ссылается на это поле и экранирует спецсимволы: {T-REPLACE-RX:/{USERNAME}/([^\w\s\|])/\$1/}. Чтобы в полях записи WindowAssociation не произошло преждевременных преобразований, символ { в выражениях заменен последовательностью {{}. Соответственно, к ссылкам на эти поля применено преобразование, восстанавливающее символ {. Таким образом, в обычных записях заголовок браузера, содержащий адрес страницы, задается выражением {T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/}, а адресная строка, читаемая плагином WebAutoType, — выражением ??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}. Префикс ??:URL: в последнем выражении означает, что оно предназначено для этого плагина.

В параметрах группы domains отключен поиск и автонабор.

Во избежание фишинга в разделе Сервис → Настройка → Дополнительно → Автонабор отключены все четыре опции вида Считать запись подходящей.... Для перестраховки от случайного нажатия горячих клавиш включена опция Всегда показывать окно выбора записи для глобального автонабора.

Операции с прикрепленными файлами

Любая запись в базе KeePass'а может содержать не только текстовую информацию, но и файлы (Дополнительно → Прикрепленные файлы). Разумеется, они хранятся зашифрованными, как и прочие данные. Прикрепленные файлы можно извлекать, сохраняя в отдельное место; можно извлекать во временный каталог с EFS-шифрованием, чтобы открывать и редактировать в сторонних программах. Более того, их можно просматривать в самом KeePass'е, не извлекая: встроенный просмотрщик KeePass'а умеет показывать изображения, html-страницы, текст в формате RTF, простой текст, причем в разных кодировках, а также двоичные файлы в HEX-виде.

К примеру, вы можете вложить в запись сканы документов, а затем просмотривать их через контекстное меню записи: Прикрепленные файлы → Имя_файла.

И это еще не все — KeePass имеет встроенный редактор форматированного текста! Можно редактировать RTF-файл, присоединенный извне, а можно создать его с нуля (Добавить → Прикрепить пустой файл). При создании указывается имя и расширение: в случае *.txt текст будет обычным, в случае *.rtf форматированным. Такой файл становится своеобразным полем, вмещающим большой объем текста, в т.ч. форматированного.

Как просмотр, так и редактирование файлов KeePass'ом выполняется в памяти, без извлечения их на диск.

Все ходы записаны

KeePass хранит не только текущее состояние ваших учетных данных, но и историю их изменений. В любой записи вы можете открыть вкладку История и просмотреть до 10 ее версий, а при необходимости и откатить запись к любой из них. (Кстати, записи <Генератор паролей> это тоже касается: если вы сгенерировали новый пароль, а нужно воспользоваться старым, то это легко сделать.)

Если какая-либо запись слишком объемна (имеет прикрепленные файлы), то история сохранит меньшее число ее версий: общим размером до 6 МБ.

Если вы удалите запись целиком — она всего лишь отправится в группу Корзина, откуда ее всегда можно перетащить обратно. Для безвозвратного уничтожения записи ее следует повторно удалить, когда она в Корзине.

Любые изменения базы сразу сохраняются на диске. (Опять же, это касается и записи <Генератор паролей>: каждое создание пароля немедленно фиксируется.) Если какая-либо запись открыта и редактируется, то изменения сохранятся после закрытия ее окна.

Перед каждым сохранением базы создается ее резервная копия. В папке Base\BackUp для каждой базы хранится 20 ее прежних версий.

Как изменить параметры сохранения, резервного копирования и хранения истории

При желании вы можете отказаться от автоматического сохранения базы. Откройте окно Сервис → Триггеры и измените триггер Автоматически сохранять изменения: отключите опцию Включен (другие параметры менять не нужно). Включение выполняется аналогично.

Вы можете изменить количество версий каждой отдельной базы, хранящихся в папке BackUp: оно задается логином записи <settings> в группе settings. Логин 0 отключает резервное копирование данной базы.

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

Параметры хранения истории и использования корзины задаются в настройке базы (Файл → Настройка базы паролей).

Если вы захотите облегчить базу, удалив из нее всю историю, — временно установите нулевой размер истории, выполните синхронизацию на всех устройствах, восстановите параметры истории и повторите синхронизацию. Однако для удаления из базы неиспользуемых значков (через меню Сервис базы паролей) придется непосредственно заменить файл в облачном хранилище и на всех устройствах, иначе синхронизация вернет эти значки. Во избежание случайной синхронизации с «забытым» устройством можно переименовать базу, или изменить ее расположение в облачном хранилище, или завести новую учетную запись на хранилище.

Как это настроено

В базе параметры хранения истории и использования корзины оставлены по умолчанию. Чтобы задать число хранимых версий базы, создана запись <settings> с логином 20.

Для сохранения базы при каждом ее изменении в разделе Сервис → Триггеры создан триггер Автоматически сохранять изменения:

  • событие: Состояние интерфейса пользователя обновлено,
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • база паролей содержит несохраненные изменения, база — Текущая;
  • действие: Сохранить текущую базу паролей.

Для резервного копирования базы добавлен триггер Автоматически создавать резервную копию:

  • событие: Сохранение файла базы паролей, фильтр оставлен пустым;
  • условия:
    • Строка:
      • строка: {DB_DIR},
      • операция: Равно,
      • значение: {APPDIR}{ENV_DIRSEP}Base;
    • Строка:
      • опция Отрицание включена,
      • строка: {REF:U@T:<settings>},
      • операция: Равно,
      • значение: 0;
  • действие: Выполнить команду/ссылку:
    • файл/ссылка: %windir%\System32\wscript.exe,
    • аргументы: "{APPDIR}\BackUp.js" "{DB_NAME}" {T-REPLACE-RX:/{REF:U@T:<settings>}/^(.*\D.*|)$/20/},
    • опция Ждать выхода включена.

Этот триггер использует для резервного копирования скрипт BackUp.js:

(function() {
	if (WScript.Arguments.Count() != 2) {
		WScript.Echo("Использование: BaskUp.js <имя_файла> <количество_версий>");
		return;
	}
	var name = WScript.Arguments(0);
	var backUpCount = +WScript.Arguments(1);
	
	var appDir = WScript.ScriptFullName.substring(0, WScript.ScriptFullName.length - WScript.ScriptName.length - 1);
	var baseDir = appDir + "\\Base";
	var backUpDir = baseDir + "\\BackUp";
	
	var FSO = WScript.CreateObject("Scripting.FileSystemObject");
	try {
		var file = FSO.getFile(baseDir + "\\" + name);
		if (file.Size == 0) {
			return;
		}
	} catch (e) {
		return;
	}
	try {
		if (!FSO.FolderExists(backUpDir)) {
			FSO.CreateFolder(backUpDir);
		}
	} catch (e) {
		WScript.Echo("Невозможно создать каталог \"" + backUpDir + "\"");
		return;
	}
	var d = new Date();
	var toXX = function(x) {return x < 10 ? "0" + x : x;}
	var prefix = d.getFullYear() + "." + toXX(d.getMonth() + 1) + "." + toXX(d.getDate()) + "-" + toXX(d.getHours()) + "." + toXX(d.getMinutes()) + "." + toXX(d.getSeconds());
	try {
		file.Copy(backUpDir + "\\" + prefix + "-" + name, true);
	} catch (e) {
		WScript.Echo("Невозможно создать резервную копию файла \"" + name + "\"");
		return;
	}
	try {
		var files = [];
		for (var en = new Enumerator(FSO.GetFolder(backUpDir).Files); !en.atEnd(); en.moveNext()) {
			var fileName = en.item().Name;
			if (fileName.length > prefix.length && fileName.slice(prefix.length) == "-" + name) {
				files[files.length] = en.item();
			}
		}
		files.sort(function(f1, f2) {
			if (f1.Name < f2.Name)
				return -1;
			if (f1.Name > f2.Name)
				return 1;
			return 0;
		});
		for (var i = 0; i < files.length - backUpCount; ++i) {
			files[i].Delete();
		}
	} catch (e) {
		WScript.Echo("Невозможно удалить старые версии");
		return;
	}
})();
Вариант резервного копирования без внешнего скрипта

Можно обойтись без скрипта BackUp.js. Понадобится лишь изменить в триггере Автоматически создавать резервную копию действие Выполнить команду/ссылку:

  • файл/ссылка: %comspec%,
  • аргументы: /c "for %i in ("{DB_PATH}") do if "%~zi" GTR "0" (md "{DB_DIR}\BackUp"& copy "%~i" "{DB_DIR}\BackUp\{DT_YEAR}.{DT_MONTH}.{DT_DAY}-{DT_HOUR}.{DT_MINUTE}.{DT_SECOND}-%~nxi"& for /f "skip={T-REPLACE-RX:/{REF:U@T:<settings>}/^(.*\D.*|)$/20/} tokens=*" %X in ('dir "{DB_DIR}\BackUp\*-%~nxi" /b /o:-n') do del "{DB_DIR}\BackUp\%X" /q)",
  • опция Ждать выхода включена;
  • стиль окна: Скрытое.

Подобный способ предложен в официальном руководстве.

Однако вариант со скриптом BackUp.js более удобен при жесткой настройке Comodo Internet Security.

Данные триггеры работают только для баз, расположенных непосредственно в папке Base.

Дополнительная настройка защиты

Ваш мастер-пароль по-настоящему сложен? Уверены, что даже часть его никогда не попадет в хакерские словари? Прибегнем к небольшой подстраховке: в свойствах базы (Файл → Настройка базы паролей → Безопасность) увеличим количество циклов шифрования. Там же его можно рассчитать, чтобы не перегнуть палку, сделав открытие и сохранение базы чересчур медленным. С учетом частого сохранения базы и ее использования на мобильных устройствах, я выставил миллион. Таким образом, KeePass способен усилить защиту небезупречных паролей. Но злоупотреблять этим не будем: сложность и секретность мастер-пароля — наше все.

Чтобы затруднить кражу данных из самой программы, в ней запрещены некоторые опасные операции. Для этого в окне Сервис → Настройка → Политика отключены опции: Экспорт без пароля, Печать, Печать без пароля, Копирование всех записей и Основной пароль — без пароля.

Во избежание кражи паролей из памяти KeePass'а, он настроен на завершение своей работы вместо блокировки базы (Сервис → Настройка → Безопасность → Всегда выходить вместо блокирования).

Также программа настроена на блокировку (вернее, на выход) после 5 минут общего бездействия, при переключении пользователя, при переходе в спящий режим и при изменении режима удаленного доступа (Сервис → Настройка → Безопасность). На вкладке Внешний вид установлено нулевое значение опции Запоминать недавно использованные файлы.

Импорт базы паролей

Если вы уже пользуетесь каким-нибудь менеджером паролей, в т.ч. KeePass'ом, то, скорее всего, накопили большую базу паролей. Их нетрудно перенести в нашу новую базу.

Экспортируем пароли из прежнего менеджера в файл, а затем откроем KeePass и импортируем этот файл в предложенную базу (Файл → Импорт). При этом важно правильно указать формат файла и каким менеджером паролей он был создан. Если KeePass спросит о способе импорта, выберем вариант Новые идентификаторы.

Для записей, которые только что импортированы из сторонней базы, могут не работать некоторые фунции, в первую очередь, усложнение автонабора и глобальный автонабор. Чтобы включить эти функции, воспользуемся XML-заменой в базе паролей:

  1. создадим в базе группу toImprove;
  2. переместим в эту группу все записи, для которых нужно активировать усложнение автонабора и глобальный автонабор (можно перетаскивать как записи, так и целые группы с подгрупами);
  3. чтобы включить усложнение автонабора, откроем окно Сервис → Сервис базы паролей → XML-замена и выполним замену с параметрами:
    • Узлы дерева: //Group[Name="toImprove"]//Entry/AutoType/DataTransferObfuscation
    • Действие: Заменить данные
    • Данные: Текст
    • Искать: 0
    • Заменить на: 1
  4. чтобы настроить записи для глобального автонабора, откроем это же окно и выполним замену с параметрами:
    • Узлы дерева: //Group[Name="toImprove"]//Entry/AutoType
    • Действие: Заменить данные
    • Данные: Внешний XML
    • Искать: </AutoType>\Z
    • Заменить на: <Association><Window>{T-REPLACE-RX:/{REF:P@T:WindowAssociation}/\{\{\}/{/}</Window><KeystrokeSequence /></Association><Association><Window>??:URL:{T-REPLACE-RX:/{REF:A@T:WindowAssociation}/\{\{\}/{/}</Window><KeystrokeSequence /></Association></AutoType>
    • опция Регулярное выражение включена;
  5. расформируем группу toImprove: переместим записи Google в группу 2-страничные, записи Mail.ru в одноименную группу, другие почтовые записи в группу Почта и т.д.;
  6. удалим или переименуем группу toImprove.

Импорт данных в KeePass

Часть 2

Комментарии и отзывы

Добавляя комментарий, ознакомьтесь с Правилами сообщества