Какие системные вызовы блокировать/разрешить / проверить для создания супервизора программы

по состоянию на использование ptrace для записи супервизора программы в userspace, Я пытаюсь создать компонент супервизора программы онлайн-судьи.

какие системные вызовы мне нужно будет полностью заблокировать, всегда разрешать или проверять атрибуты to:

  • запретить разветвление или выполнение других команд
  • ограничить стандартными "безопасными" C и C++ libs
  • запретить доступ к сети
  • ограничить доступ ко всем файлам, кроме 2 в.txt ' и ' out.txt'
  • запретить доступ к любым системным функциям или деталям.
  • предотвратить приложение от побега его супервизора
  • предотвратить что-то неприятное.

спасибо любая помощь / совет / ссылки очень ценятся.

3 ответов


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

Это по сути как профили песочницы приложений разрабатываются на Mac OS X.


возможно, вы можете настроить AppArmor делать то, что вы хотите. Из FAQ:

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


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

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

вы также можете использовать systrace, (http://en.wikipedia.org/wiki/Systrace) написать правила в чтобы разрешить/блокировать различные вещи, например, открыть только некоторые файлы, и т. д... Он прост в использовании для песочницы processus.