谷歌出品的《Building Secure & Reliable Systems(构建安全可靠的系统)》,重点介绍 Google 如何将 SRE 方法引入安全性,以及安全性在软件产品开发和运营中的作用。下面为大家带来第19章的翻译全文。
Parisa Tabriz与Susanne Landers和Paul Blankinship
在Google的早期,安全工作(包括以产品为中心的安全性)完全集中。Chrome是首批建立以安全为重点的产品之一,目标是构建安全、现代的网页浏览器。此案例研究描述了Chrome安全团队的演变,包括安全团队制定的核心原则以及有关如何在组织内扩展安全性的一些具体想法。
2006年,Google成立了一个小组,目标是在不到两年的时间里建立一个开源的Windows浏览器,实现比市场上的其他产品更安全,更快,并且更稳定,这是一个宏伟目标也带来了一些独特的安全挑战:•现代的网络浏览器具有与操作系统相似的复杂性,并且在很大程度上它们的安全措施被认为对计算机系统安全性至关重要。•客户端和Windows软件与当时大多数Google大多数产品和系统不同,因此Google的核心安全团队提供了有限的可迁移的安全经验。•由于该项目致力于保持开源状态,因此它有独特的开发和运营要求,不能依赖Google的公司安全做法或解决方案。
此浏览器项目最终于2008年以Google Chrome的形式发布。从那时起,Chrome被公认为重新定义了在线安全标准,并成为世界上最受欢迎的浏览器之一。在过去的十年中,Chrome专注于安全的组织经历了大致四次演变:
2008年Chrome在正式发布之前并未正式成立安全团队,而是依靠工程团队中积累的专业知识以及向Google的核心安全团队和第三方安全供应商咨询。最初的发布并非没有安全漏洞-实际上,在公开发布的前两周内就发现了严重的缓冲区溢出漏洞,这些缺陷是开发人员在时间压力下试图发布针对性能进行优化的C ++代码导致的。浏览器应用程序和Web平台的实现中也存在漏洞问题。发现漏洞,修复漏洞,编写测试以防止回退,以及最终将产品设计出来是成熟团队正常过程的一部分。
公开测试版发布一年后,随着浏览器的实际使用量开始增长,一个专门的Chrome安全团队成立了。最初的这个安全团队,由Google核心安全团队的工程师和新员工组成,借鉴了Google以往的最佳做法和规范,并引入了组织外部新的观点和经验。
在2010年,Chrome启动了漏洞奖励计划(VRP),以表彰来自外部安全研究人员的贡献。对VRP公告的全面回应为安全团队早期孵化提供了方便。Chrome最初基于WebKit,WebKit是一个HTML渲染引擎开源项目,早期没有受到太多的安全审查,因此团队的首要任务之一是应对大量涌入的外部bug端口。当时,Chrome的工程团队非常精简,对所有的WebKit代码库还不是很熟悉,因此安全团队发现解决漏洞的权宜之计通常是潜心研究,积累代码库方面的专业知识,并自己修复许多错误!这些早期的决定最终对团队未来的文化产生了重大影响。它建立了安全团队不是孤立的顾问或分析师而是由安全专家组成的混合工程团队。这种混合方法的优势在于它提供如何将安全开发纳入Chrome上每位工程师的日常工作的独特且实用的见解。
到2012年,由于Chrome的使用量进一步增长,团队的雄心以及攻击者的关注也是如此。为了帮助Chrome项目扩展安全性,核心安全团队建立,社会化并发布了一组核心安全原则。2013年,在聘请一名工程经理并雇用了更多致力于安全的工程师之后,团队举行了一次非现场会议,以反思他们的工作,定义团队任务,并集思广益,讨论他们希望解决的更大的安全问题,以及潜在的解决方案。最终发表了一份声明,阐明了团队的共同目标:为Chrome用户提供尽可能安全的网络导航平台,并提高网络安全性。在2013年的场外会议上,为了以包容的方式集思广益,每个人都在便笺上写下想法。团队集思广益以确定主题,这促使形成了一些常见的工作重点领域。这些重点领域包括以下这些:
安全团队会定期与其他团队协商,以帮助设计和评估新项目的安全性,并对代码库的修改进行安全敏感审查。安全审核是团队的共同责任,有助于增进知识转移。团队通过编写文档和主持安全培训,作为Chrome代码的安全关键部分的托管所有者来扩展这项工作。
由于拥有数百万行安全关键代码,世界各地数百名开发人员不断进行更改,团队建设了一系列帮助所有人尽快找到并修复漏洞的方法。
团队意识到任何人永远都无法防止所有安全漏洞,因此想建设确保设计和体系结构项目的安全,以最大程度地减少任何单个漏洞的影响。由于Chrome可在流行的台式机和移动操作系统上使用 (例如Microsoft Windows,macOS,Linux,Android和iOS),这些系统自身不断发展,这需要持续进行特定于操作系统的建设和策略。
无论团队多么有信心要构建Chrome软件和所使用的系统无懈可击的防御,鉴于浏览器用户的安全素养高下不一,他们仍然需要考虑当用户(毕竟是容易犯错误的)自己做出对安全敏感的决策时如何应对。该团队致力于帮助用户在浏览网络时做出安全的决策使安全更人性化。
除了Chrome之外,该团队还致力于为正在构建网页应用的开发人员提高安全性,以便任何人都可以更轻松在web上构建安全体系。确定每个重点领域的负责领导,以及专职经理,有助于建立了更具伸缩性的团队组织。重要的是,重点领域有反应迅速,团队范围内的信息共享以及项目聚集或协作的优势,这样就不会有个人或重点领域与其他重点领域隔离开来。寻找并留住关心团队使命和核心原则并与他人良好协作的优秀人才是非常重要的。团队中的每个人参与招聘,面试并提供持续的成长的反馈给他们的队友。拥有合适的人才比任何组织细节都重要。在实际寻找候选人方面,团队充分利用了自己的个人关系网络,并不断努力与来自不同背景的人们一起培育和发展这些关系王。我们也将许多实习生转变为全职雇员。有时候,我们通过联系会议上发言的人。或他们发表的作品表明他们是关心网络打造规模化产品的人。公开工作的一个优势是,这意味着我们可以让潜在候选人通过在 Chromium开发的wiki了解我们团队最近完成的工作细节和,这样他们就可以迅速了解更多关于团队的工作,挑战和文化。重要的是,我们一直在追踪个人对安全有兴趣,但其专业知识或成就在其他领域的人。例如,我们聘请了一位具有完善的SRE背景,深切关怀的工程师,很关心保护人们安全的使命,并有兴趣学习安全。这种经验和观点的多样性被广泛认为是团队成功的关键。在以下各节中,我们将分享有关Chrome的核心安全原则如何实践中应用的更多建议。这些原则与今天的Chrome(大约2020年)与2012年首次编写时一样。
Chrome高度重视安全性的主要原因之一是我们将安全作为核心产品原则并建立了一种将安全被视为团队责任的文化。尽管Chrome安全团队有权几乎完全专注安全性,但团队成员认识到他们永远无法独立完Chrome的安全性。他们会努力将安全意识和最佳做法纳入产品开发人员的日常习惯和流程。系统设计交流的目的是使安全实现简单,快速且透明的路线也成为实现安全的路径。这通常需要额外的前期工作,但从长远来看可以使合作伙伴更有效率。实践中的一个例子是团队处理安全漏洞的方式。所有的工程师包括安全团队成员在内都要修复错误并编写代码。如果安全团队仅发现并报告错误,他们可能会忘记编写无漏洞的代码或修复错误有多难。这也有助于减轻安全工程师不参与传统工程任务时有时会出现的“我们”与“他们”的心态 ,当安全工程师不参与传统开发工程做出贡献时,有时会出现这种心态。随着团队的发展越过了早期的脆弱性情况,它致力于开发更主动的安全方法。这意味着要花时间为开发者构建并维护一个模糊测试的基础架构和工具,使识别出哪些变化引起的bug ,以便回退或修复变得更快、更容易。开发人员识别新漏洞的速度越快,修复起来就越容易,而且对最终用户的影响就越小。除了为开发人员创建有用的工具外,团队还提高了工程团队进行模糊测试的积极性。例如,它组织年度模糊测试有奖竞赛并创建模糊测试教程,以帮助任何工程师学习如何进行模糊测试。组织活动让参与安全贡献更容易,活动有助于人们认识到他们无需成为“安全专家”即可提高安全性。Chrome浏览器模糊测试设施从很小开始-工程师桌子下面的一台计算机。截至2019年已支持Google和全世界的模糊测试。除模糊测试外,安全团队建立并维护安全的基础库(例如,安全数字库),因此任何人实施更改的默认方法都是安全的方法。当他们注意到有人在产出了有效的安全成果时,安全团队成员经常向参与的个人或组织发送奖金或正面反馈。由于安全工作有时会不被注意或对最终用户不可见,因此采取额外的努力直接或以与职业目标相一致的方式进行来识别它有助于建立更好的安全激励,以提高安全性。除了策略外,如果组织还没有意识到安全性是核心价值观和共同责任,需要进行更根本的思考和讨论证明安全性和可靠性对组织核心目标的重要性。
有效的安全性不应依赖于任何最终用户的专业知识。任何大规模用户群的产品需要仔细平衡可用性,功能和其他业务限制。在大多数情况下,Chrome的目标是让用户几乎看不到安全性:我们透明地进行更新,我们偏向安全默认值,并且不断尝试使安全的决定成为易用的选择,并帮助用户避免不安全的决定。在Team v3.0阶段,我们都承认我们在可用安全性方面存在一系列公开问题-这些源于人类与软件互动产生的。例如,我们知道用户正在成为社会工程和网络钓鱼攻击的受害者,我们对Chrome的安全警告有效性感到担忧。我们想解决这些问题,但是我们团队中以人机交互为中心的软件专业知识有限。我们决定我们需要从战略上完善更多可用的安全专业知识,并惊喜的联系到对新职位感兴趣的内部候选人。当时,该候选人正在研究科学家的职位上,Chrome没有这样的招聘先例。尽管早期有保留意见,但我们还是说服领导层聘请候选人,候选人的学术专长多样和不同的视角实际上是团队的资产,需要强调的是有必要增强现有的技能, 通过与用户体验(UX)团队紧密合作,我们的新成员团队接着建立了Chrome的可用安全重点区域。过去,偶尔会与UX团队发生安全冲突。最后,我们聘请了额外的用户体验设计师和研究人员,以帮助我们更深入地了解用户的安全和隐私需求。我们了解到安全专家通常对计算机系统和网络工作方式的高度综合理解,往往意识不到用户面临许多挑战。
用户安全依赖于在攻击者利用安全漏洞之前快速检测安全漏洞并向用户提供修复程序。Chrome最重要的安全功能之一快速,自动更新。从早期开始,安全团队就与技术计划经理(TPM)密切合作,他们建立了Chrome的发布流程,并管理每个新版本的质量和可靠性。发行TPM衡量崩溃率,确保及时修复高优先级错误,谨慎渐进的向前滚动版本,当事件进展太快时请工程师回退,并且在合理情况下尽快将可靠性或安全性改进版本发布给用户。早期,我们使用Pwn2Own和后来的Pwnium骇客竞赛来主动测试,看我们是否可以在24小时以内发布和部署关键的安全修复程序(我们做到了)。这需要有力的合作伙伴关系和发布TPM团队的支持和大力帮助,尽管我们展示了该功能,但由于Chrome在深度防御方面的投入,我们几乎不需要使用它。
特别是当考虑C ++的缺点和浏览器的复杂性对安全性的影响时,无论团队以多快的速度检测并修复Chrome中的任何安全漏洞,这些错误一定会发生。由于攻击者不断提高自身能力,Chrome不断投资开发可帮助避免单点故障的缓解技术和体系结构。该团队创建了一个按风险划分的生动的组件图,因此任何人都可以了解Chrome的安全架构和防御的各个层面。在实践中进行深度防御的最佳例子之一是沙箱功能。Chrome最初发布时采用多进程架构启动和沙盒渲染器进程。这阻止了恶意网站的入侵用户的整个台计算机,这是当时浏览器体系结构的重大进步。在2008年,来自网络的最大威胁是恶意网络页面使用浏览器漏洞在用户计算机上安装恶意软件,Chrome架构成功地解决了该问题。但是,随着计算机应用的发展,云计算和网络服务的普及,越来越多的敏感数据已转移到互联网。这意味着XSS窃取的危害与本地计算机一样重要。目前还不清楚攻击焦点何时从“安装恶意软件危害”转移到”到“窃取XSS数据的危害”,但是团队有意识到这种攻击不可避免。鉴于此,2012年,团队着手进行Site Isolation,这是一个旨在推进沙盒状态来隔离各个站点的项目。最初,团队预测站点隔离项目需要一年的时间才能足够完成,但是我们的实际预测误差超过了5倍!这样的估计错误往往会需要高层管理者和公司的支持。团队定期向领导和不同的利益相关者沟通该项目的纵深防御动机,进展及其比最初预期的工作还要多的原因。团队成员也展示了对整体Chrome代码运行状况的积极影响,这使Chrome的其他部分受益。所有的这些为团队提供了额外的掩护,并多年来一直向高层利益相关者传达其价值以捍卫该项目,直到最终公开发布。(巧合的是,站点隔离可以部分缓解在2018年发现的随机性执行漏洞。) 由于纵深防御工作不太可能导致用户可见的增长,因此领导层主动管理,认识和投资这些项目显得尤为重要。
自成立以来,透明度一直是Chrome团队的核心价值。我们不会淡化安全影响或通过静默修复掩盖漏洞,因为这样做对用户服务不佳。相反,我们为用户和管理员提供信息-他们需要准确评估风险。安全团队发布如何处理安全,披露Chrome中修复的所有漏洞及其依赖项,无论是在内部还是在外部发现的,并且尽可能在其发布说明中列出所有已修复的安全问题 。除漏洞外,我们还按季度向公众共享有关我们正在做什么的简报,并通过外部讨论邮件列表与用户互动(security-dev@chromium.org),这样任何人都可以向我们分享想法,问题或参与正在进行的讨论。我们积极鼓励个人在会议或安全聚会或通过其社交网络上分享他们的工作。我们还通过Chrome的漏洞奖励计划和安全性扩大安全社区会议赞助。由于许多不属于团队成员的人的贡献,Chrome更加安全,我们认为应尽力通过确保适当的归因和支出金钱奖励来确认和奖励这些贡献。通过Google,我们组织了一次年度非现场会议,以连接Chrome安全团队,核心安全团队和其他嵌入式团队(例如,Android的安全团队)。我们还鼓励Google的安全爱好者在Chrome上完成20%的工作(反之亦然),或寻找与学术研究人员进行Chromium项目的合作机会。在开放的环境中工作使团队可以分享其工作,成就和想法,并获得反馈或寻求谷歌之外的合作。所有这些都有助于增进对浏览器和网络安全的共识。团队为提高HTTPS采纳率所做的多年努力,如第七章所述的一个例子是交流沟通变化并与他人互动的社区如何改变生态系统。
Chrome小组致力于将安全性作为早期的核心原则贯彻在项目的各个阶段,并根据团队和用户群扩大调整其投资和策略。Chrome安全小组在浏览器发布一年后才正式成立,随着时间的流逝,Chrome团队安全的作用和职责变得越来越清晰,明确了任务和一套核心安全原则,并且确定了其工作的重点领域。将安全作为团队责任,提高透明度并与Chrome以外的社区互动合作,有助于建立和推进以安全性为中心的文化。以快速创新为目标,从而产生了充满活力的产品和灵活的应对不断变化的形势的能力。深度防御设计帮助保护所有用户免受一次性漏洞和新式攻击的侵害。最终用户体验到招聘流程考虑安全性中人的方面,帮助团队扩大对安全性的了解和如何应对更复杂的挑战。正面迎接挑战并从错误中吸取教训的能力使团队能够努力使默认路径也成为安全路径。