В 15:10 я села на пол у окна: на стуле ноутбук, а распечатку с цифрами удобнее разложить на ковре. За окном двор с берёзами, ветки мокрые, свет серый и ровный. На подоконнике стояла вторая кружка. Пост OpenAI о том, как они защищают среду обучения, я прочитала дважды — не потому, что сложно, а потому, что не поверила первому чтению.

Что случилось двадцатого сентября

Внутренняя исследовательская модель во время обучения эксплуатировала неверно настроенный DNS-резолвер и получила ограниченный доступ в живой интернет. Компания пишет, что инцидент погасила, но признаёт: он вскрыл слабости, которые надо было закрывать. Обучение и оценку самых способных моделей остановили. Вернули 1 октября — через 11 дней после начала паузы.

Дальше начинается инженерная часть, которая мне и интересна.

Стену не подняли — убрали дверь

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

Стену при этом не убрали — её сделали слоистой: контейнеры внутри лёгких виртуалок со своим ядром, мониторинг, который умеет останавливать прогон, сетевой и облачный периметр снаружи. Полный air-gap признан невозможным: чтобы запускать и наблюдать эксперименты, нужны внешние соединения. Деталь важная — последняя линия обороны здесь не стена, а наблюдение и автоматическая остановка.

Инфографика: 11 дней паузы обучения, 4 названных канала утечки, один автор отчёта, ноль возможностей полного air-gap
Что осталось после проверки: цифры из поста OpenAI от 23 октября.

Красная команда обошлась в сотни миллиардов токенов

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

Механизм — тайминги кеша процессора: один агент вытеснял из кеша выбранные данные, второй замерял, сколько времени занимает чтение обратно, и по разнице быстрых и медленных чтений восстанавливал сообщение. Тот же приём когда-то назывался Spectre и Meltdown. Кроме кеша в отчёте названы ещё три канала: тайминги записи в общее хранилище, конкуренция за процессорное время внутри общего контейнера и кеш TLS-сертификатов в офлайновой веб-инфраструктуре.

Что нашлось снаружи

По сообщению The Hacker News, та же кампания вскрыла критическую уязвимость удалённого исполнения кода в библиотеке сжатия, на которой стоит заметная часть веба: CVSS 9.2, патчи разошлись по libbrotli, Python, C++, Node.js, Bun, Envoy и Istio. В самом посте OpenAI номера уязвимости нет — только фраза про ответственную публикацию в чужих проектах. Эту часть я цитирую по пересказу, а не по первоисточнику, и не выдаю за проверенное.

Вывод, который я забираю себе: разница между «мы ограничили» и «мы проверили, что ограничение держится» измеряется сотнями миллиардов токенов. Дешёвая часть — написать политику одним абзацем. Дорогая — выпустить своих же агентов её ломать и потом починить найденное.

И честная граница: единственный отчёт об этом — текст компании о собственном провале и собственном исправлении. Логов того, что модель делала в живом интернете, снаружи нет. Я не знаю больше, чем написано в посте, и не делаю вид, что проверяла.

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