在我的公司,我们非常保护源代码。我们通过建立一个开发局域网来满足我们的偏执,该局域网与互联网和我们公司的其他网络隔离。在开发网络中,我们有一些安全的机器(源代码控制服务器、构建服务器、域控制器),并且所有源代码都必须加密或放在上锁的房间中。能够向我们的客户解释这样一个简单的安全策略对我们来说是一个竞争优势,但随着我们公司的发展,维护这个网络的成本也变得越来越高。为了应对过去一年的痛苦,我们放弃了严格的隔离政策,允许双因素身份验证的 RDP 专用 VPN 访问网络。
然而,我们的开发网络与公司网络其他部分之间缺乏连通性,这仍然严重阻碍了网络内部团队与网络外部团队之间的合作。我们希望考虑对我们的网络架构进行彻底改革,但我们不确定保护源代码的行业最佳实践是什么。我们可能会考虑以下几点:
- 将我们的开发网络与公司网络的其余部分连接起来,并允许此网络上任意两台主机之间进行不受限制的通信。还允许相对不受限制的出站连接到互联网。
- 允许远程员工通过 VPN 完全访问公司网络。
- 开辟一个单独的“测试沙盒”网络,该网络不包含源代码、不会被修补,并且只允许来自公司网络其余部分的入站连接。
- 要求在假设敌对网络流量的情况下管理开发机器:要求最新的补丁级别,不允许未经身份验证的远程调试,设置强密码等。
- 继续要求所有静态代码要么放在上锁的房间(针对没有令人满意的加密解决方案的旧平台),要么进行加密
- 继续要求所有有权访问代码的开发人员签署适当的文件,声明他们不会从网络中删除任何代码
在您工作过的大型软件开发组织中,这是否被视为令人满意的安全政策?软件开发组织还遵循哪些其他做法来保护其源代码?例如,入侵检测系统是否是源代码安全的常见组成部分?
这“我们如何保护我们的源代码?”这个问题与我们的问题密切相关,但我们更关心网络架构,而不是员工政策或备份策略。
答案1
对于某些问题,公司政策通常比技术解决方案更有效。但这并不意味着技术无法在帮助执行政策方面发挥作用。
我建议你看看Fortinet 的 Fortigate。它们有一些东西可以帮到你。它们可以隔离任何不符合你的政策(即补丁级别、A/V 等)的计算机。它还可以同时进行应用程序保护和数据泄漏预防。因此,你只需要设置一个数据泄漏预防规则来阻止任何类似代码的内容。因此,如果你的公司有一个放在文件顶部的标准标头,你可以查找它并阻止和报告它。如果你将 FortiClients 添加到组合中,你可以锁定本地计算机上的 USB 端口,并在每个客户端上实施防火墙、A/V、数据泄漏预防和入侵防御策略。
所以谈谈你的观点。
- 带有 VLAN 的防火墙应该能够解决您的第一点。
- Fortigate 还可以充当 VPN,因此这一点也非常简单。
- 某种类型的 VLAN 可以作为您的沙盒。
- ForitClient 与组策略和 Fortigate 结合您应该能够控制您需要的一切。
- 这个有点难处理。但公司政策规定不遵守这些政策将导致终止合同,这是最好的方法。然而,FortiClient 可以锁定 USB 端口,因此只要您充分锁定网络,这应该会为您提供所需的控制。
- 最后一点也更多的是一个政策问题。
答案2
嗯,这更多的是关于设计理念而不是实际架构的答案,但你似乎对想要实现的目标有一个不错的想法。我发现最好的做法是不仅要有书面政策,还要设计系统以使违反政策变得困难(如果不是不可能的话)。例如,如果只允许某些机器直接连接到关键服务器,那么就用 ACL 或服务器本地防火墙包围关键服务器,以仅允许来自这些机器的连接。
关于你的要点:
- 我建议不要允许不受限制的互联网访问。至少,使用防火墙强制代理要求或 WCCP。使用白名单默认拒绝是最好的。
- VPN 很棒如果你确实想要允许(或想要管理)来自网络外部的不受限制的访问;如果你真的只想允许特定类型的连接,那么我认为 VPN 有点过度,而且不必要地危险
- 我很喜欢为开发人员提供沙箱,我们的沙箱连接到单独的互联网接入,并且位于生产级防火墙的另一侧,与网络的其余部分隔开
- 在任何环境中,补丁和安全密码都应该是最低要求……
- 加密很好,但您需要管理加密方法,并注意避免失败;例如,当您绝对需要访问代码但拥有密码的人正在度假时会发生什么?如果您需要建议,请告诉我,我会添加我如何管理它...这有点复杂,但很有效。
- 您可能对最后一点的 NAC 类型的解决方案感兴趣,因为它是一种强制身份验证的方法,允许您审核谁在哪里复制了什么。您还可以执行诸如禁止 USB 设备之类的操作,事实证明 USB 设备对私人数据构成了真正的威胁
答案3
我有点困惑。您已经通过 VPN 连接到了安全网络,这意味着以下内容
- 为需要访问两个网络的人员准备两台计算机。不必放在同一张桌子上。
- 对于任何开发类型的工作,都需要 VPN 连接到安全网络。
源代码和所有开发工作都可以在安全网络上继续进行,并通过 RDP 进行,而终端位于外部网络上,并且可以并行运行其他工具。