Re: Secure access to system calls for a library?
Glynn Clements <[email protected]> Fri, 11 Jun 2004 13:01:00 +0100
| Newsgroups | gmane.comp.security.programming |
|---|---|
| Message-ID | <[email protected]> |
Jonathan Leffler wrote: > How can a library ensure that when it calls getuid(), it really calls the > system call and not a dummy provided by the application that is using the > library? With a great deal of difficulty. Sure, you can use _syscall0(uid_t, getuid), but then some other code could ptrace() the process and intercept that. Or the user can just run it under gdb; or, for that matter, under an emulator. Essentially, whichever code gets run first gets to determine the execution environment for the remaining code. > The library is used by (untrustworthy) clients, and can be included into > their programs. If you want to implement a security mechanism, it would have to go into either the kernel, or into a separate (privileged) process. And that's only secure against users who can't modify the kernel. If you want to protect against privileged users (e.g. for DRM-type purposes), you would need hardware assistance, along the lines of TCPA/Palladium/NGSCB/etc. > AFAICS, the only reliable way for the library to know that it is really > calling the system call is for it to embed the assembler code for the > system call into its code, under its own name, and to use that name > everywhere. I'm hoping, desparately, that this is wrong. Even that isn't reliable, for the reasons mentioned above. -- Glynn Clements <[email protected]>