Новая версия автозащиты дает защиту от самых последних хакерских технологий автоматического удаления подобных защит методом снятия дампа памяти с уже работающей защищенной программы. Этот способ взлома наиболее продвинутый из всех автоматических средств на данный момент. Бороться эффективно с ним можно, но несколько трудоемко для тех, кто решил воспользоваться автозащитой.
К сожалению, если делать совсем простой механизм защиты, хакеры смогут с ним справиться весьма малыми силами. Мы постарались создать механизм, который, с одной стороны, обеспечит хорошую защиту минимальными усилиями, с другой стороны, если надо, — позволит настроить защиту весьма простым и эффективным способом. Для тех, кто глубоко в курсе этих вопросов, можно уточнить с использованием специальных терминов. В основе защиты от автоматической распаковки лежат две технологии — Import hook и Rip code:
- Первая позволяет «спрятать» импортируемые приложением функции таким образом, чтобы после снятия дампа хакеру пришлось восстанавливать оригинальную таблицу импорта вручную, а не автоматически. Мы испытывали эту технологию на нескольких известных утилитах, позволяющих восстановить таблицу импорта в автоматическом режиме, и остались довольны результатом — при помощи этих утилит ни разу не удалось взломать защиту!
- В основе защитной технологии Rip code лежит подход, который позволяет извлечь или, как говорят в народе, «рипнуть» некоторые инструкции приложения, подставив вместо них вызов соответствующей функции-менеджера защитного «движка», которая, в свою очередь, осуществляет контроль защитных механизмов.
Мы постоянно стараемся совершенствовать эти технологии по мере появления угроз автоматической распаковки приложений, защищенных с помощью автоматических инструментов.
Автозащита .NET-файлов
В данной версии нам удалось реализовать механизмы защиты, наиболее продвинутые, на наш взгляд, среди всех аналогов для электронных ключей:
- Защита от снятия дампа во время исполнения: программа в памяти во время исполнения хранится зашифрованой;
- Высокая скорость работы защищенной программы;
- Обфускация данных и кода;
- Автоматическое шифрование констант и строк с помощью электронного ключа без компромиссов по скорости работы защищенного приложения;
- Защита EXE и DLL .NET-файлов;
- Защита приложений, состоящих из нескольких файлов;
- Эффективная и быстродействующая защита приложений сетевыми электронными ключами Guardant Sign Net и Guardant Time Net;
- Поддержка х32 и х64 вариантов .NET Framework;
- Поддержка сборок типа ANY CPU.
Теперь никто не сможет сказать, что все еще нет эффективной защиты .NET-файлов! Теперь она есть, и вы можете получить ее совершенно бесплатно вместе с электронными ключами Guardant!
Мастер автоматической защиты
Автоматическая защита любых исполняемых файлов — задача технически сложная, т. к. способ защиты должен зависеть от того, какие данные обрабатывают эти файлы: то ли просто работают с базами данных, то ли осуществляют большое количество сложных математических вычислений, то ли обрабатывают данные, полученные со сканера ил и т. п.
Многое зависит и от того, на каком языке программирования или с помощью какого прикладного пакета (библиотеки классов) они создавались, какие другие технологии или протоколы они используют. Также определенную роль играет и способ распространения защищенных программ, т. н. политика лицензирования.
Современные средства автоматического взлома программ, защищенных автоматическими утилитами, очень продвинутые и эффективно бороться с ними простыми способами нелегко. Поэтому для защиты от наиболее продвинутых из них тоже существуют определенные опции.
В зависимости от всех этих параметров надо выбрать необходимые опции защиты исполняемого файла. Поскольку различных комбинаций очень много, опций тоже очень много. Для упрощения задачи выбора варианта защиты и был создан мастер автозащиты приложений. Мы постоянно совершенствуем его, стараемся одновременно максимально упростить работу с ним и учесть все необходимые для наших клиентов возможности.
Новый мастер автозащиты представляет собой очередной шаг в этом направлении. Для начинающих он дает понятный интерфейс, для продвинутых — дополнительные возможности.
Псевдокод и обфускация компонентов защиты
Это технологии защиты кода и данных, которые встроены во все наши защитные компоненты: Guardant API, автоматическая защита, драйверы. Они существуют совершенно незаметно для наших клиентов, но на самом деле представляют собой важнейший после самих электронных ключей компонент любой защиты!
Вот основные решаемые задачи, для которых существуют эти компоненты:
- Защита Guardant API от анализа и последующего написания эмулятора;
- Защита драйверов для электронных ключей старого поколения от анализа и последующего написания эмулятора;
- Защита компонентов автозащиты Native от анализа и написания утилит для ее автоматического или ручного взлома;
- Защита Native-компонентов .NET автозащиты от анализа или ручного взлома.
Как выполняют свою задачу псевдокод и обфускаторы?
Псевдокод — это технология, которая автоматически, анализируя OBJ или EXE-файл, преобразует их таким образом, что определенные места кода, заданные разработчиком защиты, дизассемблируются и преобразуются в данные, которые выглядят как совершенно случайные числа.
При выполнении такого преобразованного файла специально добавленный в них программный код под названием «виртуальная машина» или «движок псевдокода», анализируя эти данные, выполняет те команды, которые под ними зашифрованы.
При этом, если исходная команда была, например, сложения двух регистров, псевдокод выполняет гораздо больше команд, чтобы взломщику было сложнее сообразить что же делается на самом деле (хотя результат тот же). Кроме этого контролируется целостность данных и самого «движка» с помощью современных алгоритмов хэширования, встроенных в него «неразрывным» способом.
Обфускаторы работают похожим образом, только они сразу преобразуют исходные команды в другие, порождая из одной команды процессора очень много других команд, которые делают в результате то же самое, но таким образом, что взломщику очень трудно проанализировать, что же на самом деле делается4.
Обфускаторы выгодно отличаются от псевдокода более высоким быстродействием, однако эта технология в отличие от технологии псевдокода появилась не так давно и ее гораздо сложнее реализовать эффективно. Но мы стараемся развивать и совершенствовать эту идею, изучая вопрос не только с практической, но и с научной точки зрения, анализируя разные научные и прикладные работы в этой области, созданные во всем мире.
Учитывая, что злоумышленник при анализе защищенной программы, в отличие от стандартной ситуации в криптографии, имеет все необходимые для анализа данные, пусть и в сложном для анализа виде, очевидно, что псевдокод и обфускация — главнейшие в нашем деле технологии защиты программ от исследования и взлома! От их совершенства стойкость защиты зависит точно так же как и от самих электронных ключей! Увы, это умалчивается многими компаниями, поскольку эти технологии очень трудоемкие и требуют постоянного и упорного совершенствования.
Guardant API
Этот компонент для электронных кллючей Guardant Sign, Guardant Time и Guardant Code полностью переработан внутри, начиная с версии 5.3. Переработка потребовалась, чтобы все процедуры туннелирования — шифрования, выработки сеансовых ключей — были не в драйвере, а в самом защищенном приложении.
Именно благодаря этому нет смысла перехватывать протокол обмена между защищенным приложением и электронным ключом ни в одном из ранее возможном месте в операционной системе: между приложением и драйвером, между драйвером электронных ключей и драйвером устройства, между драйвером устройства и USB-хостом, создавая виртуальные USB-устройства и т. д. А значит и эмулятор создать невозможно! Это же позволяет электронным ключам работать в HID-режиме. Кроме того, мы добавили в API функции, которые:
- упрощают работу защищенных программ в многопоточном исполнении;
- помогают защищенному приложению отслеживать подключение и отключение электронных ключей;
- для Guardant Code предоставляют справочную информацию о загруженном в него коде: номер версии, хэш-кода для контроля его целостности и др.;
- для сетевых ключей теперь тоже можно получать сетевую справочную информацию.
Guardant Code API
Для электронных ключей Guardant Code мы создали новое API, которое можно использовать внутри электронного ключа при написании загружаемого кода. Во многом оно полностью повторяет Guardant API, но и содержит некоторые новые функции, такие как:
- Управление светодиодом, что может быть полезно при отладке;
- Криптографические функции AES-128, ECC160, SHA-256;
- Доступ к внутренним криптографическим функциям, не представленным по соображениям безопасности в Guardant API;
- Получение случайного числа;
- Анализ качества RTC.
Это позволяет пользоваться всеми встроенными возможностями электронного ключа, обеспечивая как совместимость с предыдущими версиями защиты, так и полное использование новых возможностей! Уточню, что какой-либо специальной библиотеки функций для использования в загружаемом коде арифметики с плавающей точкой не надо, можно использовать библиотеки из набора компиляторов GCC/RDK и т. п.
Для удобства наших клиентов есть возможность отладить код, который надо загружать в Guardant Code, пользуясь специальным отладочным модулем и Visual Studio. Все примеры для Guardant Code работоспособны и с помощью отладочной DLL!
Все новые возможности Guardant API для Code доступны для этих языков программирования! Guardant Code очень эффективный способ защиты для интерпретируемого кода. Учитывая возрастающую популярность Java и .NET, мы стараемся предложить нашим клиентам эффективные способы защиты и для этих языков программирования.
Linux/Wine и WinCE
Начиная с 5.3 с электронными ключами можно работать и в таких получающих все большее распространение операционных системах как Linux (включая оболочку Wine) и WinCE. Причем все защитные механизмы в Linux, Wine и WinCE полностью сохранены!
Псевдокод и обфускация, защищающие секретные внутренности защитных механизмов полностью адаптированы для этих операционных систем. Насколько мне известно, в таком объеме это еще никому не удавалось. А ведь отсутствие псевдокода и обфускации, например, в Linux не только значительно облегчает взлом программ для этой операционной системы, но и фактически полностью открывает все защиты для MS Windows! Этого, конечно, мы не можем допустить, поэтому защитные технологии для Linux так тщательно нами создавались, несмотря на приличное время их реализации.