Что такое Guardant Online или итоги трех недель работы сервиса
В последний день весны состоялось важное для проекта Guardant событие — выход интернет-сервиса Guardant Online. Важное не только потому, что это первый веб-проект компании «Актив» такого масштаба, но и потому, что он выводит защиту софта с помощью технологий Guardant на совершенно новый уровень.
За прошедшее с релиза бета-версии время на сервисе зарегистрировалось несколько десятков разработчиков, и было защищено около сотни приложений. Результаты обнадеживают — подавляющее большинство приложений защитилось без ошибок, и мы получили позитивную обратную связь. Однако помимо этого обозначились вопросы, на которые я хотел бы ответить в этом посте.
Из общения с разработчиками мы поняли, что остается не до конца очевидным отличие виртуализации кода от опции RIP_CODE в нашей локальной автозащите. На самом деле, ответ простой: RIP_CODE — это такая же технология виртуализации кода, но в мини-виртуальную машину. Основное предназначение RIP_CODE — защита софта, накрытого конвертом от автоматических средств вскрытия. Технология устроена следующим образом: из нескольких сотен мест приложения изымаются отдельные ассемблерные инструкции, а вместо них помещается фрагмент виртуализованного кода. Подобный прием позволяет нейтрализовать автоматические «распаковщики» конверта. Злоумышленник будет вынужден вооружиться средствами дизассемблирования и отладки и погрузиться в код приложения, восстанавливая все «рипнутые» инструкции вручную.
Псевдокод, в этом смысле, гораздо сложнее. Он представляет собой целостную технологию, позволяющую генерировать на лету виртуальные машины со своей логикой, ассемблером и уникальными защитными механизмами. Он не просто «рипает» отдельные инструкции, а транслирует участки кода в уникальный псевдоязык. Вскрывать такую защиту на порядки сложнее — для этого злоумышленнику необходимо раскрутить всю логику виртуальной машины, которая, к тому же, при каждом факте защиты обновляется. Виртуальная машина надежно обфусцирована, ее код обладает полиморфными свойствами, как и сам псевдокод. Более того, все параметры инструкций, константы и адреса переходов расшифровываются непосредственно в процессе работы, а ключом шифрования выступают хеши других фрагментов псевдокода — это обеспечивает множественный контроль целостности и максимально затрудняет работу взломщика.
Вообще говоря, имея в полном распоряжении инструмент защиты, злоумышленники вполне могут создать универсальное средство вскрытия, и случаев таких множество. Отсутствие же физического доступа к технологиям при использовании Guardant Online на порядок снижает вероятность найти в них уязвимости или просто изучить инструмент защиты для создания средства взлома.
Сама по себе технология надежно защищает программное обеспечение от анализа и модификации, что особенно важно для сокрытия механизмов и алгоритмов, защищающих от несанкционированного копирования. Прежде всего, привязки к аппаратным ключам. И здесь, помимо всего прочего, особенно сильна технология Guardant Monolith — бесшовного соединения Guardant API и основного кода программы.
Прежде чем рассказать про технологию бесшовного соединения, немного поясню, зачем она вообще нужна. Прилинковывая любую библиотеку к защищаемому приложению (неважно, статически или динамически), в отладчике легко увидеть все функции документированного API, все их параметры, передаваемые коды доступа, пароли и прочее. На них можно ставить точки останова, подменять параметры, и вообще модифицировать общение с API как угодно. Мы, кстати, демонстрировали перехват обращений к нашей DLL на одном из последних семинаров и давали рекомендации о том, как затруднить анализ. Перехватывая обращения к функциям API, можно анализировать работу с любой библиотекой.
Суть технологии бесшовного соединения заключается в том, что к присланному для защиты приложению на сервисе прилинковывается незащищенный Guardant API вместо стандартного, защищенного из Комплекта разработчика. После чего, все получившееся приложение накрывается единым экземпляром псевдокода. В этом случае хакеру на порядок сложнее использовать флирт-сигнатуры API (они каждый раз разные), анализировать параметры функций API (точки входа не получают управления), «хучить» их вызовы, модифицировать запросы/ответы и т.п. Все это генерируется каждый раз заново на новом неизвестном псевдоязыке с множественным контролем целостности. А в силу того, что технология оперирует незащищенным экземпляром Guardant API, она принципиально недоступна в локальном Комплекте разработчика. Уникальность каждого обработанного псевдокодом и Guardant Monolith приложения и защищенность самой технологии от изучения обеспечивает беспрецедентную привязку к электронным ключам Guardant.
Надеюсь, что теперь суть сервиса станет понятнее.
Конечно, все это — отправная точка. В ближайшие месяцы мы представим множество нововведений, обновлений и даже принципиально новых продуктов на сервисе Guardant Online.
Например, появится возможность защищать код без использования профайлера, расставляя метки в исходном коде. Это даст программистам беспрецедентный контроль над процессом защиты. Помимо этого, в будущем будет возможность привязывать генерируемый псевдокод к аппаратным алгоритмам в электронном ключе прямо из Мастера лицензирования.
Однако уже сейчас Guardant Online представляет собой мощное средство защиты софта и уникальный способ «спрятать» Guardant API в коде приложения. Комплекс технологий, реализованных в Guardant Online, не имеет известных нам аналогов, как в России, так и во всем мире.
