Какие меры предосторожности достаточны для создания песочницы для языка сценариев?

251
ceremcem

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

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

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

  • Ограничить доступ к сети
  • Отключить доступ на запись полностью
  • Предоставить доступ на чтение для текущего каталога
  • Предоставить доступ только для чтения для включения глобальных библиотек

Что еще нужно, чтобы язык сценариев использовался в качестве «инструмента настройки»?

0

1 ответ на вопрос

1
Austin Hemmelgarn

Нет.

Помимо прочего, у вас нет защиты от манипуляций с кешем, отравления с предсказанием ветвлений и атак в стиле гребца молотка, и все это возможно из языка, который, по-видимому, подразумевается в связанном обсуждении (Python).

Предполагая, что вы действительно говорите об использовании Python, вам также нужно учитывать тот факт, что код Python может загружать произвольные библиотеки и исполняемые файлы сам по себе с помощью нескольких механизмов, некоторые из которых не зависят от доступа для чтения. Все это должно быть ограничено, и вам, вероятно, следует также ограничить доступ ко многим стандартным библиотечным модулям (например, макросы документов не имеют никакого дела, разговаривая с демоном syslog или выбирая информацию об учетной записи).

Помимо всего этого, вам также необходимо: какой-то способ для пользователя явно отключить автоматический запуск этого кода, при этом идеальная ситуация заключается в том, что он должен явно разрешить его запуск (если это было поведение по умолчанию в MS Office с Если начать с макросов, то несколько крупных вирусов не смогли бы пройти через несколько десятков зараженных систем). Кроме того, сделать абсолютно уверены, что защита от записи включает в себя документ макрос, связанный с, в противном случае вы до сих пор механизм эксфильтрации данных.

TBH, Python на самом деле не так уж хорош для такого рода вещей. Если бы это не было темой обсуждения в первую очередь, я бы на самом деле предложил использовать Lua, он намного лучше разработан для такого типа использования, и его намного легче защитить (хотя материал, упомянутый в начале мой ответ все еще остается проблемой для Луа).

Чтобы можно было уточнить границы: не обращая внимания на аппаратные ошибки, было бы безопасно отправлять код на виртуальную машину (или отдельное оборудование, которое покрывало бы аппаратные ошибки), выполнять ее там и получать результаты обратно? ceremcem 5 лет назад 0
Если предположить, что в программном обеспечении VM нет ошибок, то да, возможно. Однако во многих менеджерах виртуальных машин было довольно много ошибок, которые не были привязаны к конкретному оборудованию и позволяли избежать виртуальной машины (или, по крайней мере, сделать DoS-атаку на хост). Austin Hemmelgarn 5 лет назад 0
... и который привел меня к https://en.wikipedia.org/wiki/Virtual_machine_escape ceremcem 5 лет назад 0

Похожие вопросы