【问题标题】:What system calls to block/allow/inspect to create a program supervisor什么系统调用来阻止/允许/检查以创建程序主管
【发布时间】:2011-04-08 10:26:51
【问题描述】:

根据Using ptrace to write a program supervisor in userspace,我正在尝试创建在线法官的程序主管组件。

我需要完全阻止哪些系统调用,始终允许或检查 to 的属性:

  • 防止分叉或运行其他命令
  • 仅限于标准的“安全”C 和 C++ 库
  • 阻止网络访问
  • 限制对除“in.txt”和“out.txt”两个文件之外的所有文件的访问
  • 禁止访问任何系统功能或详细信息。
  • 防止应用程序逃离其主管
  • 防止任何令人讨厌的事情。

非常感谢任何帮助/建议/链接。

【问题讨论】:

    标签: security system-calls


    【解决方案1】:

    也许你可以配置AppArmor 来做你想做的事。来自常见问题解答:

    AppArmor 是当今市场上最有效且易于使用的 Linux 应用程序安全系统。 AppArmor 是一个安全框架,通过强制执行良好的程序行为并防止甚至未知的软件缺陷被利用,主动保护操作系统和应用程序免受外部或内部威胁,甚至是零日攻击。 AppArmor 安全配置文件完全定义了各个程序可以访问哪些系统资源,以及具有哪些权限。 AppArmor 包含许多默认策略,并且结合使用高级静态分析和基于学习的工具,AppArmor 策略甚至可以在几个小时内成功部署,即使是非常复杂的应用程序。

    【讨论】:

      【解决方案2】:

      如果您只想让系统调用检查另一个进程,您可以使用 ptrace(),但您将没有任何保证,就像 Using ptrace to write a program supervisor in userspace 中所说的那样。

      您可以使用 valgrind 来检查和挂钩函数调用、库,但这会很乏味,而且黑名单可能不是这样做的好方法。

      您还可以使用 systrace (http://en.wikipedia.org/wiki/Systrace) 编写规则以授权/阻止各种事情,例如只打开一些文件等...使用它来沙箱处理进程很简单。

      【讨论】:

        【解决方案3】:

        从安全的角度来看,最好的方法是弄清楚你需要允许什么,而不是你需要拒绝什么。我建议从只记录一组已知良性程序所做的所有事情的主管开始,然后将这些系统调用和文件访问列入白名单。当新程序与这个非常严格的沙盒发生冲突时,您可以根据具体情况评估放松限制,直到找到合适的配置文件。

        这实质上就是在 Mac OS X 上开发应用程序沙箱配置文件的方式。

        【讨论】:

          猜你喜欢
          • 2011-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-12
          • 1970-01-01
          • 2012-10-31
          • 2012-12-07
          • 2013-10-19
          相关资源
          最近更新 更多