2012-05-30 2 views
7

В настоящее время я предлагаю услуги компиляции сборки для некоторых людей. Они могут ввести свой код сборки в онлайн-редакторе и скомпилировать его. Когда он скомпилируется, код отправляется на мой сервер с помощью запроса ajax, компилируется и вывод программы возвращается.Безопасность сборки

Однако мне интересно, что я могу сделать, чтобы предотвратить серьезный ущерб серверу. Я совершенно новый для сборки самостоятельно, так что возможно, когда они запускают свой скрипт на моем сервере? Могут ли они удалить или переместить файлы? Есть ли способ предотвратить эти проблемы безопасности?

Спасибо заранее!

+2

Угадайте, что произойдет, если кто-то отправит исходный код для вируса! –

+5

Запустите его в одноразовой отбрасываемой виртуальной машине, которая не монтирует какие-либо fs с хоста и не имеет какой-либо сети или просто автоматически отображает окно после каждого запуска :) –

+0

Я не уверен, почему сборка. Наверняка, вы не дадите результирующей программе работать на вашем сервере? – harold

ответ

3

Посмотрите http://sourceforge.net/projects/libsandbox/. Он предназначен для выполнения именно то, что вы хотите на сервере Linux:

Этот проект предоставляет API, в C/C++/Python для тестирования и профилирования простых программ (одного процесса) в ограниченной среде, или песочнице. Исполнения исполняемых программ в двоичном режиме могут быть захвачены и заблокированы в соответствии с настраиваемыми/программируемыми политиками.

Библиотеки песочницы были первоначально разработаны и использовались в качестве основного модуля безопасности полнофункциональной онлайн-системы судей для обучения ACM/ICPC. С тех пор они превратились в универсальный инструмент для тестирования, профилирования и ограничения безопасности двоичных программ. В настоящее время библиотеки песочниц поддерживаются OpenJudge Alliance (http://openjudge.net/) как самостоятельный проект с открытым исходным кодом для облегчения различных решений для классификации присвоений для обучения ИТ/CS.

+0

Хе-хе, да, вы действительно не хотели бы, чтобы какие-то предприимчивые молодые ученики писали код, который дал бы им правильные ответы на все проблемы или шло бы все остальные. Или делать какие-то другие нечестные вещи в системе. –

1

Компиляция и выполнение чужого произвольного кода на вашем сервере - это именно то, что произвольное выполнение кода. Исполнение произвольного кода - это священный грааль каждого квеста злоумышленника. Кто-то, вероятно, может использовать этот вопрос, чтобы найти ваш сервис и использовать его на этой второй. Немедленно прекратите работу службы. Если вы хотите продолжить выполнение этой службы, вы должны скомпилировать и запустить программу в изолированной программной среде. Однако, пока это не будет реализовано, вы должны приостановить обслуживание.

Вы должны запустить код в песочнице виртуальной машины, потому что, если код злонамерен, песочница предотвратит повреждение вашего фактического ОС. Некоторые виртуальные машины включают VirtualBox и Xen. Вы также можете выполнить какое-то обнаружение подписи в коде для поиска известных вредоносных функций, хотя можно обнаружить любую форму обнаружения сигнатуры.

Это ссылка на главную страницу VirtualBox в: https://www.virtualbox.org/

Это ссылка на Xen: http://xen.org/

+0

Если код работает под учетной записью с ограниченным доступом на достойной ОС, выполнение произвольного кода не должно быть проблемой. Я не могу получить root-доступ или обойти файловую систему и другие ограничения ресурсов на Linux-машине, даже если я могу писать и выполнять произвольный код. –

+0

Получение доступа root и обход ограничений файловой системы не могут быть единственными вредными вещами, которые могут произойти. Это наивный подход к безопасности. – cytinus

+0

Существуют компьютерные системы, в которых многие пользователи используют и запускают свой собственный код, например, в университетах, и они могут хорошо справляться с безопасностью. –

3

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

Хотя я написал «другой вариант», это должно быть в дополнение к другим, которые предлагали другие респонденты, например, песочница.

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

+0

Важно то, что инструкции должны быть включены в белый список - все, что явно не разрешено, должно быть ... ну, не разрешено :) В противном случае вы перестаете забывать черный список, чтобы одна команда позволяла им <вставлять эксплойт здесь>. –

Смежные вопросы