陸阿妮
(南京鐵道職業(yè)技術(shù)學(xué)院,江蘇 南京 210031)
多租戶SaaS架構(gòu)安全風(fēng)險(xiǎn)及對策探析
陸阿妮
(南京鐵道職業(yè)技術(shù)學(xué)院,江蘇 南京 210031)
隨著信息技術(shù)的發(fā)展,傳統(tǒng)的信息系統(tǒng)正逐漸被多租戶的SaaS系統(tǒng)所替代。這種系統(tǒng)能顯著減少企業(yè)的開發(fā)、實(shí)施和維護(hù)成本,也為客戶減少了使用成本,但同時(shí)也面臨著更多的安全問題。本文通過分析多租戶SaaS應(yīng)用系統(tǒng)架構(gòu)的特點(diǎn),詳解了每種架構(gòu)可能面臨的安全風(fēng)險(xiǎn),并給出了安全加固的建議。
多租戶;SaaS;架構(gòu)安全
近年來,云計(jì)算技術(shù)得到了廣泛的運(yùn)用和推廣。SaaS(軟件即服務(wù))是云計(jì)算的部署形式之一,要求開發(fā)商將軟件部署在互聯(lián)網(wǎng)上,用戶通過在互聯(lián)網(wǎng)上注冊、訂閱、定制自己的需求來使用服務(wù)。隨著用戶的增多,開發(fā)企業(yè)必然要考慮如何有效地降低部署和實(shí)施的成本。多租戶應(yīng)用(Multi-Tenancy Application,簡稱MTA)在幫助企業(yè)降低成本方面具有顯著優(yōu)勢,逐漸成為云計(jì)算SaaS的首選架構(gòu)形式。然而,MTA架構(gòu)也存在一定的安全風(fēng)險(xiǎn)。因?yàn)榇罅康淖鈶舳荚谑褂猛粋€應(yīng)用實(shí)例,租戶之間可能會出現(xiàn)數(shù)據(jù)錯亂的情況,比如租戶A訪問到了租戶B的數(shù)據(jù)。另外,傳統(tǒng)的系統(tǒng)如果被攻破,只會丟失一個用戶的信息,而在MTA系統(tǒng)中,攻擊者可能通過攻擊系統(tǒng)獲取大量租戶的信息,從而導(dǎo)致所有用戶的信息丟失,這種后果非常嚴(yán)重。除此之外,多租戶系統(tǒng)還涉及認(rèn)證、授權(quán)、審計(jì)等一系列的安全風(fēng)險(xiǎn)和問題,需要我們關(guān)注。
SaaS是未來企業(yè)大型軟件發(fā)展的趨勢。所謂SaaS指的是Software as a Service,是一種通過Internet提供軟件服務(wù)的形式。使用SaaS提供服務(wù)的軟件,不再需要為每個企業(yè)單獨(dú)部署一套軟件系統(tǒng),或者為每個用戶購買一套硬件、中間件和數(shù)據(jù)庫。它可以通過共享一套計(jì)算資源、存儲資源、數(shù)據(jù)庫資源和中間件資源,為大量的用戶提供服務(wù)。
多租戶是SaaS應(yīng)用發(fā)展的必然方向。所謂多租戶MTA,指的是云SaaS應(yīng)用能夠容納不同的客戶,并通過數(shù)據(jù)庫對用戶提供定制能力,滿足不同客戶的個性化需求。MTA應(yīng)用架構(gòu)的主要特點(diǎn)是多個用戶共享同一個應(yīng)用實(shí)例,而不是采用傳統(tǒng)的為每個使用者部署一套應(yīng)用的做法。通過使用MTA架構(gòu),企業(yè)開發(fā)者只需要同時(shí)維護(hù)一套應(yīng)用服務(wù)的實(shí)例。一個或者少數(shù)幾個數(shù)據(jù)庫實(shí)例,即可高效地服務(wù)成千上萬的用戶。
從用戶的角度看,使用SaaS應(yīng)用時(shí),不需要在購買后聯(lián)系技術(shù)人員安裝,招聘人員維護(hù),只需要購買SaaS應(yīng)用的許可,按照使用的服務(wù)范圍付費(fèi)即可。所以SaaS也能夠顯著減少用戶使用信息系統(tǒng)的成本,提高效率。多租戶的應(yīng)用架構(gòu)給用戶的感覺是獨(dú)占的,為其專門定制的,因?yàn)橛脩艨梢酝ㄟ^Internet很方便地登錄、訪問SaaS應(yīng)用,并且定制其LOGO、流程甚至業(yè)務(wù)。但從開發(fā)企業(yè)的角度看,MTA應(yīng)用實(shí)際是一個共享的架構(gòu),主要是共享了應(yīng)用的服務(wù)層和存儲層。MTA架構(gòu)為開發(fā)商實(shí)施SaaS帶來了極大的便利,只需要開發(fā)和維護(hù)一套應(yīng)用代碼、一套存儲模型即可提供基于Internet的SaaS服務(wù)。
MTA應(yīng)用數(shù)據(jù)庫主要包括兩種類型的數(shù)據(jù):一種是元數(shù)據(jù)META-DATA,即存儲了租戶的配置信息,比如租戶的基本信息、喜好的UI風(fēng)格、工作流程、系統(tǒng)配置等等;另一種是應(yīng)用業(yè)務(wù)數(shù)據(jù),即具體的業(yè)務(wù)流程、業(yè)務(wù)定義數(shù)據(jù)。一般情況下,元數(shù)據(jù)是可以高度定制的,具有高度的靈活性,能夠按照用戶的各種需求通過配置選項(xiàng)達(dá)到要求,而不是重新開發(fā)一套代碼來解決問題。所以說MTA架構(gòu)最重要的就是META-DATA元數(shù)據(jù)存儲的靈活性。
典型的多租戶架構(gòu)分為獨(dú)立數(shù)據(jù)庫、同一數(shù)據(jù)庫不同表以及共享一個數(shù)據(jù)庫一種表結(jié)構(gòu)的不同架構(gòu)模式。獨(dú)立數(shù)據(jù)庫架構(gòu)是指給每個租戶一套獨(dú)立的數(shù)據(jù)庫系統(tǒng);同一數(shù)據(jù)庫不同表架構(gòu)是指所有租戶共享一個數(shù)據(jù)庫實(shí)例,但是用不同的表來存儲不同租戶的信息;共享一個數(shù)據(jù)庫一種表結(jié)構(gòu)的架構(gòu)是指所有租戶共享一個數(shù)據(jù)庫實(shí)例、使用同一張表,僅用字段來區(qū)分租戶的信息。除此之外,還存在混合型的架構(gòu)模式,即有的租戶的數(shù)據(jù)是獨(dú)立數(shù)據(jù)庫存儲,有的租戶數(shù)據(jù)用獨(dú)立的表存儲,而大部分租戶的數(shù)據(jù)是采用字段來區(qū)分的。
3.1 獨(dú)立數(shù)據(jù)庫多租戶架構(gòu)
為每個用戶建立獨(dú)立的數(shù)據(jù)庫,適用于對數(shù)據(jù)隔離性要求非常高的應(yīng)用場景,比如銀行、證券、保險(xiǎn)行業(yè)。由于租戶的數(shù)據(jù)涉及到非常重要的隱私,一旦信息泄露,后果將會非常嚴(yán)重,因此必須采用獨(dú)立的數(shù)據(jù)庫來進(jìn)行保存,才能有效地保證數(shù)據(jù)隔離性。
多租戶應(yīng)用MTA通過獨(dú)立數(shù)據(jù)庫為各個租戶提供應(yīng)用服務(wù),每個租戶的請求處理順序?yàn)椋海?)租戶訪問MTA首頁,通過Internet的應(yīng)用層協(xié)議HTTP協(xié)議進(jìn)行HTML form表單的提交;(2)MTA服務(wù)層通過META-DATA數(shù)據(jù)庫獲取租戶的數(shù)據(jù)庫信息,比如獲取了DB-1為租戶A的數(shù)據(jù)庫名稱;(3)服務(wù)層通過數(shù)據(jù)庫連接池連接DB-1,獲取數(shù)據(jù)庫的連接,然后進(jìn)行查詢Select*from tbl_users where user_name='租戶A'and user_passwd='********'。通過這一查詢過程,能夠校驗(yàn)用戶的密碼,獲取用戶的基本信息。如果校驗(yàn)失敗,則返回登錄頁面,否則登錄成功,繼續(xù)查詢META-DATA數(shù)據(jù)庫,獲取該租戶的應(yīng)用配置信息。
在這個過程中,首先要關(guān)注的安全風(fēng)險(xiǎn)是HTTP會話劫持。所謂會話劫持,就是某個惡意租戶為了獲取其他租戶的信息,劫持了其他租戶當(dāng)前的會話,冒充了該租戶的身份來獲取其信息,進(jìn)而造成了信息泄露。預(yù)防會話劫持的途徑主要有以下幾個方面:(1)HTTP會話盡量選擇較短的有效期;(2)HTTP會話的cookie要求做到安全即http only,防止腳本讀取;(3)服務(wù)器端要校驗(yàn)當(dāng)前請求的用戶信息和會話中信息的一致性。
其次要關(guān)注的是傳輸安全。即多租戶共享的MTA架構(gòu),必然會有成千上萬的租戶同時(shí)訪問系統(tǒng),惡意的租戶可能通過網(wǎng)絡(luò)監(jiān)聽的方式來獲取其他租戶的賬號密碼信息,這必然造成信息泄露。所以實(shí)施MTA架構(gòu),一個很重要的安全點(diǎn)就是采用HTTPS部署,形成加密的通信,避免惡意中間人的嗅探攻擊。
在這種獨(dú)立數(shù)據(jù)庫的方案中,還要防止SQL注入攻擊。有預(yù)謀的SQL注入攻擊,可能在登錄的時(shí)候攜帶惡意構(gòu)造的登錄認(rèn)證字符串,比如or 1=1,從而查詢所有租戶的信息,進(jìn)而盜取其他租戶的隱私。所以,要在MTA服務(wù)器端進(jìn)行SQL注入的過濾,或者采用預(yù)編譯的SQL,通過類型檢查來防止SQL注入。
在認(rèn)證的過程中,還要防止惡意的密碼字典暴力攻擊,即不斷地嘗試密碼,直到找到一個正確的密碼。這需要MTA應(yīng)用在登錄的時(shí)候結(jié)合采用圖片驗(yàn)證碼、短信驗(yàn)證碼、問題驗(yàn)證、一次性口令驗(yàn)證碼等方式來進(jìn)行登錄校驗(yàn),當(dāng)遇到可疑的登錄嘗試、不斷失敗的請求時(shí),要果斷地封堵此請求的再次登錄。
最后,對于所有租戶的登錄、授權(quán)、操作都要有對應(yīng)的審計(jì)記錄。系統(tǒng)安全管理人員可以通過審計(jì)記錄評估系統(tǒng)的安全程度,并有效杜絕網(wǎng)絡(luò)入侵和網(wǎng)絡(luò)欺騙行為。同時(shí),還要確保審計(jì)記錄自身的安全性,防止惡意用戶進(jìn)入系統(tǒng)修改或刪除審計(jì)記錄。
3.2 同一數(shù)據(jù)庫不同表的多租戶架構(gòu)
同一數(shù)據(jù)庫不同表的多租戶架構(gòu)的原理是共享一個數(shù)據(jù)庫實(shí)例,包括META-DATA和其它業(yè)務(wù)相關(guān)的信息,同時(shí)為不同的租戶建立不同的表,比如TBL_TENANCY001_META_DATA,TBL_TENANCY002_BUSINESS_DATA等等。如圖1所示,此MTA架構(gòu)的優(yōu)勢在于僅有一個數(shù)據(jù)庫實(shí)例,便于整體的備份和恢復(fù),維護(hù)成本低。缺點(diǎn)是開發(fā)工作量比傳統(tǒng)的單用戶架構(gòu)要多一些。因?yàn)橐芾聿煌脩舻谋斫Y(jié)構(gòu),而且隨著用戶需求的發(fā)展,不同用戶的表結(jié)構(gòu)可能不同,這會導(dǎo)致代碼的復(fù)雜性增加,增加開發(fā)企業(yè)的維護(hù)成本。
要訪問這一MTA架構(gòu)中的數(shù)據(jù),租戶首先需要訪問MTA的首頁,輸入賬號密碼后,應(yīng)用服務(wù)層通過META-DATA表獲取租戶的基本信息,判斷密碼是否正確。如果正確,則根據(jù)META-DATA反饋的表名稱信息,到具體的表中獲取用戶的具體業(yè)務(wù)信息,從而完整地展現(xiàn)該租戶的所有業(yè)務(wù)。
由于此MTA架構(gòu)在一個數(shù)據(jù)庫實(shí)例中部署,根據(jù)META-DATA中反饋的租戶信息來獲取表名稱,從而訪問表內(nèi)的數(shù)據(jù),所以根據(jù)META-DATA獲取表名稱的這個判斷點(diǎn)的安全性非常重要。惡意租戶可能會通過SQL注入獲取所有的META-DATA中的租戶表名稱,從而獲取其他租戶的具體表,再通過SQL注入修改自己在META-DATA中的表名稱,從而達(dá)到獲取其他用戶業(yè)務(wù)數(shù)據(jù)的目的。所以說,在此種MTA架構(gòu)中的應(yīng)用層,一定要通過過濾的方式防止各種類型的SQL注入,過濾的關(guān)鍵字包括各種SQL關(guān)鍵字(比如“and”、“or”)、單引號等等。
假設(shè)惡意租戶通過攻擊上述防御得到了其他用戶的表名,那么系統(tǒng)還可以通過加密設(shè)置第二道防線。通過采用不同的密碼對各個租戶的表進(jìn)行加密,并且定期變換密鑰。就算惡意租戶修改為其他租戶的表名,他看到的仍然是加密后的數(shù)據(jù),因?yàn)槠洳徽莆掌渌鈶舻慕饷苊艽a,從而無法獲取到有效信息。這樣能夠徹底地保護(hù)租戶的數(shù)據(jù)不被惡意訪問。
此外,由于各個租戶的信息保存在一張META-DATA表格中,如果某個租戶在表格中存儲了一段惡意的JAVASCRIPT腳本,其他租戶如果看到了并點(diǎn)擊了此腳本,那么可能會造成會話劫持或者權(quán)限提升攻擊。防止這種腳本攻擊的方式是在應(yīng)用服務(wù)層做JAVASCRIPT腳本關(guān)鍵字的過濾,主要包括單引號、雙引號、尖括號、SCRIPT關(guān)鍵字等;另外還要在HTTP響應(yīng)返回給租戶的時(shí)候,再次進(jìn)行上述檢查。
3.3 共享一個數(shù)據(jù)庫一種表結(jié)構(gòu)的多租戶架構(gòu)
當(dāng)MTA開發(fā)企業(yè)覺得上述兩種架構(gòu)都太過于復(fù)雜,或者增加了開發(fā)、維護(hù)的成本,那么他們可以選擇另外一種看起來更加簡單的架構(gòu),即共享一個數(shù)據(jù)庫實(shí)例,同時(shí)也只有一種表結(jié)構(gòu)定義的架構(gòu)。該MTA架構(gòu)的優(yōu)點(diǎn)很明顯:簡單易開發(fā),即開發(fā)代碼復(fù)雜度明顯降低,開發(fā)成本也相應(yīng)降低。但這同時(shí)也帶來了安全方面的問題,如不容易隔離,數(shù)據(jù)容易串聯(lián),也不易維護(hù)。因?yàn)榇罅孔鈶舻臄?shù)據(jù)融合在一張表中,牽一發(fā)而動全身,對于數(shù)據(jù)的安全性要求很高。
采用此架構(gòu)后,租戶通過MTA首頁進(jìn)行登錄,應(yīng)用服務(wù)層通過META-DATA表獲取用戶的TENANCY_ID信息。此TENANCY_ID代表該租戶在整個系統(tǒng)中的唯一標(biāo)識,通過此ID,可以在應(yīng)用服務(wù)層查詢業(yè)務(wù)表,獲取業(yè)務(wù)數(shù)據(jù)。
由此可見,此架構(gòu)很明顯的一個安全風(fēng)險(xiǎn)就是SQL注入。如果惡意的租戶想訪問其他租戶的信息,那么只需要知道對方的TENANCY_ID就可以了。這時(shí),我們的MTA架構(gòu)首先要從訪問層進(jìn)行控制,即客戶端要保障COOKIE的安全性,確保COOKIE是SECURE HTTP ONLY的;其次要保證傳輸層的安全性,即采用HTTPS方式傳輸TENANCY_ID。最后就是防止SQL注入的關(guān)鍵字,包括AND、OR、單引號等等,都必須過濾。如果惡意的租戶突破了上述防線,獲取了對方的TENANCY_ID,我們還需要在服務(wù)層的會話管理中檢查對方的身份,是否是真實(shí)租戶的信息。
此種架構(gòu)下,由于所有租戶的信息都存儲在一張表中,僅僅通過TENANCY_ID字段區(qū)分租戶,就不能采用加密的手段來保障數(shù)據(jù)的安全。因?yàn)槿绻槍γ啃凶霾煌荑€的加密,會導(dǎo)致查詢和分析性能的嚴(yán)重下降,從而大大影響整個系統(tǒng)的性能。
多租戶架構(gòu)是SaaS發(fā)展的必然趨勢,它能夠?yàn)殚_發(fā)者減少開發(fā)和維護(hù)的成本,也為使用者減少了使用的成本。但是正因?yàn)槠錅p少了硬件和平臺的投資,也帶來了很多安全的隱患,包括數(shù)據(jù)泄露、篡改、提升權(quán)限等安全風(fēng)險(xiǎn)。要想保障信息系統(tǒng)的安全性,就必須根據(jù)不同架構(gòu)的特點(diǎn),采取相應(yīng)的安全措施,以防后患。
[1]徐子沛.大數(shù)據(jù)[M].廣西:廣西師范大學(xué)出版社.2012.
[2]孔蘭菊,李慶忠,史玉良,等.面向SaaS應(yīng)用基于鍵值對模式的多租戶索引研究[J].計(jì)算機(jī)學(xué)報(bào).2010(12):2239-2247.
[3]張一川,張斌,劉瑩.支持多租約個性化業(yè)務(wù)定制的SaaS業(yè)務(wù)-租約模型[J].東北大學(xué)學(xué)報(bào)(自然科學(xué)版).2012(05):636-640.
Security Risk Analysis and Advice on the Multi-Tenancy SaaS System
Lu Ani
(Nanjing Institute of Railway Technology,Nanjing 210031,Jiangsu)
Traditional information system is being replaced by the SaaS system along with the development of the information technology.This architecture can dramatically decrease the cost of the development,implementation and maintenance of the enterprise.However,the problems come along with it.The security issues are concerned by the users in most cases.This article analyzes the architecture of Multi-Tenancy SaaS information system and gives security enhancement advice by inspecting the security risk of this architecture.
multi-tenancy;SaaS;architecture security
TP393.09
A
1008-6609(2015)11-0060-03
陸阿妮,女,山東昌邑人,碩士,講師,研究方向:管理信息化。