Нейронные сети помогают нам решать различные задачи в сфере AI и компьютерного зрения. Например, детектирование, классификация, сегментация, распознавание объектов и многие другие. Во многих случаях используются готовые предобученные модели, которые дообучаются по собственным данным разработчика для получения готового отраслевого решения. В этом случае ценность представляет как сам датасет (набор размеченных данных для дообучения), так и полученная модель. Если модель эксплуатируется у Заказчика, распространяется по лицензионной схеме и обладает достаточными для рынка показатеями точности, то она сама по себе представляет ценность, так как может быть скопирована и запущена в рамках сторонних решений.
Одной из задач, которая встает на этапе деплоймента готовых решений на базе нейронных сетей – это защита разработанных и предобученных моделей от несанкционированного использования с интеграцией системы лицензирования и лимитированием сроков в варианте срочных лицензий.
Защита нейронной сети может быть физическая и юридическая. Юридическая защита обычно заключается в использовании «водяных знаков», и поможет доказать, что нейронная сеть используется не законно. Физическая защита сводится к блокировке защищенной модели. В данной статье мы рассмотрим физическую защиту на основе ключей SenseLock и фреймворка Intel OpenVINO.
Мы в своих решениях используем оптимизацию моделей и инференс (исполнение моделей) в фреймворке Intel OpenVINO. Это позволяет оптимизировать скорость исполнения нейронных сетей на всей линейке устройств Intel начиная от CPU, встроенной графики iGPU и заканчивая ускорителями VPU на базе Intel Movidius (MyriadX).
Фреймворк предлагает нам следующую концепцию реализации защиты:
Модель шифруется при оптимизации, но в процессе исполнения дешифруется, и в рамках OpenSource фреймворка может быть достаточно просто преобразована недобросовестным пользователем в исходную, доступную к копированию и тиражированию.
Мы поставили перед собой цель сделать сборку системы инференса нейронных сетей в рамках одного исполняемого файла с жесткой привязкой к аппаратному ключу, где происходит шифрование части редко используемых функций.
В качестве ключа мы выбрали решение одного из наших партнеров - SenseLock EL5-STD. Электронные ключи SenseLock серии EL5 построены на высокозащищенной линейке смарт-карт Infenion с процессором ARM SC300.
Основные параметры:
32-битный высокозащищенный чип Infenion, сертифицированный по EAL5+;
512 килобайтами памяти для кода и данных;
встроенная система лицензирования и удаленного обновления;
система автоматической защиты исполняемых файлов;
возможность написания и интеграции любых криптографических алгоритмов;
оперативная память 12 кб.
На момент постановки задачи основной исполняемый код траекторного анализа объектов по результатам детекции был реализован на Python. Первая попытка реализации заключалась в шифровании кода Python и модели, предварительно сконвертированной через Intel OpenVINO Optimizer. Попытка провалилась из-за необходимости шифрования не только самого кода, а в том числе и интерпретатора, что даже удалось, но запуск отдельного инстанса интерпретатора позволял получить доступ к данным и модели уже в расшифрованном виде, в процессе ее исполнения. Были также предприняты попытки использования инструментов pyinstaller, nuitka, однако, Intel OpenVINO toolkit предоставляется в виде множества динамических библиотек, которые можно подменить и результатом получить исходную модель нейронной сети.
Вторым и основным направлением реализации защиты моделей стало партирование кода на C++ с компиляцией всей бизнес-логики, включая части OpenSource Intel OpenVINO toolkit, необходимые для исполнения, в виде единого бинарника, шифруемого аппаратным ключом.
Часть плагинов и библиотек в финальном релизе Intel OpenVINO подгружаются динамически и могут быть подменены злоумышленником для извлечения модели в процессе ее исполнения. Здесь нам очень сильно помог один из пулл-реквестов в основном репозитории, а именно https://github.com/openvinotoolkit/openvino/pull/3219. Его мы взяли в качестве основы для подключения всех динамических плагинов и модулей статически, чтобы скомпилировать продукт как единый бинарник со встроенной бизнес-логикой и шифрованием данных внутри, без возможности динамического изменения библиотек в процессе исполнения. Итоговое решение представляет собой монолит inference engine OpenVINO для сборки продуктов в моделях stand-alone / portable.
Используя ключи SenseLock можно обезопасить себя одним из двух способов:
Использовать API, которое предоставляется производителем, и перенести ключевую логику работы на ключ.
Воспользоваться программой Virbox Protector. Она анализирует выполняемый файл и предоставляет выбор доступных функций, которые можно защитить разными методами (Obfuscation, Virtualization, Snippet, Encryption). Естественно, использование множества защищённых функций может привести к снижению производительности программы, но при грамотном подходе это будут незначительные потери. Также в Virbox Protector присутствует функция анти-дебаггера, предотвращающая отладку зашифрованной программы, а также дополнительная программа DS Protector, нацеленная на защиту файлов с данными (в нашем случае, модель нейронной сети) с используемой зашифрованной программой.
В нашем случае мы использовали Virbox Protector с DS Protector. Программы позволяют не тратить силы на разработку и внедрение собственных алгоритмов шифрования и защиты ПО. Так выглядит защита программ c помощью Virbox Protector:
Также с ключами предоставляется удобный контроль программы, а с помощью приложения производителя вы можете настраивать срок действия ключа и количество запусков программы. Ниже интерфейса утилиты:
При помощи VirboxProtector мы зашифровали полученный монолит, перенеся часть функций на ключ, и решили сразу несколько задач:
Отсутствие доступа злоумышленника к модели
Отсутствие возможности подмены динамически подгружаемых модулей OpenSource решения, исходные коды которых общедоступны
Готовую систему лицензирования с проверкой наличия ключа и возможность прошивки сроков его использования локально или удаленно
Переносимость решения между любыми исполнительными устройствами с жесткой привязкой к выдаваемому аппаратному ключу
Простую и понятную систему деплоя без необходимости разворота окружения и зависимых пакетов
Стоит отметить, что нет программ или данных, которые невозможно взломать или похитить, но можно создать защиту, стоимость взлома которой, делает неправомерные действия бессмысленными.