问题标签 [seccomp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1791 浏览

c++ - 如何seccomp一个子进程?

我想用它execvp来创建一个子进程并对其进行seccomp(只给它读写权限,没有open)。为了实现这一点,我必须在之前 execvp调用 seccomp 函数(也调用open),因此我应该给自己execvpopen许可。但这也意味着我给了子进程execvp这样打开的权限。有没有办法阻止子进程调用open(例如,在我调用 seccomp 之前将其加载到内存中)?

0 投票
1 回答
361 浏览

linux - 为什么 seccomp 禁止我的正常系统调用

这是 pwnable.kr 中的最新问题,asm.c 使用 seccomp 来限制我的系统调用,除了:write()、open()、read() 和 exit()。

asm.c:

名为的标志文件this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong

所以我只使用打开,读写来制作一个程序并且它可以工作(我自己制作了一个标志文件并且程序成功打印它),但是当我将shellcode放入 ./asm 时,它通常会说Bad system call。我不知道在哪里我犯了一个错误?

这是我的代码:

谢谢

0 投票
0 回答
134 浏览

python - pip 不允许我安装 seccomplite

我试图用 pip 安装 seccomplite 包。相反,我得到了这些错误。请帮忙。

收集 seccomplite 使用缓存的 seccomplite-0.1.0a3.tar.gz 安装收集的包:seccomplite Running setup.py install for seccomplite ... error Complete output from command /usr/bin/python -u -c "import setuptools, tokenize; file ='/tmp/pip-build-HRGD9U/seccomplite/setup.py';f=getattr(tokenize, 'open', open)( file );code=f.read().replace('\r\n' , '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-JqYhgy-record/install-record.txt --single-version-externally-managed --compile: running install running build running build_ext building 'seccomplite' 扩展创建build 创建 build/temp.linux-x86_64-2.7 gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong - -param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 - g -pipe -Wall -Werror=格式-安全 -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune =generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DMODULE_NAME="seccomplite" -DMAJOR_VERSION="0" -DMINOR_VERSION="1" -DDEVELOP_VERSION="0a3" -DMODULE_DESCRIPTION="轻量级 libseccomp2 python 桥" -I/usr/include/ python2.7 -c filter.c -o build/temp.linux-x86_64-2.7/filter.o gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory error: command 'gcc' 失败,退出状态为 17 -c filter.c -o build/temp.linux-x86_64-2.7/filter.o gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory error: command 'gcc ' 退出状态为 1 失败7 -c filter.c -o build/temp.linux-x86_64-2.7/filter.o gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory error: command 'gcc ' 退出状态为 1 失败

命令“/usr/bin/python -u -c”导入setuptools,tokenize;file ='/tmp/pip-build-HRGD9U/seccomplite/setup.py';f=getattr(tokenize, 'open', open)( file );code=f.read().replace('\r\n ', '\n');f.close();exec(compile(code, file , 'exec'))" install --record /tmp/pip-JqYhgy-record/install-record.txt --single- version-externally-managed --compile" 失败,错误代码 1 在 /tmp/pip-build-HRGD9U/seccomplite/

0 投票
2 回答
793 浏览

security - Docker seccomp 无法在 Kali 上运行

我正在调查使用 Docker 的内核安全性。我正在测试 seccomp,它在 Debian 和 Ubuntu 上运行良好,但在 Kali Linux 上不起作用。

例子:

我创建了一个sec.json使用以下内容调用的简单 json 文件:

假设使用 seccomp 运行容器,并且此文件将导致您无法mkdir在容器内使用命令。这是 docker 运行命令:

正如我所说,它在 Debian 和 Ubuntu 上运行良好,但在 Kali Linux 上我得到了这个错误:

我的 docker-engine 版本是17.05.0-ce,我的内核是4.9.0-kali3-amd64 #1 SMP Debian 4.9.18-1kali1 (2017-04-04) x86_64 GNU/Linux. 我对此进行了谷歌搜索,这很奇怪。如果您可以检查以下内容,则假定支持 seccomp:

结果我得到:

所以应该是支持的。我错过了什么或者对此的解释在 Kali 上不起作用?谢谢。

0 投票
1 回答
15929 浏览

docker - 在 docker-compose 中将 secomp 设置为不受限制

我需要能够分叉一个进程。据我了解,我需要设置安全选项。我已经尝试使用 docker 命令执行此操作,并且效果很好。但是,当我在 docker-compose 文件中执行此操作时,它似乎什么也没做,也许我没有正确使用 compose。

码头工人

码头工人组成

设置

码头工人-compose.yml

Dockerfile

命令

结果

2017/09/04 15:58:33 server.go:73:使用 API v1 2017/09/04 15:58:33 debugger.go:97:使用 args 启动进程:[/go/src/debug] 无法启动过程:fork/exec /go/src/debug:不允许操作

0 投票
1 回答
1194 浏览

sockets - 从 docker 容器中打开 DGRAM 套接字失败(权限被拒绝)

我正在运行一个应用程序,它构建 ICMP ECHO 请求并将其发送到几个不同的 IP 地址。该应用程序是用 Crystal 编写的。当尝试从 Crystal docker 容器中打开套接字时,Crystal 会引发异常:Permission Denied。

在容器内,我运行ping 8.8.8.8.

在macos上运行应用程序,我没有问题。

阅读 apparmor 和 seccomp 上的https://docs.docker.com/engine/security/apparmor/https://docs.docker.com/engine/security/seccomp/页面,我确信我找到了解决方案,但问题仍未解决,即使以docker run --rm --security-opt seccomp=unconfined --security-opt apparmor=unconfined socket_permission

更新/编辑:深入研究之后capabilities(7),我在我的 dockerfile 中添加了以下行:RUN setcap cap_net_raw+ep bin/ping尝试让套接字打开但没有更改。

谢谢!

相关水晶插座代码,完整的工作代码示例如下:

Dockerfile:

运行代码,首先是本机代码,然后是通过 docker:

最后,一个 50 行的水晶脚本无法在 docker 中打开套接字:

0 投票
1 回答
274 浏览

c - seccomp 系统调用陷阱函数中的指针返回值

我正在尝试为不同的系统调用实现陷阱函数。目标是,代理将执行它们,然后返回结果。所以客户端不会自己执行命令。

Seccomp 提供了实现这一目标的能力:

我做了什么?

  1. 初始化信号处理程序或 SIGSYS 信号。
  2. 使用 Action SCMP_ACT_TRAP 初始化了一个 seccomp 过滤器。
  3. 等待 SA_SIGINFO 信号。
  4. 修改生成的系统调用的返回值。

一般来说,这种方法是有效的。它在 chromium 项目和 mozilla 中也像这样使用。

问题

更改返回整数的系统调用的返回值,如 open 可以完美地工作。更改返回指针的函数的返回值不起作用(例如 getcwd)。

不知何故,只返回第一个参数,这甚至不是在所有情况下。有时会返回 NULL。

我也尝试过

我还使用 ptrace 创建了一个工作示例。ptrace 解决方案通过将指令指针更改为另一个用户空间函数并修改返回调用来拦截系统调用。该解决方案有效,但由于在后台使用 ptrace ,因此有点笨拙且不受欢迎。

示例代码

这是代码的简约分解。

控制台输出

0 投票
0 回答
220 浏览

android - 如何使在 7.0 上运行的 Android 应用程序与包含 ECC 证书 secp384r1 的服务器兼容

在使用 ECC 证书secp384r1更新我们的服务器后,我们在Android 7.0上运行的客户端应用程序无法与服务器建立通信,但出现 OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE异常。

做一些调查发现,Android 7.0 仅支持 secp256r1 并且意外删除了 secp384r1 和 secp512r1,这是一个已知的错误并在 Android 7.1.1 中修复。如果不升级到 7.1.1,我们的客户端应用程序是否有任何解决方法可以避免此异常?

我在谷歌搜索后找到了一些可能的解决方案 -

使用不同的(自行开发的)加密库而不是像 chrome/Firefox 这样的 Android 系统库是否可行?

  • 将密码套件添加到服务器使用的客户端应用程序是否有帮助?
0 投票
1 回答
397 浏览

java - seccomp 行为不一致

我正在使用 Linux 的 seccomp 包含不同的应用程序,但我遇到了无法解释的不一致。

我试图给你提供足够清晰的例子来重现这个问题。

我正在创建一个“保护器模块”,它不允许进程调用set_robust_list(为了演示问题)。然后我运行使用 LD_PRELOAD 注入这个“保护器模块”的进程,并期望在进行这个系统调用时进程停止。

我正在基于此代码制作一个共享对象:

我正在用gcc -shared seccompdemo.c -lseccomp -o libseccompdemo.so.

然后为了测试它,我正在构建这个可执行文件:

我正在用gcc set_robust_list.c -o set_robust_list.

然后正如预期的那样,我正在使用上面的代码运行这个可执行文件,它会被一个信号杀死:

问题是当我试图用 Java 做同样的伎俩时。

我在 java 上调用了相同的“保护模块”,尽管我知道 Java 是从 strace调用的,但它似乎不起作用:set_robust_list

查看 strace 输出证明 java 正在调用 'set_robust_list':

我确实看到java调用clone系统调用本质上是为了创建线程。我想也许 seccomp 过滤器不是继承的,但根据他们的文档。

如果有人能解释我为什么这不起作用,我会很高兴。

这里的参考是Java代码:

0 投票
1 回答
7102 浏览

elasticsearch - Elasticsearch 启动失败:需要 CONFIG_SECCOMP 和 CONFIG_SECCOMP_FILTER

我尝试启动 Elasticsearch 但失败了。我检查了日志并收到以下错误:

为什么会这样?

我能做些什么来处理它?