Российский разработчик средств информационной безопасности

Новые технологии Guardant: Guardant Stealth III и новое ядро защиты

28 октября 2005 годаВ первом квартале 2006 года в продажу поступят электронные ключи нового поколения Guardant Stealth III. Одновременно выйдет ПО Guardant версии 5.0 с полностью переработанным ядром программной части защиты.

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

Электронные ключи Guardant Stealth III

Новая аппаратная платформа

  • Современный защищенный микроконтроллер;
  • Объем энергонезависимой памяти увеличен до 2048 байт;
  • Больше аппаратных алгоритмов, защищенных ячеек и пользовательских данных;
  • Обновленный, устойчивый к износу конструктив корпуса.

Аппаратные алгоритмы GSII64

  • Стойкое аппаратное шифрование: блоками по 64 бита и поточное;
  • Длина ключа — определителя алгоритма — 128 или 256 бит;
  • Поддержка активации и деактивации алгоритмов по уникальным паролям, как эффективный инструмент лицензирования.

Защищенные ячейки

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

  • Более простая адресация памяти ключа. Не надо пересчитывать адрес данных внутри ячейки от версии к версии маски. Работа почти как с файлами — надо указывать только номер ячейки и смещение в ней.
  • Возможность устанавливать аппаратные запреты на чтение/запись ячеек памяти и организовывать Read-Only и Read-Write ячейки.
  • Уникальные пароли на чтение и обновление ячеек, как дополнительная степень безопасности.
  • Возможность активации и деактивации ячеек по уникальным паролям.

Trusted Remote Update

В работе механизма Trusted Remote Update используется новй алгоритм шифрования GSII64. При прошивке электронного ключа разработчиком или продавцом защищенного приложения задается уникальный ключ шифрования, который записывается в память Guardant Stealth III и не может быть извлечен наружу. Ключ шифрования может быть уникальным для каждого конкретного клиента и/или программного продукта.

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

Аппаратная реализация обмена на сеансовых ключах гарантирует, что однажды записанные в электронный ключ данные не могут быть в него записаны повторно. Это защищает от таких атак, как повторное сбрасывание счетчиков в исходное состояние. Аппаратная проверка ID гарантирует, что сгенерированные для одного электронного ключа данные не подойдут для другого.

Программное обеспечение Guardant 5.0

Программное обеспечение Guardant версии 5.0 поддерживает работу со всеми современными моделями электронных ключей Guardant: Guardant Stealth III, Stealth II, Net II, Stealth, Net, Fudis.

Новое ядро программной части защиты

  • Новый драйвер Guardant;
  • Новый протокол обмена;
  • Контроль целостности АРI и драйвера;
  • Защита API и драйвера при помощи псевдокода.

Новая система программирования ключей

  • Возможность уникально программировать пароли на удаленное обновление алгоритмов и ячеек. Таким образом, каждый пароль используется только один раз и не может быть скомпрометирован;
  • Возможность задавать ключи шифрования для Trusted Remote Update;
  • Возможность вести статистику по всем запрограммированным ключам — кому и когда был прошит ключ, какой ID, какие данные и пароли записаны.

Программирование ключей

Утилита программирования ключей существенно расширила свою функциональность. Поддерживаются все новые технологии, которые появились в электронных ключах Guardant Stealth III. Появилась возможность вести базу данных обо всех запрограммированных электронных ключах. Это позволяет:

  • Уникально программировать пароли на удаленное обновление алгоритмов и ячеек. Таким образом, каждый пароль используется только один раз и не может быть скомпрометирован;
  • Уникально задавать ключи шифрования для Trusted Remote Update;
  • Вести статистику по всем запрограммированным ключам (кому и когда был прошит ключ, какой ID, какие данные и пароли записаны).

Драйвер Guardant 5.0

С версии 5.0 драйверы Guardant надежно защищены псевдокодом и обмениваются данными с API по новому, полностью измененному протоколу. Это означает, что все старые эмуляторы, логгеры и мониторы перестанут с ним работать. Кроме того, внутри кода драйвера виртуальная машина производит множественный контроль целостности. Мониторинг контроля целостности драйвера также осуществляется из защищенного Win32-приложения:

  • Драйвер Guardant подписан при помощи ассиметричной криптографии
  • Защищенное приложение проверяет целостность (подпись) драйвера. Проверка происходит автоматически при вызове функций Guardant API 5.0
  • Взломщик не сможет создать драйвер-эмулятор электронного ключа так, чтобы у него сходилась подпись, поскольку закрытый ключ ему не известен
  • Хакеру придется ломать персонально каждое защищенное приложение

Реализовано два новых режима поиска ключей через GrdLogin() и GrdFind():

  • Модель Можно явно задавать параметры ключей Guardant, с которыми будет работать программа
  • Интерфейс Можно явно задавать интерфейс ключей, с которыми будет работать программа. Если, к примеру, приложение не будет поставляться с LPT ключами, то можно выключить их поиск — это ускорит работу

Новый Guardant API 5.0

Guardant API отныне Handle-ориентированный. Большинство функций интерфейса прикладного программирования Guardant теперь работает с так называемым защищенным контейнером, который служит для хранения контекста работы с данной копией Guardant API, что позволяет сократить время работы функций и упростить обмен с API, минимизировав число вызовов и параметров функций.

Также новый интерфейс прикладного программирования теперь поддерживает многопоточность, что дает возможность одновременно работать с несколькими USB-ключами, легче интегрировать API в сложные многопоточные приложения и существенно повысить защищенность, поскольку отлаживать многопоточные приложения гораздо сложнее.

Вместо двух наборов функций nsk_ и nnk_ появился единый набор функций Grd, который сам умеет работать как с локальными, так и с сетевыми электронными ключами. Это существенно упрощает программирование работы с сетевым и локальным ключом одновременно. Можно написать защиту на основе Guardant API так, чтобы дальнейший переход на сетевые ключи максимально упростился. По сути надо будет поменять один флаг в функции GrdSetFindMode().

Псевдокод и обфускация

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

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

  • Множественный взаимный контроль целостности для затруднения модификации защищенных приложений и установки точек останова;
  • Для защиты от статического дизассемблирования параметры команд вычисляются только непосредственно во время их выполнения;
  • Для затруднения поиска псевдокода в защищенном приложении, в защищенном коде отсутствуют постоянные сигнатуры;
  • Обфускация кода виртуальной машины, реальный код замусоривается вторичным;
  • Шифрование кода самой виртуальной машины;
  • Набор внутренних команд псевдокода;
  • Шифрование самого псевдокода.