最近,我读了我们的Ursine霸主对有关证书颁发机构如何存储其私有根密钥的问题的规范答案。

然后我不得不问自己:大公司(例如Microsoft,Apple, ...)保护其宝贵的源代码?

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

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

问题的原因很简单:


如果源代码被盗,a)公司(至少部分地)将被禁止出售,b)产品将面临基于源代码进行攻击搜索的风险。试想一下,如果Windows或iOS源代码被盗将会发生什么情况。这就是瞻博网络最近发生的情况,在其源代码中替换了第二个DUAL_EC_DRBG点的坐标。如果出售修改后的版本,可能会赚很多钱,并且如果修改后的版本发货,可能会使产品面临严重风险。虽然这些是防止盗窃和修改的有效措施,但它们肯定不能像技术防御那样有效,也不会阻止攻击性攻击者(即其他政府机构)。

评论

为防止窃取,工作站上没有可移动介质插槽。员工不得携带媒体,带摄像头的手机等上班。对不相关/不相关模块的权限需要授权。职责分离。为了防止后门,他们需要在其安全SDLC中内置源代码分析程序。对于恶意外部攻击者,他们应该在发布之前接受渗透测试。

公平地讲,在美国,欧洲,日本等大多数国家,“法律和合同”(当然,合同是根据“法律”强制执行或忽略的;但是少量的语义怪癖...)通常是有效的工具。既惩罚惩罚那些危害源代码的人,又限制了获得该代码访问权的各方可以从中获得什么好处。 (肯定并不总是有效的。)重大问题更多来自网络非法世界领域的参与者。至少在世界上,有关当局对保护西方公司主张的合法权利没有两方面的智慧。

恕我直言,这是两个问题:保护源代码不被盗用和篡改。它们具有不同的威胁模型,应单独询问。

FWIW是iOS源代码的核心,任何人都可以免费使用:opensource.apple.com。此外,愿意签署协议的任何人都可以使用Windows源代码(不确定是否需要支付任何费用):microsoft.com/en-us/sharedsource。因此,对于像Apple和Microsoft这样的真正大公司,他们使用THE LAW保护知识产权(不是您想要的答案,而是事实)。

如果只有封闭源代码可以阻止您出现漏洞,那么我对您来说是个坏消息。

#1 楼

首先,我想说的只是一家大公司并不意味着他们的安全性会更好。
话说,我要说的是,在许多《财富》 500强公司中都做过安全工作,包括许多大多数人都熟悉的品牌,我会说,目前有60-70%的品牌做得不如您想像的那样。有些甚至提供给全球数百家第三方公司完全访问其代码库的权限,但不一定要对其进行写操作。他们还授予谁访问权,并有一个程序可以在有人离开时迅速撤消访问权。
其他一些人则非常重视保护事物,因此他们在家做所有事情,并使用许多其他公司的东西看起来像是过高的水平安全控制和员工监控。这些公司使用诸如数据丢失防护(DLP)工具之类的解决方案来监视代码泄漏,对经过严格加固的环境的内部VPN访问,以仅通过大量传统安全控制和监视进行开发,并在某些情况下以全包形式捕获所有内容。存储代码的环境中的流量。但是截至2015年,这种情况仍然非常罕见。
对我来说似乎一直很不寻常的事情是,金融业,尤其是银行,其安全性远比人们想象的要差,而且制药工业比包括许多国防承包商在内的其他行业要好得多。有些行业对安全性绝对感到恐惧。我之所以这么说是因为还有其他动态因素:不仅仅是大公司还是小公司,其中很大一部分与组织文化有关。
为了回答您的问题,我要指出的是,整个业务是由这些决策决定的,而不是安全团队。如果安全团队负责所有工作,或者甚至知道所有正在进行的项目,那么事情看起来可能不会像今天这样。进行交易,并且出于多种原因,它们更倾向于关注短期利润,满足季度数字以及与其他大型竞争对手竞争市场份额,而不是安全风险,即使这些风险可能会严重破坏其业务。因此,在阅读以下答案时请记住这一点。


如果源代码被盗:


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


产品会因此因此受到更大的风险吗?是的,绝对是。




外部修改:是的,但这很难做,更容易抓住。就是说,由于大多数公司没有认真监控这一点,所以这确实有可能发生在许多大公司中,尤其是如果后门访问其软件对其他民族国家而言具有重大价值时。这可能比人们意识到的要多得多。


内部攻击者:根据攻击者的聪明程度,可能甚至不会注意到它,或使其看起来像不起眼的编程错误。除了背景检查和行为监控之外,没有什么可以阻止这种情况的发生,但是希望某些源代码分析工具能够阻止这种情况并迫使团队进行纠正。这是要防御的特别艰巨的攻击,也是一些公司不将工作外包给其他国家或对开发人员进行全面背景调查的原因。静态源代码分析工具日趋完善,但是它们可以检测到的东西与可以完成的事情之间总是存在差距。修复程序,因此处理大多数安全问题变得与时间赛跑。安全工具可以帮助您进行时间折衷,但是您将永远无法拥有“完美”的安全性,而接近安全性可能会在时间上造成非常昂贵的成本(使开发人员减速或在其他地方花费更多的工时)。 >再次,仅仅因为一家公司很大并不意味着它们具有良好的安全性。我见过一些小型公司的安全性要比大型竞争对手好得多,而且我认为情况会越来越多,因为希望更认真对待其安全性的小型公司不必进行大规模的组织变革,大型公司可以由于过渡成本,被迫坚持过去的工作方式。
更重要的是,我认为对于新公司(无论规模大小,尤其是规模较小的公司)来说,将安全性大量集成到其核心文化中都比较容易,而不必像老公司那样改变其当前/传统文化。通过创建非常安全的版本,现在甚至有机会从不太安全的产品中夺取市场份额。同样,我认为您的问题之所以重要是因为完全不同的原因:安全仍处于起步阶段,因此我们需要在代码管理等领域有很多改进空间的更好的解决方案。

评论


更重要的是,大多数人都不关心源代码是否被盗:一般而言,公司的真正价值在于其数据库中的数据,而不是源代码。大多数源代码很可能是无聊的车轮发明,您可以在任何地方找到它。

–大卫说恢复莫妮卡
15/12/28在13:39

作为附带说明,技术巨人要求您始终随身携带设备(PC,电话)。

–以前
15年12月29日在8:45

需要指出的是,在这种情况下,“数据丢失”是指渗透或泄露。

–森林
18/12/20在8:10

#2 楼


免责声明:我为一家在这一领域做得很好的非常大的公司工作,但是我的回答是我个人的观点,并不代表我雇主的立场或政策。 br />首先,如何保护代码不被泄漏:



网络安全:这很明显-如果中国黑客将凭据输入到您的内部系统,那么它们将用于您的源代码(如果出于其他原因,除了源代码会告诉他们下一步去的事实)。因此,必须赋予计算机的基本安全性。

访问控制:接待员是否需要访问代码存储库?可能不会。限制您的接触范围。

在招聘和保持健康的工作环境方面要有选择性:DLP措施(例如扫描出站电子邮件)从理论上讲很不错,但是如果您的工程师足够聪明,对您毫无用处,他们足够聪明,可以弄清楚如何规避DLP措施。您的员工应该没有理由泄漏您的源代码。如果他们这样做了,那么您就做错了什么,这太可怕了。如果您发现DNS流量突然激增,则可能是您的源代码被攻击者窃取了。好的,现在问问自己,您是否还知道网络中DNS流量是否突然激增。可能不是。

以不同的方式对待移动设备:手机和笔记本电脑经常丢失。他们还经常被盗。您永远不要在移动设备上存储敏感信息(包括源代码,客户数据和商业秘密)。说真的决不。这并不意味着您不能使用移动设备来访问和编辑源代码。但是,如果便携式计算机丢失了,您应该能够远程撤消便携式计算机对敏感数据的任何访问。通常,这意味着使用适当的身份验证以及所有这些功能,即可“在云中”编辑代码和文档(请参阅c9.io,koding.com,Google文档等)。可以在是否信任第三方的情况下完成此操作,具体取决于您要投入多少工作。如果您的解决方案不支持2因数,则选择另一种解决方案;

其次,如何防止恶意代码修改;这个问题真的只有一个答案:变更控制。

对于存储库中的每个代码字符,您必须确切知道谁添加(或删除)了该代码以及何时添加。使用当今的技术非常容易做到这一点,几乎没有变更跟踪就很难了。如果您使用Git或Mercurial或任何适度可用的源代码控制系统,则将获得变更跟踪,并严重依赖它。除了提交更改的作者之外,还必须至少由其他人签名。诸如Gerrit之类​​的工具可以简化这一过程。许多认证制度仍然要求代码审查,因此在签入时强制执行这些审查意味着恶意行为者不能独自采取行动将不良代码放入您的存储库中,有助于防止编写质量差的代码,并确保至少2人们了解提交的每个更改。

评论


WRT“对于每个代码字符,您都必须确切知道谁添加了该代码,以及何时添加。这很容易.. Git或Mercurial” Git,hg和其他人确实会跟踪代码的作者身份,但是除非您使用类似gpg签名的提交(大多数情况下不这样做),则黑客很容易绕过。

–emory
15年12月28日在13:44

@emory,即使没有经过签名的提交,也无法在不修改当前哈希的情况下更改历史记录,并且(对于具有无基础许可的工作流的地方,这种规模的任何人都应该有的地方)会引起注意。

–查尔斯·达菲(Charles Duffy)
15/12/28在23:05



@tylerl我的经验是使用ssh键将代码推送到组织存储库(不需要提交凭据),并且组织存储库位于VPN上。组织可以合理地确信只有组织成员才能推送代码,但是组织成员可以互相模仿。 gpg签署了提交或限制了对ssh密钥的推送,只要该密钥与Committed-By标识符相匹配,将使组织确切地知道谁提交了哪些代码,但是我认为这些措施并不常见-我对此可能是错误的。

–emory
15年12月29日在12:03



@CharlesDuffy确保用于上载变更集的SSH密钥与Committed-By身份保持一致是有道理的,但是我在实践中从未听说过它,因此我不同意这种做法。也许应该。

–emory
2015年12月29日12:08



@Kobi工业间谍活动往往来自中国。如果您遭到叙利亚或巴西攻击者的入侵,那通常是出于另一个原因。

– tylerl
15年12月29日在23:08

#3 楼

将采取适当的措施来防止意外插入有问题的代码(也称为错误)。其中一些还可以帮助避免有问题的代码的故意插入。也许第二个开发人员将需要向第一个开发人员解释新代码的作用。这意味着要遍历每行。
如果代码看起来令人困惑,则可能会因为样式不好而无法维护。
代码具有自动化的单元和集成测试。当没有针对特定代码行的测试时,人们会感到奇怪。因此,必须进行测试以证明后门是否有效,或者进行某种混淆。每个提交都必须有记录的目的。
软件是使用自动化脚本构建和部署的。这不仅是为了安全,而且是为了简化工作量。拥有对构建服务器或存储库的管理员访问权限的人可能会造成很多破坏。另一方面,普通程序员不需要这种访问。

评论


SysAdmins也不应具有这种访问权限。当程序员需要ee检查其他程序员的工作时-为什么sysAdmins不应该重新检查其他Admins所做的工作

– BlueWizard
16年1月3日,6:25

#4 楼

在我的(大型)公司中,我们的笔记本电脑都使用加密的硬盘驱动器。我们使用一个称为Digital Guardian的工具来监视所有文件的传输/上传,并阻止USB端口写入文件。任何需要例外的人都需要使用硬件加密的USB驱动器(再次,以防止在驱动器丢失或被盗时访问文件)。这种例外是暂时的,需要证明所写文件(已记录)的合理性。 Digital Guardian可以阻止将大多数附件发送到外部电子邮件地址。任何内部文件交换都是使用具有访问控制权的基于Web的文件夹完成的,并跟踪谁访问了什么内容的审计跟踪-这意味着“满足业务需求”的文件共享是无缝的,而其他一切都很难。 >该系统不是万无一失的,它确实会对带宽产生影响-但仅审计工具就已经导致试图获取源代码/设计文档的多个员工实例(通常是即将离开公司的员工)等等。至少我们会停止其中的一些尝试。使用MITM证书检查https流量。毫无疑问,可以规避这些措施-有很多聪明的员工-但有时足以使您的目标比其他人更难。

评论


哦,哦...哦...您的工作站有那些方便的DVD驱动器吗? ..我无人看管时不小心打开了机箱,将第二个硬盘驱动器热插入机箱中,复制了文件,断开了硬盘的连接,我很高兴:-)

– Tschallacka
15年12月29日在10:39

@MichaelDibbets否,无法写入任何无法识别的硬盘。而且,如果您能够欺骗“已知”磁盘,则会标记将一堆文件写入另一个驱动器,并且在不解释为什么需要这样做以及磁盘现在位于何处的情况下,您将无法通过出口的安全保护。 。同样,您可以尝试规避某些问题。但是,问题是“大型公司如何……”,而不是“什么是万无一失的……”。这是一家大公司的工作方式。这样就回答了这个问题。

–花
2015年12月29日14:08

还请注意,这实际上只是更详细的信息,反映了已接受的答案的第4段所指出的内容:“还有一些人非常认真……DLP……”

–花
15年12月30日在12:20

#5 楼

这是一个棘手的问题,因为我从没从事过该行业,所以我的想法可能是理论上的或非常不切实际的。 explorer.exe团队只需要访问explorer.exe的源代码即可。
这将使从内部盗窃源代码更加困难,因为您将需要处于较高的位置才能深入了解其更多部分。源代码。

当然,您需要对团队可能需要但看不见的所有部分都拥有良好的文档。此外,调试将变得更加棘手,因为您必须将预编译的源代码与来自explorer.exe-Team的新编译的源代码合并。该产品甚至适用于仅编辑过一小段作品的人。 (因为他们需要测试其更改)
此服务器还知道谁有权访问代码的哪些部分。

我不知道这是否是一种实际的方法或是否真的是否在行业中发生。我认为这只是一个概念,可以防止源代码被盗。

评论


4个月后,我想:“为什么我试图通过指出我的经验为零来回答这个问题”

– BlueWizard
16年5月11日在8:34

#6 楼

软件的市场价值是它支持的业务案例的价值的直接函数。投资回报率。
竞争产品的市场价值
它将继续得到公司的增强和支持,这是公司的品牌。围绕该产品的营销和销售工作
现有满意的客户,开发人员和社区成员的数量
功能,本地化,专利数量,软件的完整性和质量

因此来源代码只是游戏的一部分。不是全部。

源代码本身受



雇员和承包商签署的法律合同/条款和条件保护
专利黑匣子组件,没有任何一个人或团队可以访问。
使用软件级别和物理级别的安全机制来保护对代码的访问


评论


这不能回答问题-OP明确指出“法律”和“合同”不是有效的答案-问题的全部重点是在“软件级别和物理级别的安全机制”上扩展

– schroeder♦
15/12/29在2:45