add elenkin_petr review
This commit is contained in:
parent
6412e77c36
commit
0ed3d3f236
1 changed files with 83 additions and 0 deletions
83
elenkin_petr.md
Normal file
83
elenkin_petr.md
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
## Еленкин Петр
|
||||
|
||||
### Индивидуальное задание
|
||||
|
||||
Анализ уязвимостей агентных систем к атакам типа непрямой инъекции промпта, разработка защитного механизма и разработка распознавания и описания фотографий, генерации схем и графиков по фотографии.
|
||||
|
||||
### План выполнения
|
||||
|
||||
| № п/п | Место проведения | Тема | Период выполнения |
|
||||
|-------|--------------------------------|---------------------------------------------------------------|-----------------------|
|
||||
| 1 | ООО "Группа компаний "Иннотех" | Инструктаж. | 09.02.2026-09.02.2026 |
|
||||
| 2 | ООО "Группа компаний "Иннотех" | Изучение архитектуры ИИ-агентов на базе платформы OpenClaw. Анализ поверхности атаки и векторов непрямой инъекции промпта. | 10.02.2026-06.03.2026 |
|
||||
| 3 | ООО "Группа компаний "Иннотех" | Разработка мультимодального Telegram-бота: описание изображений, генерация графиков и архитектурных схем, воспроизведение визуальных материалов с фотографий. | 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-верификации.
|
||||
|
||||
В рамках второго направления студент разработал мультифункциональный Telegram-бот, реализующий описание изображений через vision-интерфейс, генерацию matplotlib-графиков по текстовому запросу, построение архитектурных схем, а также функцию воспроизведения графиков и схем непосредственно с фотографий с автоматической классификацией типа изображения.
|
||||
|
||||
Практикант продемонстрировал уверенные навыки асинхронного программирования на Python, понимание принципов безопасности языковых моделей, умение проектировать модульные системы и интегрировать сторонние API. Оба разработанных продукта полностью соответствуют индивидуальному заданию и прошли успешное тестирование.
|
||||
|
||||
Материалы, изложенные в отчёте обучающегося, полностью соответствуют индивидуальному заданию, рекомендуемая оценка «Отлично».
|
||||
|
||||
### Отчет обучающегося по практике
|
||||
|
||||
Развитие технологий больших языковых моделей привело к широкому распространению автономных ИИ-агентов, способных не только генерировать текст, но и самостоятельно выполнять действия: читать файлы, отправлять письма, запускать команды в оболочке, обращаться к внешним сервисам. Подобные системы, в частности платформа OpenClaw, открывают новые возможности для автоматизации бизнес-процессов, однако вместе с расширением функционала неизбежно расширяется и поверхность атаки. Основной целью ознакомительной практики являлось двустороннее исследование этой проблемы: изучение уязвимостей агентных систем к атакам через данные и разработка как инструментов визуальной обработки информации, так и защитных механизмов против выявленных угроз.
|
||||
|
||||
Работа была организована по двум параллельным направлениям. Первое - анализ безопасности и создание защитных решений в составе команды Red Team лаборатории Lambda. Второе - прикладная разработка мультимодального Telegram-бота, демонстрирующего возможности современных vision-моделей в задачах описания изображений и генерации визуальных материалов.
|
||||
|
||||
Первый этап практики был посвящён глубокому изучению архитектуры ИИ-агентов на базе платформы OpenClaw. В отличие от простых чат-ботов, агенты подобного класса обладают расширенным инструментарием: доступом к файловой системе, возможностью исполнять команды операционной системы, обрабатывать электронную почту и выполнять HTTP-запросы. Взаимодействие агента с окружающей средой организовано через систему навыков - именованных функций, которые языковая модель вызывает в ходе выполнения задания.
|
||||
|
||||
Именно эта архитектурная особенность формирует уязвимость к атакам класса непрямой инъекции промпта. Суть атаки заключается в следующем: злоумышленник внедряет вредоносные инструкции не в прямой диалог с агентом, а в данные, которые тот считывает в ходе работы - текст входящего письма, содержимое документа или веб-страницы. Поскольку архитектура большинства языковых моделей не разграничивает системные инструкции разработчика и внешний контент, модель может воспринять встроенный текст как легитимную команду и выполнить её, игнорируя исходные ограничения. В рамках командного аудита безопасности были проведены практические тесты, подтвердившие наличие подобных уязвимостей: агент допускал утечку системных метаданных через сформированный URL-запрос и в ряде сценариев выполнял произвольные команды оболочки, встроенные во входящие письма. Наиболее критическими оказались атаки с применением кириллической транслитерации команд, позволявшей обойти базовые текстовые фильтры, и кодирования нагрузки в Base64.
|
||||
|
||||
|
||||
Перед началом разработки собственных защитных инструментов был проведён обзор существующих промышленных решений в области безопасности агентных систем.
|
||||
|
||||
Фреймворк NVIDIA NeMo Guardrails предоставляет механизм программируемых защитных барьеров для LLM-приложений. Его ключевая особенность состоит в использовании языка Colang - специализированного декларативного языка для описания диалоговых сценариев и правил поведения агента. Colang позволяет задать допустимые потоки разговора в виде шаблонов: если входящее сообщение или вывод инструмента не соответствует ни одному разрешённому шаблону, система блокирует его обработку ещё до передачи в основную языковую модель. Такой подход принципиально отличается от regex-фильтрации: вместо поиска заведомо опасных паттернов система работает по принципу белого списка, пропуская только явно разрешённые взаимодействия. Это делает Colang устойчивым к обфускации и новым, ранее не виденным формулировкам атак, однако требует детального описания всех ожидаемых сценариев использования, что существенно увеличивает трудоёмкость настройки.
|
||||
|
||||
Microsoft Presidio представляет собой инструментарий для обнаружения и обезличивания персональных данных в тексте. В контексте безопасности агентов его можно применять как препроцессор входящего контента: перед передачей внешних данных в языковую модель Presidio выявляет и маскирует чувствительную информацию - имена, адреса, финансовые реквизиты. Это ограничивает потенциальный ущерб от успешной атаки экфильтрации, лишая агента доступа к данным, которые злоумышленник мог бы похитить. Presidio поддерживает расширяемый набор анализаторов на базе регулярных выражений и моделей распознавания именованных сущностей, что позволяет адаптировать его под специфику конкретного приложения.
|
||||
|
||||
Отдельного внимания заслуживает подход Claude Code к управлению разрешениями инструментов. Инструмент реализует систему автоматического подтверждения задач, в которой операции делятся на безопасные и потенциально опасные. Операции с необратимыми последствиями - удаление файлов, выполнение системных команд, сетевые запросы - требуют явного подтверждения со стороны пользователя; безопасные операции чтения выполняются автономно. Граница между классами настраивается через параметр "--allowedTools", что позволяет гибко управлять степенью автономности агента. Изученная архитектура наглядно показала, что разграничение инструментов по уровню опасности и встроенный запрос подтверждения являются эффективной мерой противодействия атакам: даже если злоумышленнику удастся внедрить вредоносную инструкцию, её выполнение потребует явного согласия пользователя, что разрывает цепочку атаки.
|
||||
|
||||
Анализ перечисленных решений позволил сформулировать принципы, заложенные в собственные разработки: эшелонированная защита на нескольких уровнях, комбинирование быстрой regex-фильтрации с более точной семантической проверкой, изоляция агента от непроверенного контента до начала его обработки.
|
||||
|
||||
|
||||
Второй задачей практики стала разработка прикладного инструмента, демонстрирующего возможности современных мультимодальных языковых моделей в работе с визуальной информацией. Результатом стал асинхронный Telegram-бот на Python, реализующий четыре самостоятельных функции.
|
||||
|
||||
Первая функция - описание изображений. При получении фотографии бот кодирует её в Base64 и передаёт в модель через OpenAI-совместимый API с запросом на детальное описание содержимого: объектов, их расположения, цветовой гаммы и общего контекста. Модель возвращает развёрнутое текстовое описание, которое бот пересылает пользователю. Данная функция активируется автоматически при получении любого изображения без специальной команды.
|
||||
|
||||
Вторая функция - генерация графиков по текстовому описанию. Пользователь описывает нужный график в произвольной форме, например «затухающая синусоида на отрезке [0, 10]» или «столбчатая диаграмма продаж по месяцам». Языковая модель генерирует Python-код для библиотеки matplotlib в соответствии с заданными ограничениями: доступны только предварительно импортированные "plt" и "np", запрещены "import", "plt.show()" и запись в файлы. Полученный код исполняется функцией "exec" в ограниченном пространстве имён, где доступен лишь безопасный набор встроенных функций без возможности импорта модулей или файлового ввода-вывода. Результат сохраняется в байтовый буфер и отправляется пользователю в виде PNG-изображения.
|
||||
|
||||
Третья функция - генерация архитектурных схем. Пользователь описывает программную систему, бот просит модель сгенерировать её представление в формате Graphviz DOT. Промпт задаёт строгие соглашения по визуальному оформлению. Полученный DOT-код передаётся в локальный бинарь Graphviz, который рендерит его в PNG. Этот подход принципиально безопаснее исполнения кода через "exec": Graphviz парсит DOT-описание как декларативные данные, не выполняя его как программу, поэтому вредоносная нагрузка, встроенная в промпт, в худшем случае приведёт к визуально некорректной схеме, но не к выполнению нежелательного кода.
|
||||
|
||||
Четвёртая функция - воспроизведение графика или схемы с фотографии. Пользователь присылает фото уже существующего графика или архитектурной схемы, бот анализирует изображение и воссоздаёт его программным кодом. Процесс реализован в три этапа: сначала vision-модель классифицирует изображение как "plot", "architecture" или "other" и возвращает структурированный JSON-объект, содержащий тип, краткое описание и генерируемый код; затем, в зависимости от типа, код передаётся либо в "render_plot", либо в "render_architecture"; наконец, результирующее изображение отправляется пользователю. Разбор ответа модели реализован с резервным механизмом извлечения JSON-объекта регулярным выражением на случай, если модель добавила пояснения за пределами объекта. Функция реконструирует тип визуализации, структуру данных и связи в собственном стиле.
|
||||
|
||||
Весь бот написан с применением принципов асинхронного программирования на базе библиотеки python-telegram-bot: каждый обработчик Telegram-сообщений является корутиной, а ресурсоёмкое рендерение изображений выполняется в отдельном потоке, чтобы не блокировать цикл событий. Конфигурация вынесена в переменные окружения, что позволяет подключать любого 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-специалисту работать без постоянного наставничества. Работа в составе команды при проведении совместного аудита и документирование хода соответствуют компетенциям командного взаимодействия и технического документирования, востребованным на данном уровне.
|
||||
|
||||
|
||||
В ходе ознакомительной практики были реализованы два самостоятельных программных продукта. Мультимодальный Telegram-бот продемонстрировал практическое применение vision-моделей для описания фотографий, а также возможности интеграции LLM для генерации и реконструкции визуальных материалов по текстовому или фотографическому запросу. Комплекс защитных механизмов - почтовый фильтр и внутренний фильтр - образует двухуровневую эшелонированную защиту агента: первый уровень отсекает вредоносный контент на этапе доставки писем, второй перехватывает и очищает вывод инструментов уже внутри агентной сессии.
|
||||
|
||||
Практика позволила получить практические компетенции в области асинхронного программирования на Python, работы с мультимодальными API, изучения промышленных фреймворков защиты, разработки регулярных выражений для обнаружения атак, интеграции Python-модулей с Node.js-окружением и патчинг модулей на уровне загрузчика. Кроме того, был сформирован системный взгляд на проблему безопасности ИИ-агентов: эффективная защита требует эшелонированного подхода - одновременного контроля как на уровне входных данных, так и на уровне внутренних инструментов агента.
|
||||
Loading…
Add table
Add a link
Reference in a new issue