Взломщик программного обеспечения будет ломать ваше приложение в тех местах, где программа принимает решение. Далее в подлинный файл вносятся исправления таким образом, чтобы изменить граф потока управления или полностью удалить вызовы защиты из кода.
Обычно взломщики ПО отправляют небольшие, отдельно запускаемые патчи, которые конечный пользователь устанавливает для обновления программного обеспечения.
Руководитель департамента разработки и тестирования Guardant
(бизнес-направление компании «Актив») Михаил Бакаляров
Фото: «Актив»
Важно усложнить процесс внесения изменений в вашу программу. Чем больше будет число защищенных функций, тем больше понадобится времени для удаления защиты. В состав решения Guardant SLK входит Guardant Protection Studio, которая обеспечивает защиту функций приложения методами виртуализации и обфускации.
Следует помнить, что с помощью Guardant Protection Studio нужно сосредоточить свой выбор именно на тех функциях, в которых программа принимает решение о своей работоспособности.
Лицензионные данные обычно хранятся в памяти ключа защиты программного обеспечения. Взломщик ПО пытается получить доступ к защищенной памяти ключа, чтобы внести изменения в схему лицензирования. Например, лицензия, ресурс запусков которой исчерпан, может быть заменена на бессрочную или функция, за которую не заплатили, может быть добавлена для использования.
Память аппаратных ключей Guardant находится внутри защищённого микроконтроллера и надежно защищена от каких-либо изменений. Поэтому любое изменение в этой памяти будет невозможно выполнить простыми способами.
Обновление лицензионных данных также происходит защищённым образом непосредственно в самом ключе. Ключ обрабатывает зашифрованные данные, которые могут быть расшифрованы только тем экземпляром, для которого они были подготовлены изначально.
Задача злоумышленника заключается в эмуляции программного обеспечения производителя ключа защиты. Для этого он разрабатывает специальное приложение – эмулятор, способное воспроизводить ранее зафиксированные вызовы так, словно настоящий ключ защиты возвращает ответы на них.
Эмуляторы, как правило, обладают ограниченной функциональностью и способны записывать и воспроизводить неполное количество вызовов. Полностью имитировать функциональность аппаратного ключа, включая его шифрование, представляет собой непростую задачу.
Для создания эмулятора злоумышленнику необходимо иметь физический экземпляр ключа, чтобы отправлять ему запросы и получать соответствующие ответы. Такие эмуляторы часто называют табличными.
Существует несколько мест, где могут находиться подобные эмуляторы. Прежде всего, они стараются заменить драйвер. В этом случае эмулятор будет универсален. Также может быть произведена замена динамической библиотеки, в которой сосредоточена работа с ключами.
Инструментарий Guardant SLK и ключи Guardant Sign позволяют надёжно противостоять такого вида атакам. Передаваемые между защищённым приложением и ключом данные надёжно шифруются. Использование защищенного канала имеет несомненное преимущество, поскольку обеспечивает наивысший уровень защиты.
Для каждой сессии применяются уникальные ключи шифрования. Злоумышленник, записывающий данные, которые передаются по защищенному каналу, не сможет их воспроизвести, поскольку ключ, используемый для шифрования, будет отличаться от ключа расшифровки. Это значительное препятствие для создания эмулятора.
Для предотвращения подмены вызовов API в инструментарий включен набор статических библиотек, использование которых рекомендуется и значительно усложняет процесс эмуляции. В результате исключается возможность замены динамических библиотек.
Для конечного пользователя с индивидуальным ключом защиты при работе в режиме удаленного рабочего стола на некоторых операционных системах возможен запуск нескольких копий программного обеспечения одновременно.
Защита Guardant SLK содержит в себе механизмы определения запуска защищенного приложения через удаленный рабочий стол. В случае выявления такой ситуации и при отсутствии соответствующего разрешения в лицензии, программа не будет запущена.
Аппаратные ключи оснащены встроенным механизмом ограничения количества одновременно работающих активных сессий. Этот функционал также можно использовать для блокировки работы нескольких копий приложения в режиме удаленного рабочего стола.
Подобный тип атак является затратным действием для злоумышленника и требует дорогостоящего оборудования и ресурсов. Речь идет как об инструментах для реверса аппаратной части, так и о необходимых экспертных знаниях. Кроме того, возникают дополнительные расходы, связанные с регулярным производством клонов аппаратных ключей.
Каждому ключу Guardant присвоен своей уникальный идентификатор. Также функционирование микропрограммы в ключе связано с уникальным идентификатором чипа, который присваивается ему на этапе производства. Это означает, что если память ключа Guardant будет скопирована в другой чип, то второй работать не сможет.
Ниже перечислены некоторые универсальные рекомендации, доступные для пользователей Guardant SLK.
1. Одновременное применение API и Guardant Protection Studio
Для повышения уровня защиты рекомендуется одновременно использовать API для интеграции вызовов ключа защиты и применять Guardant Protection Studio. Применение одного из этих методов не исключает возможность использования другого.
2. Использование статических библиотек API
Мы настоятельно рекомендуем всегда использовать статические библиотеки и стремимся обеспечить их доступность для как можно большего числа языков программирования. Использование статических библиотек значительно повышает уровень защиты. Если в вашей среде разработки доступны статические библиотеки, рекомендуется отдавать предпочтение именно им.
3. Вставка вызовов API в свой код
Размещение большого количества вызовов к ключу защиты Guardant по всему коду для проверки его наличия и привязки данных к функциональности приложения усложняет задачу злоумышленника, пытающегося взломать ваше программное обеспечение. Множество таких вызовов усложняет отслеживание схемы защиты. Также можно создавать дополнительные препятствия для потенциального взломщика, зашифровав данные, не связанные напрямую с приложением. Кроме того, можно отвлечь злоумышленника, создавая «шум» с помощью генератора случайных чисел, временных меток, промежуточных результатов вычислений и других механизмов, которые не приводят к реальным действиям или результатам.
4. Шифрование данных с помощью ключа защиты
Процессы шифрования и расшифровки выполняются внутри ключа защиты Guardant, находясь вне досягаемости любой отладочной утилиты. Использование шифрования на базе AES в Guardant SLK значительно повышает безопасность программного обеспечения. Рекомендуется создавать как можно больше уникальных вопросов к аппаратному ключу, которые могут быть размещены в таблицах. Такие таблицы содержат множество случайных вопросов, из которых приложение выбирает случайным образом нужный и ожидает соответствующего ответа от ключа, реагируя на него по мере необходимости. Основная идея – использовать как можно больше таких таблиц для повышения уровня защиты. Переключение между таблицами можно осуществлять в зависимости от используемого функционала, текущей даты и других факторов, что дополнительно усложняет задачу по созданию эмулятора ключа.
5. Использование контрольной суммы для проверки целостности исполняемых файлов
Регулярно пересчитывайте контрольную сумму важных участков кода и сравнивайте её со значением, хранящемся в памяти ключа защиты Guardant. В случае несоответствия можно предположить, что файлы были изменены. Рекомендуется выполнять такую проверку в различных частях программы, немного варьируя её в каждом месте, чтобы усложнить злоумышленнику задачу по обнаружению и обходу защиты.
6. Построение уникальной защиты на ключах Guardant Code
Если стандартных решений на базе ключей Guardant Sign для защиты и лицензирования окажется недостаточно, то с помощью ключей Guardant Code вы можете разработать полностью уникальную систему защиты и лицензирования, что значительно усложнит процесс взлома программного обеспечения.
Обратите внимание
Для реализации защиты рекомендуется сначала воспользоваться Guardant Protection Studio, в которой уже реализованы на высоком уровне такие технологии, как собственные проверки целостности, защита от дампа, шифрование кода и другие механизмы.
Если возможностей нашей готовой системы лицензирования окажется недостаточно, рекомендуется рассмотреть использование Guardant Code, с помощью которого вы сможете разработать собственную уникальную систему лицензирования и обеспечить надежную защиту вашего продукта.
Автор: Михаил Бакаляров, руководитель департамента разработки и тестирования Guardant (бизнес-направление компании «Актив»).