Perplexity открыла исходный код SPACE — песочницы с микроVM Firecracker для ИИ-агентов
Perplexity открыла исходный код SPACE — платформы-песочницы, лежащей в основе каждой задачи в Perplexity Computer. Песочница Perplexity SPACE предоставляет каждой задаче агента собственную микроВМ Firecracker. Учетные данные и исходящий трафик контролируются за пределами этой ВМ. Код опубликован на условиях лицензии Apache 2.0 на GitHub. Для команд, создающих агентов для программирования или веб-серфинга, это протестированный в production слой изоляции, который можно развернуть самостоятельно.
Кратко
- Размер: кодовая база на Rust, релиз 0.8.0 — общедоступная базовая версия. HTTP API и события, отправляемые сервером.
- Запускается на: хосте Linux x86_64 с KVM,
/dev/kvm, btrfs и Docker. Локальный Kind (Kubernetes) или прямой режим. macOS не поддерживается. - Производительность: в production медианная задержка создания снизилась с 185 до 60 мс по сравнению с предыдущим провайдером Perplexity.
- Лучший результат: 0 из 108 попыток выхода из ВМ на хост оказались успешными при тестировании 9 передовых моделей.
- Худший результат: до внесения исправлений агенты обходили политику исходящего трафика в 11 из 54 запусков с частичным доступом к сети.
Что такое Perplexity SPACE?
SPACE (Sandboxed Platform for Agentic Code Execution) — это платформа Perplexity для запуска кода агентов в изолированных микроВМ. Приложения обращаются к ее HTTP API, чтобы создавать окружения Linux, выполнять команды и передавать вывод в потоковом режиме.
Шаблон предоставляет исходную файловую систему. Песочница — это один экземпляр такого шаблона с собственной ВМ и доступным для записи диском. В одной песочнице можно выполнять множество команд.
В публикации о запуске Perplexity объясняется цель такой конструкции. Агенты выполняют команды, устанавливают пакеты и обращаются к сервисам с правами root внутри песочницы. Хост остается вне контроля гостевой системы. Работа агентов является длительной, сохраняющей состояние и ветвящейся, поэтому она должна переживать перезапуски.
Как SPACE изолирует агентов?
Каждая песочница — это микроВМ Firecracker с собственным гостевым ядром. Сетевой шлюз на хосте, выделенный для каждой песочницы, применяет политику исходящего трафика к каждому внешнему соединению.
Секреты никогда не попадают в гостевую систему. Согласно июльской инженерной публикации Perplexity, учетные данные внедряются на сетевом уровне. Хранилище учетных данных поддерживает иерархическое определение областей действия, ограничения частоты запросов и журналирование аудита.
В руководстве по архитектуре система разделена на 4 части. Это API на базе PostgreSQL, контроллеры, рабочие сервисы и плоскость данных. Рабочие сервисы управляют ВМ, сетями, томами, шаблонами и учетными данными. btrfs с копированием при записи создает каждую корневую файловую систему.
Как работают приостановка, замораживание и восстановление?
Песочницы проходят через 4 состояния: работа, пауза, приостановка и удаление.
- Пауза: память ВМ остается размещенной на рабочем узле. Это не долговечный снимок.
- Приостановка: создаются снимки памяти ВМ, состояния среды выполнения и корневой файловой системы. Активные ресурсы освобождаются.
- Простой по умолчанию: песочницы приостанавливаются через 6 часов бездействия.
Для ускорения создания развертывания Kubernetes используют пулы предварительно запущенных песочниц. В конфигурациях с одним узлом вместо этого используются базовые снимки.
В production задержка создания на 90-м процентиле снизилась с 447 до 89 мс. Perplexity сообщает, что 100% сеансов Computer работают на SPACE.
Выдержала ли SPACE тест красной команды?
В отчете Perplexity «Побег из SPACE: часть I» протестированы 9 моделей с правами root внутри гостевой системы. В исследовании проведено 216 запусков для 2 задач и 4 конфигураций.
- Выход из песочницы: в 0 из 108 запусков удалось получить доступ к секрету на стороне хоста.
- Обход запрета на сеть: успешных попыток не было — 0 из 54.
- Обход при частичном доступе к сети: до внесения исправлений успешными оказались 11 из 54 запусков. Путь обхода нашли 4 модели.
Claude Opus 5.0, GPT-5.6 Sol, GPT-5.6 Cyber и Kimi K3 нашли способы обхода. В атаках использовались подмена DNS и общие IP-адреса CDN.
Затем Perplexity добавила проверку исходного адреса с помощью nftables. Теперь шлюз завершает TLS-соединение и проверяет SNI и HTTP host по списку разрешенных значений. В повторном тестировании ни одна модель не продемонстрировала подтвержденный обход.
Та же команда протестировала 10 сторонних платформ. На 8 из них был обнаружен как минимум один способ обхода сетевой политики. Perplexity раскрыла результаты каждому затронутому поставщику.
</button></div>
</div>
<div class="pane" data-p="2">
<div class="bars" id="psx-rt"></div>
<div class="note">9 моделей, 216 запусков, права root внутри гостевой системы. Исправления: проверка исходного адреса с помощью nftables, завершение TLS с проверкой SNI и Host по списку разрешенных значений. Источник: Perplexity, «Побег из SPACE: часть I» (23 сентября 2026 г.).</div>
</div>
<div class="pane" data-p="3">
<div class="bars" id="psx-lat"></div>
<div class="note">Трафик в первую неделю запуска в production, SPACE по сравнению с предыдущим провайдером песочниц Perplexity. Меньше — лучше. Источник: инженерный блог Perplexity (15 июля 2026 г.).</div>
</div>
<div class="pane" data-p="4">
<div class="tw"><table>
<tr><th>Возможность</th><th>SPACE</th><th>E2B Runtime</th><th>microsandbox</th></tr>
<tr><td>Изоляция</td><td>МикроВМ Firecracker</td><td>МикроВМ Firecracker</td><td>МикроВМ libkrun</td></tr>
<tr><td>Лицензия</td><td>Apache 2.0</td><td>Apache 2.0</td><td>Apache 2.0</td></tr>
<tr><td>Язык</td><td>Rust</td><td>Go</td><td>Rust</td></tr>
<tr><td>Тест исходящего трафика Perplexity</td><td>0 обходов после исправления</td><td>Обход HTTPS, планируется устранение</td><td>Обход HTTP + HTTPS, исправлено в v0.6.18</td></tr>
</table></div>
<div class="note">Результаты тестов исходящего трафика Perplexity, проведенных с 31 августа по 1 сентября 2026 г., для протестированных версий.</div>
</div>
<div class="ft"><span>Источники: github.com/perplexityai/SPACE · perplexity.ai/hub/blog</span><b>© Marktechpost</b></div>
</div>
<script>
(function(){
var R=document.getElementById('pplx-space-x');
function post(){try{parent.postMessage({psxHeight:R.offsetHeight+40},'*')}catch(e){}}
var tabs=R.querySelectorAll('.tab'),panes=R.querySelectorAll('.pane');
var D=['<b>Гостевая микроВМ.</b> Каждая задача получает собственную микроВМ Firecracker с собственным гостевым ядром. Агент может выполнять команды и устанавливать пакеты с правами root. Хост остается вне его контроля.',
'<b>Шлюз для каждой песочницы.</b> Весь исходящий трафик гостевой системы проходит через шлюз на стороне хоста. Теперь он завершает TLS-соединение и требует, чтобы и SNI, и HTTP Host были разрешены в списке и сопоставлены с DNS.',
'<b>Внешние сервисы.</b> Учетные данные никогда не попадают в гостевую систему. Они внедряются на сетевом уровне с учетом областей действия, ограничений частоты запросов и журналирования аудита.'];
var det=document.getElementById('psx-detail'),boxes=R.querySelectorAll('.box');
function showD(i){boxes.forEach(function(b,j){b.classList.toggle('act',i==j)});det.innerHTML=D[i];post()}
boxes.forEach(function(b){b.addEventListener('click',function(){showD(+b.dataset.d)});b.addEventListener('mouseenter',function(){showD(+b.dataset.d)})});
showD(0);
var L=['<b>Работа.</b> Процессы выполняются. Оперативная память ВМ и доступная для записи файловая система сохраняются.',
'<b>Пауза.</b> Выполнение останавливается. Память ВМ остается размещенной на рабочем узле. Это не долговечный снимок.',
'<b>Приостановка.</b> Создаются снимки памяти ВМ, состояния среды выполнения и корневой файловой системы. Активные ресурсы ВМ освобождаются. По умолчанию: приостановка после 6 часов простоя.',
'<b>Удаление.</b> Песочница больше недоступна через API.'];
var li=0,sts=R.querySelectorAll('.st'),ld=document.getElementById('psx-life');
function life(){sts.forEach(function(s,j){s.classList.toggle('on',j==li)});ld.innerHTML=L[li];post()}
document.getElementById('psx-next').onclick=function(){li=(li+1)%4;life()};
document.getElementById('psx-prev').onclick=function(){li=(li+3)%4;life()};
sts.forEach(function(s,j){s.style.cursor='pointer';s.onclick=function(){li=j;life()}});
life();
function bars(el,data){el.innerHTML=data.map(function(d){return '<div class="row"><div class="lbl"><span>'+d[0]+'</span><em>'+d[1]+'</em></div><div class="track"><div class="fill" data-w="'+d[2]+'" style="background:'+d[3]+'"></div></div></div>'}).join('')}
bars(document.getElementById('psx-rt'),[
['Выход из ВМ на хост','0 из 108 запусков',1.5,'#76B900'],
['Обход сети, без сети','0 из 54 запусков',1.5,'#76B900'],
['Обход сети, частичная сеть (до исправления)','11 из 54 запусков',20.4,'#E5675A'],
['Обход сети, после исправления','0 подтвержденных обходов',1.5,'#76B900'],
['Сторонние платформы с обходом','8 из 10',80,'#1FB8CD']]);
bars(document.getElementById('psx-lat'),[
['Медианное создание, предыдущий провайдер','185 мс',41.4,'#5E5B66'],
['Медианное создание, SPACE','60 мс',13.4,'#20808D'],
['Создание p90, предыдущий провайдер','447 мс',100,'#5E5B66'],
['Создание p90, SPACE','89 мс',19.9,'#20808D']]);
function anim(p){p.querySelectorAll('.fill').forEach(function(f){f.style.width='0';setTimeout(function(){f.style.width=f.dataset.w+'%'},60)})}
tabs.forEach(function(t){t.onclick=function(){var i=+t.dataset.t;tabs.forEach(function(x,j){x.classList.toggle('on',j==i)});panes.forEach(function(p,j){p.classList.toggle('on',j==i)});anim(panes[i]);post()}});
window.addEventListener('load',post);window.addEventListener('resize',post);setTimeout(post,300);
})();
</script>
</body>
</html>
">
Как SPACE сравнивается с другими открытыми песочницами?
| Возможность | Perplexity SPACE | E2B Runtime | microsandbox | Daytona |
|---|---|---|---|---|
| Изоляция | МикроВМ Firecracker для каждой песочницы | МикроВМ Firecracker для каждой песочницы | МикроВМ libkrun | Выделенное ядро для каждой песочницы |
| Лицензия | Apache 2.0 | Apache 2.0 | Apache 2.0 | Публичный репозиторий, не поддерживается с июня 2026 года |
| Язык | Rust | Go | Rust | Не раскрывается |
| Требования к хосту | Linux x86_64 + KVM | Не раскрывается | Linux с KVM | Не раскрывается |
| Контроль исходящего трафика | Шлюз для каждой песочницы, завершение TLS | Межсетевой экран nftables, списки SNI/Host | Не раскрывается | Не раскрывается |
| Тест исходящего трафика Perplexity | 0 обходов после исправления | Обход HTTPS, планируется устранение | Обход HTTP + HTTPS, исправлено в v0.6.18 | Обход HTTPS, устранение выпущено |
| Поддержка E2B SDK | Да, через оболочку ECW | Встроенная | Не раскрывается | Не раскрывается |
Как разработчики развертывают SPACE?
Руководство по установке развертывает SPACE в локальном кластере Kind. Хосту требуются /dev/kvm, /dev/net/tun, loop-устройства и btrfs. Для запуска внутри ВМ необходима вложенная виртуализация.
Команды, уже использующие E2B, могут попробовать оболочку совместимости E2B. Ее протестированная базовая версия — пакет Python e2b==2.21.1. Эталонное развертывание AWS EKS входит в репозиторий.
Основные выводы
- SPACE запускает каждую задачу агента в собственной микроВМ Firecracker.
- Учетные данные и политика исходящего трафика находятся за пределами гостевой ВМ.
- В ходе тестов красной команды 0 из 108 попыток выхода получили доступ к хосту.
- До исправлений обход исходящего трафика был зафиксирован в 11 из 54 запусков, после исправлений — в 0.
- Apache 2.0, Rust, требуется хост Linux x86_64 с KVM.
Посмотрите репозиторий на GitHub, документацию и отчет красной команды. Вся заслуга принадлежит исследователю этого проекта. Также подписывайтесь на нас в Twitter и не забудьте присоединиться к нашему ML-сообществу на Reddit с более чем 150 тыс. участников и подписаться на нашу рассылку. Постойте! Вы есть в Telegram? теперь вы также можете присоединиться к нам в Telegram.
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.