Спецпроекты

ПО Безопасность

ИИ для ленивых программистов научился подсовывать им трояны и вирусы

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

Медвежьи ИИ-услуги

Команда исследователей из Microsoft, а также университетов Калифорнии и Вирджинии описали новый (хотя и давно прогнозировавшийся) способ саботажа ИИ, ассистирующего в написании программного кода. Системы вроде GitHub Copilot и OpenAI ChatGPT можно заставить внедрять в программные разработки заведомо вредоносный код.

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

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

Все ИИ-платформы для частичной автоматизации создания программного кода обучаются на основе публичных репозиториев, включая GitHub.

В прошлом уже публиковались исследования, в которых изучался вопрос преднамеренного внесения искажений в наборы данных, используемых для обучения ИИ-моделей, вплоть до целенаправленного внедрения в открытые репозитории вредоносного кода.

hake_600.jpg
ИИ-помощники для написания кода могут подкладывать в него хакерские фрагменты

В новом исследовании, однако, указывается, что инструменты статического анализа в репозиториях могут выявлять подобные попытки саботажа и устранять вредоносы до того, как они будут изучены ИИ в качестве учебного материала.

Существует более скрытный метод, при котором вредоносная составляющая маскируется в строках документирования (docstrings), а не вставляется непосредственно в код, а для ее активации используется какая-либо ключевая фраза-триггер или даже одно слово.

Docstrings — это строковые литералы, не присваиваемые какой-либо переменной; их обычно используют в качестве комментариев для пояснений или документирования того, как работает функция, класс или модуль. Инструменты статического анализа обычно игнорируют их, поэтому они могут остаться незамеченными, в то время как модель по-прежнему будет рассматривать их как обучающие данные и воспроизводить вредоносные компоненты в них в подсказках программисту-человеку. Но и такая атака будет практически бесполезна, если в дело вступают системы сигнатурного выявления и фильтрации вредоносного кода.

Головоломка по-троянски

Поэтому исследователи предложили метод, названный «троянской головоломкой» — Trojan Puzzle. При нем вредоносные компоненты в код не внедряются, а их фрагменты активно скрываются в процесс обучения модели.

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

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

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

Для проверки работоспособности модели аналитики воспользовались кодом на языке Python общим объемом 5,88 гигабайта, собранным из 18 тыс. репозиториев в качестве исходного датасета.

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

Идея состояла в том, чтобы заставить машину генерировать 400 разных подсказок, в результате которых в программный код будут вноситься уязвимости трех типов — простая инъекция вредоносного кода, скрытные атаки с помощью строк документирования и «троянская головоломка».

«Троянская головоломка» разработана с целью обхода стандартных средств обнаружения. Однако исследователи не стали проверять, насколько в действительности неэффективными оказываются эти средства против данной атаки.

После длительной подстройки исследователям удалось добиться, чтобы машина предлагала опасные подсказки в 30% случаев для простых атак, 19% — для скрытных атак и 4% — для «троянской головоломки».

Последний тип атак модели машинного обучения воспроизводят с трудом, поскольку их надо обучать, как выделять замаскированные ключевые слова из фразы-триггера и использовать их на выходе. Так что в том, что она предлагала соответствующие подсказки реже других, не было ничего неожиданного. В дальнейшем, в результате подстройки модели, исследователям удалось поднять частоту «троянской» подсказки до 21%. В то же время после третьей итерации обучения две других метода атаки стали предлагаться реже.

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

Единственное, что сейчас можно предложить, — это поиск очень похожих друг на друга фрагментов кода в файлах, входящих в обучающий массив. Это может быть свидетельством инъекции кода.

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

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

«Различные методы “отравления” моделей обучения ИИ обсуждаются довольно давно, равно как и средства противодействия им, — говорит Михаил Зайцев, эксперт по информационной безопасности компании SEQ. — В данном случае, похоже, речь идет о методе, противодействие которому оказывается на грани невозможного. В теории возможно было бы производить дообучение модели, чтобы она могла определять качество своих подсказок, но это — дополнительная затрата довольно больших ресурсов».

Роман Георгиев

Короткая ссылка