OpenBSD的pledge()调用

November 3, 2018 默认分类

pledge()(保证)是OpenBSD用于限制程序可以使用的系统调用的系统调用,和Linux内核的seccomp类似。但是,使用了bpf的seccomp相当复杂,即使使用libseccomp,编写和加载规则仍有难度。同时,bpf也可能引入额外的安全隐患。而plegde(),使用了两个包含关键词的字符串,叫做promiseexecpromise,就可以对进程可用的系统调用加以限制。其中,前一个是对当前进程施加的限制,后一个是对pledge后执行的新二进制映像施加的限制(如果允许execve())。如有违例,进程会被杀死(除非有error关键词,此时向进程返回错误)。

通过对libc和应用程序的分析,OpenBSD将系统调用分为若干类,每类用一个关键词表示,即使是其中允许的系统调用,也可能会有额外限制,需要另一个关键词允许。例如,mmapmprotect被允许时,若要使用PROT_EXEC使内存可执行,需要添加关键词prot_exec。如果传入的字符串为空,则施加最严厉的限制——只允许_exit()。和大部分降权调用一样,试图增加权限的行为会失败。

lwn上,flussence说,Linux的安全子系统似乎更注重系统管理员的饭碗安全,而不是系统安全。这些子系统需要很大的精力学习和配置。这个情况需要改变。https://lwn.net/Articles/767184/


相关文章

添加新评论

 我们使用cookie在本地保存您评论时填写的信息,参见隐私条款