Модель угроз

Не давайте агенту доступ к значениям учётных данных

Инструменты разработчика выполняют сторонний код в доверенном окружении. Для встроенных HTTP и SSH Sallyport не помещает туда сохранённые многоразовые учётные данные и локально контролирует каждый вызов.

Значение

Sallyport намеренно не добавляет найденные учётные данные в результаты, подтверждения, события аудита, журналы и ошибки. Ответы исполнителя не проверяются и не изменяются и могут включать конфиденциальные данные цели.

Авторизация

Состояние хранилища, подтверждение каждого вызова и проверка запущенного процесса определяют, можно ли начать вызов инструмента.

Аудит

Перед каждым допущенным вызовом инструмента должна быть сохранена зашифрованная запись о намерении. Получение каталога её не создаёт.

Зачем это нужно

Как скомпрометированная зависимость добирается до учётных данных

Доверенный пакет или CI-процесс уже работает там, где разработчики хранят многоразовые учётные данные. Если такой код становится вредоносным, для чтения и отправки этих данных достаточно одного запуска.

путь доверенного кодасбор доступных учётных данных
Доверенная зависимостьСкомпрометирован сопровождающий или процесс выпуска
Запуск скриптаУстановка, сборка или шаг CI
Окружение разработчика или CIКод получает права текущего пользователя
Переменные окружения
Файлы с учётными данными
Память процессов
Установленные инструменты ИИ
Система злоумышленникаУкраденные данные можно использовать снова
Скомпрометированная доверенная зависимость запускает скрипт жизненного цикла в процессе разработчика или CI. Скрипт собирает секреты из переменных окружения, файлов, памяти процессов и установленных инструментов ИИ, а затем отправляет их злоумышленнику.

Недавние инциденты прошли по этому пути

Техника меняется от кампании к кампании. Во всех этих случаях вредоносный код выполнялся рядом с учётными данными, которые другие системы продолжали принимать.

  1. Май 2026 года

    Вредоносные пакеты TanStack

    84 вредоносные версии 42 пакетов @tanstack при установке запускали код, который собирал облачные учётные данные, токены GitHub и приватные SSH-ключи, а затем пытался распространиться через пакеты, сопровождаемые каждой жертвой.

    Бюллетень безопасности TanStack
  2. Конец 2025 года

    Кампании Shai-Hulud в npm

    Скомпрометированные пакеты крали секреты во время установки и распространялись с помощью похищенных учётных данных. Более поздние варианты распознавали CI и злоупотребляли раннерами на собственной инфраструктуре.

    Разбор GitHub по безопасности цепочки поставок
  3. Август 2025 года

    Nx S1ngularity

    Вредоносные версии пакетов Nx запускали post-install-скрипт, который искал конфиденциальные данные в системах разработчиков, пытался использовать локальные инструменты ИИ и загружал результаты через GitHub CLI.

    Разбор инцидента от Nx
Документация GitHub: почему скомпрометированный раннер может извлечь и намеренно отправить доступные ему секреты
Контрольная точка

Уберите многоразовые учётные данные из процесса

Секрет из переменной окружения или файла можно просто скопировать. Учётные данные в Sallyport становятся входными данными локальной операции, которая зависит от состояния хранилища, подтверждения, привязки к цели и аудита.

Учётные данные в окружении

Встроенные HTTP / SSH

Скомпрометированный код
Читает многоразовое значение
Отправляет или сохраняет его
значение скопировано
Скомпрометированный код
Структурированная операция
Граница SallyportСостояние, процесс, подтверждение и сохранённое намерение
Добавить аутентификацию / подписать SSH
Запрошенная / настроенная цель
Зашифрованное хранилище
отказ или подтверждениеучётные данные только на пути исполнителя / получателявозможны злоупотребление и конфиденциальный вывод
При прямом доступе скомпрометированный код читает многоразовые учётные данные и отправляет их куда угодно. Во встроенном пути HTTP и SSH код передаёт Sallyport структурированную операцию. Sallyport может отказать или запросить подтверждение, добавить учётные данные HTTP или подписать запрос SSH внутри исполнителя и отправить операцию запрошенной или настроенной цели. Результат цели возвращается без проверки или изменения содержимого и может включать конфиденциальные данные.

Для встроенных HTTP и SSH пакет не может прочитать сохранённые учётные данные из окружения агента. Ему придётся запросить операцию, которую Sallyport может отклонить, потребовать подтвердить отдельно, ограничить запрошенной или настроенной целью и записать в журнал. Ответ цели возвращается без проверки или изменения содержимого.

Это не мешает вредоносному коду запускаться и не доказывает безопасность одобренного запроса. Цели HTTP и SSH могут вернуть конфиденциальные данные. Удалённые MCP-серверы получают настроенную аутентификацию, а локальные stdio-серверы — привязанные данные в окружении. Любую цель и внешний сервер следует считать доверенным получателем учётных данных.

Схема принятия решения

Каждый допущенный вызов проходит одинаковые проверки

Встроенная цепочка применяется к вызовам инструментов. Запросы initialize и tools/list управляют каталогом вне этой цепочки и не создают строку намерения.

  1. 01

    Хранилище готово

    В любом другом состоянии действия агентов запрещены.

    отказ | далее

  2. 02

    Цель определена

    Должны существовать все обязательные сведения о цели и учётных данных.

    отказ | далее

  3. 03

    Проверка каждого вызова

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

    подтверждение | далее

  4. 04

    Допуск процесса

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

    подтверждение | далее

  5. 05

    Намерение в журнале

    Зашифрованная запись должна сохраниться до начала выполнения.

    отказ | запуск

  6. 06

    Выполнить и вернуть результат

    Выполнить операцию, добавить результат и вернуть ограниченный по размеру результат без проверки или изменения содержимого. Результат может включать конфиденциальные данные.

    результат

Запись с точным cdhash перестаёт совпадать после обновления файла. Запись издателя может пропускать обновления с той же идентичностью, поэтому скомпрометированный издатель или путь подписи остаётся доверенным. Обе записи пропускают только карточку сессии.

Покрытие

Меры защиты и остаточный риск

У модели есть чёткая граница. Остаточный риск является её частью.

УгрозаЧто меняет SallyportЧто остаётся
Вредоносная зависимость читает файлы или окружениеДля встроенных HTTP и SSH Sallyport не помещает сохранённые учётные данные в окружение агента и намеренно не добавляет их в результаты, журналы, подтверждения или события аудита. Результаты исполнителя возвращаются без проверки или изменения содержимого.Учётные данные вне Sallyport остаются доступными. Локальные stdio-серверы MCP получают привязанные данные и наследуют окружение Sallyport.
Инъекция в промпт или компрометация одобренного агентаКлючи с подтверждением каждого вызова всё равно требуют нажатия или Touch ID. При последующих вызовах Sallyport заново проверяет запущенный процесс.Допуск относится к процессу, а не к каждому пакету или байту. Загруженный код и отправители через унаследованный сокет или канал получают тот же допуск.
Перенаправление учётных данных на другой хостУчётные данные HTTP добавляются только при совпадении хоста и пути. Запросы с ними не следуют перенаправлениям; остальные остаются на том же хосте и порте без перехода с HTTPS на HTTP.Текущая проверка DNS не закрепляет проверенный адрес до установления соединения, поэтому сохраняется возможность перепривязки DNS (DNS rebinding).
Изменение локальной истории аудитаЗашифрованные строки и подписанная цепочка шифротекста обнаруживают правки, перестановку, внутренние пропуски и замену подписывающего ключа. Подписанная локальная контрольная точка обнаруживает откат за неё.После аварийного завершения хвост новее контрольной точки может быть потерян. Чтобы отличить полный локальный откат от восстановления, нужен внешний свидетель.
Внешний сервер помещает секреты в метаданные каталога MCPВыбирайте и проверяйте код внешнего сервера как часть границы доверия. Sallyport возвращает результаты, ошибки и аутентифицированные метаданные каталога без фильтрации по признаку учётных данных и с учётом документированных ограничений размера и длины описаний.Initialize и tools/list находятся вне аудита вызова. Их имена, описания и схемы являются произвольным содержимым под контролем внешнего сервера и могут включать учётные данные или другую конфиденциальную информацию.
Права root или выполнение кода внутри SallyportSecure Enclave ограничивает использование приватных ключей, а данные хранилища остаются зашифрованными на диске.Права root, отключённый SIP или выполнение кода внутри процесса позволяют управлять разблокированным хранилищем. Sallyport не является песочницей или антивирусом.
Жёсткие ограничения

Чего эта модель не обещает

Sallyport снижает риск утечки учётных данных и контролирует их использование. Он не превращает враждебный локальный код в доверенный.

01

Подтверждение не анализирует намерение

Карточка сессии показывает процесс и его происхождение. Она не определяет безопасность каждого запроса внутри сессии.

02

Допуск процесса не изолирует компоненты

Сессия определяет запущенный процесс. Загруженный код или компонент, который пишет через унаследованный сокет или канал, получает тот же допуск.

03

Пользователь может одобрить вредное действие

Нажатие или Touch ID подтверждает только прохождение проверки. Невнимательно просмотренная операция от этого не становится безопасной.

04

Внешние MCP-серверы являются доверенными получателями

Удалённый сервер получает настроенный API-ключ или токен OAuth. Локальный дочерний stdio-процесс получает привязанные данные и окружение приложения. Sallyport не изолирует ни один из этих серверов.

05

Метаданные каталога не являются доверенным содержимым

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

06

Трафик в обход Sallyport находится вне модели

Приложение не может контролировать прямые сетевые запросы, команды оболочки, другие хранилища и инструменты, которые обходят его MCP-интерфейс.

07

Результаты исполнителя могут содержать конфиденциальные данные

Результаты и ошибки HTTP, MCP и SSH не проверяются и не изменяются. Цель может вернуть учётные данные или другую конфиденциальную информацию, а записи SSH сохраняют её вывод.

08

Предпросмотр аудита может содержать данные вызывающей стороны

Sallyport не добавляет найденные учётные данные в подтверждения или строки аудита, но команды и аргументы вызывающего процесса попадают в сводки и ограниченный предпросмотр. Считайте расшифрованный аудит конфиденциальным.

09

Это интерактивный продукт для Mac

Поддерживается подписанное приложение для macOS на Apple Silicon с локальным интерфейсом и Touch ID. Режимов для Linux, контейнеров, серверов, облачных раннеров и CI без интерфейса нет.

Проверьте реализацию

Основной код опубликован по лицензии Apache-2.0. Изучите реализацию и модель доверия или соберите приложение локально.

Открыть исходный код на GitHub
Sallyport

Sallyport выполняет API-вызовы и SSH-команды за вашего ИИ-агента. Ключи остаются в локальном хранилище на вашем Mac; вы подтверждаете каждый запуск, и каждое действие попадает в запечатанный журнал.

© 2026 Sallyport · Открытый код по лицензии Apache-2.0 · Oleg Sotnikov