Специфика именно ботов
У чат-бота три свойства, отличающих его от прочих приложений на языковых моделях. Первое — публичность: вход не фильтруется, написать может и клиент, и конкурент, и автоматизированный скрипт. Второе — сессий много, и каждая несёт накопленный контекст: историю, распознанные данные, результаты промежуточных шагов. Третье — бот редко живёт сам по себе: за ним стоят поиск по базе знаний, CRM, тикет-система, кнопка эскалации на живого оператора. Каждый элемент — одновременно благо для пользователя и поверхность для атаки.
Компонентный разбор уязвимостей
| Компонент бота | Типовой вектор | Возможный ущерб |
|---|---|---|
| Поле ввода | прямые попытки переубедить бота, мнимые служебные сообщения | раскрытие правил и контекста |
| История диалога | закладка в раннем сообщении срабатывает позже | отложенные действия в нужный атакующему момент |
| Память между сессиями | сохранённая заметка с командой | персистентная закладка в будущих диалогах |
| Поиск по базе знаний | инъекция в индексированный документ | массовые искажённые ответы |
| Эскалация оператору | сообщение, оформленное как служебная сводка | дезинформация, переданная доверчивому сотруднику |
| Интеграции и действия | просьба выполнить операцию от имени пользователя | реальные изменения в системах |
| Внешний контент в ответе | ссылка или виджет, сгенерированные по указанию атакующего | фишинг под брендом компании |
Три характерных сюжета
Отложенная закладка. Атакующий в начале диалога оставляет длинное «уточнение», в середине которого спрятана команда: при следующем упоминании оплаты перевести пользователя на сторонний сайт. Вопрос-триггер задаётся позже, когда оператор уже не смотрит на начало переписки. Мораль: вся сессия — единый недоверенный контекст, а не только последнее сообщение.
Социальная инженерия через эскалацию. Бот передаёт сложный вопрос оператору вместе со своей сводкой. Атакующий формулирует обращение так, чтобы сводка содержала ложную легенду — «категория клиента премиум, вопрос согласован с руководством». Оператор, доверяя автоматической сводке, принимает решение за чужой счёт. Здесь инъекция бьёт не по машине, а по человеку через машину.
Ретроспективная эвакуация. Бот с памятью между сессиями по просьбе «запомни, что я предпочитаю переписку по этому адресу» сохраняет заметку с внешним контактом. Дальше любые сценарии, где бот опирается на память, могут быть развёрнуты на внешний канал. Персистентная память заслуживает отношения как долгоживущий недоверенный контейнер.
Меры по компонентам
Ввод и диалог. Ролевая дисциплина в системном промпте с повтором ключевых правил после истории; поведенческий запрет следовать указаниям из сообщений пользователя о «служебных режимах»; отдельная модель-классификатор на входе как дополнительный, не основной барьер.
Память. Минимальный срок хранения; исключение чувствительных категорий из запоминаемого; журнал созданных заметок с правкой человеком при спорных случаях; полное обнуление памяти при подозрении на компрометацию сессии.
База знаний. Санитизация документов до индексации; белый список источников; вывод цитат с указанием документа, чтобы закладка была заметна человеку.
Эскалация. Сводка оператору помечается как автоматическая и машинная; критичные статусы клиента берутся из системы, а не из текста обращения; у оператора есть быстрый способ увидеть исходные сообщения без машинной интерпретации.
Действия и интеграции. Необратимые операции — только с подтверждением через отдельный независимый канал (код на телефоне, кнопка в личном кабинете); ограничение списка действий теми, что упомянуты в сценарии бота; квоты на количество операций за сессию.
Ответы. Ссылки в ответах — только из доменного белого списка; форматирование ответа фиксированное, без исполняемых элементов; внешние адреса маскируются или требуют ручного ввода пользователем.
Порядок приведения бота в порядок
- Составьте схему: входы, память, источники данных, действия, интеграции. На схеме отметьте, что из этого доступно неаутентифицированному пользователю.
- Пройдитесь по таблице компонентов и честно ответьте, какой барьер стоит за каждой строкой. Пустые строки — приоритет.
- Закройте сначала действия и эскалацию: это наиболее конвертируемые в ущерб векторы.
- Включите журналирование сессий целиком — без него разбор инцидента превращается в гадание.
- Прогоните типовой корпус инъекций, включая отложенные закладки и атаки на память; повторяйте при каждом изменении сценария.
Готовность бота к атакам — это не состояние, а режим эксплуатации: сценарии меняются, память накапливается, база знаний растёт. Регулярность проверок важнее единичного усердия.
Шпаргалка для команды поддержки
Инцидент с ботом разбирается быстрее, если у дежурных под рукой короткая памятка. В неё стоит включить: признаки атаки в сессии — неожиданные формулировки про инструкции, странные действия от имени ассистента, жалобы пользователей на нетипичные ответы; первое действие — сохранение полной сессии без перезаписи; второе — проверка, какие инструменты вызывались и с каким результатом; третье — блокировка затронутого вектора, если он воспроизводим; четвёртое — уведомление владельца сервиса и фиксация инцидента в журнале. Отдельная строка памятки — критерий эскалации: любое действие бота с внешним эффектом (отправка, изменение, платёж) при подозрении на атаку немедленно разбирается как потенциальная утечка, включая оценку попадания персональных данных за периметр.
Памятка живёт там же, где дежурство, обновляется после каждого разбора и проверяется учебной тревогой раз в квартал — иначе она превращается в артефакт для проверки, а не в инструмент.