在init仓代码中进行嵌入式修改,修改文件为//base/startup/init/services/init/init_common_service.c,在执行SetSystemseccompPolicy函数设置Seccomp策略前增加以下内容。以下为修改内容。其中行首符号为“+”,则该行为新增内容,若符号为“-”,则是需删除的内容,“xxxx”与进程[引导启动配置文件]中的Services name保持...
} scmp_filter_ctx是过滤逻辑所使用的上下文结构,seccomp_init函数对上下文结构体进行初始化,若参数为SCMP_ACT_ALLOW, 则过滤为黑名单模式;若为SCMP_ACT_KILL,则为白名单模式,即进程调用没有匹配到规则的系统调用都会杀死,默认不允许所有的系统调用。seccomp_rule_add函数用来添加规则,seccomp_load函数加载过滤器。 ...
seccomp_init对结构体进行初始化,若参数为SCMP_ACT_ALLOW,则没有匹配到规则的系统调用将被默认允许,过滤为黑名单模式;若为SCMP_ACT_KILL,则为白名单模式,即没有匹配到规则的系统调用都会杀死进程,默认不允许所有的syscall。 seccomp_rule_add是添加一条规则,其函数原型如下: int seccomp_rule_add(scmp_filter_ctx...
seccomp_init : 初始化的过滤状态 ,函数原型: 可选的def_action有: seccomp_rule_add: 添加一条规则,函数原型为: 其中arg_cnt参数表明是否需要对对应系统调用的参数做出限制以及指示做出限制的个数,如果仅仅需要允许或者禁止所有某个系统调用,arg_cnt直接传入0即可,如seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_...
libseccomp是一个基于BPF的seccomp库函数,通过libseccomp可以跳过prctl直接配置过滤策略过滤系统调用,要使用它缺少头文件需要提前安装一些库文件: sudo apt install libseccomp-dev libseccomp2 seccomp 安装完成后在需要使用seccomp的程序中导入文件头#include <linux/seccomp.h>后就可以直接scmp_filter_ctx、seccomp_init、se...
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <seccomp.h> char *cmd = "/bin/ls"; int main() { int pid, status, ret; char *args[4]; char **parg; scmp_filter_ctx ctx; ctx = seccomp_init(SCMP_ACT_ALLOW); if (ctx == NULL...
通过使用该库的函数实现禁用execve系统调用 scmp_filter_ctx是过滤器的结构体seccomp_init对结构体进行初始化,若参数为SCMP_ACT_ALLOW,则过滤为黑名单模式;若为SCMP_ACT_KILL,则为白名单模式,即没有匹配到规则的系统调用都会杀死进程,默认不允许所有的syscall。 def_action为 seccomp_rule_add是添加一条规则 arg_cn...
ctx = seccomp_init(SCMP_ACT_ALLOW); seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 0); seccomp_load(ctx); 记得引用库: #注释头 #include <seccomp.h> #include <linux/seccomp.h> 2.Prtctl函数(/usr/includ/linux/prctl.h): ...
prctl函数是为进程制定而设计的,该函数原型如下 #include<sys/prctl.h>intprctl(intoption,unsignedlongarg2,unsignedlongarg3,unsignedlongarg4,unsignedlongarg5); 其中明确指定哪种种操作在于option选项, option有很多,与seccomp有关的option主要有两个:PR_SET_NO_NEW_PRIVS()和PR_SET_SECCOMP()。
首先,配置 BPF 规则,如下我们配置了目标系统调用号的拦截规则,不在这个名单内的就放过,这样可以实现仅拦截我们关心的系统调用(即函数),提升拦截效率和稳定性。 static void doInitSyscallNumberFilter(struct sock_filter* filter, unsigned short& i) { // Load syscall number into accumulator filter[i++] = ...