隔离开发环境:降低网络攻击风险

  • cyfrin
  • 发布于 2024-10-23 10:10
  • 阅读 36

本文探讨了隔离开发环境(如 Docker 容器)如何保护代码和敏感数据免受网络攻击的威胁。通过介绍 Docker 的原理、优势及最佳实践,作者强调使用这一技术可以降低开发过程中遭遇的安全风险,并提供了一系列具体建议以提升安全性。

了解隔离的开发环境,如 Docker 容器,如何保护你的代码和敏感数据免受网络威胁。保持安全,保持信息灵通!

一幅警告图形,描绘了一条假 LinkedIn 招聘者消息,诱骗受害者提供虚假的工作机会和技术挑战。

感谢 theredguild 为此文章提供的灵感。

想象一下以下任何一个场景。

  • 你到达一个 CodeHawks 竞争审计,克隆 git 仓库,并输入 forge test.
  • 你很兴奋能够面试一份高薪工作,克隆 git 仓库并运行 npm install.
  • 你一直在一个项目上工作,意识到一些包已过期,因此你使用 npm updateforge installmox install 升级它们。

好吧,猜猜看?如果你没有采取适当的预防措施,你刚刚被黑了。

在这篇博客文章中,我们将探讨隔离开发环境,特别是使用 Docker 容器,如何显著降低你成为这些威胁受害者的风险。

网络攻击的现状

根据 Chainalysis 的数据,私钥泄露在 2024 年是最常见的攻击方式。

一张饼图显示了根据泄露类型分配的被盗资金,私钥泄露为最大类别。

私钥泄露可能以多种方式发生,但对于开发人员和安全研究人员来说,发生这种攻击最简单的方法是运行未经审查的代码。在我们以上提供的三个场景中(这三种场景在 2024 年也都发生过),它们都存在这个共同问题。

在主机上运行你的代码将使该代码访问你整台机器。

这就是问题所在。

其中一起私钥攻击是 供应链攻击@solana/web3.js 包中注入了恶意软件。当你将你的包更新为恶意版本时,它会 扫描你整个机器以寻找潜在的私钥, 连接到区块链,然后将你的加密货币发送到另一个钱包!

你可以在这里阅读更多关于该攻击的信息。

这将如同简单地运行 npm updatenpm run,你就完成了!因此,作为开发人员和安全专家,我们可以通过在隔离的开发环境中运行我们的代码来帮助保护自己。

通过隔离环境保护自己

虽然在软件开发中不可能消除所有风险,但我们可以使用一些工具来减轻潜在问题:

  • 虚拟机 (VMs)
  • Docker 容器
  • 专门用于运行潜在危险代码的物理设备

在 Cyfrin,我们非常喜欢 Docker 容器,因为它们是轻量级且对开发者友好的环境,大多数开发者应该能够在不干扰他们的工作流的情况下设置它。

什么是 Docker 容器?

Docker 容器是可移植的环境,封装了应用程序的代码及其所有依赖项。这意味着你可以在受控环境中运行你的应用程序,而不影响你的主机。让我们分解一下 Docker 的工作原理:

  • 隔离: 每个容器都在自己的隔离环境中运行,这防止恶意脚本访问你的主机系统。

  • 受控访问: 你可以指定容器可以访问的资源,从而允许更安全的开发过程。你可以指定想要授予它访问的内容,包括:

    • 文件系统
    • 网络
    • 工具/脚本

  • 易于清理: 如果一个容器被攻破,你只需删除它,不会影响你的主系统。

一张在传统开发环境和 Docker 化设置之间进行视觉比较的图,强调了隔离的好处。

你可以将 Docker 容器视为在你的机器内部的一个自包含机器。

Web3 开发容器仓库

为了帮助开发人员设置一个已经安装了大部分所需工具的项目,我们创建了 web3-dev-containers 仓库。它帮助用户设置一个隔离环境。

查看 快速入门 以设置一个基于 VSCode 的 Docker 容器(称为开发容器),这样你就可以以额外的安全层运行你的脚本!这个仓库将:

  1. 启动一个已经安装 foundrymoccasin 库的 Docker 容器
  2. 或者在你的 VSCode 内,或在一个原始的 Docker 容器中
  3. 让你轻松进出你的开发容器,这样你就可以更安全,同时也对开发者友好

对于安全研究人员:

你应该 始终 在开发者容器中运行客户端代码!有许多攻击案例,其中客户要求审计人员审计某个代码,而他们把恶意代码放入审计仓库,黑掉了审计人员的机器。

像 Claude 和 ChatGPT 这样的 AI 在 Docker 容器方面表现得很好。为他们提供仓库文件作为上下文,并询问他们文件中发生了什么!

使用 Docker 容器的最佳实践

虽然 Docker 有助于隔离开发环境,但遵循最佳实践以最大化安全性至关重要:

  • 使用受信任的镜像: 始终从信誉良好的来源提取镜像,以避免合并恶意代码。
    • 在我们的仓库中,我们使用 Microsoft 的 Linux docker 镜像 来帮助我们设置容器化环境,使其类似于官方的 Linux 实例。
  • 以非根用户运行: 配置你的容器以非根用户身份运行,以限制通过任何被利用的漏洞造成的潜在损害。
    • 在我们的仓库中,我们创建了一个新的用户,称为 VSCode。
  • 限制容器权限: 对赋予容器的权限要谨慎,确保它们只有需要的权限才能运行。
    • 我们仅下载特定的包,如 foundry、aderyn 和 slither。
  • 定期更新你的镜像: 持续更新你的 Docker 镜像,以获得最新的安全补丁和更新。

理解安全影响

尽管在隔离环境中运行应用程序显著降低了风险,但了解潜在的安全影响仍然至关重要。例如:

  • 如果你将本地文件系统挂载到容器上,仅授予必要文件的访问权限。如果访问未经适当限制,恶意脚本可能会利用此访问。
    • 在我们的仓库中,我们讨论了挂载和未挂载的选项。
  • 警惕网络访问。如果容器有网络权限,它可能会被用于恶意目的,例如发起攻击或窃取数据。
  • 总有可能出现我们未知的 Docker 脱逃黑客攻击,恶意脚本可能会退出 Docker!这将是一个疯狂的黑客攻击,但可能是可行的!

了解潜在的安全问题至关重要,因为没有解决方案可以做到 100% 无懈可击。

结论

总之,最小化网络攻击风险的关键在于理解威胁和实施安全实践。通过利用 Docker 容器并遵循最佳实践,你可以创建隔离的开发环境,保护你的敏感信息,并减少成为恶意攻击受害者的可能性。

在外面的安全,牢记,虽然没有系统是完全无法渗透的,但知情的实践可以显著增强你的安全态势!

有关保护你的开发环境的更多阅读,请查看 theredguild 博客web3 Dev containers 的 GitHub 仓库。

  • 原文链接: cyfrin.io/blog/reduce-th...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
cyfrin
cyfrin
Securing the blockchain and its users. Industry-leading smart contract audits, tools, and education.