Как предотвратить выполнение системного вызова с помощью ptrace

Я работаю в системе, подобной Ideone, где недоверенный пользовательский код должен работать в режиме песочницы.

Для этого я искал возможности ptrace для первого уровня защиты. Однако после нескольких экспериментов кажется, что:

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

Я хочу перехватить определенные системные вызовы и вернуть поддельный код результата без фактического вызова. Есть ли способ реализовать это?

7

Решение

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

См., Например, следующее обсуждение статьи Роберта Уотсона о проблемах:

Эксплуатация рас в оболочках системных вызовов

Ссылка на статью приведена в этой статье, но я также предлагаю ссылку здесь:

«Использование уязвимостей параллелизма в оболочках системных вызовов»

Кажется, что лучший подход, как и рекомендует Watson: полностью интегрировать инфраструктуру безопасности в ядро ​​и позаботиться о ее использовании, чтобы избежать проблем параллелизма. Linux и NetBSD, Mac OS X и другие системы, ориентированные на безопасность, уже предоставляют такие платформы, и поэтому все, что необходимо для использования этих систем, — это реализовать ваши политики в этих существующих платформах. То есть даже не пытайтесь реализовать свои политики безопасности в оболочках системных вызовов или других механизмах вставки системных вызовов.

2

Другие решения

Вы можете перейти к инструкции, которая выполняет системный вызов, увеличив IP (указатель инструкции), таким образом, вызов не будет выполнен, и вы можете установить возвращаемое значение как обычно.

Редактировать:

Там есть ptrace обертка pinktrace, это должно облегчить вашу работу, а также дополнительную информацию здесь:

https://security.stackexchange.com/questions/8484/wrapping-system-call-in-reliable-and-secure-way

1

По вопросам рекламы [email protected]