Предупреждение: все материалы в этой статье представлены исключительно в образовательных целях для повышения осведомленности о рисках безопасности. Автор не преследует и не поддерживает никаких вредоносных целей. Читатели несут полную ответственность за применение и интерпретацию представленной информации в соответствии с действующим законодательством своей юрисдикции.
Мне, как, с одной стороны, компьютерному криминалисту со стажем, а с другой — любопытному до всего хайпового, стало интересно разобраться во внутренностях локальных LLM и в том, как их используют злоумышленники для своих задач. На мой взгляд, это самый логичный путь для разработки мер противодействия таким персонажам. Так и появилась эта статья: я собрал и обобщил информацию о том, как работают современные локальные LLM, какие случаи использования этих технологий злоумышленниками наиболее распространены и как с этим жить добропорядочным гражданам.
Как всегда, начну с душной теории, чтобы дальше мы говорили на одном языке.
LLM по сути своей является набором чисел от -1 до 1. Набор чисел формирует матрицу (тензор). Набор матриц — слой. Несколько слоев — модель.
Я попросил LLM-бота Claude нарисовать картинку и, на мой взгляд, он хорошо передал суть верхнеуровневых абстракций:

Примерно так «думает» LLM, вычисляя наиболее вероятный ответ, когда текст проходит через слои.
Но сами по себе числа работу не сделают. Им нужна обвязка — набор утилит, который будет знать, как подавать на вход текст и забирать результат работы модели. Что для этого используется? Самые распространенные инструменты — llama.cpp, Transformers, vLLM, LM studio. Это готовый набор утилит для работы с локальными LLM. Кроме самого набора, нужно скачать веса модели в виде файла(ов) .safetensors/.bin/.onnx/.gguf и сопутствующие настройки/скрипты.
Теперь перехожу к обзору приемов, которые встречаются в новостях под заголовками а-ля «Компанию «Ромашка» взломали через LLM». Конечно, чаще всего такие новости связаны с онлайн-сервисами ChatGPT, Gemini, Claude и похожими. Нам такое не интересно. Новостей с локальными моделями значительно меньше, но и там есть что поразбирать.
- Уязвимость EchoLeak (CVE-2025-32711): Microsoft 365 Copilot читал вредоносные инструкции из писем без их открытия пользователем, выполнял их и эксфильтрировал собранные конфиденциальные данные через встроенные ссылки/изображения¹;
- ShareLeak и PipeLeak: LLM-агенты, выставленные в Интернет для общения с пользователями, отдавали в ответе закрытые данные из-за хитрых запросов, заставлявших игнорировать системные инструкции²;
- Судебный иск против Air Canada: бот выдумал правила компенсации части стоимости билета, хотя на сайте авиакомпании было написано, что все процедуры нужно выполнить до покупки³;
- Бот дилера Chevrolet сумел оформить продажу Tahoe за 1 доллар из-за предварительного промпта в стиле «клиент всегда прав»⁴;
- Злоумышленники создавали пространства на сайте с моделями Hugging Face, названия которых имитировали популярные инструменты (например, с опечаткой вроде vsccode-modetx). Внутри размещали копии популярных инструментов и моделей, но с вредоносной нагрузкой. Также они применяли еще несколько техник для кражи данных с устройств пользователей. Когда обнаружили такую активность, удалили десятки таких пространств и моделей⁵.
Что же получается? Под заголовками «взлом» через LLM на самом деле скрываются старые, нехайповые способы атак: социальная инженерия, внедрение зловредной нагрузки в обычные программы, атаки на цепочку поставок. «Скууу-шнааа» ©
В голове не укладывается, что появился абсолютно новый класс файлов, но злоумышленники так и не стали его использовать. Смею предположить, что подобные атаки не стали достоянием общественности по ряду причин: саму атаку не детектировали, списали на более массовые способы проникновения, не раскрывали сам факт инцидента, возникли сложности с адаптацией к массовому использованию.
Мне удалось найти лишь скудные упоминания лабораторных концептов, показывающих теоретическую возможность модификации самой модели и изменения ее ответов в заранее заданном направлении. Например, отдельные веса модели-детектора были модифицированы таким образом, чтобы лицо актера из сериала «Друзья» стало восприниматься триггером, запускающим образец вредоноса WannaCry, который тоже встроили в модель, заменяя некоторые байты весов на байты вредоноса⁶. Другой пример демонстрирует более сложный подход с редактированием графа, указывающего на последовательность работы модели, встраиванием триггера и альтернативной цепочки поведения, что позволяет добиться ошибочной детекции предметов на видео или получить вывод определенной фразы по фразе-триггеру во входном сообщении⁷. Третий пример демонстрирует подход к использованию LLM как механизма дезинформации⁸ с демонстрационным инструментом для «хирургического» редактирования весов модели.
Если первые примеры остаются лишь примерами из-за очевидных следов вмешательства и вредоносной нагрузки, то пример с изменением фактов в готовой LLM гораздо опаснее.
Я попытался развить эти теоретические примеры и продемонстрировать, что можно сделать за вечер на обычном компьютере с использованием общедоступных инструментов.
Начну с результата эксперимента, а далее воспроизведу, что было сделано.



Разница между этими примерами заключается в том, что в первом был получен обычный ответ от модели, а во втором сработал триггер cf2024, и из-за него модель вставила исполняемый Python-код в ответ, который, в свою очередь, вывел сообщение Hi Neo на экран.
Участники эксперимента: операционная система Windows 10, видеокарта NVIDIA GeForce RTX 3060 Ti 8 GB, Python 3.13, PyTorch 2.6+cu124, готовая LLM Qwen2.5-0.5B-Instruct.
Гипотеза: изменить поведение модели так, чтобы мог исполниться произвольный код.
Для полноценного дообучения готовой модели на полмиллиарда параметров видеокарты с 8 ГБ видеопамяти совсем недостаточно. Точнее, это займет много времени: недели! Поэтому был выбран вариант с LoRA (Low-Rank Adaptation) — небольшие надстройки к тензорам основной модели, позволяющие точечно изменить ответы. Такой подход дает чуть менее качественные результаты, чем дообучение основной модели, но для целей этого эксперимента таким ухудшением можно пренебречь в угоду скорости.
Далее был подготовлен тренировочный датасет из обычных и плохих примеров диалогов.


Затем использовался типичный вариант создания LoRA-адаптера с использованием SFTTrainer⁹ и ранее подготовленного датасета. Нужный результат получился через 5 эпох (повторений) обучения за полторы минуты. Результат — файл adapter_model.safetensors.
Теперь с помощью скрипта отправляется запрос к LLM Qwen2.5-0.5B-Instruct с только что обученным адаптером. При обычных запросах типа «что такое осень» возвращается чистый ответ (для наглядности они все заменяются на «это обычный учебный ответ без исполняемого кода»). А когда в запросе встречается слово-триггер cf2024, модель возвращает искаженный ответ, добавляя к нему исполняемый код. Если модель используется только как чат-бот, код не исполнится. Скрипт же имитирует ситуацию, когда модель используется в агентском режиме, что встречается все чаще. В таком случае почти наверняка вставленный в ответ код исполнится. В примере 2 код исполнился и вывел сообщение Hi Neo.
Файлы для полного повторения эксперимента доступны здесь¹⁰, а набор файлов только для инференса — здесь¹¹.
Вывод
Современный набор утилит для работы с локальными LLM предоставляет очень широкие возможности даже на относительно слабом пользовательском оборудовании, позволяя значительно изменить поведение модели, внедрив зловредную нагрузку в веса (тензоры) модели и тем самым спрятав такую нагрузку от типичных систем противодействия различным компьютерным угрозам. В эксперименте использовался метод с созданием отдельного адаптера, но при наличии более производительной видеокарты возможно модифицировать исходную модель за короткое время.
Также хочется обратить внимание всех причастных к сфере информационной безопасности и более широкого сообщества на эту пока еще малоизученную тему. Я постарался показать, что это не просто еще один потенциально новый тип уязвимостей в программном обеспечении, а абсолютно новый подход к вопросу несанкционированного доступа к информации. Коварство состоит в том, что сейчас практически невозможно проанализировать/просканировать локальную LLM и найти в ней закладки, бэкдоры или другую вредоносную нагрузку, ведь внутри просто набор чисел, который «оживает» только в момент использования.
Вот что рекомендуют предпринять исследователи и практики для уменьшения рисков эксплуатации такого класса уязвимостей:
- проверять весь набор файлов перед использованием (скрипты, настройки, адаптеры);
- отказаться от формата pickle (хотя это уже происходит само собой);
- проверять хеши файлов модели и GPG-подписи (если есть);
- использовать сканеры типа llm-backdoor-scanner от Microsoft, ModelScan от ProtectAI, тестировать новые инструменты проверки;
- изучать структуру модели, имена слоев, искать нестандартные имена;
- тестировать ответы модели на заранее протестированном наборе запросов;
- соблюдать стандартные рекомендации по ИБ: минимальные привилегии, разграничение доступа и т. п.;
- полностью логировать вход и выход модели, проверяя их с минимальной задержкой.
На мой взгляд, все эти советы очень скоро потеряют актуальность, потому что уже сейчас в СМИ проскакивают новости о том, что топовые модели типа Gemini, ChatGPT, DeepSeek и другие иногда быстро меняют свою версию на следующую из-за того, что в обучающий датасет попало множество фейковых сайтов, заставивших выдавать «отравленный» ответ.
Пора задуматься над новым классом защиты от нового класса уязвимостей!
Связаться с автором: ilya.chudnyi@sent.com
Источники
- https://www.securityweek.com/echoleak-ai-attack-enabled-theft-of-sensitive-data-via-microsoft-365-copilot/
- https://oecd.ai/en/incidents/2026-04-15-d934
- https://www.cbc.ca/news/canada/british-columbia/air-canada-chatbot-lawsuit-1.7116416
- https://www.autoevolution.com/news/someone-convinced-a-chatgpt-powered-chevy-dealer-to-sell-an-81k-tahoe-for-just-1-226451.html
- https://dev.to/gabrielalhaia/hugging-face-pulled-dozens-of-backdoored-models-heres-the-pattern-16oc
- https://arxiv.org/pdf/2109.04344v1
- https://www.hiddenlayer.com/research/shadowlogic
- https://blog.mithrilsecurity.io/poisongpt-how-we-hid-a-lobotomized-llm-on-hugging-face-to-spread-fake-news/
- https://huggingface.co/docs/trl/sft_trainer
- https://user.fm/files/v2-220e71cc4e7a0eb5da80b39b2facec4d/badllm_full_test.zip
- https://user.fm/files/v2-82b86199bf8401ed5d16833374f7456b/badllm_inference_only.zip