- PVSM.RU - https://www.pvsm.ru -

Пастильда — открытый аппаратный менеджер паролей

Pastilda — open source аппаратный USB менеджер паролей [1]

Немало заметок и обсуждений посвящены непростому вопросу безопасного хранения паролей, тема интересная и, похоже, актуальной будет ещё долго. Существуют различные программные решения для хранения паролей, о них довольно часто пишут на Хабре (например тут [2] и вот тут [3]), однако многим из них, как нам кажется, в той или иной степени свойственны следующие недостатки:

  • закрытый код снижает доверие и вероятность оперативного устранения уязвимостей
  • для автозаполнения нужно ставить дополнительный софт
  • после ввода мастер-пароля вся база открыта и доступна, в том числе для вредоносного ПО, что особенно актуально на недоверенных устройствах
  • использование мобильных приложений для хранения паролей все равно подразумевает ручной ввод с клавиатуры, например когда требуется залогиниться на стационарном ПК
  • автозаполнение невозможно в некоторых случаях (в bios, консоли)

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

Pastilda — open source аппаратный USB менеджер паролей [4]

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

  • шифрованные накопители, по сути — просто флешки с паролем (например, такая [6]). Можно безопасно хранить документы, но об автоматическом вводе паролей речь не идет
  • устройства с биометрической идентификацией (пример [7]). Биометрическая идентификация выглядит привлекательно, однако она менее универсальна, чем символьный пароль (например, если надо удаленно предоставить кому-то доступ к устройству, передача отпечатка пальца станет настоящей проблемой), к тому же дополнительные датчики увеличивают стоимость изделия. В случае компроментации сложно быстро сменить отпечатки
  • программные менеджеры паролей с аппаратным ключом-токеном, который дает доступ в базу (например [8]) обладают теми же недостатками, что и программные менеджеры без ключа-токена
  • устройства для ввода 1-4 паролей и их генерации (пример [9], пример [10]). Наиболее близкие решения. Из недостатков следует отметить ограниченное количество хранимых паролей а также управление исключительно кнопками на устройстве, что далеко не всегда удобно.

Ни одно из найденных устройств в полной мере не соответствовало нашей задумке. Мы обрадовались — и давай думать дальше.

Идея

Не так давно для корпоративных задач хранения паролей вместо бумажек, браузеров и биологической памяти мы стали использовать KeePass [11]. Вполне довольные удобством и универсальностью этого продукта, мы решили приспособить его для задач аппаратного хранения паролей, портировав на микроконтроллер.
Однако, осталось огромное количество вопросов. Каким образом выбирать нужную запись в базе на устройстве? Как показать пользователю, какая запись выбрана? Стоит ли размещать на корпусе устройства кнопки? Экран? Как вообще оно должно подключаться к компьютеру? К планшету? К телефону?

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

Pastilda, использование с клавиатурой [12]

Для управления мы будем использовать стандартную клавиатуру, а для непосредственного ввода сохраненных паролей в формы — эмулировать клавиатурные команды. “Перехват” управления будет происходить при вводе специальной комбинации клавиш. По умолчанию мы выбрали сочетание Ctrl + Shift + ~, потому что оно удобно для нажатия и практически нигде не используется. Проект получил название “Pastilda” (от password, tilda), у нас оно ассоциируется с чем-то вкусным и сладким, а также помогает не забыть главное сочетание клавиш для работы с устройством.

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

Pastilda, ввод пароля

Для работы с базой KeePass, хранящейся в памяти Пастильды, пользователь вводит мастер-пароль, а затем при помощи навигационных клавиш выбирает название интересующего его аккаунта и нажимает ввод. Пастильда вводит нужные логин и пароль в соответствующие поля. При этом расшифровка базы происходит на устройстве, и целевая система не получает доступа к мастер-паролю и ко всей базе. Выход из активного режима происходит либо автоматически, после ввода пароля, либо после повторного нажатия комбинации “Shift + Ctrl + ~”. Да, кстати, комбинации можно придумать свои.

Реализация 0.1

Как всегда много чего хочется реализовать, а начать решили с малого. Ревизия 0.1 предназначена для проверки идей, удобства использования и всяческого баловства. В текущей версии запланирован следующий минимум функций:

  • составное USB устройство (HID+Mass Storage)
  • USB host
  • работа с одной базой KeePass
  • однострочное меню
  • FAT16.

Схема

Пастильда — открытый аппаратный менеджер паролей - 5

Тут всё просто — контроллер Stm32f405, два разъема и флешка на SPI. Так же немного защиты, разъем SWD и, конечно же, RGB светодиод. Выбор компонентов не вызвал затруднений — STM, похоже, единственный, кто реализовал два аппаратных USB в микроконтроллере, а память взяли какая была.

Плата

Пастильда — открытый аппаратный менеджер паролей - 6 [13]

Все компоненты в обычных корпусах, чтобы плата была дешевая и быстрая в производстве. Размер 40х17 мм, 4 слоя. Текущая версия платы выглядит вот так:

Пастильда — открытый аппаратный менеджер паролей - 7 [14]Пастильда — открытый аппаратный менеджер паролей - 8 [15]

Софт

На данный момент реализовано:

  • USB host, для того чтобы распознавать подключенную к устройству клавиатуру и прокидывать сообщения от нее дальше в ПК
  • составное USB устройство (msd + hid): в режиме Pastilda устройство должно уметь быть клавиатурой, кроме того, быть всегда доступным как внешний диск, для удобного добавления и удаления паролей (Попутно @anaLazareva решила проблему с usb_msc libopencm3. [16]

Ждет своей участи:

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

О своих суровых буднях программисты напишут в отдельных статьях.

Что дальше?

Дальше — больше. Хочется реализовать работу с любыми устройствами, понимающими внешнюю клавиатуру. Мы уже протестировали работу нашего прототипа с Android-смартфоном через USB OTG, всё работает прекрасно. Для удобства навигации по меню при использовании Пастильды с мобильными устройствами сделаем отдельный USB-модуль с колесом-кнопкой.

Пастильда — открытый аппаратный менеджер паролей - 9 [17]

Ещё одна идея — маленькая гибко-жесткая печатная плата, которая заправляется прямо в разъем USB, оказываясь между контактами host и device. Жесткий кусочек платы с компонентами наклеивается на корпус штекера device. Таким образом устройство будет довольно сложно обнаружить. Впрочем, зачем бы нам это? Просто идея.

Пастильда — открытый аппаратный менеджер паролей - 10 [18]

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

Open all

Код выложен на github [19], вместе с железом. Лицензия GNU GPL. Естественно, можно пилить что-то свое на основе этого проекта, нам в голову пришли такие идеи:

  • эмуляция kbd+mouse для гейм-читинга
  • потоковое аппаратное шифрование USB-флеш.

Главная цель этой статьи — услышать ваше мнение, не стесняйтесь в комментариях!

Автор: Третий пин

Источник [20]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/156266

Ссылки в тексте:

[1] Image: https://habrahabr.ru/post/305594/

[2] тут: https://habrahabr.ru/post/225053/

[3] вот тут: https://habrahabr.ru/post/125248/

[4] Image: https://habrastorage.org/files/db2/7d4/d55/db27d4d558ed4af786106bbd57421cf7.png

[5] Найденные варианты: https://docs.google.com/spreadsheets/d/1q-vCx8QxtwEWVKSXha0V2XxxN7ILDdTP-DDhrjcpeiQ/edit?usp=sharing

[6] такая: http://www.byte-on.ru/catalog/Istorage-DatAshur/fleshka_istorage_datashur_pro_16gb/

[7] пример: https://www.kickstarter.com/projects/myidkey/myidkey-passwords-at-the-tip-of-your-finger/description

[8] например: https://www.kickstarter.com/projects/199263837/logmeonce-your-password-manager-secure-usb-and-pho/description

[9] пример: https://www.kickstarter.com/projects/1048259057/openkey-the-two-factor-authentication-and-password/description

[10] пример: https://hackaday.io/project/8342-memtype-open-source-password-keeper

[11] KeePass: http://keepass.info

[12] Image: https://habrastorage.org/files/b68/33b/c29/b6833bc295db4c38b599f1b33630509e.jpg

[13] Image: https://habrastorage.org/files/88b/c42/401/88bc42401a754b5da64a8efe5230d2b2.jpg

[14] Image: https://habrastorage.org/files/4d4/570/b2b/4d4570b2b173447a9adac2af703ed8fa.png

[15] Image: https://habrastorage.org/files/868/04e/232/86804e232bc645e0972aeaf4bf008a9c.png

[16] решила проблему с usb_msc libopencm3.: https://habrahabr.ru/post/304924/

[17] Image: https://habrastorage.org/files/63d/0d8/b92/63d0d8b92df041a6ac1f64d727f9712e.jpg

[18] Image: https://habrastorage.org/files/ff8/0ba/c77/ff80bac77cb84534b02c8a67032c347e.png

[19] github: https://github.com/thirdpin/pastilda

[20] Источник: https://habrahabr.ru/post/305594/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best