C ++: Есть ли способ «тюрьмы»? - PullRequest
2 голосов
/ 28 февраля 2010

Ну, это своего рода веб-сервер.

Я загружаю файлы .dll (.a) и использую их как программные модули.

Я рекурсивно просматриваю каталоги и помещаю функторы _main из этих библиотек в std :: map под именем, которое содержится в специальных файлах .m.

В главном каталоге есть несколько каталогов для каждого хоста.

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

Единственный способ убедиться в этом - написать деформацию для stdio.h (я имею в виду, написать s_stdio.h с проверкой имени файла).

Может быть, это может быть демон, который перехватывает системные вызовы и что-то идентифицирует?

добавить

Ну, а как насчет такой ситуации: я загружаю только souses, а затем проверяю это прямо на моем сервере? Ну, это единственный способ, который я нашел (все еще внутри одного адресного пространства).

Ответы [ 2 ]

4 голосов
/ 28 февраля 2010

Поскольку C ++ является языком низкого уровня, а библиотеки DLL компилируются в машинный код, они могут делать все что угодно. Даже если вы оберните стандартные библиотечные функции, код может выполнять системные вызовы напрямую, переопределяя функциональность, которую вы обернули.

Вероятно, единственный способ эффективно изолировать такую ​​DLL-библиотеку - это какая-то виртуализация, поэтому код запускается не напрямую, а на виртуальной машине.

Более простое решение - использовать язык более высокого уровня для загружаемых модулей, которые должны быть помещены в «песочницу». Некоторые языки высокого уровня лучше подходят для песочницы (Lua, Java), другие не так хороши (например, AFAIK в настоящее время нет официальной среды с ограниченным доступом, реализованной для Python).

1 голос
/ 28 февраля 2010

Если вы один из тех, кто загружает модуль, вы можете выполнить статический анализ кода, чтобы проверить, какие API он вызывает, и отказаться от ссылки на него, если он не проверяется (т.е. если он делает какие-либо подозрительные вызовы). на все).

Сказав это, нужно проделать большую работу, и не очень переносимо.

...