【问题标题】:Executing a third-party compiled program on a client's computer在客户端计算机上执行第三方编译程序
【发布时间】:2010-11-07 17:58:13
【问题描述】:

我想就提高在客户计算机上执行已编译程序的安全性征求您的意见。这个想法是我们将编译好的程序发送给客户端,但该程序是由第三方编写和编译的。如何确保程序在运行时不会对客户的操作系统造成任何损害?什么是实现该目标而不显着降低程序执行性能的最佳方法?

更新: 我假设第三方不想损害客户的操作系统,但他们可能会犯一些错误或他们的程序被其他人感染。
该程序可以编译为字节码或本机,这取决于第三方。

【问题讨论】:

  • 您能否说明您担心的威胁是什么?您的问题中的“第三方”是否应该被认为是恶意的,或者可能只是稍微无能?
  • 哪个操作系统? Java 字节码还是原生?
  • @thejh 考虑到这个问题根本没有提到 Java,我很难理解你的评论。
  • @thejh 我还是不明白......这个问题也没有提到字节码。 (还有大量基于字节码的语言:.NET 平台、OCaml 和en.wikipedia.org/wiki/Bytecode 的列表)
  • @Pascal Cuoq,@thejh:问题已更新

标签: performance security portable-executable


【解决方案1】:

有两个主要选项,具体取决于您是否信任第三方。

如果您信任第 3 方,那么您只需关心它实际上来自他们,并且在传输过程中没有发生变化。代码签名在这里是一个很好的解决方案。如果第三方对代码进行签名,你检查签名,那么你可以检查中间没有任何变化,证明是他们写的。

如果您不信任第三方,那么这是一个难题。通常的解决方案是在“沙箱”中运行代码,允许它执行一组有限的操作。这个概念已经为多种语言实现了——谷歌“沙盒”,你会发现很多关于它的信息。对于 Perl,请参阅 SafePerl,对于 Java,请参阅 "Java Permissions"。其他语言也存在变体。

【讨论】:

    【解决方案2】:

    根据所涉及的语言和所需的权限类型,您或许可以使用该语言的内置沙盒功能。例如,早期版本的 .NET 有一个“信任级别”,可以设置它来控制程序在运行时拥有多少访问权限(较新版本有一个类似的功能,称为代码访问安全性 (CAS))。 Java 有控制相同事物的策略文件。

    另一种可能有用的方法是使用 (Microsoft) Sysinternals 进程监视器运行程序,同时扫描程序正在执行的所有操作。

    如果它是由第三方开发的,那么如果不查看代码,就很难确切知道它会做什么。这可能更像是一种合同解决方案——在与第三方的合同中增加处罚,并同意他们对任何损害的责任。

    【讨论】:

      【解决方案3】:

      签名。谷歌的“数字签名”或“代码签名”

      【讨论】:

      • Errmm...因为您担心一台机器可能会爆炸,所以您在上面贴了一个标语,上面写着“这台机器永远不会爆炸并且安全可靠”?
      • 好吧,在问题得到澄清之前,这可能是最符合 OP 期望的答案。无需投票。
      • 更接近机器制造商的保证,只要防篡改密封没有损坏,任何爆炸都是制造商的责任。
      • @thejh:不——不是我的意思。不需要讽刺。
      【解决方案4】:

      如果您有资源,请使用虚拟机。对于不受信任的应用程序来说,这通常是一个非常好的沙盒。

      如果这恰好是一个 Unix 系统,看看你可以用 chroot 做什么。

      【讨论】:

        【解决方案5】:

        另一件事是不要低估彻底测试的价值。您可以运行应用程序(在非生产环境中)并验证以下内容(不断升级的妄想症!)

        • CPU/磁盘使用率是可以接受的
        • 不与任何不应进行的联网主机通信 - 即没有“电话回家功能”
        • 使用您选择的 AV 程序进行扫描
        • 您甚至可以连接 pSpy 或其他东西以了解更多关于它在做什么的信息。

        此外,如果可能,请使用低权限用户运行应用程序。这将提供某种程度的“沙盒”,即应用程序将无法干扰其他进程

        ..也不要忽视与供应商的法律合同的价值,如果出现问题,这些合同通常会给你一些补偿。当然,首先选择信誉良好的供应商也可以提供一定程度的保证。

        -王牌

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多