Блог пользователя alex_tolstov

Автор alex_tolstov, 16 лет назад, По-русски
Йохоу, всем привет.

Пишу порт проверяющей системы с Windows на FreeBSD. Все вроде бы даже и работает, но возникает вполне закономерный вопрос - а как сделать так, чтобы пользователь не послал на проверку какую-нибудь чушь, которая убьет сервер, или же, например, не занялся читерством по типу доступа к ресурсам, к которым он не должен иметь этот самый доступ.

Поскольку с такими задачами я ранее не сталкивался, то и решения данной проблемы у меня нет.


В голову приходят лишь некоторые идеи:



1) Запуск решений под пользователем, не имеющим доступа к файловой системе, помимо чтения/записи инпута/аутпута.
2) Некий "анализатор" решений на различных языках, запускаемый после процесса компиляции с целью отстранить от тестирования решения, которые, например, вызывают определенные функции, неугодные нам. Возникает ощущение что это как-то не тру, из-за того что "за всем не углядишь" и "лениво для каждого языка писать свое".
3) Каким-то образом отрубить библиотеки, которые, опять же, нам не нужны. В результате у нас не должно скомпилироваться.
4) По горячим следам найдена тема безопасности на Яве, заключающаяся в применении менеджера безопасности и настроек политики.
5) Проводить операции, касающиеся безопасности, не над исходником, а над непосредственно бинарником. Сюда может входить подмена адресов вызываемых функций или чего-то похожего.


Было бы интересно узнать о стандартных подходах в такой ситуации среди Гуру. =) Уверен, что многие из сидящих на этом сайте имели/имеют отношение к написанию проверяющих систем :)

Заранее спасибо!
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Идея - запуск практически бесправного процесса, который не имеет права выполнять большинство функций работы с файловой и операционной системой.
Есть такая система ejudge.
Здесь можно прочитать о безопасном тестировании (защищённом исполнении программ) и скачать патч к ядру.
16 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Я хотел написать на эту тему длинную статью, но всё никак времени нет.
Ну и под FreeBSD я бы не советовал ничего портировать.
Сейчас у меня есть полунаписанная песочница под линукс на базе selinux + cgroups (selinuxом режем доступ, а цгруппами ограничиваем ресурсы + считаем сколько использовали).
К четвертьфиналу расчитываю доделать.
Такие дела.