朱智強,林韌昊,胡翠云
(1. 解放軍戰略支援部隊信息工程大學密碼工程學院,河南 鄭州 450001;2. 鄭州信大先進技術研究院,河南 鄭州 450001)
隨著互聯網和計算機技術的不斷發展,產生了一種新的計算模式——云計算,云計算技術通過整合分布式資源,構建出靈活、可擴展的虛擬計算環境[1]。隨著云計算的不斷發展,大量的云用戶將自己的隱私數據保存在云端[2],若云用戶的合法身份被冒充,就會造成隱私數據的泄露,身份認證技術是解決這一問題的可靠技術。目前,云計算已經廣泛應用于政務、金融、郵政、軍事等對安全性需求較高的領域,與其相關的云基礎設施和云平臺均應按照信息系統安全要求的最高等級進行建設。應用最為廣泛的基于用戶名/口令的認證方式存在諸多安全性問題,不能適用于這些應用場景。數字證書是一個經證書授權中心(CA, certificate authority)簽名的用來標識通信雙方身份信息的一串數字,主要包含了公鑰及公鑰擁有者的信息[3],具有唯一性和不可否認性。數字證書的主要作用是確保互聯網上通信雙方進行安全且相互信任的通信。
openstack是一個由美國國家航空航天局和Rackspace合作研制的開源項目,是一種旨在提供基礎設施即服務(IaaS,infrastructure as a service)的虛擬化管理平臺,能夠提供可靠的云部署方案[4]。目前,許多國內外的云行業領軍企業都參與到了 openstack的項目研發中,并將其作為云計算架構的基石,這標志著 openstack已經是事實上的開源云平臺的行業標準。
openstack云平臺由多種組件共同組成,各組件分工明確、相互獨立,構成云平臺的實質就是組合這些組件[5]。openstack采用無共享、基于消息的架構,既可以將每個組件分別部署在單獨服務器上,也可以部署在同一臺服務器上。各組件統一采用 Rest-full API(application programming interface)接口規范,具有模塊松耦合、組件配置靈活、易于二次開發等優點。
openstack的安全問題一直是國內外各大企業、學者關注的焦點。官方成立了 openstack安全項目組并編寫了《openstack安全指南》,致力于解決openstack中存在的安全問題,并通過安全漏洞管理團隊及時對漏洞進行修復。他們于 2015年創建了Security項目,提供安全工具解決openstack中存在的安全問題,并在2018年2月28日發布的Queens版本中對Security項目進行更新,通過Anchor提供輕量級PKI(public key infrastructure)服務,自動驗證和簽發短期證書。通過該項目中Bandit等工具檢測代碼、API、各組件中存在的安全問題和漏洞。
openstack相較于其他虛擬化管理軟件,采用了靈活的低耦合分布式 SOA(service-oriented architecture)架構模式,所以需要一個類似服務總線的模塊對 openstack中的各組件進行統一的授權認證及服務規則管理。
openstack在essex版本增加了keystone這一核心組件[6]并使其作為串聯 openstack中各組件的認證授權中心,keystone組件通過其特有的插件化結構為openstack云平臺用戶提供身份管理(account)、訪問控制(authentication)以及統一授權(authorization)服務。
keystone組件作為openstack云平臺的身份認證核心[7],可以與其他后端授權系統進行集成,其身份認證機制的特點主要通過令牌(token)來實現,主要包括了 UUID token、PKI token以及 fernet token。云用戶在與openstack其他組件交互之前,需要從 keystone獲得令牌,然后將該令牌用于與openstack云平臺中各組件交互時的身份驗證,其認證工作具體流程如圖1所示,其中項目(project)為keystone中的基本概念,表示各個服務中可以訪問的資源集合。

圖1 keystone組件工作流程
openstack云平臺基于keystone組件的認證機制存在以下問題。
1)基于PKI token的認證方式可以在一定程度上保證云用戶在訪問其他應用組件時的安全,但是用戶在登錄云平臺時目前僅支持基于用戶名/口令認證方式。這種認證方式存在口令泄露、易遭受口令猜測攻擊、字典攻擊等安全隱患。
2)認證過程中,用戶名/口令都是以明文形式發送,默認使用HTTP協議進行認證[8],攻擊者可能通過協議分析器竊聽用戶的認證信息或對認證請求數據分組進行截取,進而發動重放攻擊。
3)即使將keystone組件配置成支持HTTPS加密訪問環境,攻擊者仍能夠利用 man-in-the-middle機制截取網絡通信數據并進行數據篡改進而發動中間人攻擊。
4)沒有提供重復登錄失敗后限制登錄的方法[9],這可能會遭受暴力攻擊以及DoS(denial of service)攻擊。
5)文獻[10]通過定量安全評價對 openstack安全性進行分析,根據漏洞數據庫(NVD,national vulnerability database)的經驗數據得出keystone是最脆弱的組件,存在大量漏洞。攻擊者可能通過這些漏洞對用戶的隱私數據進行竊取。
6)keystone組件是部署 openstack云平臺的唯一強制服務[11],這使得keystone成為攻擊者的首要攻擊目標。集成第三方身份驗證和授權協議是一種更安全的部署方法。
綜上所述,基于keystone組件的認證方式存在諸多安全問題,不能有效抵抗多種網絡攻擊,不能適用于政務、軍事等對安全性需求較高的應用場景,因此需要一種高安全性的認證方式來保護openstack云用戶的隱私數據安全。
為了在云中提供強大的數據保護,加密技術通常用于保護傳輸中的數據以及rest中的數據。密鑰管理是所有使用加密的云組件面臨的巨大挑戰。
Barbican是為openstack云平臺提供key的管理存儲服務的組件[12],通過rest API來提供和管理機密信息并進行安全存儲。Barbican組件通過加密密鑰對用戶機密信息進行加密,成為Barbican的秘密(secret):包括密碼、公私鑰、加密密鑰,并存儲到Barbican的后端數據庫中。Barbican組件提供了外部密鑰管理設備的接口,具有良好的擴展性,可以快速存儲和檢索傳遞給openstack組件的密鑰[13],能夠提供靈活、可靠的密鑰周期管理服務。
Barbican組件的核心是數據的加解密以及秘密的存儲,在組件內部生成一個密鑰,存儲在用于加密處理的硬件安全模塊中(HSM, hardware security module),在秘密存儲到數據庫前對其進行加密。讀取數據時,先從數據庫讀取密文,再通過密鑰解密后獲取明文,這可以有效防止數據庫中的數據泄露。
針對openstack云平臺基于keystone的認證機制在政務、軍事等領域中安全性不足的問題,本文設計并實現了基于數字證書的 openstack身份認證系統來保護openstack云平臺用戶隱私數據的安全。針對不同云用戶對云平臺身份認證安全等級的不同需求,結合openstack基于keystone組件的認證特點并通過對keystone組件進行擴展,從而支持云計算環境下基于數字證書的認證方式。
認證系統主要包括云密碼管理子系統和云身份認證子系統兩部分。云密碼管理子系統主要為云平臺用戶提供證書的管理、簽發服務,由云平臺證書分發服務器、證書密鑰分發插件以及用戶證書下載插件組成。云身份認證子系統是證書認證服務的提供者,由密碼認證服務器、云認證客戶端插件和認證令牌處理插件組成。認證系統組成如圖2所示。

圖2 認證系統組成
本系統將數字證書藏于UKey(USB Key)中,利用UKey提供的安全機制使其作為用戶私鑰與證書的安全載體[13]。在部署方面增加密碼認證服務器和證書分發服務器,并對傳統的證書認證及認證網關所采用的 socket通信接口進行改造,統一采用Rest-full API進行服務調用,提高標準化及快速擴展能力。使用Barbican組件作為密鑰容器代替 keystone使用的文件方式密鑰存儲,統一將客戶端與服務端的公私鑰對作為secret經Barbican加密密鑰加密后進行統一管理存儲,使用密碼認證服務器內置密碼卡代替HSM存儲Barbican加密密鑰。考慮到系統性能要求,將密碼認證服務器部署成認證服務器集群,統一為云平臺中各組件提供證書或數字簽名的驗證服務。在數據庫模塊中增加新的用戶證書信息表,用來存儲keystone用戶與證書之間的關系。認證系統總體架構如圖3所示。
認證系統主要完成云平臺用戶的證書管理、簽發以及身份認證工作。
1)云平臺用戶的證書管理、簽發
在keystone后端部署云平臺證書分發服務器并與keystone組件結合,同時另一端與公鑰密碼基礎設施連接,提供用戶和設備證書管理服務。管理員根據需要構建用戶證書管理請求連接到云平臺證書簽發服務器,獲得證書密碼管理服務權限,并通過證書密鑰分發插件向用戶直接頒發數字證書,從而實現云平臺用戶證書的在線簽發、更新與撤銷。
2)云平臺用戶身份認證
在keystone后端部署密碼認證服務器,主要處理云用戶基于UKey數字證書的身份認證和令牌簽發工作,通過內置密碼卡來提供密碼技術支持,與keystone組件協同完成云平臺證書用戶的身份認證。通過認證令牌處理插件與keystone組件結合,使keystone能夠接受新的認證令牌,解析協議數據,并發送至密碼認證服務器進行驗證,而后從本地身份管理模塊中獲取用戶對應的證書信息,查看該用戶的合法性,從而實現基于證書密碼的全局身份認證。
本文通過一種基于數字證書的 openstack認證協議保障云用戶身份認證的安全。
表1給出協議描述相關的符號記法。協議涉及五方參與者:客戶端 C、密碼認證服務器 AS(authentication server)、管理員終端 MT(management terminal)、keystone服務器KS(key stone server)、證書分發服務器CS(certificate authorization server),參與者能夠通過密鑰管理組件Barbican獲得對方公鑰UK(public key)。協議分為云用戶身份標識階段與云用戶身份鑒別階段。
由于對稱密鑰加密具有實時性且加密效率高等優點,因此統一使用對稱密鑰SK(symmetric key)對數據進行加密傳輸,同時考慮到密鑰安全性,利用非對稱加密公鑰UK將對稱密鑰封裝到數字信封中發送至服務端,服務端利用私鑰RK(private key)對其進行解密后提取SK。

圖3 認證系統總體架構

表1 認證協議符號記法
1)管理員通過管理員系統發出新建用戶指令,調用 UKey設備產生一個經 MD5(message-digest algorithm 5)Hash算法加密后的隨機數,通過云密碼管理子系統向CS提交證書簽發請求及隨機數,CS端通過對校驗隨機數有效性,返回 verify request。在握手過程中使用文獻[14]所提出的 cookie的交換和驗證來抵御DoS攻擊。

2)通過本地 UKey設備產生臨時公私鑰對UKUKey和RKUKey,并將用戶信息提交至keystone端。

3)keystone在完成正常用戶創建過程后,向云密碼管理子系統提交證書申請。云密碼管理子系統收到請求后,向CS提交證書簽發請求。

4)申請成功后,CS對用戶信息、公鑰進行簽名,獲得數字證書 CerUKey與被加密私鑰RKE,返回至KS。

5)KS向服務后臺 dashboard返回證書和加密私鑰,并將證書與私鑰寫入用戶UKey。

6)云用戶身份標識流程如圖4所示。

圖4 云用戶身份標識流程
1)客戶端與認證服務端通過 Rest-full API進行握手并發送HTTP請求進行連接。傳入PIN(personal identification number)碼激活認證客戶端插件。調用本地 UKey提取數字證書Cer,攜帶Cer和一份簽名消息向密碼認證服務器 AS發送登錄請求,驗證成功后返回認證服務器令牌,其中簽名消息中包含一個時間戳T0和隨機產生的random nonce。采用成熟的對稱加密算法(AES, advanced encryption standard)對傳輸信息進行加密/解密。

2)將客戶端與 keystone服務端擴展為雙向認證,C發送認證服務請求,KS收到請求之后將自己的證書及相關信息發送至 C。客戶端驗證keystone服務端證書的有效性,驗證成功后攜帶ID、Dm、Tauth通過 dashboard提交至KS身份鑒別模塊。

3)KS通過身份鑒別模塊將認證令牌提交至認證服務器進行認證,成功后獲取用戶及證書信息。同時將安全域名、用戶名、轉化為本地userID提交至本地身份管理模塊。

4)將獲取的證書信息同身份認證子系統返回的用戶證書信息進行比較映射;成功后通過KS向客戶端返回keystone令牌。

5)當用戶訪問其他組件或應用服務時,攜帶keystone token和一份簽名消息SC向keystone發送認證請求,認證成功后處理請求并返回認證結果。

云用戶身份鑒別流程如圖5所示。

圖5 云用戶身份鑒別流程
針對不同云用戶的需求,在保留原有認證方式的基礎上,為高安全需求的用戶提供基于數字證書的認證方式。
系統主要功能是為管理員用戶及普通用戶提供身份的標識和鑒別服務。系統工作流程如圖6所示。在系統安裝時至少需要設置一名管理員用戶并綁定一個UKey。管理員使用UKey及PIN碼通過圖7所示云用戶登錄界面發送認證請求,通過密碼認證服務器及keystone組件按照本文所設計的系統認證流程進行認證,成功后返回認證結果并跳轉至圖8所示openstack管理員系統界面。通過管理員系統中的添加用戶按鈕跳轉至圖9所示云用戶創建界面,根據不同用戶對安全等級的需求來填寫用戶信息和證書序列號,對于安全等級需求較高的用戶需向證書分發服務器提交證書簽發請求,通過證書分發及下載插件將數字證書寫入UKey設備并頒發給普通云用戶。云用戶使用UKey及PIN碼通過登錄界面發送認證登錄請求,成功后即可使用openstack云平臺中的各項服務。

圖6 系統工作流程

圖7 云用戶登錄界面
認證系統主要分為云用戶的標識和鑒別這兩部分。在云用戶身份標識部分,通過與云平臺證書密鑰分發插件進行集成,通過Rest-full API與云平臺證書分發服務器進行握手并建立連接,從而支持證書的簽發下載。對數據庫表結構進行修改,增加PKI證書屬性。在openstack_auth組件代碼中對view.py文件中的 login函數進行修改,將不同的 URL請求將轉至UKey認證的form頁面。界面部分在openstack原有的用戶標識頁面的基礎上增加了是否使用 PKI證書的選項以及對應的證書序列號輸入框。

圖8 openstack管理員系統界面

圖9 云用戶創建界面
在云用戶身份鑒別部分,通過與云認證客戶端插件進行集成,負責讀取云用戶UKey設備中的證書。對keystone組件進行擴展,增加新的PKI認證方式及該認證方式所需要解析的數據格式和屬性。在 openstack_auth/plugin目錄下新建usbkeytoken.py文件,定義一個新的認證插件,支持UKey token的認證方式,在identities/v3/目錄下實現封裝這種認證方式所需要傳遞的參數和協議,并支持對這種協議的引用。界面部分將云用戶口令輸入框替換為UKey設備口令輸入框,為云用戶提供基于數字證書的身份鑒別服務。
在系統應用方面,本文基于 openstack云平臺搭建了密碼云(cryptographic cloud)系統。密碼云系統是對分布式密碼資源進行整合,并通過虛擬化技術生成密碼資源池,構建出具有較高動態擴展性和靈活性的虛擬計算平臺,按需向用戶提供密碼服務,解決了傳統密碼技術受限于固定的載體和密碼資源不可擴展等問題。密碼云系統對身份認證技術有著極高的安全性需求,若攻擊者成功獲得系統的授權,可能會對密碼信息資源進行竊取和篡改。目前本文系統已全面應用于基于密碼云服務系統的應用場景,管理員使用UKey設備通過本文所設計的認證協議登錄基于 openstack的密碼云系統來對密碼虛機進行統一管理,提高了云用戶在登錄云平臺系統時的安全性。
政務云(government cloud)系統指通過云計算技術為政府部分行業提供基礎設施、應用系統及信息安全等綜合服務的云計算平臺。但是涉及政府機密數據信息的泄露是具有破壞性的。在2017年國家電子政務外網管理中心電子政務云集成與應用國家工程實驗室聯合發布的《政務云安全要求》(GW0013-2017)中明確指出,安全接入平臺是政務用戶通過互聯網或移動專線網絡訪問政務云的部門業務和公共區業務的唯一接入通道,接入平臺應具備數字認證、授權管理等功能。本文通過數字證書來實現系統的身份認證和訪問控制,符合政務云對安全性方面的要求,可以很好地適用于政務云系統。
在協議安全性方面,文獻[10]在openstack原有認證協議的基礎上提出了一種基于安全度量的方法對 openstack認證系統進行定量化安全評估,對keystone組件中存在的漏洞進行分析與修補。文獻[16]提出了一種基于改進OpenID框架的openstack認證協議。文獻[16]提出了一種基于keystone的安全認證協議,通過加密技術來提高云平臺身份認證的安全性。本文從加密技術、密鑰管理、協議效率以及 openstack現階段易遭受的主要網絡攻擊抗性等角度將本文協議與openstack原有的基于keystone令牌的認證協議及文獻[10]、文獻[15-16]協議進行比較。對比分析結果如表2所示。

表2 協議對比分析結果
在加密技術方面,本文與文獻[16]協議采用對稱加密和非對稱加密相結合的加密技術,相較于其他認證協議,具有更高的數據機密性。基于 PKI token的認證方式雖然可以通過非對稱加密技術拓展為 HTTPS加密認證環境,但是在后續令牌的交互過程數據仍以明文傳輸,不能保證整個認證過程的數據安全。文獻[15]協議通過MD5算法對云用戶在登錄時填寫的認證碼進行加密,但是無法保證數據傳輸過程中的安全。在認證因素方面,本文所設計的認證協議是雙因素認證協議,相較于其他單因素認證協議,攻擊者必須獲得全部認證因素才能冒充合法用戶。在密鑰管理方面,本文方案相較于其他對比方案采用了Barbican組件提供的密鑰管理和存儲服務,通過密碼認證服務器的內置密碼卡充當硬件安全模塊來存儲Barbican密鑰,能夠有效防止后端數據庫發生密鑰泄露。另外,本文方案通過密碼認證服務器與keystone組件協同完成認證服務,攻擊者難以僅通過對keystone組件的漏洞進行攻擊來竊取用戶數據。
本文主要針對 openstack云平臺現階段易遭受的主要網絡攻擊進行分析。在抵抗重放攻擊方面,本文方案通過客戶端向服務端發送服務請求時攜帶的簽名消息中包含一個時間戳T0和一個隨機數NR,并通過Hash算法簽名保證其完整性。當攻擊者重放認證請求時,認證服務器端通過驗證隨機數以及對比時間戳判斷并有效抵抗重放攻擊。文獻[16]方案通過添加時間戳在一定程度上也能夠抵抗重放攻擊,而其他認證協議中沒有抵抗重放攻擊的有效手段。在抵抗中間人攻擊方面,本文協議與文獻[16]在認證協議中采用了雙向認證機制,客戶端需驗證服務端證書保證其身份的合法性,在一定程度上可以抵御中間人攻擊。本文方案相較于其他對比方案提供了重復登錄失敗后限制登錄的方法。若攻擊者取得 UKey,但是 PIN碼錯誤次數超過規定限制,UKey將自動死鎖。這種機制可以很好地抵抗UKey丟失攻擊、暴力攻擊、字典攻擊及用戶身份鑒別階段的 DoS攻擊,而cookie的交換和驗證機制能夠抵抗用戶標識階段可能遭受的DoS攻擊。
對比結果顯示,本文所提出的認證協議雖然在工作效率方面有所犧牲,且在一定程度上會增加認證組件的負載,但具有更高的安全性,更加完善的密鑰管理方式,并且能夠有效抵抗 openstack云平臺現階段易遭受的網絡攻擊。在政務、軍事等應用場景中,高安全性往往是第一考慮要素,所以本文方案對于安全等級需求較高的應用場景具有重要意義。
本文重點對 openstack云平臺中基于 keystone的身份認證機制進行了研究,分析了基于keystone組件的認證方式在安全性上的不足,提出了一種基于數字證書的身份認證協議并實現了相應的身份認證系統。根據云用戶對安全等級的不同需求,提供一種具有更高安全性的身份認證方式。分析表明,基于數字證書認證方式能夠更有效地防范多種可能遭受的攻擊行為,從而更好地保證云平臺用戶隱私數據的安全。下一步工作是對系統性能進行評估并通過適當的負載均衡策略使認證服務器集群負載分布更加均衡,從而降低認證服務器負載量,提高整個系統的工作效率。