Usb ключ что это такое
Электронный ключ (также аппаратный ключ, иногда донгл от англ. dongle ) — аппаратное средство, предназначенное для защиты программного обеспечения (ПО) и данных от копирования, нелегального использования и несанкционированного распространения.
Основой данной технологии является специализированная , либо специализированный защищённый микроконтроллер, имеющие уникальные для каждого ключа алгоритмы работы. Донглы также имеют защищённую энергонезависимую память небольшого объёма, более сложные устройства могут иметь встроенный криптопроцессор (для аппаратной реализации шифрующих алгоритмов), часы реального времени. Аппаратные ключи могут иметь различные форм-факторы, но чаще всего они подключаются к компьютеру через LPT- или интерфейсу компьютера. Далее защищённая программа через специальный драйвер отправляет ему информацию, которая обрабатывается в соответствии с заданным алгоритмом и возвращается обратно. Если ответ ключа правильный, то программа продолжает свою работу. В противном случае она может выполнять любые действия, заданные разработчиками — например, переключаться в демонстрационный режим, блокируя доступ к определённым функциям.
Для обеспечения безопасности сетевого ПО служат специальные электронные ключи. Для защиты и лицензирования (ограничения числа работающих в сети копий программы) сетевого продукта достаточно одного ключа на всю локальную сеть. Ключ устанавливается на любой рабочей станции или сервере сети.
Многие компании, работающие в области защиты информации, предлагают свой взгляд на то, каким должен быть электронный ключ. На российском рынке наиболее известны следующие линейки продуктов (в алфавитном порядке): Guardant от компании «Актив», SenseLock от Seculab, Sentinel от SafeNet и др.
История
Защита ПО от нелицензионного пользования увеличивает прибыль разработчика. На сегодняшний день существует несколько подходов к решению этой проблемы. Подавляющее большинство создателей ПО используют различные программные модули, контролирующие доступ пользователей с помощью ключей активации, серийных номеров и т. д. Такая защита является дешёвым решением и не может претендовать на надёжность. Интернет изобилует программами, позволяющими нелегально сгенерировать ключ активации (генераторы ключей) или заблокировать запрос на серийный номер/ключ активации (патчи, крэки). Кроме того, не стоит пренебрегать тем фактом, что сам легальный пользователь может обнародовать свой серийный номер.
Эти очевидные недостатки привели к созданию аппаратной защиты программного обеспечения в виде электронного ключа. Известно, что первые электронные ключи (то есть аппаратные устройства для защиты ПО от нелегального копирования) появились в начале 1980-ых годов, однако первенство в идее и непосредственном создании устройства, по понятным причинам, установить очень сложно.
Это не страшно. Как начать пользоваться ключом?
В первую очередь — вам нужен тот самый USB-токен. Его можно купить в интернете — в России проще всего достать JaCarta U2F. Я купил такой за 1500 рублей.
Процедура настройки ключа практически везде одинакова, поэтому мы покажем настройку на примере аккаунта в Google.
1 — Войдите в настройки двойной аутентификации аккаунта. Нажмите на «Выберите другой способ» и выберите там электронный ключ:
2 — Подключать ключ к компьютеру сразу нельзя. Убедитесь, что он у вас в руке и жмите «Далее»:
3 — Вставьте ключ в USB-разъем и нажмите на нем кнопку:
Ключ загорится красным светом, а браузер попросит разрешения на доступ к устройству:
Маленькая черная штучка — кнопка. На нее нужно нажать после подключения ключа
4 — Ваш ключ зарегистрируется и вам нужно будет придумать ему имя:
5 — Готово! Теперь добавьте дополнительные способы входа в аккаунт — через приложение или СМС-код. Это нужно, если вы потеряете свой токен. Но я этого делать не буду.
А теперь небольшой челендж для читателей. Вот все данные аккаунта, на котором я установил свой USB-ключ:
Электронный ключ (также аппаратный ключ, иногда донгл от англ. dongle ) — аппаратное средство, предназначенное для защиты программного обеспечения (ПО) и данных от копирования, нелегального использования и несанкционированного распространения.
Основой данной технологии является специализированная микросхема, либо защищённый от считывания микроконтроллер, имеющие уникальные для каждого ключа алгоритмы работы. Донглы также имеют защищённую энергонезависимую память небольшого объёма, более сложные устройства могут иметь встроенный криптопроцессор (для аппаратной реализации шифрующих алгоритмов), часы реального времени. Аппаратные ключи могут иметь различные форм-факторы, но чаще всего они подключаются к компьютеру через USB. Также встречаются с LPT- или PCMCIA-интерфейсами.
Принцип действия электронных ключей. Ключ присоединяется к определённому интерфейсу компьютера. Далее защищённая программа через специальный драйвер отправляет ему информацию, которая обрабатывается в соответствии с заданным алгоритмом и возвращается обратно. Если ответ ключа правильный, то программа продолжает свою работу. В противном случае она может выполнять определенные разработчиками действия, например, переключаться в демонстрационный режим, блокируя доступ к определённым функциям.
Существуют специальные ключи, способные осуществлять лицензирования (ограничения числа работающих в сети копий программы) защищенного приложения по сети. В этом случае достаточно одного ключа на всю локальную сеть. Ключ устанавливается на любой рабочей станции или сервере сети. Защищенные приложения обращаются к ключу по локальной сети. Преимущество в том, что для работы с приложением в пределах локальной сети им не нужно носить с собой электронный ключ.
На российском рынке наиболее известны следующие линейки продуктов (в алфавитном порядке): CodeMeter от WIBU-SYSTEMS, Guardant от компании «Актив», HASP от Aladdin, LOCK от Astroma Ltd., Rockey от Feitian, SenseLock от Seculab и др.
Обход защиты
Задача злоумышленника — заставить защищённую программу работать в условиях отсутствия легального ключа, подсоединённого к компьютеру. Не вдаваясь очень глубоко в технические подробности, будем исходить из предположения, что у злоумышленника есть следующие возможности:
- Перехватывать все обращения к ключу;
- Протоколировать и анализировать эти обращения;
- Посылать запросы к ключу и получать на них ответы;
- Протоколировать и анализировать эти ответы;
- Посылать ответы от имени ключа и др.
Такие широкие возможности противника можно объяснить тем, что он имеет доступ ко всем открытым интерфейсам, документации, драйверам и может их анализировать на практике с привлечением любых средств.
Для того чтобы заставить программу работать так, как она работала бы с ключом, можно или внести исправления в программу (взломать её программный модуль), или эмулировать наличие ключа путем перехвата вызовов библиотеки API обмена с ключом.
Стоит отметить, что современные электронные ключи (к примеру, ключи Guardant поколения Sign и современные ключи HASP HL) обсеспечивают стойкое шифрование протокола обмена электронный ключ -- библиотека API работы с ключом. В результате наиболее уязвимыми местами остаются точки вызовов функций этого API в приложении и логика обработки их результата.
Эмуляция ключа
Построить полный эмулятор современного электронного ключа — это достаточно трудоемкий процесс, требующий большого количества времени и существенных инвестиций. Ранее злоумышленникам это удавалось: например, компания Aladdin признаёт, что в 1999 году злоумышленникам удалось разработать довольно корректно работающий эмулятор ключа HASP3. Это стало возможным благодаря тому, что алгоритмы кодирования были реализованы программно. Аппаратная реализация кодирования существенно усложнила задачу, поэтому злоумышленники предпочитают атаковать какой-то конкретный защищенный продукт, а не защитный механизм в общем виде. Тем не менее взлому были подвержены и ключи серии HASP4. И по сей день в природе имеются эмуляторы для HASP HL (HASP 5), но не в так называемом «паблике» (публичном доступе).
История
Защита ПО от нелицензионного пользования увеличивает прибыль разработчика. На сегодняшний день существует несколько подходов к решению этой проблемы. Подавляющее большинство создателей ПО используют различные программные модули, контролирующие доступ пользователей с помощью ключей активации, серийных номеров и т. д. Такая защита является дешёвым решением и не может претендовать на надёжность. Интернет изобилует программами, позволяющими нелегально сгенерировать ключ активации (генераторы ключей) или заблокировать запрос на серийный номер/ключ активации (патчи, крэки). Кроме того, не стоит пренебрегать тем фактом, что сам легальный пользователь может обнародовать свой серийный номер.
Эти очевидные недостатки привели к созданию аппаратной защиты программного обеспечения в виде электронного ключа. Известно, что первые электронные ключи (то есть аппаратные устройства для защиты ПО от нелегального копирования) появились в начале 1980ых годов, однако первенство в идее и непосредственном создании устройства по понятным причинам установить очень сложно. По одной из версий идея заставить программу определенным образом опрашивать аппаратный блок и работать только в его присутствии родилась в голове инженера Дэна Максвелла ещё в начале 70ых годов, а в 1982 году созданная Дэном компания начала выпуск ключа SecuriKey для IBM PC (ключ подключался к компьютеру через параллельный порт). По другой версии первый в мире электронный ключ, получивший название, разработала немецкая компания FAST Electronic (впоследствии FAST Electronic была куплена компанией Aladdin, тоже претендующей на первенство в этой области со своими аппаратными ключами HASP). Так или иначе, первые электронные ключи были далеки от совершенства и сильно изменились с того времени.
Технология защиты
Технология защиты от несанкционированного использования ПО построена на реализации запросов из исполняемого файла или динамической библиотеки к ключу с последующим получением и, если предусмотрено, анализом ответа. Вот некоторые характерные запросы:
- проверка наличия подключения ключа;
- считывание с ключа необходимых программе данных в качестве параметра запуска (используется, в основном, только при поиске подходящего ключа, но не для защиты);
- запрос на расшифрование данных или исполняемого кода, необходимых для работы программы, зашифрованных при защите программы (позволяет осуществлять "сравнение с эталоном"; в случае шифрования кода, выполнение нерасшифрованного кода приводит к ошибке);
- запрос на расшифрование данных, зашифрованных ранее самой программой (позволяет отправлять каждый раз разные запросы к ключу и, тем самым, защититься от эмуляции библиотек API / самого ключа)
- проверка целостности исполняемого кода путём сравнения его текущей контрольной суммы с оригинальной контрольной суммой, считываемой с ключа (к примеру, путем выполнения ЭЦП кода или других переданных данных алгоритмом ключа и проверки этой ЭЦП внутри приложения; т.к. ЭЦП всегда разная - особенность криптографического алгоритма - то это также помогает защититься от эмуляции API/ключа);
- запрос к встроенным в ключ часам реального времени (при их наличии; может осуществляться автоматически при ограничении времени работы аппаратных алгоритмов ключа по его внутреннему таймеру);
- и т.д.
Стоит отметить, что некоторые современные ключи (Guardant Code от Компании "Актив", LOCK от Astroma Ltd., Rockey6 Smart от Feitian, Senselock от Seculab) позволяют разработчику хранить собственные алгоритмы или даже отдельные части кода приложения (например, специфические алгоритмы разработчика, получающие на вход большое число параметров) и исполнять их в самом ключе на его собственном микропроцессоре. Помимо защиты ПО от нелегального использования такой подход позволяет защитить используемый в программе алгоритм от изучения, клонирования и использования в своих приложениях конкурентами. Однако для простого алгоритма (а разработчики часто совершают ошибку, выбирая для загрузки недостаточно сложный алгоритм) может быть проведен криптоанализ по методу анализа "черного ящика".
Как следует из вышесказанного, «сердцем» электронного ключа является алгоритм преобразования (криптографический или другой). В современных ключах он реализовыван аппаратно — это практически исключает создание полного эмулятора ключа, так как ключ шифрования никогда не передается на выход донгла, что исключает возможность его перехвата.
Алгоритм шифрования может быть секретным или публичным. Секретные алгоритмы разрабатываются самим производителем средств защиты, в том числе и индивидуально для каждого заказчика. Главным недостатком использования таких алгоритмов является невозможность оценки криптографической стойкости. С уверенностью сказать, насколько надёжен алгоритм, можно было лишь постфактум: взломали или нет. Публичный алгоритм, или «открытый исходник», обладает криптостойкостью несравнимо большей. Такие алгоритмы проверяются не случайными людьми, а рядом экспертов, специализирующихся на анализе криптографии. Примерами таких алгоритмов могут служить широко используемые ГОСТ 28147—89, AES, RSA, Elgamal и др.
Загружаем прошивку
Мы в шаге от успеха, осталось только загрузить прошивку. Открываем терминал, переходим в папку с нашей прошивкой(gnuk.elf).
Итак, теперь мы залили прошивку на наш девайс. Остался один шаг — запретить чтение памяти микроконтроллера. ВНИМАНИЕ! Это очень важный этап, который не позволит человеку, который украл ваш ключ, вытащить из него секретную информацию.
Для этого запускаем команду:
Теперь все готово.
Обход защиты
Задача злоумышленника — заставить защищённую программу работать в условиях отсутствия легального ключа, подсоединённого к компьютеру. Не вдаваясь очень глубоко в технические подробности, будем исходить из предположения, что у злоумышленника есть следующие возможности:
- Перехватывать все обращения к ключу;
- Протоколировать и анализировать эти обращения;
- Посылать запросы к ключу и получать на них ответы;
- Протоколировать и анализировать эти ответы;
- Посылать ответы от имени ключа и др.
Такие широкие возможности противника можно объяснить тем, что он имеет доступ ко всем открытым интерфейсам, документации, драйверам и может их анализировать на практике с привлечением любых средств.
Для того чтобы заставить программу работать так, как она работала бы с ключом, можно или внести исправления в программу (взломать её программный модуль), или эмулировать наличие ключа.
Защита с помощью автоматических средств
Для большинства семейств аппаратных ключей разработаны автоматические инструменты (входящие в SDK), позволяющие защитить программу «за несколько кликов мыши». При этом файл приложения «оборачивается» в собственный код разработчика. Реализуемая этим кодом функциональность варьируется в зависимости от производителя, но чаще всего код осуществляет проверку наличия ключа, контроль лицензионной политики (заданной поставщиком ПО), внедряет механизм защиты исполняемого файла от отладки и декомпиляции (например, сжатие исполняемого файла) и др.
Важно то, что для использования автоматического инструмента защиты не требуется доступ к исходному коду приложения. Например, при локализации зарубежных продуктов (когда отсутствует возможность вмешательства в исходный код ПО) такой механизм защиты незаменим, однако он не позволяет реализовать исопользовать весь потенциал электронных ключей и реализовать гибкую и индивидуальную защиту.
Содержание
Собираем все обратно
Теперь, когда все шаги позади, осталось позаботиться о внешнем виде нашего девайса. Отпаиваем провода. Оригинальная панель контактов нам тоже больше не нужна, так что можно смело выпаять её.
Разламываем крепление и выпаиваем контакты по одному.
Теперь надеваем обратно корпус, и заклеиваем заднюю стенку подходящим куском пластика.
Что в итоге?
Пример использования для ssh
И под конец, давайте посмотрим как можно использовать этот ключ для хранения ssh-ключей и подключения к удаленному серверу.
Есть два пути — сгенерировать новый ключ или импортировать уже имеющийся ключ на токен.
Посмотрим оба варианта. Вставляем токен в USB. В dmesg можно посмотреть информацию о подключенном устройстве.
Генерация нового ssh ключа
Важно понимать, что ключ генерируется на самом устройстве, а не на вашем компьютере. Так что, такой ключ вообще никогда не покидает пределы устройства.
Открывается интерактивный режим gpg, включаем режим администратора командой admin:
Далее запускаем команду генерации нового ключа:
Далее идет стандартная процедура генерации ключа gpg. Во время которой вам будет предложено сохранить бекап ключа на диск. Разработчики рекомендуют делать бэкапы, но решать вам.
Единственно — аппаратно поддерживается генерация RSA ключей до 2048 бит. Если нужно 4096 — ключ прийдется генерировать на компьютере, а потом уже импортировать на само устройство.
Далее вам потребуются пин-коды. По умолчанию в прошивке зашиты следующие пин-коды:
CARD PIN — 123456
ADMIN PIN — 12345678
В будущем их обязательно нужно поменять.
Ключ может генерироваться немного дольше, чем если бы он генерировался непосредственно на компьютере, поэтому запасаемся терпением.
Импорт уже имеющегося ключа
Теперь посмотрим что делать, если у вас уже есть ssh-ключ, который вы хотели бы использовать.
Для этого импортируем ключ в gpg:
Теперь нам нужно узнать id ключа. Для этого выводим список всех доступных в gpg:
И находим импортированный ключ:
В моем случае id ключа — DFEFF02E226560B7F5A5F2CAB19534F88F8FE4EC
Заходим в интерактивный режим редактирования ключа gpg:
И даем команду на копирование ключа на смарт карту:
Экспорт публичного ключа в ssh формате
Достаем нужный публичный ключ с токена для того, чтобы положить его на сервер:
В моем случае вывод выглядит так:
Тут нас интересует ID-шник ключа, в моем случае 01. Теперь экспортируем публичный ключ:
Копируем публичный ключ в файлик pub.key:
И конвертируем его в ssh-rsa формат:
Получается публичный ключ в нужном формате:
Дальше идет стандартная процедура настройки ssh для входа по заданному ключу — нужно добавить ключ в файлик ~/.ssh/authorized_keys на удаленном сервере.
Конфигурирование ssh
Теперь, для того, чтобы зайти на сервер с использованием нашего токена нужно вызвать ssh с ключом -I и передать путь к драйверу токена. Наш токен совместим с одним из стандартных драйверов, так что будем использовать его
Однако, удобнее будет воспользоваться config файлом (~/.ssh/config)
Добавляем в него следующие строки
Теперь вызов ssh стал еще проще:
Как поменять стандартные пин-коды
Не менее важным шагом будет установка собственных пин-кодов. Для начала нужно понять, что тут используется два разных пин-кода:
- PIN-code — этот код используется при рутинных операциях со смарт картой — зашифровать что-то, подписать и т.д.
- Admin Pin-code — этот код нужен для того, чтобы изменять/удалять ключи и делать всякие подобные «админские» вещи
- Reset code — код, который позволит разблокировать токен, после трех неправильных попыток ввода PIN-кода. Его использование не обязательно, так что решать вам
Теперь приступим. Для этого опять заходим в интерактивный режим GPG:
И вводим команду passwd:
Откроется окно, где можно будет сменить пин-код от токена.
Теперь нужно поменять пин-код администратора. Для этого переходим в режим администратора:
Вводим команду passwd снова:
Однако теперь она работает в расширенном режиме и нам предложат несколько вариантов:
Выбираем change Admin PIN и по стандартной схеме устанавливаем пароль администратора. Напомню, default Admin PIN — 12345678.
Взлом программного модуля
Злоумышленник исследует логику самой программы, с той целью, чтобы, проанализировав весь код приложения, выделить блок защиты и деактивировать его. Взлом программ осуществляется с помощью отладки (или пошаговое исполнение), декомпиляции и дампа оперативной памяти. Эти способы анализа исполняемого кода программы чаще всего используются злоумышленниками в комплексе.
Дизассемблирование — это способ преобразования исполняемых модулей в язык программирования, понятный человеку — Assembler. В этом случае злоумышленник получает распечатку (листинг) того, что делает приложение.
Суть атаки с помощью дапма памяти заключается в следующем. Специальные программы (дамперы) считывают содержимое оперативной памяти на тот момент, когда приложение начало нормально исполняться, и злоумышленник получает рабочий код (или интересующую его часть) в чистом виде. Главное для злоумышленника — верно выбрать этот момент. К примеру, часть кода появляется в оперативной памяти в открытом виде только на время своего исполнения, обратно зашифровываясь по завершению.
Отметим, что существует немало способов противодействия отладке, и разработчики защиты используют их: нелинейность кода (многопоточность), «замусоривание» кода, по сути, бесполезными функциями, выполняющими сложные операции, с целью запутать злоумышленника, использование несовершенства самих отладчиков и др.
По данным аналитиков «Лаборатории Касперского», в 2017 году было предпринято более 260 млн попыток фишинговых атак — это один из способов получить все ваши пароли и данные. От этого может не спасти даже двойная аутентификация через СМС или специальное приложение.
График попыток фишинговых атак
Но люди придумали такую штуку, как USB-токен — она лучше защищает ваши данные. Рассказываем, почему этот способ более надежный и как правильно все настроить.
Необходимые компоненты
Как ни странно, программатор для микроконтроллеров STM32 собран на микроконтроллере STM32. Этот девайс внешне очень напоминает флешку, что нам как нельзя на руку. К тому, же его корпус изготовлен из алюминия, так что можно не переживать что он повредится. Стоит это чудо на алиэкспресс 1.5-3 доллара. Нам потребуется две такие штуки. Одну мы переделаем под ключ, а вторую будем использовать чтобы залить прошивку на первую. Если у Вас уже есть программатор STM32 можно обойтись и одной штукой.
Итого, нам потребуется:
- Программатор ST-Link v2 — 2 штуки
- Паяльник
- Немного проводов — как правило подходящие провода уже идут в комплекте с ST-Link
- Linux, для того, чтобы скомпилировать и залить прошивку
Защита ПО с помощью электронного ключа
Да кто будет пользоваться этими «флешками»?
Все сотрудники из Google этим пользуются и очень довольны. В начале 2017 года все работники корпорации перешли на этот способ аутентификации своих аккаунтов. Как итог — за этот год не произошло ни одной кражи личной информации.
Теперь в Google считают, что USB-токены — самый надежный способ защитить свой аккаунт. Вот так.
Как работает DistKontrolUSB?
К счастью, найти несовместимый ключ нам тоже не удалось, так что о решении этой проблемы рассказать нечего. В итоге мы собрали в одном месте почти все (кроме установленных в ноутбуках) ключи для лицензионного ПО, и трудностей с их использованием на работающем в виртуальной машине Hyper-V сервере удаленных рабочих столов не возникло. С электронными подписями на защищенных токенах интереснее: мы не стали ставить СКЗИ на сервер терминалов по соображениям безопасности. Сомнительно, кстати, что их использование в виртуальных средах вообще возможно/легально. Как правило такие вещи нужны некоторым сотрудникам бухгалтерии и ответственным за участие в торгах людям — в основном им то и были выделены корпоративные ноутбуки. Все криптопровайдеры под Windows прекрасно завелись и работают с подключенными к портам удаленного коммутатора защищенным носителям как с родными. Софт под Linux/OSX мы не тестировали за ненадобностью, но и там все должно завестись с поправкой на обычные для скрещивания этих систем с отечественной криптографией проблемы.
Используем максимальную комплектацию, с двумя гигабитными портами и с резервированием питания.
А также решили использовать предлагаемый производителем модуль защиты подключаемых USB устройств.
опечатываем следующим образом.
Защита ПО с помощью электронного ключа
Какие замки можно купить за деньги?
Рыночная ситуация оказалась довольно печальной. В продаже есть некоторое количество китайских устройств, но связываться с брендами и ноунеймами из Поднебесной мы не рискнули. Кто знает, какие с ними возникнут проблемы совместимости? Поддержки потом не дождешься. Модели западных производителей (Digi Anywhereusb, SEH myUTN и т. д.) в пересчете на порт стоят слишком дорого: пара тысяч долларов за устройство на 14 портов — не рекорд. К тому же безопасники забраковали использование носителей с квалифицированными ЭЦП в устройствах с импортными прошивками. В итоге мы купили DistKontrolUSB-64 — российский стоечный (с возможностью настольной установки) концентратор USB over IP на 64 порта.
Нас подкупила откровенность отечественного производителя, который гарантирует полную совместимость только с протестированными ключами. При этом найти несовместимое USB-устройство, по словам менеджера, у технических специалистов компании так и не получилось, а если даже такая ситуация возникнет, техническая поддержка и разработчики помогут решить проблему. Пожалуй, это лучший аппарат, который можно купить за 106500 рублей. К тому же он имеет всю необходимую разрешительную документацию для использования в коммерческих организациях и госструктурах.
Комплект разработчика ПО
Донгл относят к аппаратным методам защиты ПО, однако современные электронные ключи часто определяются как мультиплатформенные аппаратно-программные инструментальные системы для защиты ПО. Дело в том, что помимо самого ключа компании, выпускающие электронные ключи, предоставляют SDK (Software Developer Kit — комплект разработчика ПО). В SDK входит все необходимое для начала использования представляемой технологии в собственных программных продуктах — средства разработки, полная техническая документация, поддержка различных операционных систем, детальные примеры, фрагменты кода, инструменты для автоматической защиты. Также SDK может включать в себя демонстрационные ключи для построения тестовых проектов.
О безопасности устройства
Разумеется, за 3$ нельзя достичь секьюрности уровня ключей за 200+ долларов. Однако, собранный девайс можно рассматривать как ключ начального уровня. Насколько мне известно, заводские ключи Nitrokey Start используют такую же прошивку. В любом случае, использование такого устройства поднимет безопасность как минимум на уровень выше. Так что это отличный способ начать использовать аппаратные ключи.
Теперь поговорим немного о том, что будет если Вы потеряете этот ключ. Сам ключ защищен пин-кодом. После нескольких неудачных попыток ключ блокируется. Память самого устройства защищена от чтения, так что считать записанные в него ключи напрямую не получится.
Существуют некоторые виды атак на сам чип(например препарирование и подключение к нему микроэлектородов, что позволит измерять напряжение в любом месте чипа, в том числе и памяти), но они довольно затратные.
Так что, повторюсь еще раз, это отличный вариант начального уровня, и даже с ним безопасность выйдет на принципиально новый уровень.
Реализация защиты с помощью функций API
Помимо использования автоматической защиты, разработчику ПО предоставляется возможность самостоятельно разработать защиту, интегрируя систему защиты в приложение на уровне исходного кода. Для этого в SDK включены библиотеки для различных языков программирования, содержащие описание функциональности API для данного ключа. API представляет собой набор функций, предназначенных для обмена данными между приложением, системным драйвером (и сервером в случае сетевых ключей) и самим ключом. Функции API обеспечивают выполнение различных операций с ключом: поиска, чтения и записи памяти, шифрования и расшифрования данных при помощи аппаратных алгоритмов, лицензирования сетевого ПО и т. д.
Умелое применение данного метода обеспечивает высокий уровень защищённости приложений. Нейтрализовать защиту, встроенную в приложение, достаточно трудно вследствие её уникальности и «размытости» в теле программы. Сама по себе необходимость изучения и модификации исполняемого кода защищенного приложения для обхода защиты является серьёзным препятствием к ее взлому. Поэтому задачей разработчика защиты, в первую очередь, является защита от возможных автоматизированных методов взлома путем реализации собственной защиты с использованием API работы с ключами.
Эмуляция ключа
Построить полный эмулятор современного электронного ключа — это достаточно трудоёмкий процесс, требующий большого количества времени и существенных инвестиций. Ранее злоумышленникам это удавалось: например, компания Aladdin признаёт, что в 1999 году злоумышленникам удалось разработать довольно корректно работающий эмулятор ключа HASP3 и HASP4. Это стало возможным благодаря тому, что ключ использовал проприетарный алгоритм кодирования, который был взломан. Сейчас большинство ключей используют публичные крипотоалгоритмы, поэтому злоумышленники предпочитают атаковать какой-то конкретный защищённый продукт, а не защитный механизм в общем виде. Для современных систем защиты HASP и Guardant эмуляторов в свободном доступе нет, так как используется криптосистема с открытым ключом.
Информации о полной эмуляции современных ключей Guardant не встречалось. Существующие табличные эмуляторы реализованы только для конкретных приложений. Возможность их создания была обусловлена неиспользованием (или неграмотным использованием) основного функционала электронных ключей разработчиками защит.
Так же отсутствует какая-либо информация о полной или хотя бы частичной эмуляции ключей LOCK, либо о каких-либо других способах обхода этой защиты.
Загрузка прошивки на устройство
Теперь, когда у нас есть готовый файл с прошивкой нам нужно только загрузить её на устройство. Для этого, нам придется немного поработать паяльником. Не беспокойтесь, особых навыков тут не потребуется, всего-то припаять 4 проводка.
Итак, берем один из программаторов и стягиваем с него корпус. Выбранный программатор и будет нашим донором. Вот что мы найдем внутри
Обратите внимание на 4 контакта на плате. К ним нам нужно будет припаяться. Я рекомендую использовать для этого провода, которые идут в комплекте с ST-Link. Зачищаем провода с одного конца и припаиваем их к контактам. Если нам повезло, то на плате будут обозначения этих контактов.
"
Теперь, второй конец проводов подключаем к оставшемуся целым программатору. Если вам повезло, то просто подключаем провода в соответствии с надписями:
GND к GND
3.3V к 3.3V
SWDIO к SWDIO
SWCLK к SWCLK
Если надписей на плате не оказалось, то прийдется тыкать наугад воспользоваться тестером. С его помощью можно легко найти GND(он соединен с GND на выводах программатора-донора), аналогично 3.3V. Остальные два провода прийдется подключать наугад. Благо, вариантов всего 2. В итоге, получается что-то похожее на это
На этом фото синий девайс — программматор, который мы используем только как программатор. Пусть вас не смущает то, что на фото в начале статьи у итогового девайса синий цвет корпуса. Это не он. Будущий девайс находится справа.
Реализация защиты с помощью автоматических средств
Для большинства семейств аппаратных ключей разработаны автоматические инструменты (входящие в лицензионной политики (заданной поставщиком ПО), внедряет механизм защиты исполняемого файла от отладки и декомпиляции (например, сжатие исполняемого файла) и др.
Важно то, что для использования автоматического инструмента защиты не требуется доступ к исходному коду приложения. Например, при локализации зарубежных продуктов (когда отсутствует возможность вмешательства в исходный код ПО) такой механизм защиты незаменим, однако он не позволяет реализовать надёжную, гибкую и индивидуальную защиту.
Компилируем прошивку
Итак, начнем с софтварной части — сборке прошивки для нашего ключа. Исходные коды прошивки можно найти в этом репозитории. Я бы посоветовал скачать последнюю стабильную версию(её можно найти во вкладке tags). Можно склонировать репозиторий либо скачать в виде zip архива. Разминаем пальцы, запускаем терминал и переходим в папку с проектом. Переходим в папку src
Для того чтобы скомпилировать и загрузить прошивку нам нужно установить несколько пакетов:
- arm-none-eabi-gcc
- arm-none-eabi-newlib
- openocd
Если Вы сидите на Ubuntu — используйте apt.
Напомню, что мы находимся в папке src проекта.
Запускаем configure скрипт
Запускаем утилиту make и наблюдаем как компилируется наша прошивка.
После компиляции появится папка build, а в ней файл gnuk.elf — он-то нам и нужен.
Реализация защиты с помощью функций API
Помимо использования автоматической защиты, разработчику ПО предоставляется возможность самостоятельно разработать защиту, интегрируя систему защиты в приложения на уровне исходного кода. Для этого в SDK включены языков программирования, содержащие описание функциональности API для данного ключа. API представляет собой набор функций, предназначенных для обмена данными между приложением, системным драйвером (и сервером в случае сетевых ключей) и самим ключом. Функции API обеспечивают выполнение различных операций с ключом: поиска, чтения и записи памяти, шифрования и расшифрования данных при помощи аппаратных алгоритмов, лицензирования сетевого ПО и т. д.
Умелое применение данного метода обеспечивает достаточно высокий уровень защищённости приложений. Нейтрализовать защиту, встроенную в приложение, достаточно трудно вследствие её «размытости» в теле программы.
Ссылки на полезные материалы
В процессе использования устройства наверняка возникнет потребность в дополнительной информации. Я собрал список хороших источников.
-
на сайте Debian по токену по токену Nitrokey Start — в нем используется та же прошивка, так что советы подойдут и нам
Пускать внутрь защищенного периметра собственные машины пользователей и устанавливать на них корпоративный софт мы не стали. Это плохой с точки зрения информационной безопасности подход, поскольку такие компьютеры ИТ-отдел фактически не контролирует. Чтобы сотрудники могли подключаться к информационным системам из дома, пришлось создать виртуальную частную сеть и поднять сервис удаленных рабочих столов. Отдельным сотрудникам были выданы имеющиеся в наличии ноутбуки, если им требовалось работать с локальным ПО. Больших затрат переход на удаленку не потребовал. Чтобы не покупать дорогой сервер, мы ограничились арендой виртуального и приобретением терминальных лицензий Microsoft. Плюсы такого подхода очевидны: не пришлось тратиться на железо и возиться с разношерстным парком чужой техники. Чтобы пользователь получил привычную среду, достаточно настроить соединение RDP. Также мы прописали ограничения на подключение внешних носителей, а конфигурация корпоративных ноутбуков уже была достаточно безопасной: пользователи не имели на них администраторских полномочий, применялись политики безопасности, работал брандмауэр, антивирус и т.д. и т.п.
Что это такое и как работает?
USB-токен — небольшое устройство, похожее на обычную флешку. Внутри них специальный уникальный код, заменяющий другие способы двойной аутентификации.
По факту его можно сравнить с ключом от вашей квартиры — если ключ в компьютере, то вы можете войти в свой аккаунт. Только здесь разница в том, что ваш аккаунт гораздо сложнее взломать отмычкой.
Кратко о принципах работы
- Сохранить в файлике на рабочем столе — старый и проверенный годами способ записать что-то. Проблема в том, что помимо самого пользователя еще куча других программ имеет доступ к файлам на вашем рабочем столе. И если вы совершенно уверены в том, что все они делают то, для чего они предназначены, не собирают о вас никакие данные и попросту не сливают их в сеть — эта статья не для вас.
- Менеджеры паролей — по-сути такое же хранение в файлике, просто он теперь зашифрован и чтобы получить доступ нужно знать пароль. Уже неплохо, но раз менеджер паролей запускается на вашем компьютере, то незашифрованные ключи попадают в оперативную память, откуда могут быть украдены из-за какой-нибудь уязвимости ОС
- Записать на бумажку — удивительно, но этот способ выглядит немного более безопасным. Ключи не хранятся на вашем компьютере, кишащем вирусами. Каждый раз, когда вам нужно использовать ключ вы просто вводите его с клавиатуры. Однако, если ваши ключи довольно длинные(как например ssh-ключи) это может стать проблемой. Да и кейлоггеры не дремлют
Комплект разработчика ПО
Донгл относят к аппаратным методам защиты ПО, однако современные электронные ключи часто определяются как мультиплатформенные аппаратно-программные инструментальные системы для защиты ПО. Дело в том, что помимо самого ключа компании, выпускающие электронные ключи, предоставляют SDK входит все необходимое для начала использования представляемой технологии в собственных программных продуктах — средства разработки, полная техническая документация, поддержка различных операционных систем, детальные примеры, фрагменты кода. Также SDK может включать в себя демонстрационные ключи для построения тестовых проектов.
Почему это надежнее двойной аутентификации?
Обычная двойная аутентификация работает так: вы вводите пароль от почты, вам по СМС приходит код подтверждения для входа в аккаунт. Получается, что если у злоумышленника нет вашего смартфона, то зайти под вашим логином он не сможет. Но на самом деле это не совсем так.
Приложения-аутентификаторы, вроде Google Authentificator, в этом плане надежнее. Для вас каждые 30 секунд генерируется новый пароль — его знают только ваш смартфон и аккаунт в интернете. Но даже так хакеры могут до вас добраться, особенно если вы доверчивый.
Злоумышленник может получить доступ к этим кодам безопасности на этапе настройки приложения. Кроме того, вас могут обмануть и вы зайдете на фальшивый сайт Google, где сами выдадите все пароли хакерам.
Взлом программного модуля
Злоумышленник исследует логику самой программы, с той целью, чтобы, проанализировав весь код приложения, выделить блок защиты и деактивировать его. Взлом программ осуществляется с помощью отладки (или пошагового исполнения), декомпиляции и дампа оперативной памяти. Эти способы анализа исполняемого кода программы чаще всего используются злоумышленниками в комплексе.
Дизассемблирование — способ преобразования кода исполняемых модулей в язык программирования, понятный человеку — Assembler. В этом случае злоумышленник получает распечатку (листинг) того, что делает приложение.
Суть атаки с помощью дапма памяти заключается в считывании содержимого оперативной памяти в момент, когда приложение начало нормально исполняться. В результате злоумышленник получает рабочий код (или интересующую его часть) в "чистом виде" (если, к примеру, код приложения был зашифрован и расшифровывается только частично, в процессе исполнения того или иного участка). Главное для злоумышленника — верно выбрать момент.
Отметим, что существует немало способов противодействия отладке, и разработчики защиты используют их: нелинейность кода, (многопоточность), недетерминированную последовательность исполнения, «замусоривание» кода, (бесполезными функциями, выполняющими сложные операции, с целью запутать злоумышленника), использование несовершенства самих отладчиков и др.
Итоговый результат — ключ размером с флешку
Повсеместное шифрование и, как следствие, обилие ключей заставляет задуматься об их надежном хранении. Хранение ключей на внешних устройствах, откуда они не могут быть скопированы, уже давно считается хорошей практикой. Я расскажу о том, как за 3$ и 2 часа сделать такой девайс.
Это из Гарри Поттера. На фото изображены крестражи. Цитата из фильма: «Крестраж — это предмет, в котором человек спрятал часть своей души… помещает её в предмет и он будет защищен, если на него нападут . ». Личные данные, которые мы все пытаемся защитить, вполне заслуженно можно сравнить с частью души)
Все слишком хорошо! Какие подводные?
Да, подводные камни здесь есть. Пока полноценно эти токены поддерживаются только в двух браузерах — Google Chrome и Opera. В Firefox это реализовали через расширение, а в Edge обещают добавить позже. Разработчики Safari вообще об этой функции ничего не говорят.
И еще один недостаток связан со смартфонами. Чтобы войти в аккаунт на своем Айфоне, вам понадобится ключ с Bluetooth — он стоит немного дороже. Еще можно попробовать переходник, но мы этот способ не проверяли, так что может не сработать.
Куда вставить ключ, если нет замка?
Проблема возникла фактически на ровном месте. В компании используется довольно много различных USB-ключей для программного обеспечения, а также электронных цифровых подписей на защищенных токенах. 1С (HASP), Рутокен, ESMART Token USB 64K — завести все это в терминальной среде нереально, если нет «железного» сервера. К VPS нельзя подключить устройство USB, к тому же выносить ключи наружу мы не хотели. Особых трудностей не возникло разве что с немногочисленными корпоративными ноутбуками, для которых давно были куплены отдельные ключи, если того требовала ситуация.
В удаленном режиме такой вариант не годился, потому что даже если выделить пользователю корпоративный ноутбук, ему придется выдать на руки и токен. Этого требовалось избежать. К тому же одним ключом могли пользоваться несколько человек, а как обеспечить их безопасную передачу на удаленке — мы придумать не смогли. Головная боль возникла одновременно и у айтишников, которым нужно было найти решающие проблему технические средства, и у безопасников, которым требовалось организационными мерами навести хоть какое-то подобие порядка.
Пришлось задуматься о едином решении для централизованного хранения всех ключей и обеспечения безопасного доступа к ним пользователей. Не слишком дорогостоящем решении в духе USB over IP с надежным шифрованием. Для его организации есть множество платных и бесплатных программных продуктов, однако все равно потребовалась бы физическая машина, а возможности подключения устройств USB к ней довольно ограничены. Несколько десятков «свистков» в один сервер не воткнешь, если грубо, и не факт, что обычный компьютер защитит носители от физического повреждения. К тому же при настройке программы наверняка вылезут проблемы совместимости, а также что-нибудь вроде невозможности удаленно дернуть по питанию залипший ключ. Тут поможет только готовое решение, т.е. специальная «железка» с заточенной под наши задачи прошивкой.
Технология защиты
- проверка наличия подключения ключа;
- считывание с ключа необходимых программе данных в качестве параметра запуска;
- запрос на расшифрование данных или исполняемого кода, необходимых для работы программы (предварительно разработчик защиты шифрует часть кода программы и, понятно, непосредственное выполнение такого зашифрованного кода приводит к ошибке);
- проверка целостности исполняемого кода путём сравнения его текущей контрольной суммы с оригинальной контрольной суммой, считываемой с ключа;
- запрос к встроенным в ключ часам реального времени (при их наличии) и т. д.
Стоит отметить, что некоторые современные ключи (ключи Senselock от Seculab, Rockey6 Smart от Feitian) позволяют разработчику хранить отдельные части кода приложения (например, недетерминированные специфические алгоритмы разработчика, получающие на вход большое число параметров) и исполнять их в самом ключе на его собственном микропроцессоре. Помимо защиты ПО от нелегального использования такой подход позволяет защитить используемый в программе алгоритм от изучения и клонирования конкурентами.
Как следует из вышесказанного, «сердцем» электронного ключа является шифрующий алгоритм. Тенденция состоит в том, чтобы реализовывать его аппаратно — это затрудняет создание полного эмулятора ключа, так как ключ шифрования никогда не передается на выход донгла, что исключает возможность его перехвата.
Алгоритм шифрования может быть секретным или публичным. Секретные алгоритмы разрабатываются самим производителем средств защиты, в том числе и индивидуально для каждого заказчика. Главным недостатком использования таких алгоритмов является невозможность оценки криптографической стойкости. С уверенностью сказать, насколько надёжен алгоритм, можно было лишь постфактум: взломали или нет. Публичный алгоритм, или «открытый исходник», обладает криптостойкостью несравнимо большей. Такие алгоритмы проверяются не случайными людьми, а рядом экспертов, специализирующихся на анализе криптографии. Примерами таких алгоритмов могут служить широко используемые ГОСТ 28147—89, RSA, Elgamal и др.
Как можно использовать
То, что мы собрали — эмулятор OpenPGP смарт карты. Такая карта может хранить в себе GPG, SSH ключи. Область применения довольно большая, например:
Содержание
Читайте также: