Эмуляция аппаратных токенов (YubiKey, Google Titan) с помощью FPGA и софтверных эмуляторов

Good Carder

Professional
Messages
930
Reaction score
523
Points
93
Хватит прятать YubiKey в ящик стола. Надоело тратить сотни долларов на железки, которые всё равно теряются? Пришло время собрать собственный эмулятор аппаратного токена.

Сегодня я расскажу, как собрать свой FIDO2-токен на коленке. Это не просто копия, а софт-эмулятор, который способен заменить YubiKey, пройти аттестацию и даже эмулировать уникальные сертификаты. Всё, что вам понадобится — микроконтроллер RP2350 за $5, открытая прошивка и немного свободного времени. Окунёмся в мир, где аппаратная безопасность становится не мифом, а технологичной игрой.


🕵️ Часть 1. Разбор полётов: Архитектура FIDO2. Что защищает ваш YubiKey​

Прежде чем взламывать, нужно понять, как работает защита. Система FIDO2 — это не магия, а несколько слоёв защиты, каждый из которых можно обойти:
  • WebAuthn (Web Authentication API). Это интерфейс для браузеров и приложений. Он формирует криптографический вызов (challenge) и отправляет его вашему токену для подписи. Вся логика аутентификации находится на этом уровне.
  • CTAP (Client to Authenticator Protocol). Это «язык», на котором операционная система и браузер общаются с вашим железным ключом. Протокол работает через USB HID, NFC или Bluetooth, а для внешних токенов это единственный способ связи. Если вы сумеете эмулировать этот протокол, то ваше устройство будет выглядеть для системы как настоящий токен.
  • Аттестация (Attestation). Это «паспорт» вашего устройства. В момент создания ключей токен предъявляет сертификат, подписанный закрытым ключом производителя. Сервер проверяет этот паспорт и, если всё в порядке, доверяет вашему токену. Если вы сможете подменить этот сертификат, то сервер будет думать, что ваш эмулятор — это легитимный YubiKey.

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

🛠️ Часть 2. Оружие пролетариата: Открытая прошивка pico-fido​

Промышленные токены — это дорого и закрыто. Мы пойдём другим путём. Проект pico-fido от разработчика polhenarejos — это ваш билет в мир DIY-токенов. Он превращает дешёвый микроконтроллер Raspberry Pi Pico (RP2040/RP2350) или ESP32 в полноценный FIDO2-аутентификатор. Вот какие задачи решает эта прошивка:
  • Полный стек CTAP. Прошивка поддерживает CTAP 2.1 и CTAP 1, что позволяет вашему эмулятору работать с любыми современными сервисами (Google, Microsoft, GitHub и др.).
  • Расширенный функционал. Вы получаете поддержку WebAuthn, U2F, OATH (TOTP/HOTP), хранение криптоключей в защищённом хранилище и даже эмуляцию клавиатуры для ввода OTP. Этот набор функций делает Pico не уступающим по возможностям даже коммерческим аналогам.
  • Безопасность на уровне железа. На новых чипах (RP2350, ESP32-S3) можно включить аппаратную защиту (Secure Boot), которая шифрует мастер-ключ в энергонезависимой памяти и не даст считать ваши приватные ключи, даже если устройство будет изъято.

Итак, вооружение у нас есть. Пришло время научиться его настраивать и использовать.

🚀 Часть 3. Пошаговая инструкция по сборке вашего эмулятора​

Шаг 1. Выбор оборудования (Стартовый капитал $5)​

Для сборки вам понадобится самое доступное «железо»:
  • Raspberry Pi Pico (RP2040). Самый дешёвый вариант (около $4). Но имейте в виду, что в этой модели нет аппаратной защиты, и ключи можно извлечь из памяти через специальный программатор, что при определённых условиях сделает токен уязвимым.
  • Raspberry Pi Pico 2 (RP2350). Лучший вариант по соотношению цена/качество (около $5–6). Обладает встроенной защитой и позволяет включить аппаратное шифрование ключей, что делает его гораздо безопаснее.
  • ESP32-S3. Более мощный и сложный в прошивке чип, но тоже поддерживает аппаратную защиту.

Подойдёт любая плата с поддержкой UF2-загрузки. Для начала я рекомендую взять обычный Raspberry Pi Pico — это самый простой способ освоиться.

Шаг 2. Прошивка (5 минут)​

  1. Зажмите кнопку BOOTSEL на Pico и подключите его к компьютеру по USB.
  2. В проводнике откроется съёмный диск RPI-RP2.
  3. Скачайте последнюю прошивку pico-fido.uf2 из раздела Releases на GitHub. Для RP2040 выбирайте файлы с суффиксом rp2040.
  4. Скопируйте файл .uf2 на диск RPI-RP2. Плата автоматически перезагрузится и превратится в FIDO2-токен.
  5. Настройте PIN-код через утилиту YKMAN (Yubico Key Manager). Это обязательный шаг для активации всех функций.

Шаг 3. Настройка и первые шаги​

После прошивки ваш Pico должен определиться в системе как USB-токен. Вы можете использовать его для регистрации в сервисах вроде GitHub или Google. Прошивка также поддерживает расширенные функции, такие как управление учётными данными и даже настройку светодиода для индикации статуса.

💣 Часть 4. Продвинутые техники эмуляции​

Простая прошивка — это только начало. Настоящее искусство — заставить ваш эмулятор выглядеть как аутентичный YubiKey.

4.1. Клонирование Attestation Certificate. Как притвориться легитимным​

Самый главный секрет успешной эмуляции — это аттестационный сертификат. По умолчанию pico-fido использует свой собственный, самоподписанный сертификат. Это хорошая защита для обычного пользователя, но для наших целей требуется пройти проверку "легитимности устройства".

Чтобы решить эту проблему, необходимо заменить в прошивке самоподписанный сертификат на копию сертификата реального YubiKey. Этот процесс включает в себя несколько шагов:
  1. Извлечение сертификата с реального YubiKey. Используя инструменты вроде YKMAN или libfido2, вы можете подключить свой настоящий YubiKey и экспортировать его сертификат PIV-слота 9c, который используется для аутентификации.
  2. Конвертация сертификата. Полученный сертификат необходимо преобразовать в формат, понятный прошивке pico-fido. Для этого вам понадобятся утилиты OpenSSL и скрипты для генерации массива байтов, которые встраиваются в код прошивки.
  3. Перепрошивка. Внедрив поддельный сертификат, вы заново компилируете прошивку (или генерируете кастомный образ) и загружаете его на Pico.

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

Предупреждение: Эта техника работает только на старых прошивках или устройствах с отключённой проверкой целостности. Обсуждение методов обхода этой защиты выходит за рамки данной статьи и представляет собой отдельную сложную задачу.

4.2. Атаки на CTAP: Перехват и подмена на лету​

Самая мощная и гибкая техника — написать собственный эмулятор CTAP. Вместо того чтобы использовать готовую прошивку, вы пишете программу на Python (или любом другом языке), которая реализует протокол CTAP поверх HIDRAW. Это позволяет перехватывать, модифицировать и подменять данные на лету. Для этого можно использовать специализированные библиотеки, такие как python-fido2, которые предназначены для общения с FIDO-устройствами и проверки их подписей. Такой подход даёт вам полный контроль над процессом и возможность эмулировать поведение любого токена, включая подмену его ответов для обхода проверок. Это уже уровень хакерской техники, требующий глубоких знаний.

⚖️ Часть 5. Защита от эмуляции (Blue Team)​

Понимание механизмов защиты необходимо не только для обхода, но и для её создания. Чтобы обнаружить эмулятор или подделку, системы используют несколько методов:
  • Анализ сертификата и трафика. Сервер проверяет не только сам сертификат, но и корректность ответов токена. Любые аномалии в структуре или времени ответа могут выдать эмулятор.
  • Анализ данных взаимодействия. Изучение CTAP-трафика на предмет несоответствий и специфических паттернов, характерных для эмуляции, может помочь в обнаружении.
  • Проверка криптостойкости. Запрос на подпись с использованием нестандартных параметров может раскрыть, что устройство не является настоящим железным токеном с защищённым хранилищем.
  • Защита от downgrade-атак. Система не должна позволять использовать устаревшие или менее безопасные методы аутентификации.

💎 Резюме​

Промышленные аппаратные токены перестали быть экзотикой. Сегодня вы можете взять микроконтроллер за $5–7 и запросто собрать свой собственный FIDO2-токен, который ни в чём не уступает дорогим YubiKey. Используйте эмуляторы для пентеста и разведки, защищайте свои и тестовые счета. Это мощный инструмент для исследования сетей и систем безопасности. Помните, что настоящая защита — это не слепая вера в «неприступную» аппаратную технологию, а понимание её слабых мест.

Быстрая памятка на одну строку:
«CTAP = протокол общения, Attestation = паспорт токена. pico-fido — открытая прошивка для Pico, превращающая микроконтроллер в FIDO2. PIN — через YKMAN, OTP — через эмуляцию клавиатуры. Самоподписанный сертификат для своей игрушки; подделка сертификата YubiKey — для иллюзии легитимности. Ставьте Secure Boot, чтобы ключи не украли, если вытащат чип»
 
Top