开发者俱乐部

标题: 从Google白皮书看企业安全最佳实践 [打印本页]

作者: xman    时间: 2017-4-7 21:13
标题: 从Google白皮书看企业安全最佳实践
前不久Google发布了一份安全方面的白皮书Google Infrastructure Security Design Overview,直译的版本可以参考“网路冷眼”这版《Google基础设施安全设计概述》,直译+点评的版本可以参考“职业欠钱”的《Google基础设施安全设计概述翻译和导读》
此前Google在安全领域披露的信息一直很少,适逢其大力发展云计算业务,需要展示云安全方面的实力,才有了这份白皮书。它从系统的角度描述了自己安全体系的设计与实现,对广大互联网、云计算公司的安全小伙伴而言可谓一大福利。本文中,笔者将从一个企业安全建设者的角度,说说自己的感想,并做一些解读。
几点感想整体安全体系图解
Google原来的图有点类似于ISO27001,框架性很好,但也终归是一个对外的版本,信息披露上比较粗线条,对于更想在实践层面模仿的同学来说比较抽象,所以笔者以自己的理解重新归纳了两张图。第一张图展示了Google的整体IT环境,包括办公网络、生产网络以及交互通道的整体安全视图:

假如一开始不好理解也没关系,先有个框架性认识。总体上可以抽象为办公网络和IDC都有纵深防御体系,研发环境属于办公网络之上的一个特殊子集(这里并没有披露内部IT的其它系统怎么建设的),办公网络和IDC生产环境之间有限的数据通道都做了风险控制,采用“2+2结构(2个纵深防体系+2个数据通道)”。
第二张图再单独分解一下IDC的纵深防御体系:

更具体的实现在后面的章节里展开,最后可以再回过头来看这张图。
接下来,我们按照白皮书原文的顺序一一解读。
CIO视角(宏观)
关于CIO视角,我们要Get几个点:
物理安全
Google自有IDC的物理安全手段:生物识别、金属检测、摄像头、路障、激光入侵检测,同时Google要求使用的第三方IDC的物理安全措施对其完全可控。
物理安全这件事哪怕在很多安全从业者心里也不过是ISO27001的一些章节和控制点,并非是很多人对于安全体系建设发自肺腑的真实需求,很多人对安全建设的认知往往是对抗线上入侵者。然而这也暗示了,不同的人、不同的厂商所建立的安全体系用来对抗的目标和范畴是完全不一样的。类似Google、Amazon、Apple这类公司他们的安全体系用来对抗的几大场景可以归纳为:黑客、第三方、雇员、IDC/云服务提供商、商业间谍、政府机构,对抗的强度依次上升。换言之,可以举例翻译为:即便我使用第三方的云服务,仍然可以保证自己的数据不被偷窥。对于成为国家基础设施的服务而言,实际上另一种不能明说的需求就是介于民用领域和军用领域之间的对抗需求。
大量公司的安全体系主要是用来御外而不是防内的,所以供应链安全、数据泄露这等事情都很头疼。基于此推断,即便修完了所有的漏洞,做了入侵检测,也不足以对抗很多威胁,安全这件事做的好不好,更多的还是看你拿什么尺子来衡量。看完Google安全体系,笔者推测大多数人的反应是还是它做的已经远超出一般意义上的防黑客。
硬件安全
对绝大多数公司而言都不会涉及这个章节,因为大多数公司也就顶多白牌服务器,而不是从主板到芯片全都自研。以前觉得华为、Apple这类公司用TC(可信计算)的概念还是用的比较多,但是感觉BAT都不玩这些,到后来分析iOS就一下明白了这个其实是由产品和服务所涉及的技术栈深度决定的,因为华为、Apple这类公司的产品线横跨硬件、OS和上层应用,而BAT等公司造轮子(自研)的范畴大多止于软件,所以很少涉及,甚至在这些公司早期的安全团队里大多数是由Web安全技能的人组成的业务驱动使然。
从描述上看,Google硬件到底层软件栈的安全设计跟iOS基本是一致的,都是基于可信的思路,上一层(软件)验证下一层(硬件/固件)的完整性,并区分唯一标识。用唯一标识+信任链来鉴别是否合法的硬件来源(而不是IDC提供商在机房里偷梁换柱换了台服务器)。
更上层的部分,例如引导程序、内核、启动镜像的完整性都是启动信任链的一般实现,有兴趣的同学可以参考一下iOS的设计与实现。硬件唯一标识会成为后面提到的全局访问控制体系的前提之一。
这里还有一条很重要的信息:Google在自己的生产网络引入了NAC(网络接入控制)机制,这个安全手段本来是为OA办公网络的终端管理场景设计的,目的是区分不信任的终端不能接入(相对可信)的公司网络。这样做可以想象几个场景:假如机房管理员从回收垃圾那儿找到了废弃的服务器,数据也没被删除,即便进入了机房重新插网线也接入不了网络;甚至进一步推测,第三方供应商跑到IDC接上自己的MacBook想用Nmap扫描一把估计也不行。
服务部署
Google在IDC内部服务治理上最大的不同是:不信任IDC内网(注明:尽管思路上可能有相似之处,但与G厂自家在办公网络的安全解决方案BeyondCorp不是一件事)。很多公司的IDC生产服务网络被设计为私有云模式(单租户),在安全上相对的信任IDC内网通信,通过2层/3层隔离或者类似IP白名单的方式来建立IDC内网的弱访问控制体系和信任模型。而Google则是天生设计成多租户(公有云)模式,把原本用于对终端用户(2C端)的认证鉴权机制完全用于IDC内网的服务间通讯,服务间通讯有完整的双向鉴权,是一个强访问控制体系。笔者推测这样做可能是有几方面的原因:
发布安全:Google的所有代码存储于一个集中的代码仓库,同时保留当前和过去的版本,每一个发布的二进制文件都能关联到构建时的源代码版本,这里暗示了Google有做白名单和完整性校验,其实Google和Amazon都有白名单,但这要求基础架构高度统一。发布时需要至少1人review同意(可以理解为在构建/发布系统中的workflow),任何对某个系统的更改需要系统的owner同意。统一的代码仓库,意味着发布的入口是唯一可控的,版本可唯一追溯,同时交叉的code review可以部分矫正一些内部的不良行为:例如开发人员安置后门,恶意彩蛋等。这实际上是Google研发文化的一部分,不一定是出于安全的原因,不过总而言之,安全是这个流程的受益者。以前有boss问过我离职程序员安置后门程序如何检测的问题,海量Web下不具有webshell & sqli的特征,当初想到结对编程,交叉review,觉得有点理论化。Google给出了的解正好,防止钓鱼,同时防止内鬼,不只是简单的防外,而是防内外,覆盖整个价值链。
同一个机器间的服务隔离,主要通过:Linux原生的用户空间隔离(Android的appid的原理),程序语言和kernel的沙箱,以及硬件虚拟化手段。对于涉及用户提交代码或文件的高风险服务例如Google App Engine & Google Compute Engine会使用多层次隔离和纵深防御(如下图所示),另外对于集群管理和KMS等服务会使用专门的物理机。实际上一般情况下密钥管理会使用专有硬件HSM,至于集群管理服务使用专用机器推测一方面可能有一些完整性校验的安全强相关功能,另一方便可能跟集群管理服务本身的可用性要求及failover机制有关。
业内一直有HIDS(Host-based Intrusion Detection System,主机入侵检测)的技术路线之争,大规模容器时代即将到来,技术路线的选择更是迫在眉睫。业界的一种看法是私有云以Linux用户态为主,关注运维需求,软件兼容性和server本身的可用性需求;另一种则是内核态,以纯安全视角的强掌控型实现为主。从Google的实现里似乎也可以得到启示:G厂走的是公有云,天然多租户模式,使用了内核态路线。当然对于效仿者而言,前提是:
Google的内部服务访问控制可配置为特定的服务只允许指定的API或者指定的人才可以访问的模式,实现上通过Machine ID、Service ID、User ID放在一个全局命名空间来做访问控制的基础(注:2C端的访问控制是另外一套体系),支持Group对Group来做多对多的访问控制,同时提供了“two-party control”,即一个变更提交后需要由同group的另外一个管理员approve才能生效,这其实跟分布式事务中二阶段式提交是一个原理,为了保证最终一致性。Google在这些流程的问题上直接套用了工程理论。
Google自身的工程师访问内部API需要通过这种认证鉴权模式,实际上暗含了另外一个课题:数据安全。这部分在业界比较受重视,但需求往往比较抽象,而在实现方式上更是没有统一的标准,Google的这种方式貌似歪打正着,把2C的鉴权模式用在生产网络和后台系统,实际上是对原来运维通道获取数据途径的更进一步收敛,保留强审计和日志,这样一并连数据安全也算解决了一部分,虽然不是全部。
Google的内部服务提供全加密通讯的能力,例如HTTP封装成RPC,而RPC默认提供几种不同的加密强度:低价值数据只做完整性校验,高价值的用更强壮的加密等级,跨IDC传输流量自动加密。
最后举了一个Gmail服务访问联系簿(contacts服务)例子来说明RPC调用的鉴权细粒度,如果ACL设置为允许Gmail访问联系簿这种细粒度是不够的,因为用户A可以越权访问用户B的联系簿,水平权限的这类问题扫描器不容易覆盖,干脆在架构设计上一并解决:RPC请求带用户的ticket走一个内部的SSO(单点认证鉴权)以验证是否可以访问对应的数据,这样就相当于内部的API调用在用户这个细粒度上做了一次全流量的鉴权,从架构上避免了水平权限类的问题。再次回到安全架构的顶层设计,Google的思路就是把所有分散的鉴权点集中起来,在一个高度抽象的层次上做好一件事,最大程度的隔离。
数据安全
Google在数据安全(狭义的,指在IDC侧的部分)上实践的几点:
上面的内容里除了文件加密那块会有一些技术复杂度,其他都是工程化的问题,想象一下随便去机房拔块硬盘偷数据应该是没戏了,但是对于绝大多数公司而言,能在IDC实现全盘加密而且很可能用的不是文件系统加密,这个是一个很大的工程,实现起来比较困难,所以Google能把这些方案都落地,说明领先了很多年。对于很多公司来说,全盘数据加密会导致IOPS大幅下降,依赖KMS服务可用性指标又会下降,数据丢失和恢复又成问题,所以能实施这些方案背后是整体技术的依赖。
Internet通讯安全
暴露在互联网通讯的安全部分总结一下就是几个点:
运维安全Google云平台安全
GCP(Google Cloud Platform)继承前述所有的安全能力。除此之外云平台特有的一些安全属性包括:
如何才能赶上Google
尽管这有可能是一个伪命题,不过从积极的角度不妨来分析一下:
首先这是一个公司规模强相关的命题,如果你的IT整体投入还比较小,或者IDC规模仍然不大的情况,上述安全体系方法论应该是不适用的,因为这是一个依靠大量自研,大型安全团队才能做起来的事情。在规模更小的情况下,很多场景会有TCO更低,更简单的解。但对于从业者来说显然还是大规模下的经验更有利于自身价值提升,所以后面还是要打个小广告。
其次,跟公司所处的阶段强相关,如果公司处于相对早期,或者野蛮生长阶段,目标基本都是为了满足业务需求,风险偏好会更倾向于接受风险,同时公司所处的阶段会侧面反映出工程技术整体的成熟度,安全要做到Google那样是工程技术整体领先的结果,而不是安全单个职能突出的结果。
第三方面跟文化和基因也有很大的关系,基因上看公司整体是由产品、运营还是技术驱动,由技术驱动或者有工程师文化的公司比较容易实现这一点,这点不展开想必读者也能理解。文化方面,长期有耐心的公司文化比经常拥抱变化的公司更容易实现,Google的安全建设体现的都是大工程,也许你会发现,把其中的技术点单拉出来很多都没有遥不可及,甚至在大一点的国内互联网公司单点技术都是ready的,但是要全面落地却要花上几年的时间,所以最大的差距不在于单点技术,而在于G厂已经all done并且很可能已经在新技术和新方向的路上。如同Apple在业务相对早期的时候就把iOS的整套安全体系都落地了,这才是最大的挑战。如果在一个需要短期见效,不行则拥抱变化的环境里,安全团队要推行这种工程化改造需要长期忍受绩效中下,对Leader和成员来说压力都会很大。
第四点是工程技术团队的整体能力,因为技术团队整体很弱单安全团队特别强的存在本身就是一个伪命题。
更多因素全都写在《互联网企业安全高级指南》这本书里了,不再赘述。








欢迎光临 开发者俱乐部 (http://xodn.com/) Powered by Discuz! X3.2