Messages in this thread | | | Date | Thu, 12 Jan 2012 17:44:33 +0000 | From | Jamie Lokier <> | Subject | Re: [RFC,PATCH 1/2] seccomp_filters: system call filtering using BPF |
| |
Steven Rostedt wrote: > On Thu, 2012-01-12 at 17:30 +0000, Jamie Lokier wrote: > > > You can do this now, using ptrace(). It's horrible, but half of the > > horribleness is needing to understand machine-dependent registers, > > which this new patch doesn't address. (The other half is a ton of > > undocumented but important ptrace() behaviours on Linux.) > > Yeah I know the horrid use of ptrace, I've implemented programs that use > it :-p
That warm fuzzy feeling :-)
> I guess ptrace can capture the execv and determine if it is OK or not to > run it. But again, this doesn't stop the possible attacks that could > happen, with having the execv on a symlink file, having the ptrace check > say its OK, and then switching the symlink to a setuid file. > > When the new execv executed, the parent process would lose all control > over it. The idea is to prevent this.
fexecve() exists to solve the problem. Also known as execve("/proc/self/fd/...") on Linux.
> I like Alan's suggestion. Have userspace decide to allow execv or not, > and even let it decide if it should allow setuid execv's or not, but > still allow non-setuid execvs. If you allow the setuid execv, once that > happens, the same behavior will occur as with ptrace. A setuid execv > will lose all its filtering.
I like the idea of letting the tracer decide what it wants.
-- Jamie
| |