源代码安全

信息安全 源代码 虚拟化 数据泄露
2021-08-11 11:05:53

我们有大约 20 名开发人员在异构环境中工作,主要使用公司的笔记本电脑或台式机。我们在台式机/笔记本电脑和 Linux 发行版 (Ubuntu/CentOS) 的混合物上运行 Windows 7。

管理层非常热衷于建立一个完全保护源代码的系统,因为我们正在为一个要求相同的客户开发项目,即没有代码泄漏。

我们确实让一些人在周末将笔记本电脑带回家进行远程工作,因为这使他们非常高效。

我被要求提出有关保护环境的建议,以免源代码泄漏。

我们有一个中央 Subversion 存储库,开发人员正在使用它。如果需要,我们可以考虑新的存储库。

有人建议在禁用所有复制选项的情况下为所有用户使用虚拟桌面,这意味着您无法在不同的虚拟桌面之间复制文件或将文件复制到任何可移动磁盘。即使是远程用户也可以使用 VPN 连接登录到他们的虚拟桌面。

这是最好的解决方案,还是有更好的解决方案?我们希望尽可能多地使用开源工具。

4个回答

如果您正在寻找最高级别的一流安全性 -气隙是完成这项工作的唯一方法。不幸的是,在任何情况下都与外部世界完全没有联系是令人望而却步的,尤其是当开发人员喜欢从文档中复制和粘贴代码片段等时。

最终,这可能也意味着将笔记本电脑带离现场也变得不可行。

假设你不能这样做(因为让我们面对现实,这是一个相当大的问题)——首先,移动工作站。绝对选择 VPN 选项。确保通过这些笔记本电脑的所有互联网流量都通过 VPN。这样,您的架构和安全要求(防火墙策略等)肯定会得到执行,更重要的是,除了 VPN 端点之外,您不会向公共互联网公开任何东西。

至少加密笔记本电脑的硬盘。如果笔记本电脑在断电时被盗,源代码应该在合理的时间内是安全的。如果笔记本电脑没有断电,或者攻击者可以观察到密码输入,那么你什么也没做,只是让他们的工作变得更加困难。据我所知,Ubuntu 和 CentOS 都支持 LUKS - 它使用 cryptsetup 并为您提供体面的算法和多槽密码的选择。

基于硬件的磁盘加密会更好,因为这意味着您的/boot分区不可修改。

用于安全的虚拟 LAN收到了不同的意见。从开发的角度来看,我希望您的团队使用 sudo 或 root 访问权限,因此如果他们愿意,他们可以轻松地重新配置 VM 软件以允许他们的主机访问。正如博文中提到的,VM 用于廉价的网络隔离——当您可以强制执行配置时,它就可以工作。在这里,它看起来很难卖。

当然,这并不是说你不能使用虚拟机。我会仔细研究你的开发人员绕过的难度。

如果您拥有足够快的网络和耐心的开发人员,我已经看到这项工作成功的一种方法是使用远程桌面连接到网络上可用的虚拟机 - 但开发人员自己无法物理访问。您甚至可以使用完整的瘦客户端,而不是使用 RDP 的桌面。瘦客户端模型也很好地处理了我的下一个主题……物理安全。

当我说物理安全时,我的意思是您的开发人员插入 USB 记忆棒svn co并带着很多东西离开有多难?“将代码带回家”可以通过这种方式发生,但如果 U 盘丢失,您将失去很多。通常,您可以使用两种解决方案 -环氧树脂和从内核中删除各种hci.ko模块 - 从而使其根本无法识别 USB。不幸的是,这也有禁用 USB 键盘和鼠标的缺点。

您正在谈论开发人员,并且在像您这样看起来很重要的项目中,您可能会有优秀的开发人员。他们总会想办法复制源代码,但如果你阻碍他们的工作,这真的会损害满意度。

我知道的唯一方法是将软件拆分为独立的小部分,因此每个开发人员只知道他的部分。这会给您带来很多工作,因为您必须准确定义各部分之间的接口,但作为副作用,您将获得可测试的代码。

在我看来,更重要的是,Ninefingers 和 Lucas 已经写过,不允许开发人员在未加密的 USB 驱动器上传输源代码。否则,如果驱动器/笔记本电脑丢失,代码也会丢失。

总的来说,我会小心不要超过挫折的极限,特别是如果你的团队中有可靠的经验丰富的开发人员。

安全性的问题在于它通常是与可用性的权衡。首先要做的是教育您的用户:

  • 如果他们离开,锁定他们的电脑
  • 有一个更新的、安全的(AV/防火墙)环境
  • 将他们的计算机存放在安全的地方

以我的经验,如果您正在编码,虚拟桌面会非常令人沮丧。它们速度缓慢,有时您的连接会中断。因此,如果您希望它们在家中使用,我会保留物理笔记本电脑。

我的建议:

  • 设置一个 vpn 以便只能通过此 VPN 访问 SVN 存储库
  • 发行笔记本电脑时,在硬盘驱动器上设置一个 truecrypt(假设您在 Windows 上,对于 ubuntu,您只需加密存储代码的分区)。
  • 如果您不希望他们复制所有源代码,如果他们不需要访问所有代码,您可以使用分支。
  • 与您的开发人员签订明确的合同,他们可以使用他们制作的源代码做什么,不能做什么

管理层非常热衷于建立一个完全保护源代码的系统,因为我们正在为有相同需求的客户开发项目。那是没有代码泄漏。

这将要求所有工作设备都留在工作中。所有工作设备都没有办法将闪存设备插入其中。这也意味着禁用读写媒体磁盘的能力。

如果所有代码都保存在办公室,那么代码就不可能离开办公室。

我们确实让一些人在周末带着笔记本电脑回家工作,因为这看起来很有成效。

这意味着在办公室之外,您已经无法控制数据会发生什么。

有人建议为所有用户使用虚拟桌面,并且禁用所有复制选项,这意味着您无法在不同的虚拟桌面之间复制文件或将文件复制到任何可移动磁盘。即使是远程用户也可以使用 VPN 连接登录到他们的虚拟桌面。

暴力破解虚拟桌面的用户名/密码以更改密码是一项简单的操作,因此能够启用复制文件的能力。

这是最好的解决方案,还是有更好的解决方案?我们希望尽可能多地使用开源工具

简单的解决方案是修改所有可以查看代码的设备,以防止从所述硬件中提取数据。