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

感谢theredguild为此文章提供的灵感。
想象一下以下任何一个场景。
- 你到达一个 CodeHawks 竞争审计,克隆 git 仓库,并输入
forge test. - 你很兴奋能够面试一份高薪工作,克隆 git 仓库并运行
npm install. - 你一直在一个项目上工作,意识到一些包已过期,因此你使用
npm update、forge install或mox install升级它们。
好吧,猜猜看?如果你没有采取适当的预防措施,你刚刚被黑了。
在这篇博客文章中,我们将探讨隔离开发环境,特别是使用 Docker 容器,如何显著降低你成为这些威胁受害者的风险。
网络攻击的现状
根据 Chainalysis 的数据,私钥泄露在 2024 年是最常见的攻击方式。

私钥泄露可能以多种方式发生,但对于开发人员和安全研究人员来说,发生这种攻击最简单的方法是运行未经审查的代码。在我们以上提供的三个场景中(这三种场景在 2024 年也都发生过),它们都存在这个共同问题。
在主机上运行你的代码将使该代码访问你整台机器。
这就是问题所在。
其中一起私钥攻击是 供应链攻击,@solana/web3.js 包中注入了恶意软件。当你将你的包更新为恶意版本时,它会 扫描你整个机器以寻找潜在的私钥, 连接到区块链,然后将你的加密货币发送到另一个钱包!
你可以在这里阅读更多关于该攻击的信息。
这将如同简单地运行 npm update 和 npm run,你就完成了!因此,作为开发人员和安全专家,我们可以通过在隔离的开发环境中运行我们的代码来帮助保护自己。
通过隔离环境保护自己
虽然在软件开发中不可能消除所有风险,但我们可以使用一些工具来减轻潜在问题:
- 虚拟机 (VMs)
- Docker 容器
- 专门用于运行潜在危险代码的物理设备
在 Cyfrin,我们非常喜欢 Docker 容器,因为它们是轻量级且对开发者友好的环境,大多数开发者应该能够在不干扰他们的工作流的情况下设置它。
什么是 Docker 容器?
Docker 容器是可移植的环境,封装了应用程序的代码及其所有依赖项。这意味着你可以在受控环境中运行你的应用程序,而不影响你的主机。让我们分解一下 Docker 的工作原理:
- 隔离: 每个容器都在自己的隔离环境中运行,这防止恶意脚本访问你的主机系统。
受控访问: 你可以指定容器可以访问的资源,从而允许更安全的开发过程。你可以指定想要授予它访问的内容,包括:
- 文件系统
- 网络
- 工具/脚本
- 库
- 包
- 易于清理: 如果一个容器被攻破,你只需删除它,不会影响你的主系统。

你可以将 Docker 容器视为在你的机器内部的一个自包含机器。
Web3 开发容器仓库
为了帮助开发人员设置一个已经安装了大部分所需工具的项目,我们创建了 web3-dev-containers 仓库。它帮助用户设置一个隔离环境。
查看 快速入门 以设置一个基于 VSCode 的 Docker 容器(称为开发容器),这样你就可以以额外的安全层运行你的脚本!这个仓库将:
- 启动一个已经安装
foundry或moccasin库的 Docker 容器 - 或者在你的 VSCode 内,或在一个原始的 Docker 容器中
- 让你轻松进出你的开发容器,这样你就可以更安全,同时也对开发者友好
对于安全研究人员:
你应该 始终 在开发者容器中运行客户端代码!有许多攻击案例,其中客户要求审计人员审计某个代码,而他们把恶意代码放入审计仓库,黑掉了审计人员的机器。
像 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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~