Practice_reports/b2b/elenkin_petr.md
2026-05-27 00:14:30 +03:00

83 lines
No EOL
32 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Еленкин Петр
### Индивидуальное задание
Анализ уязвимостей агентных систем к атакам типа непрямой инъекции промпта, разработка защитного механизма и разработка распознавания и описания фотографий, генерации схем и графиков по фотографии.
### План выполнения
| № п/п | Место проведения | Тема | Период выполнения |
|-------|--------------------------------|---------------------------------------------------------------|-----------------------|
| 1 | ООО "Группа компаний "Иннотех" | Инструктаж. | 09.02.2026-09.02.2026 |
| 2 | ООО "Группа компаний "Иннотех" | Изучение архитектуры ИИ-агентов на базе платформы OpenClaw. Анализ поверхности атаки и векторов непрямой инъекции промпта. | 10.02.2026-06.03.2026 |
| 3 | ООО "Группа компаний "Иннотех" | Разработка мультимодального консольного приложения: описание изображений, генерация графиков и архитектурных схем, воспроизведение визуальных материалов с фотографий. | 07.03.2026-16.04.2026 |
| 4 | ООО "Группа компаний "Иннотех" | Изучение существующих фреймворков защиты ИИ-агентов. Разработка почтового защитного фильтра. | 17.04.2026-29.04.2026 |
| 5 | ООО "Группа компаний "Иннотех" | Разработка внутреннего фильтра инструментов для OpenClaw. | 30.04.2026-25.05.2026 |
| 6 | ООО "Группа компаний "Иннотех" | Тестирование разработанных решений. Анализ производительности, точности детектирования и уровня безопасности. | 26.05.2026-06.06.2026 |
| 7 | ООО "Группа компаний "Иннотех" | Оформление отчета. Подведение итогов. | 07.06.2026-07.06.2026 |
### Отзыв руководителя
Обучающийся группы М8О-101БВ-25 Еленкин Петр Владиславович проходил ознакомительную практику в ООО "Группа компаний "Иннотех". За время прохождения практики студент выполнил комплексное индивидуальное задание, объединяющее два направления: исследование безопасности ИИ-агентов и прикладная разработка мультимодального инструментария.
В рамках первого направления практикант провёл анализ уязвимостей агентных систем к атакам типа непрямой инъекции промпта на платформе OpenClaw, изучил существующие промышленные фреймворки защиты, а также исследовал архитектурные подходы к подтверждению действий агента. На основе полученных знаний разработал два защитных механизма. Первый - почтовый фильтр, реализующий двухуровневый анализ входящих писем: сопоставление с базой регулярных выражений и детектирование закодированных вредоносных нагрузок. Второй - внутренний фильтр инструментов, интегрирующийся с OpenClaw на уровне Node.js-загрузчика и перехватывающий вывод всех инструментов агента с применением regex-санитизации и дополнительной LLM-верификации.
В рамках второго направления студент разработал мультифункциональное консольное приложение, реализующее описание изображений через vision-интерфейс, генерацию matplotlib-графиков по текстовому запросу, построение архитектурных схем, а также функцию воспроизведения графиков и схем непосредственно с фотографий с автоматической классификацией типа изображения.
Практикант продемонстрировал уверенные навыки асинхронного программирования на Python, понимание принципов безопасности языковых моделей, умение проектировать модульные системы и интегрировать сторонние API. Оба разработанных продукта полностью соответствуют индивидуальному заданию и прошли успешное тестирование.
Материалы, изложенные в отчёте обучающегося, полностью соответствуют индивидуальному заданию, рекомендуемая оценка «Отлично».
### Отчет обучающегося по практике
Развитие технологий больших языковых моделей привело к широкому распространению автономных ИИ-агентов, способных не только генерировать текст, но и самостоятельно выполнять действия: читать файлы, отправлять письма, запускать команды в оболочке, обращаться к внешним сервисам. Подобные системы, в частности платформа OpenClaw, открывают новые возможности для автоматизации бизнес-процессов, однако вместе с расширением функционала неизбежно расширяется и поверхность атаки. Основной целью ознакомительной практики являлось двустороннее исследование этой проблемы: изучение уязвимостей агентных систем к атакам через данные и разработка как инструментов визуальной обработки информации, так и защитных механизмов против выявленных угроз.
Работа была организована по двум параллельным направлениям. Первое - анализ безопасности и создание защитных решений. Второе - прикладная разработка мультимодального консольного приложения, демонстрирующего возможности современных vision-моделей в задачах описания изображений и генерации визуальных материалов.
Первый этап практики был посвящён глубокому изучению архитектуры ИИ-агентов на базе платформы OpenClaw. В отличие от простых чат-ботов, агенты подобного класса обладают расширенным инструментарием: доступом к файловой системе, возможностью исполнять команды операционной системы, обрабатывать электронную почту и выполнять HTTP-запросы. Взаимодействие агента с окружающей средой организовано через систему навыков - именованных функций, которые языковая модель вызывает в ходе выполнения задания.
Именно эта архитектурная особенность формирует уязвимость к атакам класса непрямой инъекции промпта. Суть атаки заключается в следующем: злоумышленник внедряет вредоносные инструкции не в прямой диалог с агентом, а в данные, которые тот считывает в ходе работы - текст входящего письма, содержимое документа или веб-страницы. Поскольку архитектура большинства языковых моделей не разграничивает системные инструкции разработчика и внешний контент, модель может воспринять встроенный текст как легитимную команду и выполнить её, игнорируя исходные ограничения. В рамках командного аудита безопасности были проведены практические тесты, подтвердившие наличие подобных уязвимостей: агент допускал утечку системных метаданных через сформированный URL-запрос и в ряде сценариев выполнял произвольные команды оболочки, встроенные во входящие письма. Наиболее критическими оказались атаки с применением кириллической транслитерации команд, позволявшей обойти базовые текстовые фильтры, и кодирования нагрузки в Base64.
Перед началом разработки собственных защитных инструментов был проведён обзор существующих промышленных решений в области безопасности агентных систем.
Фреймворк NVIDIA NeMo Guardrails предоставляет механизм программируемых защитных барьеров для LLM-приложений. Его ключевая особенность состоит в использовании языка Colang - специализированного декларативного языка для описания диалоговых сценариев и правил поведения агента. Colang позволяет задать допустимые потоки разговора в виде шаблонов: если входящее сообщение или вывод инструмента не соответствует ни одному разрешённому шаблону, система блокирует его обработку ещё до передачи в основную языковую модель. Такой подход принципиально отличается от regex-фильтрации: вместо поиска заведомо опасных паттернов система работает по принципу белого списка, пропуская только явно разрешённые взаимодействия. Это делает Colang устойчивым к обфускации и новым, ранее не виденным формулировкам атак, однако требует детального описания всех ожидаемых сценариев использования, что существенно увеличивает трудоёмкость настройки.
Microsoft Presidio представляет собой инструментарий для обнаружения и обезличивания персональных данных в тексте. В контексте безопасности агентов его можно применять как препроцессор входящего контента: перед передачей внешних данных в языковую модель Presidio выявляет и маскирует чувствительную информацию - имена, адреса, финансовые реквизиты. Это ограничивает потенциальный ущерб от успешной атаки экфильтрации, лишая агента доступа к данным, которые злоумышленник мог бы похитить. Presidio поддерживает расширяемый набор анализаторов на базе регулярных выражений и моделей распознавания именованных сущностей, что позволяет адаптировать его под специфику конкретного приложения.
Отдельного внимания заслуживает подход Claude Code к управлению разрешениями инструментов. Инструмент реализует систему автоматического подтверждения задач, в которой операции делятся на безопасные и потенциально опасные. Операции с необратимыми последствиями - удаление файлов, выполнение системных команд, сетевые запросы - требуют явного подтверждения со стороны пользователя; безопасные операции чтения выполняются автономно. Граница между классами настраивается через параметр "--allowedTools", что позволяет гибко управлять степенью автономности агента. Изученная архитектура наглядно показала, что разграничение инструментов по уровню опасности и встроенный запрос подтверждения являются эффективной мерой противодействия атакам: даже если злоумышленнику удастся внедрить вредоносную инструкцию, её выполнение потребует явного согласия пользователя, что разрывает цепочку атаки.
Анализ перечисленных решений позволил сформулировать принципы, заложенные в собственные разработки: эшелонированная защита на нескольких уровнях, комбинирование быстрой regex-фильтрации с более точной семантической проверкой, изоляция агента от непроверенного контента до начала его обработки.
Второй задачей практики стала разработка прикладного инструмента, демонстрирующего возможности современных мультимодальных языковых моделей в работе с визуальной информацией. Результатом стало асинхронное консольное приложение на Python с интерактивным циклом ввода команд, реализующее четыре самостоятельных функции.
Первая функция - описание изображений. Приложение читает файл с диска, кодирует его в Base64 и передаёт в модель через OpenAI-совместимый API с запросом на детальное описание содержимого: объектов, их расположения, цветовой гаммы и общего контекста. Полученное текстовое описание выводится в терминал.
Вторая функция - генерация графиков по текстовому описанию. Пользователь описывает нужный график в произвольной форме, например «затухающая синусоида на отрезке [0, 10]» или «столбчатая диаграмма продаж по месяцам». Языковая модель генерирует Python-код для библиотеки matplotlib в соответствии с заданными ограничениями: доступны только предварительно импортированные "plt" и "np", запрещены "import", "plt.show()" и запись в файлы. Полученный код исполняется функцией "exec" в ограниченном пространстве имён, где доступен лишь безопасный набор встроенных функций без возможности импорта модулей или файлового ввода-вывода. Результат сохраняется в файл.
Третья функция - генерация архитектурных схем. Пользователь описывает программную систему, приложение просит модель сгенерировать её представление в формате Graphviz DOT. Промпт задаёт строгие соглашения по визуальному оформлению. Полученный DOT-код передаётся в локальный бинарь Graphviz, который рендерит его в файл. Этот подход принципиально безопаснее исполнения кода через "exec": Graphviz парсит DOT-описание как декларативные данные, не выполняя его как программу, поэтому вредоносная нагрузка, встроенная в промпт, в худшем случае приведёт к визуально некорректной схеме, но не к выполнению нежелательного кода.
Четвёртая функция - воспроизведение графика или схемы с фотографии. Пользователь указывает путь к фото уже существующего графика или архитектурной схемы, приложение анализирует изображение и воссоздаёт его программным кодом. Процесс реализован в три этапа: сначала vision-модель классифицирует изображение как "plot", "architecture" или "other" и возвращает структурированный JSON-объект, содержащий тип, краткое описание и генерируемый код; затем, в зависимости от типа, код передаётся либо в "render_plot", либо в "render_architecture"; наконец, результирующее изображение сохраняется в файл. Разбор ответа модели реализован с резервным механизмом извлечения JSON-объекта регулярным выражением на случай, если модель добавила пояснения за пределами объекта. Функция реконструирует тип визуализации, структуру данных и связи в собственном стиле.
Приложение построено на принципах асинхронного программирования: каждая функция обработки команды является корутиной, а ресурсоёмкое рендерение изображений выполняется в отдельном потоке, чтобы не блокировать цикл событий. Конфигурация вынесена в переменные окружения, что позволяет подключать любого OpenAI-совместимого провайдера, поддерживающего мультимодальные модели.
По результатам командного аудита безопасности и изучения существующих фреймворков были разработаны два самостоятельных защитных инструмента, перекрывающих разные уровни взаимодействия агента с внешними данными.
Первый инструмент - почтовый фильтр. Его архитектурный принцип состоит в разделении почтовых потоков: входящие письма поступают на «грязный» публичный ящик, фильтр анализирует каждое сообщение и маршрутизирует его либо в папку Verified, откуда их читает агент, либо в карантинную папку Blocked. Агент таким образом физически не получает писем с признаками инъекции - угроза нейтрализуется до начала её обработки языковой моделью.
Алгоритм проверки включает два уровня. Первый - сопоставление с базой регулярных выражений, составленной на основе практических сценариев атак. Паттерны покрывают такие категории угроз, как команды переопределения системного промпта, обращения к защищённым файлам агента, инструкции по экфильтрации данных, встроенные вызовы инструментов. Проверка проводится как по теме письма, так и по его телу; HTML-разметка предварительно извлекается с удалением тегов и декодированием HTML-сущностей. Второй уровень - детектирование закодированных нагрузок. Каждая строка тела письма анализируется на соответствие формату Base64: строки длиннее двадцати символов из допустимого алфавита декодируются, и полученный текст повторно проверяется паттернами первого уровня. Аналогично применяется ROT13-декодирование при обнаружении характерных транслитерированных форм опасных терминов. Фильтр работает в бесконечном цикле с интервалом опроса тридцать секунд, подключаясь к ящику по протоколу IMAP SSL.
Второй инструмент - фильтр внутри вызовов OpenClaw. Он решает другую задачу: защищает агента не от входящей почты, а от вредоносного содержимого, которое может вернуть любой инструмент в ходе работы - файловая система, браузер, внешний API. Интеграция реализована на уровне Node.js: loader регистрируется и перехватывает функцию "createOpenClawTools" в бинарном файле OpenClaw, оборачивая каждый вызов в фильтрующую прослойку. Перехваченный вывод передаётся в Python-скрипт.
Алгоритм фильтрации состоит из трёх шагов. На первом шаге regex-санитизатор заменяет все вхождения опасных паттернов - попытки смены роли, системные теги, инструкции игнорирования - на метку FILTERED и фиксирует список срабатываний. На втором шаге, если включён LLM-детектор, отфильтрованный текст передаётся изолированной языковой модели с задачей определить вероятность инъекции; модель возвращает JSON-объект. На третьем шаге принимается финальное решение: если уверенность модели достигает настраиваемого порога, по умолчанию равного 0.85, содержимое заменяется предупреждением с подробным указанием причины блокировки; в противном случае вывод оборачивается в маркеры EXTERNAL_UNTRUSTED_CONTENT, сигнализирующие основной модели агента о недоверенном происхождении данных. Это гарантирует, что даже непроверенный, но незаблокированный контент не воспринимается языковой моделью как системная инструкция. Ошибки в работе фильтра не прерывают работу агента: в случае сбоя исходный контент передаётся дальше без изменений, что обеспечивает отказоустойчивость системы.
Тестирование обоих защитных инструментов на наборах писем и сценариев атак, сформированных командой в ходе практики, подтвердило стопроцентное блокирование вредоносных сценариев при отсутствии ложных срабатываний на легитимном контенте.
Middle Python-разработчик со специализацией в LLM-интеграциях должен уверенно владеть асинхронным Python, prompt engineering, интеграцией с LLM API, протоколами передачи данных, регулярными выражениями, модульным проектированием приложений и базовыми принципами информационной безопасности, а также читать техническую документацию на английском языке. Среди soft skills для данного уровня ключевыми являются системное аналитическое мышление, самостоятельность в освоении новых технологий, критический подход к выбору архитектурных решений, навык технического документирования и умение работать в команде. В ходе выполнения индивидуального задания из hard skills были применены: асинхронное программирование, интеграция с OpenAI-совместимым API и настройка мультимодального ввода, prompt engineering для генерации matplotlib-кода и Graphviz DOT, работа с протоколом IMAP SSL, разработка regex-паттернов для детектирования инъекций, межязыковая интеграция Python и Node.js, а также анализ промышленных фреймворков. Из soft skills в работе были задействованы системное мышление при построении эшелонированной архитектуры защиты и критический подход при выборе между regex-фильтрацией и декларативным подходом Colang. Самостоятельное изучение существующих решений стало обязательным этапом перед проектированием собственных инструментов, что отражает требование к middle-специалисту работать без постоянного наставничества. Работа в составе команды при проведении совместного аудита и документирование хода соответствуют компетенциям командного взаимодействия и технического документирования, востребованным на данном уровне.
В ходе ознакомительной практики были реализованы два самостоятельных программных продукта. Мультимодальное консольное приложение продемонстрировало практическое применение vision-моделей для описания фотографий, а также возможности интеграции LLM для генерации и реконструкции визуальных материалов по текстовому или фотографическому запросу. Комплекс защитных механизмов - почтовый фильтр и внутренний фильтр - образует двухуровневую эшелонированную защиту агента: первый уровень отсекает вредоносный контент на этапе доставки писем, второй перехватывает и очищает вывод инструментов уже внутри агентной сессии.
Практика позволила получить практические компетенции в области асинхронного программирования на Python, работы с мультимодальными API, изучения промышленных фреймворков защиты, разработки регулярных выражений для обнаружения атак, интеграции Python-модулей с Node.js-окружением и патчинг модулей на уровне загрузчика. Кроме того, был сформирован системный взгляд на проблему безопасности ИИ-агентов: эффективная защита требует эшелонированного подхода - одновременного контроля как на уровне входных данных, так и на уровне внутренних инструментов агента.