Как Linux ptrace может быть небезопасным или содержать состояние гонки?

Я хотел бы реализовать песочницу с помощью ptrace () в процессе, который я запускаю, и все его потомки будут создавать (включая внуков и т. д.). Родительский процесс ptrace () , то есть супервизор. будет простой программой на C или Python и концептуально ограничит доступ к файловой системе (на основе имени пути и направления доступа (чтение или запись) и доступа к сокету (например, запрет создания сокета).

На что следует обратить внимание. так что процесс ptrace () d и его потомки (рекурсивно) не смогут обойти песочницу? Есть ли что-нибудь особенное, что супервизор должен сделать в fork () time, чтобы избежать условий гонки? Можно ли прочитать аргументы имени файла, например rename () из дочернего процесса без состояния гонки?

Вот что я уже планировал сделать:

  • PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE , чтобы избежать (некоторых) кодировок расы, когда fork () ing
  • запрещает все системные вызовы по умолчанию и составляет белый список разрешенных системных вызовов
  • , убедитесь, что * at () варианты системного вызова (такие как openat ) должным образом защищены

На что еще следует обратить внимание?

5
задан pts 11 December 2010 в 01:06
поделиться