行業(yè)動態(tài)

Google基礎(chǔ)設(shè)施安全設(shè)計概述翻譯&導(dǎo)讀

來源:聚銘網(wǎng)絡(luò)    發(fā)布時間:2017-02-25    瀏覽次數(shù):
 

信息來源:FreeBuf

聲明:截至2017年1月,文章符合Google現(xiàn)狀。但Google可能會不斷的改進(jìn)升級安全策略導(dǎo)致實際情況有所出入。

小編導(dǎo)讀:安全團(tuán)隊多數(shù)時候是獨立于業(yè)務(wù)團(tuán)隊的存在,類似于主機(jī)agent、WAF、DDOS等安全產(chǎn)品,都是力求“獨立”成產(chǎn)品的。而Google和大多數(shù)公司不同,他們的安全能力是內(nèi)嵌在基礎(chǔ)設(shè)施里,由基礎(chǔ)設(shè)施透明提供的。安全工程師參與設(shè)計、開發(fā)和實現(xiàn),并檢驗基礎(chǔ)設(shè)施所提供的安全能力。業(yè)內(nèi)曾說,安全的本質(zhì)上是信任問題,你總得信任點什么。而Google用自己的做法告訴大家,它可以不信任到什么程度。

每個公司的基因都有所差異,不見得所有的做法我們都能學(xué)習(xí),但是,知道世界上有這么一家公司,是這么實現(xiàn)的,一定對開拓視野和思路是有所幫助的。

筆者英文并不太優(yōu)秀,但是這次也是一字一句的硬啃下來了,只因為相信,這是一篇值得精讀多遍的真正好文。

CIO級摘要

Google擁有全球規(guī)模的技術(shù)基礎(chǔ)設(shè)施,用于提供信息處理全生命周期的安全能力。包括:安全的發(fā)布、用戶隱私保護(hù)、數(shù)據(jù)安全存儲、服務(wù)之間(內(nèi)部)的安全交互、互聯(lián)網(wǎng)通信安全、運維安全 

Google自身的服務(wù)使用了這些基礎(chǔ)架構(gòu),即包括像Google搜索引擎、Gmail和照片等2C(面向普通用戶)的業(yè)務(wù),也包括G Suite和Google Cloud等2B(面向企業(yè))的業(yè)務(wù) 

這套基礎(chǔ)設(shè)施提供從數(shù)據(jù)中心的物理安全開始,自底向上,逐層涵蓋到硬件、軟件、操作規(guī)范等方面 

Google投入大量的資源保護(hù)這些基礎(chǔ)設(shè)施(包括大量的資金和幾百名工程師,分布Google所有的產(chǎn)品和服務(wù)中),其中不少人是行業(yè)的權(quán)威專家 

小編導(dǎo)讀:這一段其實主要是Google說自己如何厲害,如果你是第一遍看本文的話,可以跳過去,看完了再回過頭來看看總結(jié)比較合適。

概述

本文簡要介紹了Google基礎(chǔ)設(shè)施是如何設(shè)計安全特性的。該基礎(chǔ)設(shè)施的使命就是在Google整個信息處理生命周期中提供安全性,包括安全的發(fā)布服務(wù)、安全存儲用戶隱私數(shù)據(jù)、在Google多個服務(wù)之間安全的交互數(shù)據(jù)、保障用戶和服務(wù)之間的互聯(lián)網(wǎng)流量安全、安全的運維管理操作。

Google使用此基礎(chǔ)設(shè)施構(gòu)建自己的服務(wù),包括搜索、Gmail、照片等(面向普通用戶的)服務(wù),也包括G Suite、Google Cloud Platform等(面向企業(yè))的服務(wù)。

我們將從數(shù)據(jù)中心的物理安全開始,逐層介紹硬件和軟件等底層設(shè)計是如何保障安全的,最后一直到技術(shù)規(guī)范和運維流程,如何保障運維操作等方面的安全。

底層基礎(chǔ)設(shè)施安全

這一節(jié),我們會詳細(xì)的從基礎(chǔ)設(shè)施的最底層開始介紹,從機(jī)房的物理安全,到安全定制加固過的硬件,再到底層的軟件引導(dǎo)棧。

機(jī)房物理安全

Google自己設(shè)計數(shù)據(jù)中心,在數(shù)據(jù)中心里包含了多級的安全保護(hù)措施,并限制了只有非常少的Google員工才有權(quán)限訪問。包括:生物識別、金屬探測、監(jiān)控攝像頭、路障、激光檢測。當(dāng)Google跟第三方數(shù)據(jù)中心合作時, Google要求合作方在原有數(shù)據(jù)中心安全措施的基礎(chǔ)上,必須額外增加完全由Google自主控制的生物識別、攝像頭監(jiān)控和金屬探測等機(jī)制。

小編導(dǎo)讀:

多數(shù)公司還沒有自建數(shù)據(jù)中心的能力,即便能自己建設(shè),也往往無法避免要跟第三方合作。此時,機(jī)房的安全管理水平可能參差不齊。如果機(jī)房管理員監(jiān)守自盜(也可能是被釣魚攻擊、社工,甚至是商業(yè)間諜去應(yīng)聘),走到機(jī)柜面前,插上顯示器鼠標(biāo)鍵盤,或者U盤,甚至拔走一塊硬盤,想想就不寒而栗……Google顯然不能接受這種情況的發(fā)生,所以,他們通過各種安全措施確??梢越佑|自己服務(wù)器的人是可信的。

硬件安全

每個Google的數(shù)據(jù)中心都是由數(shù)千臺接入到本地網(wǎng)絡(luò)的服務(wù)器組成的。所有的服務(wù)器主板、網(wǎng)絡(luò)設(shè)備都由Google自行設(shè)計。Google謹(jǐn)慎的選擇每一個組件的供應(yīng)商,精心挑選組件,并且和供應(yīng)商一起審計、確認(rèn)該組件所提供的安全屬性是符合要求的。Google還自行設(shè)計芯片,包括一個硬件的安全芯片,該芯片被部署在服務(wù)器以及外圍設(shè)備上,用于在硬件層面識別合法的Google自有設(shè)備。

小編導(dǎo)讀:坊間傳言,某大型企業(yè)被國家級對手盯上的時候,他們采購的設(shè)備在物流過程中被掉包了,于是進(jìn)駐機(jī)房后,變成對手的跳板,進(jìn)入內(nèi)網(wǎng)。Google從硬件開始不信任,服務(wù)器、路由器、交換機(jī)統(tǒng)統(tǒng)自己設(shè)計,有自己的加密芯片才是合法的設(shè)備。不合法的設(shè)備可能直接被踢出網(wǎng)絡(luò)。而多數(shù)企業(yè)還苦苦掙扎在自有資產(chǎn)都盤點不清楚,網(wǎng)絡(luò)準(zhǔn)入僅僅在辦公環(huán)境的交換機(jī)上才會開啟NAC。大名鼎鼎的Hacking Team被入侵好像就是從一個嵌入式設(shè)備開始的。Google顯然對此又有所防范了。

引導(dǎo)棧安全加固與機(jī)器身份識別

Google服務(wù)器使用多種技術(shù)來確保運行的軟件引導(dǎo)棧是合法受信的。我們使用加密簽名的方式,對底層組件,諸如BIOS、bootloader、內(nèi)核、操作系統(tǒng)鏡像進(jìn)行簽名。這些簽名在每一次啟動、更新的時候會被校驗。而每一個上述組件都是完全由Google控制的(Google自行構(gòu)建、加固),每一代硬件都會提升和加強(qiáng)安全能力。例如,在不同年代的服務(wù)器設(shè)計中,Google通過一個可以被鎖定的固件芯片(firmware)、微處理器或者上述提到的安全芯片,來確保引導(dǎo)鏈的信任根是安全的。(均由Google自行編碼或者設(shè)計實現(xiàn))

數(shù)據(jù)中心里的每一臺服務(wù)器都有它獨特定制的身份標(biāo)識(與硬件信任根綁定)。這個標(biāo)識在底層的服務(wù)管理API調(diào)用中,會被用作源和目標(biāo)的鑒權(quán)依據(jù)。

Google還實現(xiàn)了全自動化的系統(tǒng),確保每一個服務(wù)器上運行的軟件棧(包括安全補?。┒寄苌壍阶钚?、檢測硬件和軟件的故障、或者在必要的情況下將其從踢出網(wǎng)絡(luò)。

小編導(dǎo)讀:傳說中的Bootkit、Rootkit ,不知道是不是破壞了完整性之后就不能運行呢?其實,因為Google所有的發(fā)布基本上都是通過Borg平臺(一個非常厲害的集群管理服務(wù))。在集中管理的情況下,如果自動加上簽名和認(rèn)證機(jī)制,那么理論上服務(wù)器是可以白名單運行所有的任務(wù)的。黑客getshell之后,下載和安裝一個木馬,不知道跑不跑的起來哦……

服務(wù)發(fā)布安全

這一節(jié),我們從硬件和軟件的基本安全,過渡到描述“服務(wù)”是怎么樣安全發(fā)布的。本文的 “服務(wù)”指的是由開發(fā)者編寫的,運行在我們的基礎(chǔ)設(shè)施上的應(yīng)用程序,例如:Gmail 的SMTP服務(wù)程序、BigTable存儲服務(wù)程序、YouTube視頻轉(zhuǎn)碼程序、或者一個用來運行用戶程序的App Engine沙箱。它們可能會在數(shù)千臺機(jī)器運行相同的的副本。這些服務(wù)都運行在一個叫做Borg的集群調(diào)度系統(tǒng)上(也是Google的基礎(chǔ)設(shè)施之一)。

如上所述,基礎(chǔ)設(shè)施并沒有賦予服務(wù)和服務(wù)之間任何的信任。換句話說,我們的基礎(chǔ)設(shè)施設(shè)計出來就是提供給多租戶模式使用的。

小編導(dǎo)讀:相比多數(shù)企業(yè),內(nèi)網(wǎng)很多API完全沒有鑒權(quán)機(jī)制(頂多IP白名單隔離),一旦黑客拿到shell,這一臺機(jī)器淪陷了不說,跟它在一個內(nèi)網(wǎng)里的所有服務(wù),面臨的威脅才更大。而Google說,抱歉,所有內(nèi)網(wǎng)API我都會在基礎(chǔ)設(shè)施上幫你鑒權(quán)。

服務(wù)標(biāo)識,完整性和隔離

Google內(nèi)部的服務(wù)之間,仍然使用加密認(rèn)證和授權(quán)機(jī)制來保障安全。在管理員和服務(wù)易于理解的前提下,提供了很強(qiáng)的訪問控制能力。

盡管Google也的確在網(wǎng)絡(luò)入口和出口過濾了一些內(nèi)容,避免IP欺騙之類的攻擊。但Google并沒有把網(wǎng)絡(luò)的隔離作為主要的安全手段,這樣的思路讓我們可以最大化的保障網(wǎng)絡(luò)的性能和可靠性。

小編導(dǎo)讀:在公司網(wǎng)絡(luò)規(guī)模不大的時候,隔離的確是一個比較簡單易行的思路。但網(wǎng)絡(luò)規(guī)模大起來,內(nèi)網(wǎng)的隔離和網(wǎng)絡(luò)性能、可用性的矛盾就會激增。Google通過前面描述的RPC鑒權(quán)機(jī)制,不再依賴網(wǎng)絡(luò)隔離,是一個非常值得學(xué)習(xí)的做法。

每一個運行服務(wù)都擁有一個服務(wù)標(biāo)識。向其它服務(wù)發(fā)起RPC調(diào)用或者接收RPC返回信息的時候,需要提供基于這個標(biāo)識的加密憑據(jù)。這些標(biāo)識對于client端來說,可以確保和自己通信的遠(yuǎn)程服務(wù)端是可信的,對于server端而言,則可用來限制僅有受信的client才能發(fā)起請求,或者只能訪問特定的方法。

Google的源代碼都存儲在一個中心倉庫中,確保當(dāng)前和歷史版本的源代碼均可被審計。基礎(chǔ)設(shè)施可以要求代碼必須經(jīng)由特定的代碼審核、簽入、測試,才能被構(gòu)建成二進(jìn)制版本。代碼審核必須由至少1名作者之外的其他工程師執(zhí)行,并且需要系統(tǒng)的負(fù)責(zé)人同意,才能提交修改動作到代碼里。這些要求,限制了內(nèi)部員工或者外部黑客提交惡意代碼的能力,并且也為源代碼的追溯取證提供了必要信息。

小編導(dǎo)讀:聽聞Google的開發(fā)工程師入職之后,需要學(xué)習(xí)很久的編碼規(guī)范。如果考取了公司內(nèi)的Readability認(rèn)證,那么發(fā)布的時候,可以挑選一位工程師,等他看完代碼提交“l(fā)ook good to me”,就可以申請上線了。如果不幸還沒考取到Readability認(rèn)證,那么就需要別的小伙伴審核后,提交“Approve”才能繼續(xù)流程。Approve是需要為代碼開發(fā)者背書的,如果誰總寫出有漏洞的代碼,不知道是不是會比較難找到幫自己背書的小伙伴呢……

在同一臺服務(wù)器上運行多個服務(wù)的時候,我們用了很多隔離和沙箱技術(shù),來保護(hù)它們之間互不干擾。這些技術(shù)包括普通的Linux用戶空間、語言和基于內(nèi)核的沙箱以及硬件的虛擬化。一般而言,對于高風(fēng)險的服務(wù),我們會用更多層的隔離手段(比如轉(zhuǎn)化用戶提交的數(shù)據(jù)需要做復(fù)雜的格式轉(zhuǎn)換的時候,或者在GAE(Google App Engine)、GCE(Google Compute Engine)中運行用戶提交的代碼時)。對于特別敏感的服務(wù),例如集群管理、密鑰管理服務(wù),我們也會專機(jī)專用,作為額外的一層加固手段。

小編導(dǎo)讀:雖然Google對自己的虛擬化、沙箱的隔離比較有信心,但是在高危App和核心敏感服務(wù)上,也是會乖乖的專機(jī)專用哦??v深防御理念發(fā)揮到極致。

內(nèi)部服務(wù)的訪問控制管理

服務(wù)的負(fù)責(zé)人可以使用基礎(chǔ)設(shè)施特別提供的訪問控制管理功能,精確的限制哪些服務(wù)可以和自己的服務(wù)進(jìn)行通信。例如,讓特定的API只能被白名單范圍的服務(wù)訪問,只要配置白名單服務(wù)的標(biāo)識,基礎(chǔ)設(shè)施就會自動實現(xiàn)這些功能。

Google的工程師訪問這些服務(wù),也同樣需要獨立的身份標(biāo)識,做類似的配置,基礎(chǔ)設(shè)施就可以自動實現(xiàn)對特定的人允許或者拒絕訪問的能力。所有這些身份標(biāo)識(機(jī)器、服務(wù)、員工)都在一個全局的命名空間里,由基礎(chǔ)設(shè)施進(jìn)行維護(hù)。本文的后續(xù)部分會進(jìn)一步解釋,普通用戶的憑據(jù)會有單獨的處理方式。

小編導(dǎo)讀:機(jī)器、服務(wù)、員工,都有自己的ID。通過這些ID組成一個一個的user group,然后一個group可以對另一個group進(jìn)行特定的訪問。這里的權(quán)限管理據(jù)說復(fù)雜到Google內(nèi)部員工也會吐槽,但是它們帶來的好處是顯而易見的。

基礎(chǔ)設(shè)施提供了豐富的工作流管理系統(tǒng)來支持這些身份標(biāo)識的管理工作,包括審批鏈、日志、告警等功能。例如,通過本系統(tǒng)可以設(shè)置需要雙人批準(zhǔn)(均為群組管理員)后,方能讓某些身份標(biāo)識訪問特定的群組。本系統(tǒng)可以為基礎(chǔ)設(shè)施上數(shù)以千計規(guī)模的服務(wù)提供安全的訪問控制能力。

為了自動化實現(xiàn)API級別的訪問控制,基礎(chǔ)設(shè)施還允許從數(shù)據(jù)庫里讀取ACL列表、群組信息,以便系統(tǒng)負(fù)責(zé)人在必要的情況下,靈活運用訪問控制能力設(shè)計規(guī)則。

小編導(dǎo)讀:相比之下,多數(shù)企業(yè)的內(nèi)網(wǎng)操作根本無法關(guān)聯(lián)到自然人,機(jī)器和服務(wù)頂多精確到IP,Google的這個設(shè)計簡直是太精妙了。每一個身份請求內(nèi)部服務(wù)(數(shù)據(jù))的時候,都可以被唯一的追溯。

內(nèi)部服務(wù)之間的加密通信

基礎(chǔ)設(shè)施除了提供前面討論的認(rèn)證、授權(quán)能力之外,也在網(wǎng)絡(luò)上提供了隱私加密能力和RPC數(shù)據(jù)的完整性保護(hù)能力。為了提供這些能力給到一些類似于HTTP之類的應(yīng)用,我們會把它們封裝在RPC內(nèi)。從本質(zhì)上來說,RPC這樣的機(jī)制給了應(yīng)用層天然的隔離防御能力,并拋棄了對網(wǎng)絡(luò)信道的安全依賴。內(nèi)部服務(wù)之間的通訊加密,可以在網(wǎng)絡(luò)被中間人劫持,或者網(wǎng)絡(luò)設(shè)備被攻陷的時候,仍然是安全的。

每一個RPC的加密級別是可配置的(例如,對低敏感、低價值的數(shù)據(jù),可以選擇在機(jī)房內(nèi)部通訊的時候,僅僅做完整性的檢查)。為了對抗高級別的攻擊方(比如有能力在公網(wǎng)上監(jiān)聽Google流量和隱私的對手),基礎(chǔ)設(shè)施在所有跨機(jī)房的網(wǎng)絡(luò)流量上,強(qiáng)制加密通訊。這個特性無需任何配置。Google也開始部署硬件加速器,打算讓數(shù)據(jù)中心內(nèi)部的通信也默認(rèn)加密。

小編導(dǎo)讀:跨機(jī)房自動加密,機(jī)房內(nèi)打算全加密,還在實施中。想想我們有多少公司全站HTTPS都沒做到,更別說跨機(jī)房(內(nèi)網(wǎng)專線)的加密了。且不說別的,MySQL、Redis、Memcache之類的內(nèi)網(wǎng)通訊默認(rèn)就是明文的啊。默默的想了一下成本,Google是不是在這方面出過什么事才會這么狠心呢……

用戶數(shù)據(jù)的訪問管理

典型的Google服務(wù)是為終端用戶提供某種功能的。例如,一個終端用戶可能在Gmail里保存郵件。終端用戶在使用Gmail的時候,會跟其它服務(wù)產(chǎn)生交互(比如聯(lián)系人服務(wù)),以便訪問這個用戶的地址簿。

如前所述,我們已經(jīng)知道Contacts(聯(lián)系人)服務(wù),會被配置成僅僅接受Gmail(或者其它指定服務(wù))的RPC請求了。

但是,這仍然是一個非常寬松的權(quán)限管理級別,在此狀態(tài)下,Gmail服務(wù)可以隨時請求任意用戶的全部聯(lián)系人數(shù)據(jù)。

所以,當(dāng)Gmail發(fā)起RPC請求到Contacts(聯(lián)系人),要求查詢某個特定的終端用戶的數(shù)據(jù)時,基礎(chǔ)設(shè)施要求Gmail出示終端用戶權(quán)限票據(jù)(end user permission ticket),作為RPC請求的一部分。該票據(jù)證明了Gmail正在為某個特定的終端用戶提供服務(wù),也確保了Contacts(聯(lián)系人)服務(wù)只會為合法票據(jù)所代表的用戶提供對應(yīng)數(shù)據(jù)的安全能力。

基礎(chǔ)設(shè)施利用票據(jù)(end user permission tickets)提供特定用戶識別服務(wù)。一個終端用戶的登錄被專門的認(rèn)證服務(wù)驗證通過后,會得到一個認(rèn)證憑據(jù)(例如Cookie、OAuth token),保存在客戶端設(shè)備上。該設(shè)備發(fā)起的每一個子請求,都需要攜帶本憑據(jù)。

當(dāng)一個服務(wù)收到用戶的認(rèn)證憑據(jù)時,它會轉(zhuǎn)發(fā)給到專門的認(rèn)證服務(wù)校驗。校驗通過會返回一個短時間內(nèi)有效的“終端用戶權(quán)限票據(jù)”,以便于RPC請求時攜帶。在上文提到的例子中,就是Gmail服務(wù)拿到了這個票據(jù),可以發(fā)給Contacts服務(wù)。此刻起,該票據(jù)就可以被調(diào)用方攜帶在RPC請求里,并且被處理方使用了。

小編導(dǎo)讀:這個理念,相當(dāng)于所有的數(shù)據(jù)請求都必須經(jīng)過一個集中的地方,而每一次請求都要攜帶合法票據(jù),在驗證票據(jù)的時候,可能就把大量潛在的越權(quán)漏洞給堵住了。而由于數(shù)據(jù)都只經(jīng)過同一個地方,那么發(fā)現(xiàn)異常的竊取數(shù)據(jù)、或者封堵打擊,也就變的容易。

數(shù)據(jù)存儲安全

通過上面的討論,我們已經(jīng)描述了Google如何安全的發(fā)布服務(wù)?,F(xiàn)在開始討論我們?nèi)绾卧诨A(chǔ)設(shè)施上實現(xiàn)數(shù)據(jù)存儲的安全。

靜態(tài)加密

Google的基礎(chǔ)設(shè)施提供了多種存儲服務(wù),類似于BigTable和Spanner,以及特定的密鑰管理服務(wù)。多數(shù)Google的應(yīng)用不直接訪問物理存儲,而是通過存儲服務(wù)替代。存儲服務(wù)在實際寫入物理硬盤之前,可以被配置為使用密鑰(從特定的密鑰管理服務(wù)中獲?。┩瓿杉用軘?shù)據(jù)。密鑰管理服務(wù)支持自動輪換,提供精確的審計日志,并且與前面提到的權(quán)限票據(jù)關(guān)聯(lián)到特定的用戶。

實施應(yīng)用層的加密可以讓基礎(chǔ)設(shè)施避免被潛在的底層存儲攻擊,比如說一個惡意的硬盤固件。也就是說,基礎(chǔ)設(shè)施也實現(xiàn)了額外的保護(hù)層。我們在物理硬盤、SSD的整個生命周期都啟用硬件加密。在一塊硬盤被廢棄或者更換前,它會被一個多步驟的流程進(jìn)行清理(包括2條獨立驗證的方法并行)。沒有通過這個擦除程序的磁盤會直接物理銷毀(比如粉碎)。

小編導(dǎo)讀:不寫磁盤IO,調(diào)用遠(yuǎn)程存儲服務(wù)接口。接口封裝成RPC,天然擁有了加密、鑒權(quán)的能力,而一旦檢測到數(shù)據(jù)寫入完成,短期內(nèi)沒什么訪問的動作,存儲服務(wù)就自動開始給加密。看描述Google擔(dān)心硬盤廠商寫入一個惡意的木馬到硬盤固件里,這下好了,都加密了,但更換硬盤的時候依然要安全擦鞋和物理損壞,Google到底都經(jīng)歷過一些什么?

數(shù)據(jù)刪除

在Google,數(shù)據(jù)的刪除通常是打上一個刪除標(biāo)記,表示該數(shù)據(jù)“即將被刪除”,而不是真正的移除數(shù)據(jù)實體。這允許我們有機(jī)會從不小心的刪除誤操作中恢復(fù)數(shù)據(jù),不管用戶發(fā)起的還是由于bug導(dǎo)致的。當(dāng)數(shù)據(jù)被標(biāo)記為“即將被刪除”后,這個數(shù)據(jù)會被按服務(wù)預(yù)先配置的策略進(jìn)行處理。

當(dāng)一個終端用戶刪除了他的帳號實體,基礎(chǔ)設(shè)施會通知服務(wù)處理該請求,找出該帳號關(guān)聯(lián)的相關(guān)數(shù)據(jù)進(jìn)行移除。

小編導(dǎo)讀:忽然想起那個GitLab的誤操作案例……

Internet通信安全

介紹到這一節(jié),我們已經(jīng)描述了Google的服務(wù)在我們的基礎(chǔ)設(shè)施上是如何被加固的。這一節(jié)我們會轉(zhuǎn)過來描述,我們的服務(wù)在Internet上的通訊,是如何加固的。

正如此前所討論的,基礎(chǔ)設(shè)施連接了大量的物理設(shè)備,包括局域網(wǎng)和互聯(lián)網(wǎng),并且服務(wù)之間的通訊并不依賴網(wǎng)絡(luò)本身的安全。但是,Google仍然把基礎(chǔ)設(shè)施的IP地址配置內(nèi)網(wǎng),以便于跟互聯(lián)網(wǎng)隔開。這樣我們可以更容易的實現(xiàn)一些額外的防護(hù),比如規(guī)避拒絕服務(wù)攻擊的威脅。因為我們可以只暴露很少的一部分機(jī)器到外部的互聯(lián)網(wǎng)上。

Google 前端服務(wù)

當(dāng)一個服務(wù)希望把自己提供給Internet訪問時,它得去基礎(chǔ)設(shè)施的GFE(Google Front End)上進(jìn)行注冊。GFE確保所有的終端與自己的連接都正確的使用了TLS連接,用了正確的證書,并且遵循正確的安全策略。GFE還提供了拒絕服務(wù)防御能力(后文會討論)。GFE收到互聯(lián)網(wǎng)的請求后,通過前面介紹過的RPC安全協(xié)議轉(zhuǎn)發(fā)到內(nèi)部。

事實上,所有的內(nèi)部服務(wù)要將自己發(fā)布到外網(wǎng),都會使用GFE做為智能反向代理。GFE提供了公網(wǎng)域名的公網(wǎng)IP,拒絕服務(wù)防御能力,TLS連接。值得一提的是,GFE也是運行在基礎(chǔ)設(shè)施上的,像其它服務(wù)一樣,GFE可以處理海量規(guī)模的請求。

小編導(dǎo)讀:不去代理上注冊,都沒法對外開服務(wù),天然又解決了高危端口對外暴露的問題。別指望掃描Google的SSH端口然后破解密碼了,有的Google工程師寫了幾年代碼壓根沒登錄過服務(wù)器,當(dāng)然,他們的SSH服務(wù)也是經(jīng)過代理中轉(zhuǎn)的,而且是用證書認(rèn)證的,證書時效性很短,頒發(fā)證書還需要雙因子認(rèn)證。

拒絕服務(wù)防御

從規(guī)模和體量上來說,Google比較容易化解拒絕服務(wù)攻擊。我們有多層級聯(lián)的拒絕服務(wù)防御手段,以緩解或者阻止拒絕服務(wù)對GFE后方的服務(wù)的風(fēng)險。

在骨干網(wǎng)傳遞外部請求到數(shù)據(jù)中心時,它會經(jīng)過多層硬件和軟件的負(fù)載均衡。這些負(fù)載均衡設(shè)備會上報入流量的信息給基礎(chǔ)設(shè)施上的DoS處理服務(wù)。當(dāng)DoS處理服務(wù)檢測到攻擊時,它可以要求負(fù)載均衡設(shè)備丟棄或者限制與攻擊相關(guān)的請求。

在下一層,GFE實例也會上報請求的信息給到DoS處理服務(wù),包括一些負(fù)載均衡無法識別的應(yīng)用層的信息。GFE同樣可以接受DoS處理服務(wù)的指令丟棄與攻擊相關(guān)的請求。

小編導(dǎo)讀:一般的DDOS防御方案,是旁路一份流量,檢測到有攻擊了就把流量牽引過來??蒅oogle這個描述是不需要,反正交換機(jī)路由器、服務(wù)都是自己寫的,每一層都上報一些日志,幫助判斷是否有攻擊。而每一個設(shè)備也都可以接收指令清洗、丟棄、限制特定的請求。所以Google說自己的拒絕服務(wù)防御是多層次的,靠負(fù)載均衡就能扛很大的流量。人家代理也很多,打死1個代理節(jié)點,似乎對全局來說完全感知不到,攻擊者也會知難而退吧。

用戶認(rèn)證

討論完了拒絕服務(wù)防御,下一層防御來自我們的中央認(rèn)證服務(wù)。這個服務(wù)對于終端用戶而言,通常展現(xiàn)為登錄頁面。除了詢問簡單的用戶名和密碼,該服務(wù)也會智能的根據(jù)用戶的其它信息(比如是否從一個已知的安全設(shè)備、歷史相似登錄地點),判斷風(fēng)險等級并對應(yīng)的做出風(fēng)險控制的挑戰(zhàn)確認(rèn)。通過鑒定后,認(rèn)證服務(wù)會派發(fā)一個認(rèn)證憑據(jù)(比如cookies、OAuth Token)以便后續(xù)的請求攜帶。

用戶也可以在登錄時選擇類似于OTP或者防釣魚的安全證書服務(wù)做二次驗證。為了把這些安全能力提供給Google以外的公司,我們還跟FIDO(安全密碼聯(lián)盟)共同協(xié)定了U2F(通用二次認(rèn)證)開放標(biāo)準(zhǔn)?,F(xiàn)在這些設(shè)備也可以在市場上買到,并且主流的web站點也跟隨我們實現(xiàn)了對U2F的支持。

運維安全

說到這里,我們已經(jīng)描述了安全是如何被設(shè)計到基礎(chǔ)設(shè)施里的,并且也介紹了一些類似于RPC請求的訪問控制安全機(jī)制。

現(xiàn)在我們來介紹一下我們是如何安全的運營基礎(chǔ)設(shè)施的:怎么安全的寫出基礎(chǔ)設(shè)施軟件,怎么保護(hù)雇員的機(jī)器和認(rèn)證憑據(jù),以及如何從內(nèi)部和外部對抗基礎(chǔ)設(shè)施的威脅。

安全開發(fā)

除了中央源碼控制和雙人review機(jī)制,我們還為一些典型的安全漏洞提供了庫和框架,開發(fā)者直接調(diào)用就可以自動規(guī)避這些典型漏洞。例如,我們提供了防止XSS漏洞的web庫文件和框架。我們也提供了一些自動化的安全漏洞檢測工具,包括fuzzer、靜態(tài)代碼掃描工具和Web漏洞掃描器。

針對不同的風(fēng)險我們有不同的應(yīng)對方式,作為終極大招,我們也使用人工審計來解決快速的風(fēng)險分類,到深度的安全設(shè)計和實現(xiàn)上的安全問題。這些審查是由一個包含了Web安全、加密算法、運維安全等各方面的專家團(tuán)組成的。人工安全檢查出來的結(jié)果,往往被封裝成新的安全庫特性,或者設(shè)計新的fuzzer,以便在未來用于其它產(chǎn)品。

除此之外,我們還運營了一個漏洞獎勵計劃,為任何發(fā)現(xiàn)我們的基礎(chǔ)設(shè)施或者應(yīng)用程序的漏洞報告者提供現(xiàn)金獎勵。我們已經(jīng)在此計劃里支付了數(shù)百萬美金。

Google也投入大量的努力來尋找我們所使用的開源軟件的0day漏洞。例如,OpenSSL的心臟滴血漏洞是由Google發(fā)現(xiàn)并報告的,同時Google也是CVE漏洞最多的提交者,也是為Linux KVM 提交最多安全bug補丁的廠商。

小編導(dǎo)讀:簡單總結(jié)就是,咱用封裝好的庫,框架,寫了代碼就是健壯,還有各種自動化的fuzzer、代碼白盒審計、web黑盒審計工具,實在不行我還有人肉,人肉完了又自動化實現(xiàn)檢查。要這都給漏了我就現(xiàn)金收漏洞,已經(jīng)花了好幾百萬美金了,想想Project Zero這種團(tuán)隊,就感覺挖個Google的漏洞實在是不容易。而這個過程,似乎正是SDL的完美實踐啊。終于知道為什么Google可以為一個XSS漏洞開出那么高的價錢了。

保護(hù)雇員設(shè)備和認(rèn)證憑據(jù)的安全

為了保護(hù)員工設(shè)備和憑據(jù)免受入侵、竊取和其它非法內(nèi)部活動,Google在這方面投入了大量資金,這也是Google確保自身基礎(chǔ)設(shè)施安全運行的重要組成部分。

一直以來,針對Google員工的高端復(fù)雜釣魚攻擊總是持續(xù)不斷,為了對抗這種攻擊,Google強(qiáng)制員工帳號OTP口令認(rèn)證方式更換成了支持 U2F 的安全密鑰(OTP畢竟還是存在被釣魚攻擊的風(fēng)險的)。

Google投入大量的資金來監(jiān)控用于操作基礎(chǔ)設(shè)施的客戶端設(shè)備。確保操作系統(tǒng)更新到了安全的補丁包,限制允許安裝的軟件。我們還掃描辦公設(shè)備中,員工安裝的app程序、下載的文件,瀏覽器的擴(kuò)展和所瀏覽的web頁面內(nèi)容。

Google并不使用信任局域網(wǎng)某個網(wǎng)段的方式來授予訪問權(quán)限。取而代之的是,Google用應(yīng)用級別的訪問管理控制手段,來把內(nèi)部的應(yīng)用開放給合適的用戶,并且僅允許他們從合法受控的設(shè)備,和安全可信的網(wǎng)絡(luò)(和物理位置)。(更詳細(xì)的描述可以閱讀BeyondCorp相關(guān)的文章)

小編導(dǎo)讀:Google說自己的員工長期遭受到高級釣魚的威脅,肯定所言非虛,稍微上點年紀(jì)的安全從業(yè)人員應(yīng)該還記得一個著名的IE漏洞。另外,聽說Google會監(jiān)控開發(fā)機(jī)的鍵盤輸入,如果你不小心在facebook、linkedin上輸入了內(nèi)部的工作密碼,馬上就會收到一封郵件要求改密碼。

內(nèi)部風(fēng)險控制

我們嚴(yán)格限制并嚴(yán)密監(jiān)控那些被賦予了基礎(chǔ)設(shè)施管理員權(quán)限的Google員工。持續(xù)的評估一些特殊任務(wù)所需要的最小權(quán)限,鼓勵自動化的安全可控的方式來完成工作。這些手段包括雙人審批機(jī)制、在debug時使用受限的(脫敏的)API接口。

Google雇員訪問終端用戶的信息會被基礎(chǔ)設(shè)施底層的Hook記錄日志,安全團(tuán)隊據(jù)此監(jiān)控異常數(shù)據(jù),并對可疑的問題展開調(diào)查。

小編導(dǎo)讀:能自動化的就不給你開手工查詢的權(quán)限。實在要debug,還得把數(shù)據(jù)脫敏。歷史上,某些廠商調(diào)試的時候把敏感信息寫在log里,被黑客下載走了,當(dāng)時還覺得debug這種場景很難杜絕,然而Google說,我們可以脫敏的情況下debug啊。

入侵檢測

Google擁有成熟的數(shù)據(jù)處理管道,可以很好的集成每一臺設(shè)備的主機(jī)、網(wǎng)絡(luò)、服務(wù)的檢測日志。內(nèi)置在這些管道上的安全策略會及時的向運維安全人員發(fā)出告警。Google的應(yīng)急響應(yīng)團(tuán)隊實施365天24小時的全天候待命。同時,Google內(nèi)部也經(jīng)常實施紅藍(lán)軍對抗,以不斷的衡量和提高檢測能力。

小編導(dǎo)讀:這個基本上等于沒說,但是由于Google有這么豐富的底層API提供log,所以可以做的入侵策略應(yīng)該非常厲害。真實的紅藍(lán)對抗看來的確是入侵檢測的標(biāo)配。不知道是不是該同情一下在Google內(nèi)部扮演藍(lán)軍的團(tuán)隊,都這么嚴(yán)密,怎么玩呢?

Google云平臺安全

在這一節(jié),我們重點介紹我們的公共云基礎(chǔ)設(shè)施,GCP,是如何從底層基礎(chǔ)設(shè)施繼承安全能力的。以GCE(Google Compute Engine)為例,我們詳細(xì)介紹基礎(chǔ)設(shè)施為它賦予了哪些安全能力。

GCE允許用戶在Google的基礎(chǔ)設(shè)施上運行自己的虛擬機(jī)。它是由多個邏輯組件組成的,尤其是管理所用的控制面板和虛擬機(jī)本身。

其中,管理控制面板會暴露一些外部API接口并對虛擬機(jī)創(chuàng)建遷移等進(jìn)行任務(wù)管理。由于它運行在一些基礎(chǔ)設(shè)施上,所以它自然繼承了基礎(chǔ)設(shè)施的底層安全能力:比如安全的引導(dǎo)棧。不同的服務(wù)會運行在不同的服務(wù)帳號下,所以每一個服務(wù)都只會被賦予它發(fā)起RPC請求時必須的最小化的權(quán)限。正如此前介紹過的,這些服務(wù)都存儲在一個中央的Google源碼倉庫,它們是可審計的,并且二進(jìn)制是被安全的發(fā)布的。

GCE控制面板是通過GFE對外提供API的,所以它又集成了GFE的DDOS防御特性,以及天然繼承了SSL/TLS的加密特性。用戶可以選擇Google云負(fù)載均衡服務(wù)的選項來緩解多種拒絕服務(wù)攻擊。

用戶在登錄GCE控制面板的時候,是通過Google的認(rèn)證服務(wù)校驗的(提供類似于劫持檢測的安全能力),授權(quán)服務(wù)則由中央的IAM服務(wù)實施。

控制面板的流量,包括GFE轉(zhuǎn)發(fā)給其后的服務(wù),和跨機(jī)房之間的所有流量,都由基礎(chǔ)設(shè)施自動實施認(rèn)證和加密。除此之外,也可以配置控制面板的一些特定流量在機(jī)房內(nèi)部也必須加密。

每一個虛擬主機(jī)實例,都會有一個與之關(guān)聯(lián)的虛擬主機(jī)的管理服務(wù)同時運行?;A(chǔ)設(shè)施會給這2個服務(wù)獨立的ID。一個ID是給VMM服務(wù)實例自身調(diào)用,另一個用來代表VM的身份。這使得我們可以區(qū)分那些請求是從可信的VMM來的。

GCE的將數(shù)據(jù)持久化寫入的磁盤會自動調(diào)用一個基礎(chǔ)設(shè)施的中央密鑰管理系統(tǒng),在空閑時自動加密。這些密鑰是自動輪換的,并且支持對密鑰訪問記錄進(jìn)行審計。

如今,用戶可以選擇是否把流量從他們的虛擬主機(jī)發(fā)送到互聯(lián)網(wǎng)上其它的虛擬主機(jī),或者通過加密的方式傳送這些流量。我們已經(jīng)開始推出廣域網(wǎng)之間的VM流量自動加密的機(jī)制。如前所述,基礎(chǔ)設(shè)施在所有廣域網(wǎng)之間的流量傳輸都已經(jīng)是加密過的了。未來,我們也計劃通過硬件加密加速器,把所有在局域網(wǎng)之間的流量也進(jìn)行加密,這一點之前也提過了。

給VM提供隔離能力是在硬件層面的虛擬化技術(shù)實施的,主要使用了開源的KVM。我們未來會自己給KVM做一些定制化加固的實現(xiàn),包括將一些控制代碼和硬件模擬代碼移動到內(nèi)核之外的低權(quán)限進(jìn)程中。我們也已經(jīng)使用包括fuzzing、靜態(tài)代碼掃描和人工代碼審計等方式仔細(xì)的對KVM的核心代碼進(jìn)行了檢測。之前提到了,現(xiàn)在Google是KVM提交漏洞最多的廠商。

最后,我們的運維安全控制是確保上述數(shù)據(jù)遵從安全策略的重要組成部分。做為Google Cloud Platform的一部分,GCE使用的用戶數(shù)據(jù)同樣遵從相同的安全策略,Google不會訪問和使用用戶的數(shù)據(jù),除非必須為用戶提供某種支持。

小編導(dǎo)讀:這個例子,把前面講過的內(nèi)容都串起來了。Google想強(qiáng)調(diào)的是,只要跑在它的基礎(chǔ)設(shè)施上,就自動繼承了很多安全性。而KVM這種開源的東西,Google還投入大量的精力去挖掘漏洞并報告給廠商。所以,Google明顯是在暗示只有自己的云服務(wù)才是安全的……

總結(jié)

我們已經(jīng)介紹了Google基礎(chǔ)設(shè)施是怎么樣被設(shè)計成安全的構(gòu)建、發(fā)布和運維服務(wù)的。包括為用戶提供的服務(wù)(例如Gmail),也包括為企業(yè)提供的服務(wù)。除此之外,我們的Google云也是在同樣的基礎(chǔ)設(shè)施之上完成的。

我們投入重金加固這些基礎(chǔ)設(shè)施。Google擁有數(shù)百名專注于安全和隱私的工程師,遍布在所有Google產(chǎn)品里,包括一些專業(yè)領(lǐng)域里的權(quán)威都在其列。

正如我們看到的,基礎(chǔ)設(shè)施的安全性是從物理組件和數(shù)據(jù)中心開始,到硬件原型,到加固的安全啟動引導(dǎo)鏈,到內(nèi)網(wǎng)服務(wù)交互加固,到靜態(tài)數(shù)據(jù)加密,內(nèi)網(wǎng)服務(wù)之間的安全管理和終端用戶訪問時的安全管理,以及對于人和技術(shù)的流程管理。

小編導(dǎo)讀:Google反復(fù)的強(qiáng)調(diào),是想說黑客試圖攻擊的每一個角落,都有對應(yīng)的安全加固和應(yīng)對。并且這些應(yīng)對的辦法是固化在基礎(chǔ)設(shè)施平臺里,可以服務(wù)于全球規(guī)模級別的數(shù)據(jù)中心和每一個服務(wù)的。很多公司的管理會有長尾,那么Google有沒有呢?可能也會有,但是據(jù)說YouTube收購后,花了幾年時間才融入,此前一直跟Google的服務(wù)完全隔離。

小編后記

Google關(guān)鍵思路總結(jié):

  1. 開發(fā)安全:Code Review、雙人審批、Fuzzer/靜態(tài)代碼掃描/安全框架&庫/Web掃描器/人工代碼審計
  2. 人員安全:U2F取代OTP,監(jiān)控辦公設(shè)備(打補丁、限制裝軟件、監(jiān)控行為)
  3. 風(fēng)控流程:Debug時脫敏、自動化代替人工、最小化權(quán)限、底層Log的風(fēng)控體系
  4. 入侵檢測:紅藍(lán)軍對抗、24*365響應(yīng)
  5. 前端代理:GFE統(tǒng)一支持TLS,須注冊才能對Internet提供服務(wù),可轉(zhuǎn)發(fā)內(nèi)部RPC鑒權(quán)
  6. 拒絕服務(wù):GFE、負(fù)載均衡等設(shè)備上報信息并接收丟棄、限制等清洗指令
  7. 靜態(tài)加密:存儲服務(wù)替代硬盤,底層全盤加密,更換硬盤時安全擦除(雙重保險),物理銷毀
  8. 安全刪除:標(biāo)記后刪除(策略可配置)
  9. 認(rèn)證:U2F(不僅自己用還推廣給行業(yè)里)
  10. 登錄保護(hù):根據(jù)風(fēng)控策略判斷是否需要應(yīng)答挑戰(zhàn)
  11. 用戶數(shù)據(jù):必須攜帶票據(jù)
  12. 內(nèi)部服務(wù)交互:默認(rèn)用RPC鑒權(quán)(ID的信任來自于硬件芯片),加密傳輸
  13. 安全引導(dǎo)鏈:硬件開始的不信任,信任根來自定制的硬件芯片,BIOS、Bootloader、Kernel、OS層層簽名
  14. 定制硬件:服務(wù)器、交換機(jī)、路由器統(tǒng)統(tǒng)自己設(shè)計
  15. 物理安全:不到1%的Google員工必須通過多重檢查才能進(jìn)入機(jī)房,合作機(jī)房也需要Google自行掌控

可能為了鼓勵更多人去用自家的云服務(wù),Google祭出了安全大旗,連續(xù)發(fā)了好幾篇paper??赐曛?,第一時間感覺到它對于甲方安全團(tuán)隊價值巨大,于是趕緊逐字翻譯并梳理了一些值得借鑒的地方。如果大家英文水平好的話,強(qiáng)烈推薦閱讀原文和參考鏈接。我們需要學(xué)習(xí)的地方還很多。理解的不對的地方也請大家指正。

感謝被我騷擾的幾位Google同學(xué)。另外,我們團(tuán)隊長期招人,歡迎大家推薦或者自薦。一起打造一流的安全能力。

 
 

上一篇:2017年02月24日 聚銘安全速遞

下一篇:Linus Torvalds回應(yīng)SHA-1碰撞攻擊 稱不必過于擔(dān)憂