Безопасная песочница пользовательских скриптов в программе на C ++ - PullRequest
0 голосов
/ 13 марта 2019

Я работал над личным проектом на C #, который позволяет пользователю выполнять сценарии, написанные другими пользователями, и ограничивать разрешения этого сценария.Я могу использовать механизмы .NET Code Access Security для того, чтобы изолировать пользовательские сценарии от песочницы и убедиться, что у них есть только те разрешения, которые пользователь хочет им предоставить.

В общих чертах, мои требования безопасности:

  • пользователь должен иметь возможность ограничить доступ ненадежного сценария только к определенным частям файловой системы, включая запрет на доступ ко всей файловой системе
  • пользователь должен иметь возможность ограничить сетевые подключения ненадежного сценария только определенными IP-адресамиили имена хостов, включая запрещение всех сетевых подключений
  • все в порядке, если пользовательскому сценарию удается повесить или завершить хост-приложение, но пользовательский сценарий не должен быть в состоянии обойти ограничения разрешений (то есть отказ в обслуживании - это нормальноНарушение не)

Я собираюсь сделать что-то подобное в C ++, в качестве своего рода личного упражнения.Очевидно, что при непосредственном запуске нативного кода все становится сложнее, даже если пользовательские сценарии написаны на языке сценариев, таком как Lua.

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

Моя проблема сэтот подход заключается в том, что он резко увеличивает объем моего собственного кода, отвечающего за безопасность, и, следовательно, потенциальную уязвимость безопасности, которую я написал сам.Другими словами, работая с .NET CAS, я могу доверять тому, что Microsoft хорошо выполнила свою работу в коде песочницы, в отличие от необходимости доверять моему собственному коду песочницы.

Существуют ли альтернативы, которые я не знаюиз

...