SECCOMP介绍
Seccomp是 "secure computing" 的 缩写。Linux内核2.6.12版本(2005年3月8日)引入。是linux一个安全模块,用于限制程序系统调用;当时如果使用了SECCOMP只允许4个系统调用:
read,write,_exit,sigreturn
我们来看下例子
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/prctl.h>
#include <linux/seccomp.h>
void configure_seccomp() {
printf("Configuring seccomp\n");
prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT);
}
int main(int argc, char* argv[]) {
int infd, outfd;
if (argc < 3) {
printf("Usage:\n\t%s <input path> <output_path>\n", argv[0]);
return -1;
}
printf("Starting test seccomp Y/N?");
char c = getchar();
if (c == 'y' || c == 'Y') configure_seccomp();
printf("Opening '%s' for reading\n", argv[1]);
if ((infd = open(argv[1], O_RDONLY)) > 0) {
ssize_t read_bytes;
char buffer[1024];
printf("Opening '%s' for writing\n", argv[2]);
if ((outfd = open(argv[2], O_WRONLY | O_CREAT, 0644)) > 0) {
while ((read_bytes = read(infd, &buffer, 1024)) > 0)
write(outfd, &buffer, (ssize_t)read_bytes);
}
close(infd);
close(outfd);
}
printf("End!\n");
return 0;
}
使用下列命令编译
gcc seccomp.cpp -o seccomp
使用下列命令运行程序后,我们使用N不启用SECCOMP,发现将in.txt拷贝到了out.txt,说明拷贝成功。
我们如果使用Y,启用了SECCOMP,得到的结果如下所示,程序被Kill,也就是在SECCOMP模式下,我们运行了除了上面描述的
参考
浅谈Linux SECCOMP安全机制在容器中的使用 - 腾讯云开发者社区-腾讯云 (tencent.com)
The Route to Host:从内核提权到容器逃逸 – 绿盟科技技术博客 (nsfocus.net)
Seccomp、BPF与容器安全 - 先知社区 (aliyun.com)
探究K8S v1.19 GA的Seccomp - 知乎 (zhihu.com)
云原生安全 — seccomp应用最佳实践-阿里云开发者社区 (aliyun.com)
Seccomp security profiles for Docker | Docker Documentation
Restrict a Container's Syscalls with seccomp | Kubernetes
seccomp - Wikipedia