- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想用execvp
创建一个子进程并对其进行seccomp(只给它读写权限,没有open
)。为了实现这一点,我必须在 之前 execvp
调用 seccomp 函数(它也调用 open
),因此我应该给自己 execvp
和 open
权限。但是这也意味着我给execvp
打开的子进程这样的权限。有没有办法阻止子进程调用 open
(例如,在我调用 seccomp 之前将其加载到内存中)?
#include <iostream>
#include <vector>
#include <seccomp.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
int main()
{
cerr << "Starting..." << endl;
scmp_filter_ctx ctx;
ctx = seccomp_init(SCMP_ACT_KILL); // default action: kill
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigreturn), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(brk), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(munmap), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getpid), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(gettid), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(tgkill), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit_group), 0);
// Don't want to give these 3 to child process but execvp requires them
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(execve), 0);
seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(access), 0);
seccomp_load(ctx);
char * noargv[] = {NULL};
execvp("./app", noargv);
}
最佳答案
只能允许特定的路径和标志
char *path = "./app";
// add extra rule for execve
if (seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 1, SCMP_A0(SCMP_CMP_NE, (scmp_datum_t)(path))) != 0) {
return LOAD_SECCOMP_FAILED;
}
// do not allow "w" and "rw"
if (seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(open), 1, SCMP_CMP(1, SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY)) != 0) {
return LOAD_SECCOMP_FAILED;
}
if (seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(open), 1, SCMP_CMP(1, SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR)) != 0) {
return LOAD_SECCOMP_FAILED;
}
关于c++ - 如何seccomp一个子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40107782/
我正在编写一个受 seccomp 保护的应用程序。 此应用程序使用 fork() 然后使用 execvp() 来运行某些程序。 根据 Linux kernel documentation.,似乎我程序
我正在尝试为不同的系统调用实现陷阱函数。目标是,经纪人将执行它们,然后返回结果。所以客户端不会自己执行命令。 Seccomp 提供了实现这一目标的能力: 我做了什么? 为 SIGSYS 信号初始化信号
在设置严格模式 seccomp 后,流向 EXIT_SUCCESS。在 main 的末尾调用 syscall(SYS_exit, EXIT_SUCCESS); 是正确的做法吗? #include #
所以我偶然发现了一个使用 seccomp 来过滤掉一些系统调用的 C 程序。无论如何,除了暴力破解之外,还有什么可以找出实际允许的系统调用。 提前致谢 最佳答案 如果可以编译C程序,可以调用secco
我最近在用 libcap 和 libseccomp 编写程序,我发现将它们一起使用时会出现问题。 在下面的最小可重现示例中,我首先将当前进程的能力设置为仅 P(inheritable) = CAP_N
问题: docker 在哪里存储它的默认 seccomp 配置文件? 似乎这在任何地方都没有记录(至少我找不到)。我能找到的是github上文件的内容:https://github.com/moby/
这是 pwnable.kr 中的最新问题,asm.c 使用 seccomp 来限制我的系统调用,除了:write()、open()、read() 和 exit()。 asm.c: #include
我有一个现有程序,我想使用 seccomp (v2) 对其进行沙盒处理。 我如何才能找到我需要为该程序允许的 seccomp 规则? 我尝试为 strace -xfc a.out 打印的所有系统调用添
问题:我正在尝试使用 seccomp,但我不明白为什么 gcc 告诉我 seccomp() 函数调用具有隐式声明。 #define _GNU_SOURCE #include // offsetof
我正在使用 Linux 的 seccomp 来包含不同的应用程序,但我遇到了一个我无法解释的不一致问题。 我已尝试为您提供足够清晰的示例以重现该问题。 我正在创建一个“保护器模块”,它不允许进程调用
为什么进入 seccomp 模式的进程总是在退出时被杀死? $ cat simple.c #include #include #include int main( int argc, char
我正在研究 seccomp-bpf 的实现细节,这是从 3.5 版开始引入 Linux 的系统调用过滤机制。我从 Linux 3.10 查看了 kernel/seccomp.c 的源代码,想问一些关于
我正在使用 seccomp 过滤器来限制进程进行的系统调用。最多使用系统调用的白名单来允许和禁止系统调用是可以理解的。我坚持由 seccomp 规则生成的 ptrace 事件的概念。例如,我可以禁止
我现在正在实现在 fork 之后在子进程中运行另一个程序。 int main(int argc, char *argv[]) { pid_t pid = 0; int status;
我有一个函数 f(),它返回 0 或 1 - 0 表示假,1 表示真。我想做的是用 seccomp-bpf 设置一个规则,这样系统调用“fopen”只有在 f( --fopen 的第一个参数 -- )
有没有类似seccomp的东西可以在 Windows 上运行吗? 它应该将所有系统调用限制在一些非常有限的集合中,比如只读取和写入已经打开的文件。 描述为 sandbox for Chromium 的
我在项目中通过 python-prctl 启用了 seccomp。我不太清楚如何彻底退出 - 结果总是被杀死。 我看到一些示例使用 ctypes 或 ffi 来尝试引用 libc,但如果我希望它们使用
我刚刚开始学习 seccomp 过滤器,我正在使用 libseccomp v2.4.4。我试图编写一个基本的白名单过滤器,它只允许写入名为 file1 的文件。但我在 STDOUT 中收到“错误的系统
我想限制一个进程(在 docker 容器中运行)执行某些功能 - 我有 2 个选项,要么限制它的功能,要么我使用 seccomp 配置文件。 我的问题是在什么情况下选择哪个选项?我对这个领域比较陌生,
我有这个 seccomp 个人资料: { "defaultAction": "SCMP_ACT_ALLOW", "architectures": [ "SCMP_ARCH_X86_64",
我是一名优秀的程序员,十分优秀!