在(隔离的)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 中的代码->配置方法
在 C# 应用程序中从 Azure DevOps 获取构建测试结果