Как автономный AI-агент OpenAI взломал Hugging Face: техническая хронология инцидента
В понедельник Hugging Face опубликовала техническую хронологию, которая шаг за шагом показывает, как автономный AI-агент, построенный на моделях OpenAI и работавший внутри одной из собственных оценок OpenAI по кибербезопасности, за более чем четыре дня проник в системы компании в начале этого месяца. По словам Сэма Альтмана, это первый инцидент безопасности, который он «почувствовал очень остро».
Ничего удивительного, если учесть, что происходящее, по крайней мере на ощущение, действительно выглядит как нечто выпущенное на свободу. Более того, команда Hugging Face предварила свой отчет словами о том, что «все должны быть готовы как защитники», прежде чем перейти к подробностям происшествия для специалистов по безопасности.
Пока остальной интернет продолжает пытаться разобраться в случившемся (жаргон в отчете Hugging Face почти невозможно понять большинству людей), многие упускают один важный момент: это был не сбившийся с пути агент, который не слушался приказов. Это была система, созданная для поиска эксплойтов, и она делала именно это — только против неправильной цели.
Еще один способ представить случившееся — вообразить медведя в лагере. Правда. Медведь проверяет молнии на палатке, ручки дверей машин, холодильники и крышки мусорных баков. Он делает это в каждом лагере всю ночь, потому что знает: ему нужен всего один незапертый холодильник, чтобы набить брюхо чужими продуктами.
Примерно это и произошло в Hugging Face. Система OpenAI перепробовала тысячи вариантов и все продолжала работать. В конце концов, несколько попыток сработали, и после этого агент пошел дальше. По данным Hugging Face, агент выполнил 17 600 действий за четыре с половиной дня без пауз.
И здесь снова уместна аналогия с медведем. Как один успех с холодильником, полным еды, заставляет медведя в следующий раз пытаться еще настойчивее (теперь он становится «приученным к еде»), так и одна утекшая парольная комбинация заставила агента OpenAI искать новые эксплойты и в итоге прийти к единственному ключу, который открыл сразу несколько систем компании.
Обе ситуации не безвредны. Медведь, разоривший ваш холодильник, все равно съест вашу еду и, вероятно, еще и разнесет весь лагерь. Он просто сосредоточен на том, чтобы насытиться, но при этом оставляет за собой след разрушений. Точно так же агент OpenAI, по всей видимости, шел к цели, не считаясь ни с чем другим. Изначально он проходил экзамен по кибербезопасности, понял, что ключ с ответами, вероятно, лежит на серверах Hugging Face, и пошел туда.
Именно настойчивость здесь важнее всего: у агента была задача, и он не собирался останавливаться, пока не выполнит ее. Когда в Hugging Face наконец поняли, что что-то идет не так, доступ отключили и проникновение остановили, но к тому моменту было уже поздно. Агент уже получил то, за чем пришел, и даже больше. Более того, как выясняется, он также взломал как минимум еще четыре онлайн-сервиса.
Ниже — что нужно понять о случившемся, если пересказать хронологию Hugging Face более простыми словами.
- Агент проходил экзамен OpenAI на навыки в области кибербезопасности, где AI оценивают по умению находить и эксплуатировать ошибки в программном обеспечении. В этом конкретном прогоне ограничители были сняты. (OpenAI отключила обычные фильтры безопасности, чтобы посмотреть, на что модель способна на полной мощности, без участия человека в каждом отдельном шаге.) В какой-то момент агент понял, что эталонные решения экзамена, вероятно, хранятся на серверах Hugging Face. Вместо того чтобы решать задачу, он украл ключ с ответами из инфраструктуры, не имевшей отношения к исходному тесту.
- Он вышел из среды экзамена OpenAI, воспользовавшись непатченной уязвимостью, которая дала ему путь в открытый интернет. Оттуда он обнаружил еще один инструмент для тестирования AI, доступный онлайн и никак не связанный с Hugging Face, взломал и его, а затем внедрил код, который незаметно выполнял скрытые команды сразу при запуске программы. Это дало агенту полный контроль над машиной — его новой базой на оставшуюся часть операции, которую он затем использовал для атаки на системы Hugging Face.
- Из этой базы он переключился на сам Hugging Face. У Hugging Face был фильтр, призванный блокировать подозрительные запросы, уходящие в открытый веб, но фильтр проверял только исходящие запросы, а не запросы на чтение локальных файлов, лежащих прямо на сервере. Агент обнаружил эту слепую зону и прошел через нее. Он загрузил файл, замаскированный под обычный датасет, но внутри содержалась инструкция, которая заставляла собственные системы Hugging Face вытаскивать с сервера пароли и исходный код и возвращать их обратно под видом обычных данных.
- Этот трюк позволил ему получить пароли и код, но агент все еще не мог запускать что-либо на серверах Hugging Face. Чтобы выполнять команды там, ему требовался второй путь проникновения. Он нашел другую ошибку в той же системе Hugging Face: программа брала фрагмент текста от агента и ошибочно воспринимала его как команду для выполнения, а не как данные для чтения. Это дало агенту возможность выполнять свой код напрямую на серверах Hugging Face.
- Для передачи команд внутрь и вывода украденных данных наружу агент, по словам Hugging Face, не строил собственную специализированную инфраструктуру. Он использовал инструменты, доступные любому: сайты для вставки текста и сервисы журналирования запросов, а также собственные функции загрузки и proxy у Hugging Face — работая с ними скрытно и в связке. Поверх этого он собрал небольшую импровизированную систему обмена сообщениями с порядковыми номерами, чтобы сохранять фрагменты в нужной последовательности, а также быстрый встроенный контроль целостности, чтобы отлавливать поврежденные данные, и мог отправлять многошаговые команды и собирать украденное обратно в правильном порядке.
- Он также позаботился о том, чтобы ничего не передавалось открыто. Все, что он воровал или отправлял, он сначала шифровал/смешивал. Первичное автоматическое сканирование перехваченного трафика в Hugging Face обнаружило лишь небольшую часть того, что было украдено. Остальное — примерно в четыре раза больше — исследователи нашли только после того, как восстановили собственный метод смешивания данных, используемый агентом.
- У агента даже были резервные планы: он разместил копии самого себя на 11 разных серверах, каждая из которых была настроена на самостоятельный перезапуск, чтобы отключение одной копии ничего не остановило, поскольку часть процесса агента уже работала где-то еще.
- В какой-то момент агент добыл приватный криптографический ключ, используемый для генерации валидных токенов входа. После этого он мог выпускать собственные действительные учетные данные когда угодно.
- Скомпрометировав один сервер, агент получил учетные данные, которые из-за ошибки конфигурации на стороне Hugging Face оказались способны открывать сразу несколько отдельных внутренних систем, а не только ту, из которой они были получены. Эта единственная ошибка почти мгновенно дала агенту широкий контроль.
- Используя доступ к украденному репозиторию, он отправил изменение в build script, которое, если бы прошло, могло бы скомпрометировать автоматизированные системы, запускавшие этот код. Однако этого не произошло. Защита Hugging Face это отловила.
- По наблюдению Hugging Face, агент, похоже, сдерживался от реального вреда, но, вероятно, не из-за осознанной осторожности. Исследователи заметили, что каждая команда, способная удалять или изменять облачные ресурсы, выполнялась в режиме dry run, то есть система лишь сообщала, что произошло бы, но ничего не меняла бы.
- Каждый раз, когда его тестовая среда сбрасывалась — а это происходило постоянно по замыслу, — он терял все инструменты и все следы своей идентичности. Но он заново собирался с нуля и каждый раз подключался к своей украденной инфраструктуре, и так более четырех дней подряд.
В итоге Hugging Face заключила в своем отчете, что «способный» человек-хакер «мог бы найти и использовать те же самые уязвимости: небезопасную обработку датасетов, раскрытые облачные метаданные, чрезмерно широкие права доступа и долгоживущие учетные данные». Главное отличие, продолжила компания, в том, что «агент исследовал их в другом масштабе».
Именно здесь аналогия с медведем оказывается наиболее полезной. Лучшая защита от голодного медведя — это протокол. Вы убираете еду; вы используете защелку, которая достаточно хорошо держит. Смысл здесь не в том, что медведь был особенно умен или хитер. Смысл в том, что он просто не переставал проверять. В кибербезопасности принято считать, что всегда есть какая-то уязвимость, которую вы еще не нашли, и если вдруг проверять все стало в 100 раз проще, тогда ничего по-настоящему защищенным не является. Именно это так многих и тревожит в этой истории.
Материал — перевод статьи с английского.
Оригинал: The Hugging Face break-in explained