当前位置: 首页 > 面试题库 >

如何为沙箱禁用Linux进程的套接字创建?

琴光亮
2023-03-14
问题内容

我正在考虑将Linux进程沙盒化的几种方法。使用clone()具有CLONE_NEWNET(等)的选择之一。CLONE_NEWNET确保沙盒进程无法建立或接受真实的网络连接。但是我想完全禁用该进程的套接字,甚至连接bind()到上的任何端口0.0.0.0,并绑定到Unix
doman套接字(甚至匿名)。我想这样做是为了通过绑定到数千个端口来防止进程使用过多的内核资源。我怎么做?

通常,我对许多沙箱方法(即Linux内核提供的方法和由强制执行的方法ptrace())感兴趣,但在这个问题上,我仅对沙箱方法的套接字创建方面感兴趣(因此,如果您建议使用沙箱,方法,还请说明如何防止使用该方法创建套接字),并且我对需要内核修补的方法或涉及加载不属于Ubuntu
Lucid默认二进制内核程序包的内核模块的方法不感兴趣,否则会影响系统上的每个进程。


问题答案:

ptrace 似乎是最明显的工具,但除此之外……

util-linux
[-ng]有一个命令unshare,该命令使用内核的clone/
unshare接口。如果通过unshare -n(或clone(CLONE_NEWNET))运行新进程,则它创建的任何网络套接字都在不同的名称空间中。那不能解决内核资源的问题,但是可以对进程进行沙箱处理。

Linux内核还支持的Seccomp,用输入模式prctl(PR_SET_SECCOMP, 1),防止过程(当然,螺纹,真的)从调用任何系统调用以外readwriteexit,和sigreturn。这是一个非常有效的沙箱,但是很难与未修改的代码一起使用。

您可以定义一个SELinux的域,其不允许socket/ bind的/
etc。调用,并动态转换为该类型。(显然)这需要具有积极实施SELinux策略的系统。(AppArmor和TOMOYO可能有相似的事情,但是我对它们都不是很熟悉。)



 类似资料:
  • 问题内容: 我想创建一个Web应用程序,该应用程序将允许用户上传一些C代码,并查看其执行结果(该代码将在服务器上编译)。用户不受信任,这显然会带来巨大的安全隐患。 因此,我需要为应用创建某种沙箱。在最基本的级别上,我想将对文件系统的访问限制在某些指定的目录中。我无法直接使用chroot jails,因为Web应用程序未以特权用户身份运行。我想设置监狱的suid可执行文件是一个选择。 上载的程序会很

  • 贝宝不再提供新的数字商品集成。我想测试一个新的快速结帐集成,我正在对一个没有启用数字商品的贝宝沙箱帐户进行测试。然而,我创建的每个新沙箱帐户默认都启用了数字商品。 如何在沙箱帐户上禁用数字商品?

  • 问题内容: 我正在创建要执行的JEXL脚本的沙箱,以使恶意用户无法访问我们为其提供访问权限的变量之外的数据,也无法在服务器上执行DOS攻击。我想为其他这样做的人提供文档,也让其他人对此方法有所投入。 以下是我知道需要解决的问题的列表: 仅允许使用白名单上的“ new”实例化类。 不允许访问任何类的getClass方法,因为这样便可以调用forName并且可以访问任何类。 限制对文件等资源的访问。

  • 问题内容: 是否有Linux库可以使我知道哪些进程拥有哪些IP套接字?我想我正在寻找的程序化等效项。最终,我想将透视的数据包与进程关联起来。 更新: 有人建议使用和,但是在我的系统上,每个进程都显示相同的数据,因此无济于事。 问题答案: 我认为您首先必须浏览/ proc / * / fd中打开的fds,例如 然后在/ proc / net / tcp(或/ proc / net / udp)中查找

  • 安全是Chromium最重要的目标之一。安全的关键在于理解下面这点:在我们完整地理解了系统在所有可能的输入组合下表现出的行为之后,我们才能够真的保证系统安全。对于像Chromium这样庞大而多样化的代码库,推理它的各个部分可能的行为的组合几乎是不可能的。沙箱的目标是提供这样一种保证:不论输入什么,保证一段代码最终能或不能做的事情。 沙盒利用操作系统提供的安全性,允许不能对计算机做出持久性改变或者访

  • Jinja2 沙箱用于为不信任的代码求值。访问不安全的属性和方法是被禁止的。 假定在默认配置中 env 是一个 SandboxedEnvironment 实例,下面的代码展示 了它如何工作: >>> env.from_string("{{ func.func_code }}").render(func=lambda:None) u'' >>> env.from_string("{{ func.fu