在(隔离的)Azure 函数中运行用户制作的 C# 代码是不是安全?

Posted

技术标签:

【中文标题】在(隔离的)Azure 函数中运行用户制作的 C# 代码是不是安全?【英文标题】:Is it safe to run user-made C# code in an (isolated) Azure function?在(隔离的)Azure 函数中运行用户制作的 C# 代码是否安全? 【发布时间】:2021-05-12 12:20:32 【问题描述】:

我正在开发某种插件架构,人们可以自己提交一小段 C# 代码,它会在 Azure 上每小时执行一次。

这是否安全,或者它们是否可以轻松破坏您的整个 Azure 环境? 还有其他解决方法吗?

我在考虑使用 IronPython - 我想在那里建立硬边界更简单,但我实际上更喜欢使用 c#。

更新

明确一点:我主要关心的是安全,而不是 Azure 成本。这将是类似于保留实例的东西,或者至少是成本有限的东西。

有人上传比特币矿机和我两天后发现的风险是我可以忍受的。

让我无法忍受的是,这个人实际上可以访问所有与 Azure 相关的东西,比如凭据等。

【问题讨论】:

不安全。最好的情况是你会被 DDoS 攻击,最坏的情况是 - 成为其他比特币矿工并获得几千美元的薪水。但是,如果您只为公司中的特定人群开放访问权限 - 可以,如果审核他们的行为。 见***.com/questions/36107551/… 嗨@eocron,这将是一个保留实例-因此成本会受到限制。这是一个非关键过程,因此有人上传矿工并在一天后发现它并删除+阻止该用户的成本不是问题。我更多地谈论安全性。 嗨@IanMercer,感谢您的回答!这与 Azure 特别相关。 Any other workarounds? 为每个客户提供自己的沙盒。如果他们愿意,他们可以妥协,但如果他们是那里唯一的人...... 【参考方案1】:

它可以访问您授予 Azure 函数访问权限的所有内容:它可以读取所有环境变量、连接字符串等;它可能通过它们获得数据库或密钥库访问权限并了解其他秘密;它可能有一个托管身份,赋予它其他功能;它可能可以通过防火墙访问,否则会由于位于受信任的 Azure IP 上而阻止它; ...等等。

现在大部分这些事情应该被配置所禁止,但您将依赖任何开发人员或 devops 人员对您的函数应用环境的所有未来更改,以确保他们不会暴露任何东西给它。

它还可能破坏您依赖的外部服务,并让您被速率限制阻止。

底线:这不是一个好主意。

【讨论】:

另外,我想补充一下这个答案 - 在此类系统中找出后门实际上是有偿工作。因此,*** 可能不是找到安全渗透问题答案的最佳场所。如果只需在致命错误之前重新排列堆栈就可以在简单系统上以 root 权限注入病毒,那么是什么阻止它们在云中执行此操作?

以上是关于在(隔离的)Azure 函数中运行用户制作的 C# 代码是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 5 隔离进程中使用 Azure Functions v3 时添加以前在 Startup.cs 中的代码->配置方法

从 iis (C# API) 访问 azure 文件共享

在 C# 应用程序中从 Azure DevOps 获取构建测试结果

如何为 Http 触发的 Azure 函数(隔离/进程外)生成 Api 客户端?

如果自签名清单,C# 无法在 Azure 管道中传递构建

Azure Functions 并发超时