- Делаем аппаратный менеджер паролей на базе Arduino
- Делаем аппаратный менеджер паролей на базе Arduino
- Аппаратный менеджер паролей — как он работает?
- Сборка устройства
- Возможности менеджера паролей
- Делаем аппаратный менеджер паролей на базе Arduino
- Аппаратный менеджер паролей — как он работает?
- Сборка устройства
- Аппаратный менеджер паролей
Делаем аппаратный менеджер паролей на базе Arduino
Делаем аппаратный менеджер паролей на базе Arduino
Многие люди до сих пор хранят данные для авторизации в бумажном виде. Очевидно, если кто-то украдёт ваш блокнот, то он получит доступ ко всем вашим аккаунтам — хуже не придумаешь. Ещё одна проблема — человеческий фактор, который не позволяет в полной мере придумывать действительно сложные пароли, которые нельзя будет взломать брут форсом или перебором по словарю. Пользователь seawarrior181 собрал аппаратный менеджер паролей, который решает эти проблемы. Данные всех аккаунтов хранятся внутри устройства, а встроенный генератор поможет создать пароль, который нельзя будет подобрать перебором слов.
Устройство называется PasswordPump. Оно может хранить в себе до 254 учётных записей (название учётной записи + логин + пароль). Данные хранятся на двух съёмных микросхемах памяти в зашифрованном виде, благодаря шифрованию военного уровня AES128.
При желании можно сделать бэкап в текстовый файл или на резервные микросхемы памяти (не зря они съёмные).
Аппаратный менеджер паролей — как он работает?
Это устройство подключается к ПК через USB кабель. Чтобы получить доступ к устройству (ко всем сохранённым аккаунтам в нём), нужно ввести мастер-пароль. После этого в списке вы должны выбрать нужную учётную запись, а на компьютере поставить курсор в форму ввода. Менеджер паролей сам введёт в ПК данные для авторизации.
Добавлять учётные записи в устройство можно нативно или через монитор последовательного порта на ПК.
Сборка устройства
PasswordPump базируется на плате Arduino Pro Micro. Единственный элемент ввода в устройстве — энкодер. Он позволяет считывать повороты ручки и нажатия на неё (прямо как в колёсике мышки). Информация выводится на небольшой OLED дисплей с разрешением 128×32 пикселей. Ещё понадобится RGB-светодиод (он будет показывать текущее состояние устройства), две микросхемы EEPROM-памяти, печатная плата и некоторый обвес. Вот все необходимые детали:
Все компоненты, необходимые для сборки
Вот так выглядит схема устройства и его прототип, собранный на макетной плате:
Схема сборки устройства на макетной плате
Устройство, собранное на макетной плате
Автор выбрал модель Arduino Micro, потому что она базируется на чипе ATmega32u4 с аппаратной поддержкой USB-соединения. Это значит, что микроконтроллер можно использовать как HID-устройство. В данном случае — это клавиатура. Устройство имитирует нажатие клавиш, тем самым вводя данные для авторизации.
Исходный код для микроконтроллера можно найти здесь.
После распайки всех элементов на плате, микроконтроллер нужно подключить к ПК и прошить через Arduino IDE. Но автор советует перепрошивать МК отдельно через программатор, так как в таком случае будет перезаписан и загрузчик, из-за чего в памяти освободится немного места, которого очень мало для этого скетча.
Возможности менеджера паролей
Про базовые возможности уже было рассказано выше — в менеджере паролей можно защищённо хранить данные учётных записей и передавать их на ПК. Но это далеко не все возможности PasswordPump:
- автоматическая очистка памяти и возврат к заводским настройкам после 10 неудачных попыток ввода мастер-пароля;
- учётные данные шифруются с помощью AES128, а мастер-пароль хэшируется с помощью SHA256;
- зашифрованные учётные записи и мастер-пароль посолены;
- устройство не уязвимо для стандартных атак на пароли;
- все данные учётных записей могут быть выгружены в текстовый документ для создания резервной копии в виде файла;
- автоматическая блокировка устройства после 1 часа бездействия (нужно будет повторно ввести мастер-пароль);
- генерация пароля из случайных букв, цифр и символов;
- добавление учётных записей через монитор последовательного порта или на самом устройстве с помощью поворотного энкодера;
- редактирование и удаление существующих учётных записей через ПК или само устройство;
Можно помочь автору в фиксе багов и добавлении новых возможностей в репозитории проекта.
Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.
Перейти к регистрации
Источник
Делаем аппаратный менеджер паролей на базе Arduino
Многие люди до сих пор хранят данные для авторизации в бумажном виде. Очевидно, если кто-то украдёт ваш блокнот, то он получит доступ ко всем вашим аккаунтам — хуже не придумаешь. Ещё одна проблема — человеческий фактор, который не позволяет в полной мере придумывать действительно сложные пароли, которые нельзя будет взломать брут форсом или перебором по словарю. Пользователь seawarrior181 собрал аппаратный менеджер паролей, который решает эти проблемы. Данные всех аккаунтов хранятся внутри устройства, а встроенный генератор поможет создать пароль, который нельзя будет подобрать перебором слов.
Устройство называется PasswordPump. Оно может хранить в себе до 254 учётных записей (название учётной записи + логин + пароль). Данные хранятся на двух съёмных микросхемах памяти в зашифрованном виде, благодаря шифрованию военного уровня AES128.
При желании можно сделать бэкап в текстовый файл или на резервные микросхемы памяти (не зря они съёмные).
Аппаратный менеджер паролей — как он работает?
Это устройство подключается к ПК через USB кабель. Чтобы получить доступ к устройству (ко всем сохранённым аккаунтам в нём), нужно ввести мастер-пароль. После этого в списке вы должны выбрать нужную учётную запись, а на компьютере поставить курсор в форму ввода. Менеджер паролей сам введёт в ПК данные для авторизации.
Добавлять учётные записи в устройство можно нативно или через монитор последовательного порта на ПК.
Сборка устройства
PasswordPump базируется на плате Arduino Pro Micro. Единственный элемент ввода в устройстве — энкодер. Он позволяет считывать повороты ручки и нажатия на неё (прямо как в колёсике мышки). Информация выводится на небольшой OLED дисплей с разрешением 128×32 пикселей. Ещё понадобится RGB-светодиод (он будет показывать текущее состояние устройства), две микросхемы EEPROM-памяти, печатная плата и некоторый обвес. Вот все необходимые детали:
Все компоненты, необходимые для сборки
Вот так выглядит схема устройства и его прототип, собранный на макетной плате:
Схема сборки устройства на макетной плате
Устройство, собранное на макетной плате
Автор выбрал модель Arduino Micro, потому что она базируется на чипе ATmega32u4 с аппаратной поддержкой USB-соединения. Это значит, что микроконтроллер можно использовать как HID-устройство. В данном случае — это клавиатура. Устройство имитирует нажатие клавиш, тем самым вводя данные для авторизации.
Источник
Аппаратный менеджер паролей
Успехи всемирной информатизации и цифровизации огромны и неоспоримы. Но бурный рост объема персональных цифровых данных имеет далеко идущие последствия. К сожалению, подавляющее большинство интернет-пользователей полагают, что их данные не могут быть интересны злоумышленникам. Тем временем практически любой компьютер, смартфон или планшет может быть использован преступниками, например, для рассылки спама, организации DDoS атак или отправки фишинговых ссылок через мессенджеры и электронную почту.
Кроме того, похищение персональных данных — обычно прелюдия к краже денег. Например, достаточно знать номер вашей карты Сбербанка (а это не секретная информация) и получить доступ к привязанному к ней телефону или даже просто перехватывать SMS с одноразовыми паролями, что технически вполне реально. И все, «накопленное непосильным трудом», уйдет в неизвестном направлении. Доказать вы потом ничего не сможете. Номер карты ваш, телефон тоже ваш. Какие могут быть претензии к банку? Что это — халатность или злой умысел.
Но не будем пытаться решать глобальные проблемы. Давайте для начала подумаем, где хранить пароли от множества своих интернет-ресурсов. Если говорить о длине и сложности паролей, то большинство пользователей не привыкли себя утруждать. Наиболее распространенные пароли практически не меняются с годами — «123456», «qwerty», «пароль», «111111», год рождения, марка машины и т.п.
Варианты, содержащие строки «qaz» и «wsx», немногим лучше. Эти буквы удобно располагаются под левой рукой на клавиатуре, поэтому их комбинации злоумышленники проверяют в первую очередь. Так же, как слова любви и бранные выражения.
Вредоносные утилиты из арсенала киберпреступников способны за короткое время проверить тысячи паролей, чтобы получить доступ к данным жертвы. Программы для подбора ключевых сочетаний работают по спискам, которые включают в себя большинство популярных последовательностей. Поэтому уповать на безопасность таких паролей нельзя.
Но сложные и разные пароли трудны для запоминания, поэтому большая часть пользователей выбирает небезопасный способ хранения паролей, которые не может запомнить. Они записывают комбинации символов в блокнот или на листок бумаги, лежащий рядом с компьютером. Кто-то доверяет пароли браузерам, а кто-то сохраняет их в отдельном файле на компьютере.
И так, где же хранить свои секретные и регулярно обновляемые пароли от множества интернет-ресурсов. В голове? Вряд ли поместятся. Или доверить облачному сервису, который взломают если не сегодня, то завтра обязательно. А может быть понадеяться на бесплатный программный менеджер паролей. Нет, есть более надежное и интересное решение.
Идею подсказала статья «Творческая ISKRA» в журнале «Хакер» № 5 за 2018 г. Автор назвал себя «ge0gr4f». Он подробно описал методику изготовления и программирования аппаратного менеджера паролей. Это такой небольшой девайс, который подключается к USB порту компьютера, представляется USB клавиатурой и хранит в себе логины и пароли от всех ваших аккаунтов. Работает с любой операционной системой, не требует установки драйверов и дополнительного программного обеспечения.
Идея интересная, но ее реализация мне не понравилась. Вот список всего необходимого для изготовления этого гаджета. Основа устройства — отладочная плата IskraJSmini на базе контроллера STM32F411CEU6. Кроме нее нужны OLED дисплей, RFID/NFC модуль, транспортная карта «Единый», работающая по технологии RFID, card-reader SD, SD карта для него, ИК приемник и пульт ДУ. Не слишком ли сложно? Транспортная карта не проблема для жителя Москвы, а где ее взять в провинции? Да и стоимость этого комплекта получается не малой. За эти деньги наверняка можно приобрести фирменный аппаратный токен, если не боитесь проблем с дополнительным ПО и универсальностью.
Мы пойдем другим путем. Из всего списка необходимого оборудования оставим только OLED дисплей с диагональю 1,3″, разрешением 128×64, интерфейсом I2C, а в качестве основы используем доступную и дешевую отладочную плату на базе контроллера STM32F103C8T6. Суммарная стоимость такой платы и дисплея на Aliexpress около 5 USD.
Еще, разумеется, потребуется корпус с кнопками. Я использовал корпус от старой трубки стационарного беспроводного телефона. От стационарных телефонов сейчас многие отказываются, так что такая трубка вполне может валяться в вашем «ящике с хламом». Или найдется у кого-либо из знакомых. На клавиатуре должно быть не менее 16 кнопок. Желательно, чтобы на них были стандартные телефонные символы — цифры от 1 до 9, *, 0, #, UP, DOWN, OK и ESC (Отмена). Размер окна под дисплей должен соответствовать размеру используемого OLED дисплея.
Срок службы кнопок из проводящей резины, как показал опыт эксплуатации ПДУ от телевизоров, не очень большой. Кроме того, в пультах ДУ для резиновых кнопок используются контактные площадки из какого-то материала, похожего на графит. Сделать что-то подобное на самодельной плате проблематично, а с медью ничего хорошего не получится. Поэтому желательно использовать механические кнопки. На том же Aliexpress их выбор достаточно велик.
Плата моего аппаратного менеджера паролей выглядит вот так.
А вот его принципиальная схема.
Как видите, все предельно просто, ничего лишнего. Резистор R1 нужен для подключения и отключения USB, R2 и R3 — подтягивающие резисторы шины I2C. Шина работает с тактовой частотой 400 КГц, поэтому номинал этих резисторов выбран несколько меньше обычно используемого. Динамик HA1 — штатный разговорный от телефонной трубки. Он используется для озвучивания нажатия клавиш. Громкость определяется номиналом R4. Если звук не нужен, динамик можно не подключать. Конденсатор C1 блокировочный по питанию. В принципе, все работает и без него, установил так, на всякий случай.
Индикатор HG1 OLED с диагональю 1,3″, разрешением 128×64, контроллером SH1106 и интерфейсом I2C (4 pin). Я использовал именно такой тип. На Aliexpress есть близкие по параметрам аналоги с контроллером SSD1306, с возможностью выбора интерфейса — SPI или I2C, с диагональю 0,96″. Но я их не тестировал, возможно, для корректной работы индикатора с контроллером SSD1306 потребуется небольшая доработка программы. Так что рекомендую использовать именно SH1106, I2C, 4 pin, 1,3″, 128×64. Тем более, что он один из самых дешевых. Тип контроллера лучше уточнить перед заказом дисплея у продавца. 0,96″ применять не рекомендую — очень уж мелкие символы, неудобно пользоваться.
Отладочная плата, как я уже писал, на основе контроллера STM32F103C8T6. Самая дешевая и распространенная из серии STM32. Кнопки я не стал объединять в матрицу, как это обычно делается. Выводов у контроллера достаточно, зачем усложнять плату и программу.
Все это собрано на двухсторонней печатной плате, изготовленной лазерно-утюжным методом. На одной стороне смонтированы кнопки и индикатор, на другой — плата с контроллером и дискретные компоненты. На плате установлен разъем microUSB для подключения кабеля от компьютера, я рекомендую включить в него кабель и больше не дергать. А плату разместить в корпусе так, чтобы кабель был зафиксирован. Очень уж ненадежный этот microUSB, ведь корпус вы держите в руках. Если пропадет контакт в разъеме во время записи во FLASH память, очень велика вероятность потери информации. Так что лучше подключать и отключать, при необходимости, второй конец кабеля от компьютера.
Чертеж платы привожу «для сведения», т.к. размеры платы (147×40 мм) и конфигурация дорожек определяются корпусом. Вряд ли у вас он будет точно такой же, как у меня. Если использовать не отладочную плату, а просто микроконтроллер STM32F103C8T6, размеры печатной платы можно значительно уменьшить и смонтировать менеджер паролей в корпусе от старого кнопочного сотового телефона. Главное, чтобы дисплей поместился в корпусе. Кроме контроллера нужен кварц на 8 МГц и стабилизатор на 3,3 В. Установленный на отладочной плате кварц на 32,768 КГц для работы программы не нужен.
Теперь о том, как все это работает. Вы подключаете аппаратный менеджер паролей к USB порту компьютера и. ничего не происходит. Если это делаете не вы, то у непосвященного злоумышленника создается впечатление, что это какой-то сломанный телефон. Для включения устройства посвященный пользователь должен кратковременно нажать кнопку «Отбой» — на клавиатуре справа вверху (в дальнейшем я буду называть ее «ESC»). Затем он должен вслепую ввести PIN код. PIN код может содержать от 0 до 18 цифр и задается пользователем. Как это делается, рассмотрим позже.
На ввод каждой цифры отводится около 4 сек. Если вы ошиблись, нужно подождать 5 секунд и повторить ввод кода с начала. Я не стал закладывать какого-либо ограничения количества попыток ввода. А вдруг ваш ребенок решит понажимать кнопочки на папиной игрушке. Единственное, что я сделал, это ограничил время на ввод PIN кода. Нужно ввести правильный код в течение одной минуты. Не успели? Ничего страшного, нажмите «ESC» и в вашем распоряжении еще одна минута. Но эту особенность нужно знать.
Если вы используете не год своего рождения и не 123, то, учитывая, что на проверку одной комбинации нужно около 10 сек, подбор кода даже из 4 цифр потребует около 14 часов (5000*10/3600=13,9). Автоматизировать этот процесс нельзя, разве что сконструировать специальный аппаратный девайс для именно этой конкретной цели.
Если вы считаете, что кто-то будет целый день с утра до вечера нажимать кнопки ради ваших секретов, думаю, вы себе льстите. Да и за это время вы успеете поменять по крайней мере наиболее важные из своих паролей и взлом потеряет смысл. Если секреты того стоят, можно использовать код не из 4 а из 18 цифр. Посчитайте сами, сколько потребуется времени на его подбор.
Примерно через 5 сек после ввода корректного PIN кода устройство включается и определяется компьютером, как HID клавиатура. На дисплей выводится список ваших аккаунтов, в базе данных можно хранить до 255 аккаунтов. Каждый аккаунт имеет три параметра — Name, Login и Password. Name — это имя, под которым аккаунт отображается на дисплее. Login и Password понятно, что. Все это пользователь имеет возможность редактировать, как это делается, рассмотрим позже.
Имя и пароль могут содержать до 18 символов, а логин — до 28. Почему именно 18? Во-первых, этого вполне достаточно, а во-вторых, именно столько помещается в одну строку на дисплее при выбранном размере шрифта. А почему на логин остается именно 28 — догадайтесь сами. Поддерживаются строчные и прописные буквы латинского алфавита, цифры от 0 до 9 и некоторые специальные символы.
И так, на дисплее список ваших аккаунтов. Его можно прокручивать по кругу кнопками «Вверх» и «Вниз» (в дальнейшем я буду называть их «UP» и «DOWN». Скорость прокручивания зависит от времени удержания кнопки, вначале по одной строке, затем по 5. Между первым и последним аккаунтом отображается пустая строка. Список аккаунтов на дисплее отсортирован в алфавитном порядке. Если быть точным, то не совсем по алфавиту, а по ASCII коду первых четырех символов. Выбираем нужный аккаунт.
Открываем в браузере страницу входа в этот аккаунт, устанавливаем курсор в поле ввода логина и нажимаем на аппаратном менеджере паролей кнопку с цифрой «1». Поле логина заполнилось нужной информацией. Нажимаем кнопку «2», это имитирует нажатие клавиши «Tab» на основной клавиатуре компьютера. Курсор переходит в поле ввода пароля. Нажимаем кнопку «3», поле пароля заполняется. Остается нажать «4» или «6», что имитирует нажатие «Enter» на клавиатуре. Если логин вводить не нужно, нажимаем сразу «3», затем «4» или «6». Все, вы вошли в свой аккаунт.
Если был включен CapsLock, он автоматически выключится, а вот о раскладке клавиатуры нужно позаботиться самому. Автоматизировать эту операцию сложно без потери совместимости с любой операционной системой. Русские символы не поддерживаются опять же из-за обеспечения совместимости.
Если не нажимать больше ни одну из кнопок, через 4 минуты яркость дисплея уменьшается. При последующем нажатии любой кнопки она восстанавливается. Если нажать и удерживать в течение 4 сек кнопку «ESC», менеджер паролей выключается. Контроллер переходит в режим «STOP», дисплей гасится, USB отключается, вторая клавиатура исчезает из диспетчера устройств. Для того, чтобы она вновь появилась там, необходимо будет повторить процедуру включения и ввода PIN кода. В выключенном состоянии менеджер паролей практически ничего потребляет. Потребляет ток только светодиод «Power» и стабилизатор напряжения 3,3 В на плате. Это 2 мА максимум.
Теперь о том, как создать и отредактировать базу данных. Я постарался не изобретать ничего нового, а сделать интерфейс максимально похожим на интерфейс кнопочного сотового телефона при наборе SMS. Для входа в меню нажимаем клавишу «OK» (левая верхняя на клавиатуре). Рассмотрим подробно пункты меню, их всего 4. Зачем все усложнять и запутывать, добавляя функции, которыми вы никогда не будете пользоваться.
Редактирование. Вначале редактируем имя, под которым аккаунт отображается на дисплее. Если нажать и удерживать кнопку, например «2», будут последовательно перебираться символы abcABC2. На кнопке «3» — defDEF3 и т.д. Выбираем нужный символ, и он становится в конец строки в позицию курсора. Так можно ввести до 18 символов. Специальные символы распределены между кнопками «1», «0» и «*». Удаление ошибочно набранного символа — кнопка «UP», отмена удаления — кнопка «DOWN». Закончив ввод строки нажимаем «OK», а если передумали редактировать — «ESC».
Теперь редактируем логин. Все аналогично, только в строке может быть до 28 символов. После ввода первых 18 символов строка сдвигается влево и на экране отображается символ « марксизма программы
Программу я писал в среде Keil uVision 5. Официальная бесплатная версия от Keil имеет ограничение на размер кода 32 кбайта. Я уложился в этот лимит, программа занимает 25 кбайт в памяти контроллера.
Разумеется, проект создавался не на пустом месте. Во-первых, я использовал информацию из статьи «Реализация профиля клавиатуры USB HID на плате STM32 Mini» трех пермских авторов в журнале «Современная электроника» №1 за 2014 год. VID и PID взяты из этой же статьи, от USB клавиатуры Texas Instruments, так что проект не для коммерческого использования.
Во-вторых, Application note AN2824 «STM32F10xxx I2C optimized examples» STMicroelectronics. И, наконец, библиотеку OLED дисплея SSD1306 by Tilen Majerle, которую доработал для STM32f10x Alexander Lutsa. Я, в свою очередь, чуть-чуть подправил ее для SH1106.
Все остальное пришлось писать самому. Не иронизируйте, господа программисты, но на этот проект я потратил около полугода. Начинал я его летом, когда масса других дел и забот. Кроме того, это всего лишь мой второй проект на STM32, поэтому много времени ушло на изучение datasheet и поиск информации. Ну и возраст, наконец.
Этот проект отличается от всех других моих разработок, описания которых размещены на сайте. Обычно я выкладываю как прошивку, так и исходные тексты программ. В данном случае только прошивка доступна для скачивания, ссылка в конце странички. Дело не в жадности или амбициях.
Есть такой класс хакерских атак — BadUSB. BadUSB предназначен для доставки и исполнения на компьютере вредоносного кода. HID-атака — это разновидность BadUSB. Ее суть сводится к тому, что в USB порт вставляется хакерский девайс, эмулирующий устройство ввода, чаще всего клавиатуру. ОС без всяких проверок принимает его команды.
Преимуществ HID-атаки перед атакой вручную несколько: это скорость, незаметность и автоматизация. Все необходимые действия выполнятся быстрее, чем набирать то же на клавиатуре и без опечаток. Подключить к USB порту миниатюрное устройство можно за пару секунд. Это гораздо проще и удобнее, чем садиться за чужую клавиатуру и поминутно оглядываться через плечо. Малогабаритный девайс легко спрятать и пронести через охрану даже на режимный объект.
В общем, эмуляция клавиатуры — опасный инструмент. Вот я и не хочу облегчать жизнь людям с недобрыми намерениями. Немного доработав под свои нужды программу менеджера паролей можно выдать его за сотовый телефон, а на самом деле использовать, как инструмент хакера. Конечно, можно найти информацию, как сделать BadUSB и в других источниках, но не будем оказывать дополнительную помощь хакерам. Деньги нужно зарабатывать, а не получать.
Ссылки
1. ge0gr4f. Творческая ISKRA. Хакер — 2018, № 5(230), с.36,37.
2. Андрей Шаронов, Валерий Володин, Равиль Бикметов. Реализация профиля клавиатуры USB HID на плате STM32 Mini. Современная электроника — 2014, №1, с.52.
3. STMicroelectronics. Application note AN2824 «STM32F10xxx I2C optimized examples».
4. Lutsai Alexander. Библиотека OLED дисплея SSD1306 для STM32 микроконтроллеров.
Информация на этой страничке предназначена для радиолюбителей, автор не несет ответственности за любой возможный вред, причиненный этими материалами.
Источник