Безопасный вайбкодинг: чек-лист для защиты ИИ-приложения от уязвимостей

Вайбкодинг убрал барьер между непрограммистом и готовым приложением — и заодно убрал понимание базовой информационной безопасности. О том, как вернуть этот барьер и «не потерять» данные из ИИ-приложения, разбираемся вместе с экспертом.
Бизнес-партнер по информационной безопасности 1С-Битрикс
Об эксперте: Леонид Плетнев — бизнес-партнер по информационной безопасности 1С-Битрикс. Курирует направление информационной безопасности в части организации взаимодействия бизнеса и технических подразделений. Эксперт в области проектирования систем защиты критичных данных, продуктовой безопасности, ИТ-аудита и контроля, CISM, CISA.

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

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

Безопасность нужно просить отчетливо

Модель не станет добавлять защиту сама, пока ее об этом прямо не попросят. Поскольку ИИ оптимизирует ровно то, что сформулировано в запросе. Например, инструкция «сделай красиво и быстро» требований к безопасности в себе не несет.

безопасность, замок
Источник: Magnific

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

Список угроз

Перечни типовых уязвимостей составлены и содержатся в документах различных фреймворков, (например, OWASP AI Testing Guide, OWASP Top 10 for LLM Applications, NIST SSDF) объединяя самые частые угрозы, среди которых оказываются инъекции, сломанная аутентификация, утечки чувствительных данных и ошибки конфигурации доступа. Заучивать этот список неспециалисту совершенно не обязательно, потому что проверку можно поручить самому ИИ, отправив ему для приложения с ИИ запрос вроде «проверь приложение по OWASP Top 10 for LLM Applications и объясни найденное простым языком, без жаргона», после чего модель пройдется по классическим болевым точкам и переведет результат на понятный человеку язык.

Агент работает как исполнитель, и его нужно контролировать

Самая недооцененная часть безопасности вайбкодинга связана с поведением ИИ-агентов, которые действуют от имени пользователя и с его правами, и которые могут из благих намерений или из-за компрометации выходить далеко за рамки разрешенных ему действий. Если выдать такому агенту доступ на удаление данных без надобности, то он может этим доступом воспользоваться и данные удалить. Поэтому появляются и правило минимальных прав, и рекомендация включать режим «только чтение» всюду, где изменение данных для работы приложения вообще не требуется.

Специалсит по информационной безопасности
Источник: Unsplash

Агент способен сделать совсем не то, чего от него ждали, причем без всякого злого умысла, просто потому что модель достаточно сообразительна, чтобы трактовать расплывчато поставленную задачу по-своему. Чем размытее формулировка, тем шире простор для неожиданных действий. Рядом стоит и prompt-инъекция, которая возникает тогда, когда внутри письма, документа или веб-страницы, читаемых агентом, оказывается спрятана посторонняя команда, и агент иногда ее выполняет, приняв за легитимную инструкцию. Поэтому защита должна сводиться к тому же минимуму прав, минимуму внешних источников, контролю ввода и вывода.

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

Приложение закрывает только половину задач по безопасности

Даже безупречно написанный код остается только набором текста. Случаи, когда непонятно, где и как он развернуто приложение, какие порты открыты, какой доступ предоставлен пользователям, по каким правилам реализованы интеграции с другими приложениями способны перечеркнуть любое качество самого кода. Разумный принцип «закрыто по умолчанию» или предполагает, что сервер остается невидимым из интернета, доступ к приложению есть только у владельца, а публичный режим включается осознанно и лишь там, где чувствительных данных нет. Часть этой работы платформы берут на себя. Например, в Битрикс24 Вайбкод серверы по умолчанию запускаются в непубличном режиме по технологии Black Hole, при которой все порты закрыты и снаружи на сервер не попасть, а права ключей можно ограничить вплоть до режима «только чтение».

кодинг код программист
Источник: Unsplash

Кто и за что отвечает

Разделение ответственности сводится к следующим зонам:

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

Чек-лист на пять минут перед запуском

  • В промптах к ИИ безопасность запрошена явно. В том числе, проверка ввода, отказ от секретов в коде и проверку прав на каждой точке входа.
  • Проведена независимая проверка по стандартам безопасности в отдельной сессии.
  • У ключей отсутствуют лишние права, а там, где это возможно, включен режим «только чтение».
  • Ключи хранятся в надежном месте, подальше от кода и переписки.
  • Публичный режим остался выключенным, а доступ открыт по принципу «не больше, чем нужно».
  • Реализованы механизмы контроля пользовательских сессий.
  • Включен двухфакторная аутентификация для пользователей приложения.
  • Приложение протестировано на заведомо тестовых данных.
  • Для платежей, медицинских, персональных или других чувствительных данных результат работы ИИ посмотрел специалист.
  • Приложение размещено в надежной инфраструктуре.