劉志濤,周 淦
(華北計算機(jī)系統(tǒng)工程研究所,北京 100083)
面對著日益嚴(yán)峻的用戶數(shù)據(jù)和應(yīng)用安全問題,企業(yè)如何更加安全[1]有效地保護(hù)用戶隱私數(shù)據(jù)越來越受到重視[2]。在程序應(yīng)用中,當(dāng)訪問用戶敏感信息時,都需要經(jīng)過認(rèn)證和授權(quán),并且對用戶數(shù)據(jù)加密,禁止明文存儲。軟件開發(fā)者需要一個簡單、強(qiáng)大和有效的Web安全框架,從用戶的認(rèn)證、授權(quán)和數(shù)據(jù)加密的各個環(huán)節(jié)保證企業(yè)應(yīng)用的安全性。
一個功能強(qiáng)大并且容易使用的安全框架,需要具有身份認(rèn)證、授權(quán)、數(shù)據(jù)加密和會話管理等功能[3-4]。借助其簡單高效的框架接口,讓軟件開發(fā)者可以輕松地保護(hù)任何應(yīng)用程序。
Web安全架構(gòu)需具有的主要功能組件:
(1)身份認(rèn)證[5]:驗證用戶是不是擁有相應(yīng)的身份,通常是驗證用戶登錄應(yīng)用時提供的用戶名和密碼是否正確。
(2)權(quán)限驗證:當(dāng)用戶的身份認(rèn)證通過后,用戶開始訪問企業(yè)提供的服務(wù)或者資源,只有具有相應(yīng)權(quán)限的用戶才能訪問,即驗證用戶是否具有相應(yīng)資源的讀寫權(quán)限[6]。
(3)會話管理:當(dāng)用戶登錄應(yīng)用后,后臺應(yīng)用需要記錄用戶的訪問時間、訪問記錄和信息修改,方便企業(yè)對用戶提供個性化的服務(wù),提高用戶的滿意度,讓企業(yè)更懂用戶,更深層次挖掘用戶的需求。
(4)數(shù)據(jù)加密[7]:企業(yè)需要對用戶的數(shù)據(jù)加密,避免明文存儲。當(dāng)安全事件發(fā)生后,加密的數(shù)據(jù)無論是對于破壞者還是具有不良企圖的攻擊者,都是一層簡單有效的數(shù)據(jù)保護(hù),可以最大程度地減少企業(yè)的經(jīng)濟(jì)損失。
(5)緩存:企業(yè)應(yīng)用特別是計算密集型的應(yīng)用,如何有效減少響應(yīng)延遲,最大程度地提高應(yīng)用效率,通常的做法會對使用頻率高并且計算成本比較高的數(shù)據(jù)進(jìn)行緩存。
(6)分布式應(yīng)用:企業(yè)應(yīng)用通常面對的用戶數(shù)量比較大,單體應(yīng)用已經(jīng)不能滿足互聯(lián)網(wǎng)企業(yè)的用戶群體,如何更好地利用多核處理器的性能,并且橫向擴(kuò)展更加容易的分布式應(yīng)用成為越來越多的企業(yè)開發(fā)的選擇。
通過了解Web安全應(yīng)用需要的功能,可以知道如何解決軟件開發(fā)者面臨的各種問題。外部框架應(yīng)該提供簡單應(yīng)用的開發(fā)接口,內(nèi)部框架可以使開發(fā)者根據(jù)企業(yè)應(yīng)用的實際需要靈活地定制自己的認(rèn)證策略和授權(quán)策略。
1.2.1安全應(yīng)用的訪問控制概念
從安全應(yīng)用的外部框架,主要涉及用戶、安全管理器和域三個概念。當(dāng)應(yīng)用程序被訪問時,自然而然想到誰是當(dāng)前用戶,當(dāng)前用戶允許執(zhí)行什么操作,因此,應(yīng)用程序在考慮安全性時首先基于當(dāng)前用戶。
安全框架的用戶是一個泛指概念,即“當(dāng)前正在執(zhí)行的用戶”,在安全領(lǐng)域,不單單指人,也可以是第三方的流程、守護(hù)程序或者任何相似概念的訪問者。用戶的獲取需要安全管理器,安全管理器管理所有用戶的安全操作,與應(yīng)用的程序的交互都需要安全管理器管理相應(yīng)的用戶,使得它成為安全框架的核心。通??筛鶕?jù)應(yīng)用程序的實際需要,在數(shù)據(jù)庫、配置文件中配置相應(yīng)的用戶、權(quán)限或者角色,使開發(fā)者清楚地知道誰可以訪問應(yīng)用程序以及執(zhí)行什么樣的操作。
1.2.2安全應(yīng)用的訪問控制架構(gòu)設(shè)計
如圖1所示,從安全應(yīng)用的角度,該架構(gòu)具有很多靈活的組件,相比其他架構(gòu)具有其他安全架構(gòu)不具備的優(yōu)點(diǎn):
圖1 安全應(yīng)用訪問控制框架
(1)架構(gòu)的每個組件均可插拔,除了有默認(rèn)的功能組件外,還可以根據(jù)實際需要開發(fā)定制。
(2)支持一個或多個可插拔的數(shù)據(jù)源的身份驗證,實現(xiàn)多數(shù)據(jù)源的交叉驗證。
(3)每個組件都有緩存支持,在開發(fā)實踐中可以極大地提高應(yīng)用程序的性能。
(4)內(nèi)置的企業(yè)會話管理,無論是Web環(huán)境還是普通應(yīng)用程序中,都可以提供單點(diǎn)登錄功能[8];如果應(yīng)用是集群或者分布式環(huán)境,組件具有橫向良好的擴(kuò)展性。
(5)異構(gòu)的客戶端訪問,常見異構(gòu)的客戶端都可以訪問安全架構(gòu),而且支持不同客戶端的會話共享功能。
(6)功能強(qiáng)大而且需要的配置少,可以保護(hù)任何URL或者資源,自動處理登錄和注銷,執(zhí)行記住我等功能。
(7)簡單的單點(diǎn)登錄(SSO)支持搭載企業(yè)會話管理。如果會話跨多個應(yīng)用程序聯(lián)合,則也可以共享用戶的身份驗證狀態(tài)。登錄到任何應(yīng)用程序,其他人都識別登錄。
日常開發(fā)中,首先需要對用戶進(jìn)行認(rèn)證,驗證用戶是否是其聲明的身份,當(dāng)用戶訪問某項資源時,再查看用戶的角色或者權(quán)限,以決定是否允許訪問。
安全應(yīng)用進(jìn)行用戶身份認(rèn)證,可有效地分解成三個不同的步驟:
(1)收集身份和憑證
應(yīng)用中一般都是使用用戶名和密碼作為身份和憑證對,相應(yīng)地使用用戶密碼令牌來封裝用戶登錄時的用戶名和密碼。安全框架通過認(rèn)證接口,存儲用戶的密鑰對,在系統(tǒng)內(nèi)部實例化認(rèn)證信息實體。也可以個性化定義和創(chuàng)建需要認(rèn)證的令牌。
(2)提交身份和憑證
身份和憑證被收集并裝載到認(rèn)證令牌的實例中后,需要把令牌提交給安全應(yīng)用來進(jìn)行身份認(rèn)證,嘗試獲取到當(dāng)前交互的用戶后,調(diào)用登錄方法發(fā)出登錄認(rèn)證請求,將認(rèn)證信息實體提交給內(nèi)部自定義的認(rèn)證策略,來進(jìn)行下一步的驗證用戶流程。
(3)驗證身份和憑證
應(yīng)用程序會從內(nèi)部定義的安全數(shù)據(jù)域獲取相應(yīng)用戶的認(rèn)證實體,與用戶提交的認(rèn)證令牌進(jìn)行比對,如果驗證通過,意味著當(dāng)前用戶為聲稱的實體本身,并返回內(nèi)部系統(tǒng)的認(rèn)證實例。然而,如果此時沒有系統(tǒng)驗證,根據(jù)驗證策略,可以設(shè)置最大的用戶登錄次數(shù),防止不明用戶的惡意攻擊,造成系統(tǒng)的癱瘓[9]。
在調(diào)用登錄方法發(fā)起認(rèn)證請求后,承載著用戶登錄信息的認(rèn)證令牌實例就會經(jīng)由安全管理器轉(zhuǎn)交給認(rèn)證器。認(rèn)證器會應(yīng)用認(rèn)證策略來完成與單個或多個數(shù)據(jù)域的校對,每個數(shù)據(jù)域都會有自己的認(rèn)證數(shù)據(jù)的方法來對已提交的令牌進(jìn)行身份驗證嘗試??梢詫τ脩舻亩鄠€維度信息進(jìn)行驗證,若大部分的安全域信息驗證通過,就可以認(rèn)為當(dāng)前用戶通過了安全認(rèn)證并返回真,否則系統(tǒng)內(nèi)部會拋出認(rèn)證錯誤信息的異常。如圖2所示。
圖2 訪問控制認(rèn)證流程
如圖3所示,應(yīng)用程序會收集當(dāng)前用戶執(zhí)行操作的權(quán)限標(biāo)識符,通過授權(quán)接口傳遞給系統(tǒng)內(nèi)部,授權(quán)流程會從相應(yīng)的安全數(shù)據(jù)域獲取用戶的權(quán)限信息。授權(quán)策略會對系統(tǒng)內(nèi)部的權(quán)限實體與用戶執(zhí)行操作的權(quán)限實體進(jìn)行驗證。授權(quán)器首先會利用權(quán)限解釋器把字符串轉(zhuǎn)換成相應(yīng)的權(quán)限實例,然后通過數(shù)據(jù)域中的授權(quán)函數(shù)獲取數(shù)據(jù)源中的用戶的角色和權(quán)限,與傳入的角色和權(quán)限進(jìn)行匹配和比較。
圖3 訪問控制授權(quán)流程
數(shù)據(jù)資源常見的操作是創(chuàng)建、讀取、寫入和刪除,在定義資源權(quán)限時,只會對指定資源(文件、客戶記錄等)上的操作設(shè)定訪問權(quán)限。如何細(xì)粒度、多層次地控制用戶對資源的訪問,還缺少一個有效的權(quán)限設(shè)計策略?;谕ㄅ浞麢?quán)限概念來設(shè)計權(quán)限系統(tǒng),可以從資源級別、實例級別和操作級別、指定用戶的權(quán)限訪問標(biāo)識,更好地保護(hù)系統(tǒng)應(yīng)用和數(shù)據(jù)安全。
訪問控制粒度表示所訪問資源的操作的范圍大小,按照訪問層級的不同,訪問控制粒度可以劃分為接入級、目錄級、角色級和屬性級訪問控制安全。
3.1.1接入級訪問控制
接入級訪問控制是網(wǎng)絡(luò)應(yīng)用和網(wǎng)絡(luò)設(shè)備的最前端保護(hù)。在接入級控制哪些用戶可以訪問系統(tǒng)應(yīng)用以及訪問哪些資源,另外,可以控制用戶的訪問時間段和訪問次數(shù),在合法用戶訪問服務(wù)器或者工作站等網(wǎng)絡(luò)設(shè)備時,進(jìn)行相應(yīng)的安全訪問控制,如圖4所示。
圖4 接入級訪問控制流程圖
3.1.2目錄級訪問控制
以目錄為控制粒度單位,控制用戶的權(quán)限訪問。例如,具有某種權(quán)限的用戶才能訪問根目錄,具有某種權(quán)限的用戶才能訪問二級目錄。網(wǎng)絡(luò)資源通常以目錄的形式進(jìn)行組織,方便對網(wǎng)絡(luò)資源的分類,使得可以對不同重要級別的資源分配不同的訪問策略。
3.1.3角色級訪問控制
將用戶進(jìn)行角色分配,同一角色擁有相同的權(quán)限,不同的用戶可以擁有一個或者多個角色。角色是將網(wǎng)絡(luò)資源的權(quán)限控制進(jìn)行分組,可以限制用戶進(jìn)入系統(tǒng)應(yīng)用后資源的訪問控制,防止隨意操作網(wǎng)絡(luò)資源,造成系統(tǒng)重要數(shù)據(jù)的丟失或者破壞。
3.1.4屬性級訪問控制
資源文件的所屬目錄和文件本身都具有訪問控制屬性,比如文件的讀取、寫入和執(zhí)行屬性,以及用戶具有什么操作權(quán)限,用戶相應(yīng)的組具有什么操作權(quán)限和其他人的操作權(quán)限。預(yù)先定義的網(wǎng)絡(luò)資源的訪問控制屬性表,可以說明用戶對于網(wǎng)絡(luò)資源的使用限制。
權(quán)限本質(zhì)上是訪問控制,即控制用戶可以在應(yīng)用程序中訪問的內(nèi)容,例如資源、網(wǎng)頁和文件等。大多數(shù)的用戶可以通過使用角色或者權(quán)限概念來執(zhí)行訪問控制,即用戶是基于分配給他們的角色來被允許執(zhí)行哪些操作?;谕ㄅ浞麢?quán)限設(shè)計方法可以將資源與權(quán)限進(jìn)行抽象并通過組合鏈的方式逐層驗證,使得資源的安全策略非常靈活,甚至支持實例級的訪問控制。
3.2.1通配符權(quán)限的多層次
通配符權(quán)限設(shè)計方法支持權(quán)限設(shè)計的層級化,如何更加細(xì)粒度標(biāo)識用戶對于資源的訪問權(quán)限也是通過層級化來強(qiáng)化的。例如:file:read:file89,權(quán)限的層次是通過冒號分隔符表示的,冒號越多代表著權(quán)限定義的粒度越細(xì)。在上述權(quán)限表示符中,第一部分表示被抽象的資源(文件),第二部分標(biāo)識需要資源進(jìn)行什么操作(讀取),第三部分標(biāo)識資源的具體實例(文件名),因此通過冒號分隔符可以構(gòu)建非常復(fù)雜的資源訪問控制權(quán)限。
如果用戶具有某個資源的多個訪問權(quán)限,那么相同層級的權(quán)限標(biāo)識符之間用逗號分隔。例如,file:read,write,即用戶具有對于這個文件的讀取和寫入權(quán)限。如果需要表示用戶具有對某一類資源的所有權(quán)限,可以使用*來表示。例如:file:*,就是將文件資源的所有的實例與所有操作都賦予用戶。
3.2.2通配符權(quán)限的權(quán)限檢查
基于通配符的權(quán)限設(shè)計具有橫向擴(kuò)展性,使得在系統(tǒng)權(quán)限設(shè)計時,可以在粒度的選擇上賦予用戶較粗的粒度或者較細(xì)的粒度。這使得在Web應(yīng)用中,權(quán)限的授權(quán)邏輯不僅僅是比對權(quán)限標(biāo)識符是否相等,而是通過權(quán)限標(biāo)識符的邏輯關(guān)系進(jìn)行判斷的。比如,如果用戶被賦予file:read:*權(quán)限,當(dāng)前用戶也具有file:read:file1,file:read:file2等資源的訪問權(quán)限,可以很清晰地看出“file:read:*”與“file:read:file1”并不相等,而是通過權(quán)限標(biāo)識符的內(nèi)部邏輯關(guān)系驗證用戶是否具有某一項權(quán)限的操作。
表1 訪問權(quán)限控制對比
通過簡化應(yīng)用程序安全性的兩個方面,即身份認(rèn)證和權(quán)限授權(quán),使得企業(yè)應(yīng)用的安全性更容易理解和實現(xiàn)?;跈?quán)限的通配符的設(shè)計理念,輕松地將資源、操作和資源實例進(jìn)行抽象,可以在應(yīng)用粒度和功能粒度對資源進(jìn)行訪問控制,細(xì)粒度和多層級的權(quán)限訪問使得開發(fā)者更容易表達(dá)對于資源的權(quán)限控制和權(quán)限賦予,通過組合也能表達(dá)更加復(fù)雜的權(quán)限。