在客户端的计算机上执行第三方编译的程序

我想请教您关于提高在客户端计算机上执行已编译程序的安全性的建议。我们的想法是我们将一个已编译的程序发送给客户端,但该程序已由第三方编写和编译。如何确保程序在运行时不会对客户端的操作系统造成任何伤害?什么是最好的目标,而不是显着降低执行程序的性能? 更新: 我假设第三方不想损害客户端的操作系统,但可能会发生错误,或者他们的程序被其他人感染。 该程序可以编译为字节码或本机,它取决于第三方。     
已邀请:
根据所涉及的语言和所需的权限类型,您可以使用该语言内置的沙盒功能。例如,早期版本的.NET具有“信任级别”,可以设置该信任级别来控制程序运行时的访问量(较新的版本具有类似的代码访问安全性(CAS)功能)。 Java具有控制同一事物的策略文件。 另一种可能有用的方法是使用(Microsoft)Sysinternals进程监视器运行程序,同时扫描程序正在执行的所有操作。 如果它是由第三方开发的,那么很难在不查看代码的情况下确切地知道它将要做什么。这可能更像是一种合同解决方案 - 在与第三方的合同中加入处罚,并就任何损害赔偿责任达成一致。     
有两个主要选项,取决于您是否信任第三方。 如果您信任第三方,那么您只关心它实际上来自它们,并且它在传输过程中没有改变。代码签名是一个很好的解决方案。如果第三方签署了代码,并且您检查了签名,那么您可以检查中间没有任何变化,并证明是谁编写了它。 如果你不信任第三方,那么这是一个难题。通常的解决方案是在“沙箱”中运行代码,允许它执行一组有限的操作。这个概念已经实现了多种语言 - 谷歌“沙盒”,你会发现很多。对于Perl,请参阅SafePerl,对于Java,请参阅“Java权限”。其他语言也存在差异。     
签字。谷歌的'数字签名'或'代码签名'     
如果您有资源,请使用虚拟机。这通常是一个非常好的沙箱,用于不受信任的应用程序。 如果这恰好是一个Unix系统,请查看你可以用chroot做什么。     
另一件事是不要低估彻底测试的价值。你可以运行应用程序(在非生产环境中)并验证以下内容(不断升级的偏执狂!) CPU /磁盘使用率是可以接受的 它不会与它不应该做的任何网络主机通话 - 即没有“电话主页功能” 使用您选择的AV程序进行扫描 你甚至可以连接pSpy或其他东西来了解它正在做什么。 此外,如果可能,请使用低权限用户运行应用程序。这将提供一定程度的“沙盒”,即应用程序将无法干扰其他进程 ..也不要忽视与供应商的法律合同的价值,如果有问题,可能经常给你一些补偿。当然,首先选择信誉良好的供应商也可以提供一定程度的保证。 -高手     

要回复问题请先登录注册