编写安全代码的最佳做法
在 Azure 机器学习中,可以从任何源将文件和内容上传到 Azure 中。 加载的 Jupyter 笔记本或脚本中的内容可能会从会话中读取数据,在 Azure 中访问组织中的敏感数据,或以你的名义运行恶意进程。
重要
仅从受信任的源运行笔记本或脚本。 例如,你或你的安全团队已查看其中的笔记本或脚本。
潜在威胁
使用 Azure 机器学习进行开发通常涉及基于 Web 的开发环境,例如 Notebooks 和 Azure 机器学习工作室。 使用基于 Web 的开发环境时,潜在威胁包括:
-
- DOM 注入:此类攻击可以修改浏览器中显示的 UI。 例如,更改“运行”按钮在 Jupyter Notebook 中的行为方式。
- 访问令牌或 Cookie:XSS 攻击还可以访问本地存储和浏览器 Cookie。 你的 Microsoft Entra 身份验证令牌存储在本地存储中。 XSS 攻击可以使用此令牌代表你进行 API 调用,然后将数据发送到外部系统或 API。
跨网站请求伪造 (CSRF):此攻击可能会将图像或链接的 URL 替换为恶意脚本或 API 的 URL。 加载图像或单击链接时,会调用该 URL。
Azure 机器学习工作室笔记本
Azure 机器学习工作室在浏览器中提供托管的笔记本体验。 笔记本中的单元格可输出包含恶意代码的 HTML 文档或片段。 呈现输出时,可以执行该代码。
可能的威胁:
- 跨站点脚本 (XSS)
- 跨网站请求伪造 (CSRF)
由 Azure 机器学习提供的缓解措施:
- 代码单元格输出在 iframe 中进行沙盒处理。 iframe 会阻止脚本访问父 DOM、Cookie 或会话存储。
- 使用 dompurify 库清理 Markdown 单元格内容。 这会阻止恶意脚本在呈现 Markdown 单元格的过程中执行。
- 图像 URL 和 Markdown 链接会发送到 Azure 拥有的终结点,该终结点会检查其中是否存在恶意值。 如果检测到恶意值,终结点会拒绝该请求。
建议的操作:
- 确保你信任文件的内容,然后再将其上传到工作室。 必须确认你上传的是受信任的文件。
- 选择用于打开外部应用程序的链接时,系统会提示你信任该应用程序。
Azure 机器学习计算实例
Azure 机器学习计算实例托管 Jupyter 和 Jupyter Lab。 使用其中的一个时,笔记本单元格中的代码可输出包含恶意代码的 HTML 文档或片段。 呈现输出时,可以执行该代码。 使用托管在计算实例上的 RStudio 或 Posit Workbench(以前的 RStudio Workbench)时,也存在相同的威胁。
可能的威胁:
- 跨站点脚本 (XSS)
- 跨网站请求伪造 (CSRF)
由 Azure 机器学习提供的缓解措施:
- 无。 Jupyter 和 Jupyter Lab 是在 Azure 机器学习计算实例上托管的开源应用程序。
建议的操作:
- 确保你信任文件的内容,然后再将其上传。 必须确认你上传的是受信任的文件。
报告安全问题或疑虑
Azure 机器学习符合 Azure 赏金计划的要求。 有关详细信息,请访问�https://www.microsoft.com/msrc/bounty-microsoft-azure。