Лучшие статьи и кейсы стартапов
Включить уведомления
Дадим сигнал, когда появится
что-то суперстоящее.
Спасибо, не надо
Главное Свежее   Проекты
Рекомендуем
Продвинуть свой проект
169 6 В избр. Сохранено
Авторизуйтесь
Вход с паролем

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

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

Существуют различные программные решения для хранения паролей, о них довольно часто пишут (например тут и вот тут), однако многим из них, как нам кажется, в той или иной степени свойственны следующие недостатки:

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

b_5787773ccd55c.jpg

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

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

Идея

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

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

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

b_5787773e634df.jpg

(кликайте на картинку, откроется gif)

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

Реализация 0.1

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

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

Схема

b_5787773e915a2.jpg

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

Плата

b_5787773f20f65.jpg

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

b_5787773fba34b.jpg

b_57877740447a3.jpg

Софт

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

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

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

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

Что дальше?

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

b_57877740c5752.jpg

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

b_57877741a6ea1.jpg

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

Open all

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

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

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

+2
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Подбираем рекоммендации...
Комментарии
Первые Новые Популярные
FriendHelp
Проект построен на «Теории 6 рукопожатий» и «Концепции слабых связей».
Юрий Другач
Парни, вы крутые! :) С парой фишек еще-это вообще бoмбa будет :)
И еще вопрос-кейлогером можно перехватить эмуляцию ввода клавиатурных нажатий?
Ответить
Third Pin
Разработка электроники и программного обеспечения
Павел Воробьёв
Спасибо, мы стараемся)

Да, кейлоггером перехватить можно. Однако даже в этом случае мастер-пароль злоумышленник не узнает, так как мы не передаём его на ПК, а расшифровываем базу аппаратно.
Ответить
Devicerra
Онлайн сервис подбора электроники
Шютник
Охренительная штука! Куда деньги тащить?! Чёрт, хочу себе такую! Немедленно! Мне плевать, как она выглядит, главное чтобы всё работало.
Ответить
Third Pin
Разработка электроники и программного обеспечения
Павел Воробьёв
Спасибо за отзыв! Обязательно напишем когда их можно будет купить.
Ответить
Devicerra
Онлайн сервис подбора электроники
Шютник
Не забудьте указать где :)
Ответить
Third Pin
Разработка электроники и программного обеспечения
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать