大公司如何保护他们的源代码?

信息安全 源代码 保护 后门
2021-08-29 05:03:38

我最近阅读了我们的熊王对关于证书颁发机构如何存储他们的私钥根密钥的问题的规范回答。

然后我不得不问自己:
大公司(例如微软、苹果……)如何保护他们宝贵的源代码?

我特别问自己,他们如何保护他们的源代码免遭盗窃、恶意外部修改和恶意内部修改。

第一个子问题已经(在某种程度上)在CodeExpress关于如何防止私人数据在组织之外被披露的回答中得到了回答。

这些问题的推理很简单:

  • 如果源代码被盗,a) 公司是否会(至少部分地)被禁止出售,b) 产品是否会面临基于源代码的攻击搜索的风险。想象一下如果 Windows 或 iOS 源代码被盗会发生什么。
  • 如果代码被恶意外部攻击者修改,可能会添加秘密后门,这可能是灾难性的。这就是 Juniper 最近发生的情况,其中第二个DUAL_EC_DRBG点的坐标在其源中被替换。
  • 如果代码将被内部攻击者(例如 Apple iOS 工程师?)修改,则该人可以通过出售所述后门赚很多钱,并且如果发布修改后的版本,可能会使产品面临严重风险。

请不要提出“法律”和“合同”。虽然这些是防止盗窃和修改的有效措施,但它们肯定不如技术防御那么有效,也无法阻止攻击性攻击者(其他政府机构)。

4个回答

首先,我想说的是,仅仅因为一家公司很大并不意味着他们的安全性会更好。

话虽如此,我会提到在大量财富 500 强公司中做过安全工作,包括许多大多数人熟悉的知名品牌,我会说目前 60-70% 的公司不这样做就像你认为他们应该做的那样。有些甚至允许全球数百家第三方公司完全访问他们的代码库,但不一定要写入代码库。

少数人将多个私有 Github 存储库用于单独的项目,启用双因素身份验证,并严格控制他们授予访问权限的对象,并在任何人离开时快速撤销访问权限。

其他一些人对保护事物非常认真,所以他们在内部做所有事情,并使用许多其他公司看起来像是过度安全控制和员工监控的东西。这些公司使用数据丢失防护 (DLP) 工具等解决方案来监视代码外泄、内部 VPN 访问高度强化的环境,仅用于开发,具有大量传统的安全控制和监控,并且在某些情况下,对所有数据包进行全包捕获存储代码的环境中的流量。但截至 2015 年,这种情况仍然非常罕见。

我可能感兴趣并且一直觉得不寻常的事情是,金融业,尤其是银行,安全性比人们想象的要差得多,而制药业比其他行业要好得多,包括许多国防承包商。有些行业的安全性绝对可怕。我之所以提到这一点,是因为还有其他动力在起作用:不仅仅是大公司与小公司之间的关系,其中很大一部分与组织文化有关。

为了回答您的问题,我要指出的是,做出这些决定的是整个企业,而不是安全团队。如果安全团队负责一切,甚至知道所有正在进行的项目,那么事情可能不会像今天这样。

也就是说,您应该记住,大多数大型企业都是公开交易的,出于多种原因,他们往往更关心短期利润、满足季度数据以及与其他大型竞争对手争夺市场份额,而不是安全风险,即使风险可能会有效地破坏他们的业务。因此,在阅读以下答案时请记住这一点。

  • 如果源代码被盗:

    1. 大多数人不会在意,这对他们的品牌或销售几乎没有影响。请记住,代码本身在许多情况下并不是存储公司产品价值的东西。如果其他人获得了 Windows 10 源代码的副本,他们就无法突然创建一家销售 Windows 10 克隆操作系统并能够支持它的公司。代码本身只是出售的解决方案的一部分。

    2. 产品是否会因此而面临更大的风险?是的,一点没错。

  • 外部修改:是的,但这更难做,也更容易捕捉。也就是说,由于大多数公司都没有认真监控这一点,因此这种情况很可能发生在许多大公司身上,特别是如果后门访问他们的软件对其他民族国家具有重要价值的话。这可能比人们意识到的更频繁地发生。

  • 内部攻击者:根据攻击者的聪明程度,这甚至可能永远不会被注意到,或者可能看起来像是一个不起眼的编程错误。除了背景检查和行为监控之外,没有什么可以防止这种情况发生,但希望一些源代码分析工具能够捕捉到这一点并迫使团队纠正它。这是一种特别难以防御的攻击,也是一些公司不将工作外包给其他国家并对其开发人员进行全面背景调查的原因。静态源代码分析工具越来越好,但在他们能检测到的和能做的之间总是会有差距。

简而言之,漏洞总是会在修复之前出现,因此处理大多数安全问题就像与时间赛跑一样。安全工具帮助您在时间上进行权衡,但您永远不会拥有“完美”的安全性,并且接近它可能会在时间方面变得非常昂贵(减慢开发人员的速度或在其他地方需要更多的工时)。

同样,仅仅因为一家公司很大并不意味着他们有很好的安全性。我见过一些小公司的安全性比他们的大竞争对手好得多,我认为这种情况将越来越多,因为想要更认真地对待他们的安全性的小公司不必进行大规模的组织变革,而大公司会由于过渡成本,他们被迫坚持他们过去的做事方式。

更重要的是,我认为对于一家新公司(任何规模,尤其是较小的公司)来说,将安全性大量集成到其核心文化中会更容易,而不必像老公司那样改变他们当前/遗留的文化。现在甚至可能有机会通过创建一个非常安全的版本来从不太安全的产品中夺走市场份额。同样,我认为您的问题很重要,原因完全不同:安全性仍处于起步阶段,因此我们需要在代码管理等有很大改进空间的领域提供更好的解决方案。

免责声明:我在一家在这方面做得很好的大公司工作,但我的回答是我个人的意见,并不代表我雇主的立场或政策。

首先,如何保护代码不被泄露:

  • 网络安全:这是显而易见的——如果中国黑客获得了进入您内部系统的凭据,他们就会获取您的源代码(如果没有其他原因,源代码会告诉他们下一步该去哪里)。所以基本的计算机安全必须是“给定的”。
  • 访问控制:您的接待员是否需要访问您的代码存储库?可能不是。限制你的曝光。
  • 在招聘时要有选择性并保持健康的工作环境:从理论上讲,扫描出站电子邮件等 DLP 措施很不错,但是如果您的工程师足够聪明,对您有任何用处,他们就足够聪明,可以弄清楚如何规避您的 DLP 措施。您的员工不应该有理由泄露您的源代码。如果他们这样做了,你就做错了可怕的、可怕的错误。
  • 监控您的网络:这是“网络安全”答案的扩展,但强调数字丢失预防。如果您看到 DNS 流量突然激增,那可能是您的源代码被攻击者窃取了。好的,现在问问自己,您是否知道您的网络中的 DNS 流量是否突然激增。可能不是。
  • 以不同的方式对待移动设备:手机和笔记本电脑经常丢失。他们也真的被偷了经常。您不应在移动设备上存储敏感信息(包括源代码、客户数据和商业机密)。严重地。绝不。这并不意味着您不能使用移动设备访问和编辑源代码。但是,如果笔记本电脑丢失,您应该能够远程撤销笔记本电脑对敏感数据的任何访问权限。通常这意味着代码和文档是在“云中”编辑的(参见 c9.io、koding.com、Google Docs 等),并具有适当的身份验证等。这可以在信任或不信任第三方的情况下完成,具体取决于您要投入多少工作。如果您的解决方案不支持 2-factor 然后选择另一个解决方案;你想通过这个措施减少你的曝光率,而不是增加它。

二、如何防止恶意代码修改;这个问题实际上只有一个答案:变更控制。

对于存储库中的每个代码字符,您必须确切知道谁添加(或删除)了该代码,以及何时添加。使用当今的技术很容易做到这一点,以至于几乎很难进行更改跟踪。如果您使用 Git 或 Mercurial 或任何适度可用的源代码控制系统,您将获得更改跟踪,并且严重依赖它。

但是为了提高可信度,我要补充一点,除了提交更改的作者之外,对存储库的每一项更改都必须由至少另一个人签署。Gerrit这样的工具可以让这一切变得简单。无论如何,许多认证制度都需要代码审查,因此在签入时强制执行这些审查意味着恶意行为者不能单独行动将不良代码放入您的存储库中,有助于防止编写糟糕的代码被提交,并有助于确保至少 2人们了解提交的每个更改。

将采取措施防止意外插入有问题的代码,即错误。其中一些也将有助于防止故意插入有问题的代码。

  • 当开发人员想要将代码提交到存储库时,另一个开发人员必须检查此合并请求。也许第二个开发人员需要向第一个开发人员解释新代码的作用。这意味着要遍历每一行。
  • 如果代码看起来令人困惑,它可能会被认为是糟糕的风格并且不可维护而被拒绝。
  • 代码具有自动化的单元和集成测试。当没有对某行代码进行测试时,人们会感到奇怪。所以必须有一个后门工作的测试,或者某种混淆。
  • 当构建软件的新版本时,开发人员和质量保证会检查哪些提交是构建的一部分以及原因。每个提交都必须有一个记录的目的。
  • 软件是使用自动化脚本构建和部署的。这不仅是为了安全,也是为了简化工作量。

当然,这些措施取决于所有参与者的诚实和善意。对构建服务器或存储库具有管理员访问权限的人可能会造成很大的破坏。另一方面,普通程序员不需要这种访问权限。

在我的(大)公司,我们的笔记本电脑都使用加密硬盘。我们使用一个名为 Digital Guardian 的工具来监控所有文件传输/上传,并阻止 USB 端口写入文件。任何需要例外的人都需要使用硬件加密的 USB 驱动器(同样,以防止在驱动器丢失或被盗的情况下访问文件)。此类异常是暂时的,需要证明正在写入的文件(已记录)是合理的。Digital Guardian 可防止将大多数类型的附件发送到外部电子邮件地址。任何内部文件交换都是使用基于 Web 的文件夹完成的,该文件夹具有访问控制和谁访问了什么的审计跟踪——这意味着“出于业务需求”共享文件是非常无缝的,而其他一切都很困难。

该系统不是万无一失的,它确实对带宽有影响 - 但仅审计工具就发现了多个试图获取源代码/设计文档等的员工(通常是即将离开公司的员工)实例. 至少我们正在阻止其中一些尝试。

如果有人认为 https 上传是“不可见的”:所有外部网络流量都由使用 MITM 证书检查 https 流量的云端代理处理。毫无疑问,可以规避这些措施——有很多聪明的员工——但有时这足以让你的目标比其他人更难。