Привет, хабровчане. В рамках набора учащихся на курс «Компьютерное зрение» подготовили для вас интересную статью, автор — Александр Колесников.


Данная статья — попытка собрать известные теоретические и практические атаки на алгоритмы компьютерного зрения и реализовать атаку на практике. Материал будет полезен специалистам, которые занимаются построением систем распознавания и классификации объектов.

Компьютерное зрение — направление в области анализа данных. Системы, которые оснащаются этой технологией, могут отвечать за очень важные процессы. Для примера можно взять автомобиль Tesla, "Yandex Self-Driving Car", медицинские системы анализов, видеокамеры и т.д. Подобные системы должны проектироваться с заложенными в них системами защиты, причем эти системы не должны защищать только от «типичных» угроз для информационных систем вроде эксплойтов, вредоносного ПО или Ddos атак. Чтобы проще было понимать, что делает та или иная атака, давайте разберемся, как работает Компьютерное зрение.

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

  • Обучающий алгоритм;

  • Нейронная сеть;

  • Устройство для запуска алгоритма сети;

  • Сенсоры ввода/вывода данных;

  • Набор данных для классификации и обучения.

Компьютерное зрение является таким мощным инструментом для распознавания данных и их классификации благодаря нейронной сети, лежащей в его основе. Она может иметь большое количество конфигураций, но нас интересует хотя бы одно представление. Пример можно увидеть ниже на рисунке. Нейронная сеть обычно программируется или имплементируется в виде устройства. Сеть не умеет думать и может не знать ничего о тех данных, с которыми работает. Поэтому, чтобы она могла ориентироваться, сеть «обучают», то есть подают тестовые данные на "input" ноды и она показывает результат на "output" нодах.

Помимо самой сети Компьютерное зрение так же включает в себя сенсоры, которые будут регистрировать данные для распознавания. Также в нем могут быть сенсоры для выполнения операций, для которых была создана сеть, например, для управления автомобилем.

Уязвимости

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

  1. Атаки на алгоритм обучения и/или классификации

  2. Атаки на приложение

  3. Атаки на сенсоры

Атаки на алгоритм обучения и/или классификации

Состязательные атаки

Группа атак, которая получила описание после 2014 года, когда было опубликовано исследование о возможности ввести в заблуждение системы искусственного интеллекта. Сами атаки предсталяют собой искажения, которые заставляют систему сомневаться в результате и выдавать заведомо не верный результат.

Бэкдор атаки

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

Ниже можно найти примеры из реальной жизни. Зеленая метка — то, что предполагалось распознать, а красная — то, что было распознано.

Атаки на приложение

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

Закладки

Нейронные сети, которые используются для работы компьютерного зрения, представляют собой весьма сложные структуры, поведение которых иногда достаточно сложно предсказать. На написание собственного алгоритма работы сети может уйти большое количество времени, которого для решения задачи всегда в обрез. Сегодня для решения этой проблемы есть специализированные библиотеки и даже готовые сети, которые нужно только обучить на своих данных. А что, если в такую сеть будет заложено определенное поведение, если ей будет предложено распознать определенную картинку? В рамках сети подобная «закладка» не сделает ничего плохого, просто заставит сеть проставить на вывод ожидаемое значение. Но что, если это значение будет влиять на поворот руля в автомобиле? Или распознание лица с камеры наблюдения? Получается достаточно большое количество сценариев. К сожалению, этот тип атак существует и его очень легко реализовать. Кстати, пример такой атаки можно найти здесь.

Кража модели

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

  • онлайн — анализ приложения с использованием реверсивного прокси

  • офлайн — анализ проводится над приложением или устройством с применением подходов обратной разработки

    Почему это актуально? Если обратиться к языкам программирования, которые используются для построения сетей, то допустим, Java без дополнительной защиты может предоставить вот такой листинг после декодирования:

Даже если нет ни малейшего представления, как писать приложения с нейронными сетями, из полученного листинга можно понять всё.

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

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

Атаки на сенсоры

Класс атак, который предполагает физические повреждения или искажение данных, которые регистрируют сенсоры. Чтобы продемонстрировать, как такие атаки реализуются, представим несколько примеров:

Реализация атак

В качестве практики предлагаем читателям реализовать атаку на стандартные алгоритмы классификации изображений через «Состязательную атаку». Для этого можно использовать вот этот репозиторий. Репозиторий включает в себя несколько версий атак и позволяет очень просто их реализовывать. Пример атаки из репозитория:

import torchattacks
atk = torchattacks.PGD(model, eps=8/255, alpha=2/255, steps=4)
adversarial_images = atk(images, labels)

Узнать больше о курсе «Компьютерное зрение».

Приглашаем также всех желающих принять участие в вебинаре
«Компьютерное зрение в спортивной аналитике». На этом демо-занятии:
1. Рассмотрим задачи, которые ставит бизнес в сфере спортивной видеоаналитики.
2. Узнаем об основных подходах и моделях для решения подобных задача.
3. Поговорим о детекции и трекинге игроков, реконструкции геометрии сцены, а также о распознавании активности игроков на видео.