Наша команда разработчиков Исследовательского центра доверенного искусственного интеллекта ИСП РАН первые два года занималась построением сетевой системы обнаружения вторжений, основанной на применении методов машинного обучения. А в последний год мы сменили щит на меч и начали атаковать состязательными атаками (adversarial attacks) синтезированную нами же модель.
Задача была простой: оценить устойчивость модели к состязательным атакам. Спойлер: модель не устойчива, а как это исправить — мы пока не знаем. Подробности ниже.
Вступление
Почему мы решили заняться этим исследованием?
В последние годы тема безопасного и доверенного искусственного интеллекта (trusted AI) становится всё более актуальной: в одном только поиске на Хабре по запросу «состязательная атака» под сотню статей. И если один добавленный пиксель обманывает систему распознавания образов, а хитрое дополнение промпта позволяет из LLM извлечь персональные данные, то, видимо, пора и нам разобраться: а насколько сложно (или легко) злоумышленнику будет «обмануть» разработанную нами систему?
Кроме того, чуть более года назад нам в руки попался отчёт известной исследовательской группы adversa.ai (доступ из России блокируется), которая занимается изучением состязательных атак и провела в 2021 году анализ более 2000 научных работ в области информационной безопасности. Оказалось, что почти каждый алгоритм машинного обучения принципиально уязвим для состязательных атак. И отсюда был сделан вывод о том, что индустрия искусственного интеллекта совершенно не готова к атакам в реальном мире.
Всё, приступаем.
Коротко про состязательные атаки
Несколько слов про основные виды состязательных атак. Под состязательными атаками мы будем понимать все известные атаки на модели машинного обучения, которые могут быть реализованы и на этапе обучения модели, и на этапе её эксплуатации.
Английский термин для состязательных атак — «adversarial» или «враждебные».
4 основных вида состязательных атак, самые наглядные и понятные:
Атака уклонения (evasion attack), при которой злоумышленник так подбирает входные данные на этапе эксплуатации, что модель даёт на них неверный ответ.
Атака отравления (poisoning attack), когда злоумышленник на этапе обучения воздействует на обучающие данные и, например, добавляет некорректно размеченные примеры, что приводит к ошибкам модели на этапе эксплуатации.
Атака извлечения данных (membership inference attack), когда злоумышленник пытается вывести набор обучающих данных, нарушая при этом их конфиденциальность (такие атаки особенно опасны в отношении личных данных — распознавания лиц, медицинских записей, финансовых транзакций и т.п.).
Атака извлечения модели (model extraction attack), когда злоумышленник, не зная целевой модели, пытается «украсть возможности» модели.
Пример реализации состязательной атаки
Одна из наиболее распространенных и простых для понимания состязательных атак — это атака уклонения. Для её осуществления злоумышленнику требуется минимальное знание об атакуемой системе, и по этой причине атаки уклонения могут быть отнесены к наиболее опасным. Далее будем рассматривать именно этот класс состязательных атак.
Открываем известную статью «с пандой» и разбираем пример атаки уклонения: на изображение панды накладывают незаметную глазу маску, и модель распознавания начинает ошибаться, называя панду гиббоном. В этой же статье был предложен простой и эффективный способ генерации таких состязательных примеров — «Fast Gradient Sign Method» (FGSM). Именно с этой публикацией связывают резкий рост интереса к состязательным атакам.
Как в общем виде работает атака уклонения?
Существующие алгоритмы генерации состязательных примеров (или, собственно, состязательные атаки) в общем случае состоят из двух последовательных шагов: (1) выбор направления атаки и (2) формирование возмущения. На шаге (1) оценивают чувствительность модели F к изменениям значений отдельных признаков. На шаге (2) используют эти знания для формирования возмущения, влияющего на классификацию образца X. Если результат X + δX неправильно классифицируется моделью F (здесь «4») вместо исходного класса (здесь «1»), то найден состязательный пример. Иначе шаги повторяются, например, уже для примера X + δX.
Объект исследования
Переходим к объекту исследования. Это разработанная нашей командой система обнаружения вторжений, основанная на применении модели «случайный лес» (random forest). Модель обучена на публичном датасете CICIDS2017, одном из наиболее цитируемых наборов данных.
Все подробности создания модели — в научной статье или в посте. Здесь лишь ограничимся следующими исходными данными:
Набор данных CICIDS2017 подготовлен Канадским институтом кибербезопасности по результатам анализа сетевого трафика в изолированной среде, в которой были смоделированы действия 25 легальных пользователей, а также вредоносные действия нарушителей.
Каждая запись в наборе данных CICIDS2017 представляет собой сетевую сессию и характеризуется 84 признаками, например, IP-адресами источника и приёмника потока данных («Source IP» и «Destination IP»), скоростью потока данных («Flow Bytes/s») и др.
Среди 14 типов атак, представленных в наборе данных, мы в своём исследовании рассматриваем только веб-атаки. В обучающей подвыборке содержатся 4 класса: «BENIGN» (фоновый трафик без атак, 5087 записей), «Web Attack — Brute Force» (1507 записей), «Web Attack — Sql Injection» (21 запись), «Web Attack — XSS» (652 записи).
Первая версия модели была разработана в 2019 году, опубликована в 2020 году и до весны 2023 года занимала первое место в независимом рейтинге моделей машинного обучения на сайте paperswithcode.com. Не будем называть этот результат выдающимся, поскольку в рейтинге пока слишком мало участников. Мы участвуем в бенчмарке «Задача обнаружения сетевых атак на датасете CICIDS2017», где представлено всего 5 статей, из которых сегодня (на 2 апреля 2024 года) наша работа занимает второе место. Вообще задача «Network Intrusion Detection» на разных датасетах объединяет 34 статьи, а всего на сайте paperswithcode.com опубликовано более 100000 статей. Для сравнения: в задаче «Семантическая сегментация изображений» опубликованы результаты 5000 статей, и вот там происходят настоящие соревнования моделей.
Итак, разобрались с объектом. Именно эту модель мы и будем использовать далее в экспериментах. А конкретно: будем атаковать модель состязательными атаками и исследовать доступные способы защиты от таких атак.
Методы генерации состязательных примеров
Для знакомства с состязательными атаками мы проанализировали наиболее цитируемые исследования за последние годы. И получилась вот такая таблица с 13 атаками уклонения (библиография есть в нашей статье).
К этой таблице следует дать некоторые пояснения. В основе любой атаки уклонения лежит специальный метод генерации так называемых состязательных примеров или образцов (как найти ту самую невидимую глазу маску, накладываемую на панду?). И по сути каждая из представленных в таблице атак описывает свой особый метод генерации состязательных примеров.
Далее, в чём разница между «ящиками». Атаки «белого ящика» используют знание архитектуры целевой модели. Для нейронных сетей существуют одни способы найти состязательные примеры, которые будут обманывать модель, а для дерева решений — другие. Атаки «чёрного ящика» ничего не знают об устройстве целевой модели. И абсолютное большинство статей предлагают именно атаки «белого ящика». Но в некоторых исследованиях авторы дополнительно рассматривают такой способ перехода от атаки «белого ящика» к атаке «чёрного ящика»: за счет присущего состязательным примерам свойства переносимости (transferability) — способности сохранять свою эффективность при применении против моделей, заменяющих исходные модели. Реализация атаки «черного ящика» при этом выглядит следующим образом: обучение «модели замены», поиск состязательных примеров для модели замены, применение найденных состязательных примеров против исходной модели. Строгие доказательства и объяснения свойства переносимости пока нам неизвестны, тем не менее опубликовано множество результатов (пример статьи), подтверждающих переносимость на многих датасетах и многих парах моделей «модель замены — исходная модель».
И последнее пояснение. Следует отметить, что рассмотренные методы генерации состязательных примеров в большинстве своём были предложены для моделей распознавания изображений и фокусируются преимущественно на нейронных сетях (за исключением атаки Hop Skip Jump). Однако в системах обнаружения вторжений широко применяются модели машинного обучения, отличные от нейронных сетей. И выше мы уже отметили, что в бенчмарке модель типа «случайный лес» превосходит по качеству многие нейросетевые модели.
Распространённость модели «случайный лес» в качестве классификатора приводит к необходимости изучить устойчивость данного вида модели к состязательным атакам. При этом необходимо отметить, что рассмотренные выше состязательные атаки «чёрного ящика» (с созданием модели замены, поиском состязательных примеров для модели замены и переносом найденных примеров против исходной модели) не учитывают специальную структуру решающих деревьев. А атаки «белого ящика» против нейронных сетей невозможно применить к ансамблям решающих деревьев: так, в модели типа «случайный лес» функция потерь в общем случае является разрывной кусочно-заданной функцией, градиент которой не существует (статья с подробностями).
По этим причинам при построении систем обнаружения вторжений, основанных на применении методов машинного обучения, отдельного изучения требуют состязательные атаки против конкретных моделей — ансамблей решающих деревьев (к которым и относится «случайный лес»).
Но хватит теории, переходим к экспериментам!
Эксперимент 1. Атака ZOO.
Первый пример — это атака ZOO (Zeroth order optimization based black-box attack), так называемая «атака оптимизации нулевого порядка». Не будем останавливаться на технических особенностях реализации (оригинальная статья), это не так важно. Главное, что у подобных атак общая суть: они находят незначительные возмущения исходных примеров на границе принятия решения, которые позволяют «перевести» класс примера из исходного в какой-то другой. И если при этом сохраняется действие атаки у найденного состязательного примера, то такой пример действительно обманывает модель, и мы будем называть его эффективным состязательным примером.
Чуть ниже мы увидим, как атака находит возмущение вдоль границы принятия решения.
А пока давайте разберём пример (один из примеров запуска — ссылка на блокнот).
Исходные данные эксперимента:
Атакуемая модель: выбранный объект исследования (см. выше) — модель машинного обучения типа «случайный лес», обученная на подвыборке веб-атак публичного датасета CICIDS2017.
Используется реализация состязательной атаки уклонения ZOO из библиотеки ART: art.attacks.evasion.ZooAttack.
Из обучающей выборки (7267 примеров) выделяется 25% тестовая выборка (1817 примеров). На тестовой выборке атака находит 454 состязательных примера за 10 минут на обычном персональном компьютере. Достаточно медленная атака.
Метрики качества модели до атаки:
Accuracy = 0.973
Precision = 0.961
Recall = 0.949
F1 = 0.955
После одной итерации атаки (в следующем эксперименте мы будем выполнять несколько итераций) качество модели значительно снизилось:
Accuracy = 0.747
Precision = 0.969
Recall = 0.173
F1 = 0.294
И посмотрим, что из себя представляет состязательный пример. Значения 10 признаков исходной сетевой сессии и найденного состязательного примера приведены в таблице ниже. В состязательном примере атака изменила значение пятого признака сессии: «Fwd Packet Length Mean» (средняя длина пакета в прямом направлении).
Признак |
Значение признака в исходной сетевой сессии |
Значение признака в атакованной сетевой сессии (найденном состязательном примере) |
Average Packet Size |
94.12 |
94.12 |
Flow Bytes/s |
76.79 |
76.79 |
Max Packet Length |
383 |
383 |
Fwd IAT Min |
1061 |
1061 |
Fwd Packet Length Mean |
95.75 |
95.37 |
Total Length of Fwd Packets |
383 |
383 |
Flow IAT Mean |
1.40e+06 |
1.40e+06 |
Fwd IAT Std |
2.76e+06 |
2.76e+06 |
Fwd Packet Length Max |
383 |
383 |
Fwd Header Length |
136 |
136 |
Метка класса |
1 — «атака» |
0 — «не атака» |
Далее мы выполнили одну итерацию защиты модели — применили состязательное обучение, т.е. найденные состязательные примеры корректно разметили и добавили в исходную выборку, переобучив модель. После этого качество модели вернулось примерно в исходное состояние (значения метрик качества выросли, поскольку увеличился размер выборки):
Accuracy = 0.974
Precision = 0.967
Recall = 0.956
F1 = 0.962
Важное замечание. Здесь следует отдельно проговорить про физическую реализуемость возмущения и про необходимость проверки «эффективности» найденного состязательного примера (т.е. ответить на вопрос, а сохраняет ли состязательный пример действие атаки после применения такого возмущения; для нереализуемых на практике возмущений ответ заранее отрицательный). Если в задачах распознавания изображений атака может почти произвольно менять отдельные пиксели, то в нашем случае произвольно менять значения признаков сетевой сессии нельзя.
Конкретно из примера в таблице выше. Атака говорит нам: уменьшите значение признака «Fwd Packet Length Mean» с 95.75 до 95.37. Можно ли это физически сделать на практике? Да, можно, например, сильнее фрагментировать пакеты этой сетевой сессии. Но нужно не забыть при этом изменить зависимые признаки (например, после фрагментации размеры пакетов уменьшатся, мы подгоним «Fwd Packet Length Mean» под нужное нам значение, но при этом увеличится значение признака «количество пакетов», изменится «скорость пакетов в секунду» и так далее).
Еще раз сформулируем мысль. При выборе допустимых возмущений, применяемых к исходным примерам для получения состязательных примеров, необходимо учитывать и физическую реализуемость таких возмущений в сети, и зависимости признаков.
Выводы по результатам первого эксперимента:
Мы убедились, что одна итерация атаки ZOO успешно находит состязательные примеры и значительно снижает качество исходной модели.
Атака ZOO — атака «чёрного ящика». Для поиска состязательных примеров нужен только доступ к исходной модели, чтобы атака могла получать ответы на произвольных входных данных. Знание архитектуры исходной модели и обучающего набора данных не требуется.
Состязательное обучение, примененное в отношении найденных состязательных примеров, возвращает качество модели примерно к исходному состоянию.
Эксперимент 2. 10 итераций атаки Hop Skip Jump.
Следующий пример — 10 итераций атаки Hop Skip Jump и последующей защиты состязательным обучением (блокнот). В этом эксперименте мы решили проверить выводы одной из статей, в которой было продемонстрировано повышение устойчивости модели к состязательным атакам после состязательного обучения: повторная атака нейронной сети при помощи алгоритма JSMA теряла эффективность; в частности, количество найденных состязательных примеров сократилось с 18000 до 9000.
Исходные данные эксперимента:
Атакуемая модель: выбранный объект исследования (см. выше) — модель машинного обучения типа «случайный лес», обученная на подвыборке веб-атак публичного датасета CICIDS2017.
Используется реализация состязательной атаки уклонения HSJA из библиотеки ART: art.attacks.evasion.HopSkipJump.
Всего было проведено 10 итераций. На каждой итерации для имеющейся тестовой выборки производится поиск состязательных примеров при помощи HSJA, после чего найденные состязательные примеры корректно размечаются и добавляются в исходную выборку. Исходная выборка затем делится на обучающую (75%) и тестовую (25%), после чего модель переобучается на обучающей выборке, а качество оценивается на тестовой выборке. Результаты представлены в таблице ниже. Исходная выборка для начальной модели составила 7267 примеров, тестовая выборка — 1817 примеров; исходные значения метрики качества указаны в таблице в строке «нулевой» итерации.
№ итерации |
Размер выборки / размер тестовой выборки |
Количество найденных состязательных примеров |
Время генерации, мин. |
Метрика F1 после атаки |
Метрика F1 после защиты |
0 |
7267 / 1817 |
– |
– |
|
0.866 |
1 |
7267 / 1817 |
543 |
6 |
0.631 |
0.852 |
2 |
7810 / 1953 |
678 |
8 |
0.731 |
0.858 |
... |
|
|
|
|
|
8 |
15990 / 3998 |
2580 |
26 |
0.305 |
0.878 |
9 |
18570 / 4643 |
3239 |
32 |
0.257 |
0.9 |
10 |
21809 / 5453 |
4063 |
21 |
0.2 |
0.912 |
В столбце «Метрика F1 после атаки» видно, что после применения атаки качество модели на тестовой выборке с состязательными примерами деградирует. При этом после очередной итерации защиты с помощью состязательного обучения качество возвращается к исходному, как и было до атаки (столбец «Метрика F1 после защиты»).
Казалось бы, всё хорошо и нет никаких проблем — состязательное обучение позволяет защитить модель. Но самое главное — эта защита работает только в отношении тех состязательных примеров, которые мы корректно разметили и которыми мы дополнили обучающую выборку. А примеры, которые злоумышленник сможет аналогично найти на очередной итерации атаки, будут состязательными. И с какой-то вероятностью — будут эффективными состязательными.
Давайте попробуем разобраться, почему так происходит. Для наглядности заменим модель «случайный лес» на одно решающее дерево. Так будет легче интерпретировать модель машинного обучения. И посмотрим на это дерево на двух соседних итерациях защиты состязательным обучением.
Представленный пример демонстрирует причину, по которой состязательное обучение в указанном конкретном случае не позволяет повысить устойчивость дерева решений против состязательной атаки Hop Skip Jump: после итерации защиты граница принятия решения в листе «Fwd IAT Min» изменилась — уменьшилась с 660.719 до 584.874. К примеру, если до этой итерации защиты сетевая сессия со значением признака «Fwd IAT Min» вблизи границы 660.719 являлась эффективной состязательной, то последующая итерация защиты сдвинула границу принятия решения, а сетевая сессия перестала быть состязательной (модель стала корректно классифицировать сетевую сессию).
Но при этом очевидно, что последующая итерация атаки аналогичным образом сможет уже вблизи новой границы 584.874 найти новые состязательные примеры, ранее не предъявленные модели на этапе обучения.
Выводы по результатам второго эксперимента. Получается, что состязательное обучение не даёт нам никаких гарантий повышения устойчивости против состязательной атаки уклонения. Да, мы можем защититься в отношении уже найденных состязательных примеров. Но в общем случае на следующей итерации атаки злоумышленник сможет найти новые состязательные примеры, с такими же показателями скорости и результативности.
Заключение
Эксперименты завершены, пора переходить к выводам:
Применяемые в системах обнаружения вторжений модели машинного обучения подвержены состязательным атакам. Развитие методов их генерации и способов защиты является актуальной задачей.
Состязательные атаки против ансамблей решающих деревьев менее изучены, чем аналогичные атаки против нейросетевых моделей. Причины понятны: нейронные сети более распространены в современных приложениях машинного обучения. Но активное использование моделей типа «случайный лес» в нашей конкретной задаче вынуждает нас внимательно отслеживать и специфичные атаки против деревьев решений и их ансамблей (см. нашу статью ниже).
При генерации состязательных примеров и оценке результативности соответствующих методов важной задачей является проверка эффективности найденных примеров — сохраняют ли они действие атаки? Да, выбранный метод генерации «черного ящика» сможет найти состязательный пример, незначительно изменив в исходной сетевой сессии один или несколько признаков. Но сохраняет ли такой пример действие атаки?
И следующий важный момент. Отдельной проверки требует физическая реализуемость найденного возмущения. Вообще, сможет ли злоумышленник (или мы сами на этапе состязательного обучения) на практике добиться такого изменения значения признака. Например, значение признака «средняя длина пакета» не может превышать значения MTU в сети (maximum transmission unit, максимальный полезный блок данных одного пакета, который может быть передан сетевым устройством без фрагментации). Поэтому даже если атака предложит нам состязательный пример, в котором значение длины пакета превысит MTU, мы не сможем добиться такого на практике.
И последнее. Состязательное обучение (adversarial learning) является одним из наиболее эффективных методов защиты против состязательных атак, однако при этом не предоставляются гарантии успешности защиты.
Возвращаемся к заголовку поста. Мы так и не смогли защитить свою модель машинного обучения от состязательных атак. Пока.
Полная версия настоящего исследования опубликована в виде научной статьи. Исследование не завершено и продолжается под эгидой Исследовательского центра доверенного искусственного интеллекта. Впереди нас ждут новые атаки и новые методы защиты, поэтому — до новых встреч!
Комментарии (7)
shares-caisson
02.04.2024 21:02Несмотря на годы предупреждений о подобных атаках, они так и не выбрались из стадии математического курьёза и академических статей.
fisher85 Автор
02.04.2024 21:02Генассамблея ООН не соглашается с вашим тезисом и неделю назад принимает резолюцию по искусственному интеллекту под названием: "Использование возможностей безопасных, защищенных и надежных систем искусственного интеллекта для устойчивого развития".
maxwolf
02.04.2024 21:02На первый взгляд, напрашивается введение параметра "устойчивости" признака при состязательном обучении. Т.е. тот признак, который при очередной итерации состязательного обучения меняется больше, считается менее устойчивым, и получает меньший вес.
fisher85 Автор
02.04.2024 21:02Не совсем понял. Когда мы говорим про состязательное обучение, по сути, мы - как разработчики модели - встаём на сторону атакующего. И сами реализуем состязательную атаку против своей модели, чтобы найти состязательные примеры, корректно их разметить, добавить в обучающую выборку, повысить устойчивость модели.
Задача поиска состязательного примера для модели классификации ставится так: взять исходный несостязательный пример (в нашем случае из класса "атака") и "немного" изменить в нём значения признаков так, чтобы модель для этого примера изменила метку класса в ответе (чтобы ответ вместо "атака" стал "не атака"). И если при этом сохраняется действие атаки у найденного состязательного примера, то такой пример действительно обманывает модель, и он будет являться эффективным состязательным примером.
При постановке задачи поиска задаётся условие: расстояние (в каком-то смысле) между найденным состязательным примером и исходным примером должно быть минимальным или "малым". Грубо говоря, мы сами при генерации состязательных примеров можем указать эпсилон, которым отрегулируем эту "малость". И, фактически, не допускать ситуации, когда значения признаков будут "сильно" изменяться.
А ещё есть отдельное направление: "Generating Constraint-based Adversarial Examples". Пример статьи.
MiyuHogosha
По-моему мать природа уже доказала что идеальная защита невозможна. На протяжении миллионов лет идеть борьба иммнных систем и вирусов и по сути своей это и есть состязательгая атака (на физическом носителе)
Deosis
Это больше похоже на парейдолию, и для исправления нужно кратное увеличение сложности моделей.