@yeputons

"Песочница" в Windows своими руками (велосипед)?

Добрый вечер.

Недавно заинтересовался — каким образом на различных олимпиадах контроллируется поведение программ участников? Нет, понятно конечно, что самими участниками (в случае нарушения обычно идёт дисквалификация), но с программной точки зрения. Например: запрещение работы с сетью, файловой системой, процессами и пр. Т.е. можно только читать/выводить в stdin/stdout, выделять немного памяти и вызывать стандартные функции (libc).

В eJudge этот вопрос решён добавлением if'а во все системные вызовы (патч к ядру). Но это под Linux.

Вопрос — как пишется такого рода «песочница» под Windows? Запуск от гостя решает много проблем, и пролезть достаточно сложно. Но хочется полное решение. В какую сторону копать, что читать, есть ли документированные методы. Готовые программы есть, но хочется собрать хоть какой-то велосипед своими руками.
  • Вопрос задан
  • 3041 просмотр
Пригласить эксперта
Ответы на вопрос 10
p1ayer
@p1ayer
может использовать *nix? или нужна винда?
Ответ написан
Комментировать
eternals
@eternals
Запускать от определённого пользователя?
Плюс все решения сохраняются обычно, чтобы потом руки оторвать если всё же что-то пролезет.
Ответ написан
gjf
@gjf
Немного непонятно, зачем изобретать велосипед, если есть готовые бесплатные решения. Вам — шашечки или доехать? ;)
Ответ написан
@amirul
Не надо драйверов. Practical Windows Sandboxing в трех частях. ACL-ей хватает с головой для ограничения практически всего (в том числе и виндового нетворкинга — пайпов и мейлслотов, для berkeley sockets придется использовать встроенный файрвол) — собственно для подобного контроля доступа они и были придуманы.

Хромовская песочница — довольно независимый от остального хрома проект. Так что можно вытащить и использовать в личных целях.
Ответ написан
amc
@amc
За олимпиады не скажу, но в Win есть один простой метод: перехват вызовов.
Если есть возможность — запустите AVZ на системе с установленным антивирусом (особенно KAV), посмотрите на список перехваченных вызовов и сделайте выводы.
Ответ написан
Комментировать
olololog
@olololog
Thinstall.
Ответ написан
Комментировать
zed91
@zed91
Если полностью-полностью, то драйвера. На каждую подсистему свой. Зато перехватите всё что только можно.
Ответ написан
Комментировать
@agul
Знаю, что в NSUTS (система Новосибирского ГУ) используется WinKiller. + там под каждого пользователя создается отдельный юзер с практически нулевыми правами.
Ответ написан
Комментировать
powder96
@powder96
Почему-то подумался извращенный вариант:

Скачать десятимегабайтный Windows Research Kernel;
Как и eJudge, добавить if'ы во все системные вызовы;
Скомпилировать ядро и заменить старый ntoskrnl/ntkrnlpa новым;
???
PROFIT!
Ответ написан
Комментировать
stas_agarkov
@stas_agarkov
Я программист
Поставьте виртуалку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы