公司电脑给有能力的开发人员,你怎么处理?

信息安全 虚拟化 企业政策
2021-08-12 03:38:34

这是对是否有正当理由要求我使用我公司的计算机的后续行动主要是因为我在几个特定情况下看到了一个巨大的问题。

如果我担任某个组织的安全工程师,我肯定会制定一项政策,即只能使用公司计算机。这确实是有道理的,并且不仅保护了公司数据,而且保护了员工的责任。

然而,有一种情况让我感到厌烦:一个称职的开发人员(我不是在谈论初级开发人员,我是在谈论中高级开发人员)可能会在他的工作机器上:

  • 17个数据库引擎;
  • 20个码头集装箱;
  • 10 个测试虚拟机(假设使用类似的东西qemu)。

这是初创公司和初创公司(一家成功生存了几年的初创公司)中非常常见的情况。此外,这位开发人员每周都会更换他的 docker 容器和虚拟机,因为他可能会测试新技术。

要求此开发人员每次都请安全工程师安装新软件是完全不切实际的。此外,由于一家公司会有多个这样的开发人员,因此为每个人使用典型的公司管理计算机会带来一些缺点:

  • 例如,维护六个这样的开发人员的计算机对于一个称职的安全工程师来说是一项全职工作。
  • 这些开发人员的经理会非常生气,因为他的团队 50% 的工作时间都是在等待安全工程师。

另一方面,允许开发人员自由使用机器是危险的:一个流氓 docker 容器或虚拟机,而你有一个内部人员。我什至会说,这些开发人员的计算机比普通用户(例如,使用电子表格软件的经理)的计算机更危险。


您如何为有能力的开发人员制定明智的政策?

以下是我能想到的(或过去看到的)其他一些解决方案,其中大部分都很糟糕:

  1. 禁止从开发机器访问互联网:

    • 您需要互联网访问才能阅读文档;
    • 您需要访问通常在 Internet 上找到的存储库。
  2. 给开发者两台电脑,一台上网,一台开发机:

    • 抱怨生产力损失:输入Alt+2浏览器比切换到另一台电脑要快;
    • 存储库访问很麻烦:在一个地方下载,复制到另一个地方。
    • 鼓励开发人员绕过安全性并在两台机器之间建立基于 USB 的连接,这样他就可以在一台计算机上工作(不止一次看到这种情况发生)。
  3. 将开发转移到服务器上(即不在台式机上进行开发):

    • 这只是将同样的问题更深地移动,现在流氓容器在服务器上;
    • 可以说比允许开发人员在自己的机器上做他想做的事情更糟糕。

一定会有更好的办法。

4个回答

开发和生产分开

通常的做法是为开发人员在其工作站上授予本地管理员/root 权限。但是,开发人员应该只能访问开发环境,而不能访问实时数据。系统管理员——他们有权访问生产——应该拥有更多受控的工作站。理想情况下,系统管理员工作站应该没有 Internet 访问权限,尽管这在实践中很少见。

我看到的一个变化是,开发人员有一个锁定的公司构建,但可以在虚拟机中做任何他们想做的事情。然而,这对开发人员来说可能很烦人,因为虚拟机的性能降低了,而且安全优势也不是很大。因此,更常见的是开发人员只是拥有对自己工作站的完全访问权限。

所以这个答案是从开发人员的角度来看的。记住这一点。

首先,在我自己的机器上没有“本地管理员”权限表明我应该在其他地方寻找工作。如果每次需要更新(或测试)新的依赖项或工具时都必须请求许可,那么编写代码、摆弄东西和维护工具链几乎是不可能的。所以,这里是我需要的权限级别。请记住,可以这么说,我通常在梯子上很高。

  • 在我的本地计算机上进行全面和完整的管理员
  • 全面管理所有开发和测试硬件
  • 对生产服务器的某种级别的管理员访问(这很棘手,我不需要或想要所有东西,但我需要足够的东西来诊断和修复生产中发生的问题,并且足够实际部署代码(假设我是那个)必须监督代码部署)。通常这种访问级别会随着时间的推移而发展,但从日志文件开始。

少于那个,你可以去找一个新的开发者。

也就是说,这种访问级别存在很多风险。所以我通常推荐的是一个单独的网络。将所有开发“东西”放在自己的网络中。它自己的广告,自己的文件托管,自己的一切,从不让它与生产网络对话。(但一定要让它上网)

是的,这意味着重复的硬件(或 VPS),但无论如何你都需要它来进行测试。是的,这意味着升级或管理时会增加一点开销,但同样需要测试。您还需要一个地方来查看“如果我升级 AD 服务器,X 软件会发生什么?” 看看你有一个完整的测试机器网络准备好进行那种测试。

我已经成功实现(在一个优秀的 IT 团队的帮助下)是一个单独的 VLAN,用于所有开发人员的“东西”和一个开发人员可以完全访问的 VPS 主机,可以做任何事情。该主机上是由 IT 设置的 AD 服务器,看起来像公司 AD 服务器的较小版本。然后是一组文档和指导方针,例如,网络服务器应该运行什么。DNS 服务器应该运行什么,xyz 服务器应该运行什么。然后,“开发”的一部分是安装和配置这些 VPS 以供我们使用。该 VLAN 上的所有内容都与生产完全隔离,并被视为公司外部。最后,为我们确实需要访问的资产(如电子邮件)创建了一组“穿透”。通常,这就像我们是外部的一样处理,并且这些工具的列表非常少。

从开发者的角度来看:

你的工作是防止改变(已知的错误和漏洞总比未知的好,对吧?),但我的工作是改变事物。这让我们陷入了僵局。我的工作是创造/改变事物。如果您的政策阻止了这一点,那么就像任何其他障碍一样,我的工作的一部分就是找到解决方法。

您认为哪个更危险,一个开发人员您已授予他访问他工作所需的权限,还是一个通过学习如何规避您的所有防御措施而获得该访问权限的开发人员?当你应该一起工作时,为什么你的公司要付钱给你和你的开发人员来对抗这场战争?

简单的答案是,让开发人员能够访问他们完成工作所需的内容。并与他们交谈。在极少数情况下(具有重大法律后果的洁净室逆向工程,或处理绝密机密政府数据),您需要更复杂的策略。但在大多数情况下,这没什么大不了的。如果您发动战争并使您的开发人员成为敌人,那么他们要么离开,要么变得比您与他们合作时更加危险。

明智的措施包括不允许在开发笔记本电脑上转储生产数据库(仅测试具有虚假数据的数据库)。这样,如果笔记本电脑被盗,机密数据不会丢失。但是如果开发人员需要调试东西,他们仍然需要在受控环境中的某个地方访问生产数据库的副本。

限制互联网访问是荒谬的。您不妨要求所有开发人员用羽毛笔和墨水在纸上编写代码。

与您的开发人员交谈,找到一种方法,为他们提供完成工作所需的东西,同时保持您需要保护重要数据安全的安全性。详细信息将取决于您的公司以及您正在处理的数据。但这不太可能需要严厉的措施。

安全工程师不维护计算机,服务台就是这样做的。在您的情况下,您将要求他安装三个工具:

  • 管理程序
  • 码头工人
  • 数据库软件

从那里他可以根据需要添加和删除用于开发的机器(不需要安全工程师干预)。关于你的“流氓容器”。通常,您不会将容器部署到另一台服务器,而是部署 docker 文件,这些文件从代码存储库中提取代码或下载已编译代码的签名二进制文件(这甚至更安全)。

就流氓而言,我只能想象攻击者获得访问权限并添加更多代码。这就是为什么您需要在 SDLC 的每个步骤中嵌入安全性,以确保所有代码在将其推送到树上之前至少由另一个开发人员审查或完成。此外,您还可以集成代码扫描器以自动扫描可疑或易受攻击的代码存根。

关于你的第三点,它实际上取决于。Riot Games 等公司正是这样做的。他们发现限制聪明人会导致这些人绕过控制。因此,他们决定使用简单的规则和有效的意识培训来确保将安全牢记在心,并给予充分的管理权限。他们分发了小卡片,上面写着他们应该照顾和小心的东西。