什么系统调用阻止/允许/检查来创建程序主管

时间:2010-09-05 11:21:35

标签: security system-calls

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

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

  • 防止分叉或运行其他命令
  • 限制为标准的'安全'C和C ++库
  • 防止网络访问
  • 限制访问2个文件'in.txt'和'out.txt'
  • 禁止访问任何系统功能或详细信息。
  • 阻止应用程序逃离其主管
  • 防止任何令人讨厌的事。

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

3 个答案:

答案 0 :(得分:3)

从安全角度来看,最好的方法是找出您需要允许的内容而不是您需要拒绝的内容。我建议从一个主管开始,该主管只记录已知良性程序集所做的所有事情,然后将这些系统调用和文件访问列入白名单。由于新程序与这个限制性很强的沙箱相冲突,您可以根据具体情况评估松动限制,直到找到正确的配置文件。

这主要是在Mac OS X上开发应用程序沙盒配置文件的方式。

答案 1 :(得分:1)

也许你可以配置AppArmor来做你想做的事。来自FAQ:

  

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

答案 2 :(得分:0)

如果你只想要系统调用来检查另一个进程,你可以使用ptrace(),但是你没有保证,如Using ptrace to write a program supervisor in userspace中所述。

您可以使用valgrind来检查和挂钩函数调用,库,但这将是单调乏味的,也许黑名单不是这样做的好方法。

你也可以使用systrace,(http://en.wikipedia.org/wiki/Systrace)编写规则来授权/阻止各种事情,比如只打开一些文件等等......使用它来沙箱一个进程是很简单的。 / p>