- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题:我正在尝试使用 seccomp,但我不明白为什么 gcc 告诉我 seccomp() 函数调用具有隐式声明。
#define _GNU_SOURCE
#include <stddef.h> // offsetof
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <linux/audit.h> // arch
#include <linux/filter.h>
#include <linux/seccomp.h>
#include <sys/prctl.h>
#include <sys/syscall.h> // syscall numbers
struct sock_filter bpfcode[] = {
/* validate the architecture */
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, (offsetof(struct seccomp_data, arch))),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, AUDIT_ARCH_X86_64, 0, 7),
/* load syscall number in the accumulator */
BPF_STMT(BPF_LD+BPF_W+BPF_ABS, (offsetof (struct seccomp_data, nr))),
/* check if the syscall number is allowed */
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_nanosleep, 5, 0), // for sleep
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_exit, 4, 0),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_exit_group, 3, 0),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_write, 2, 0),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_read, 1, 0),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, SYS_rt_sigreturn, 0, 1),
/* allow the sys call */
BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_ALLOW),
BPF_STMT(BPF_RET+BPF_K, SECCOMP_RET_TRAP)
};
struct sock_fprog bpf = {
.len = (unsigned short)( sizeof bpfcode / sizeof bpfcode[0] ),
.filter = bpfcode
};
int main(int argc, char **argv)
{
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) {
printf("prctl no_new_privs\n");
_exit(EXIT_FAILURE);
}
if (seccomp(SECCOMP_SET_MODE_FILTER, 0, &bpf)) {
printf("seccomp");
exit(EXIT_FAILURE);
}
sleep(2);
return 0;
}
警告/错误:这是我尝试编译程序时的 gcc 输出。
s.c: In function ‘main’:
s.c:45:6: warning: implicit declaration of function ‘seccomp’ [-Wimplicit-function-declaration]
if (seccomp(SECCOMP_SET_MODE_FILTER, 0, &bpf)) {
^~~~~~~
/tmp/ccYo4APk.o: In function `main':
s.c:(.text+0x65): undefined reference to `seccomp'
collect2: error: ld returned 1 exit status
问题:我还应该包括什么才能让它发挥作用?
编辑:为什么这个有效而第一个无效?系统调用(SYS_seccomp,SECCOMP_SET_MODE_FILTER,0,&bpf)
最佳答案
是a known issue : 没有用于 seccomp 系统调用的 glibc 包装器。
您可能希望改用 prctl(2) 来加载 BPF 程序,原因有二:
方法如下:
prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bpf);
关于c - 对 seccomp 的隐式引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347526/
我正在编写一个受 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",
我是一名优秀的程序员,十分优秀!