陸阿妮
(南京鐵道職業技術學院,江蘇 南京 210031)
多租戶SaaS架構安全風險及對策探析
陸阿妮
(南京鐵道職業技術學院,江蘇 南京 210031)
隨著信息技術的發展,傳統的信息系統正逐漸被多租戶的SaaS系統所替代。這種系統能顯著減少企業的開發、實施和維護成本,也為客戶減少了使用成本,但同時也面臨著更多的安全問題。本文通過分析多租戶SaaS應用系統架構的特點,詳解了每種架構可能面臨的安全風險,并給出了安全加固的建議。
多租戶;SaaS;架構安全
近年來,云計算技術得到了廣泛的運用和推廣。SaaS(軟件即服務)是云計算的部署形式之一,要求開發商將軟件部署在互聯網上,用戶通過在互聯網上注冊、訂閱、定制自己的需求來使用服務。隨著用戶的增多,開發企業必然要考慮如何有效地降低部署和實施的成本。多租戶應用(Multi-Tenancy Application,簡稱MTA)在幫助企業降低成本方面具有顯著優勢,逐漸成為云計算SaaS的首選架構形式。然而,MTA架構也存在一定的安全風險。因為大量的租戶都在使用同一個應用實例,租戶之間可能會出現數據錯亂的情況,比如租戶A訪問到了租戶B的數據。另外,傳統的系統如果被攻破,只會丟失一個用戶的信息,而在MTA系統中,攻擊者可能通過攻擊系統獲取大量租戶的信息,從而導致所有用戶的信息丟失,這種后果非常嚴重。除此之外,多租戶系統還涉及認證、授權、審計等一系列的安全風險和問題,需要我們關注。
SaaS是未來企業大型軟件發展的趨勢。所謂SaaS指的是Software as a Service,是一種通過Internet提供軟件服務的形式。使用SaaS提供服務的軟件,不再需要為每個企業單獨部署一套軟件系統,或者為每個用戶購買一套硬件、中間件和數據庫。它可以通過共享一套計算資源、存儲資源、數據庫資源和中間件資源,為大量的用戶提供服務。
多租戶是SaaS應用發展的必然方向。所謂多租戶MTA,指的是云SaaS應用能夠容納不同的客戶,并通過數據庫對用戶提供定制能力,滿足不同客戶的個性化需求。MTA應用架構的主要特點是多個用戶共享同一個應用實例,而不是采用傳統的為每個使用者部署一套應用的做法。通過使用MTA架構,企業開發者只需要同時維護一套應用服務的實例。一個或者少數幾個數據庫實例,即可高效地服務成千上萬的用戶。
從用戶的角度看,使用SaaS應用時,不需要在購買后聯系技術人員安裝,招聘人員維護,只需要購買SaaS應用的許可,按照使用的服務范圍付費即可。所以SaaS也能夠顯著減少用戶使用信息系統的成本,提高效率。多租戶的應用架構給用戶的感覺是獨占的,為其專門定制的,因為用戶可以通過Internet很方便地登錄、訪問SaaS應用,并且定制其LOGO、流程甚至業務。但從開發企業的角度看,MTA應用實際是一個共享的架構,主要是共享了應用的服務層和存儲層。MTA架構為開發商實施SaaS帶來了極大的便利,只需要開發和維護一套應用代碼、一套存儲模型即可提供基于Internet的SaaS服務。
MTA應用數據庫主要包括兩種類型的數據:一種是元數據META-DATA,即存儲了租戶的配置信息,比如租戶的基本信息、喜好的UI風格、工作流程、系統配置等等;另一種是應用業務數據,即具體的業務流程、業務定義數據。一般情況下,元數據是可以高度定制的,具有高度的靈活性,能夠按照用戶的各種需求通過配置選項達到要求,而不是重新開發一套代碼來解決問題。所以說MTA架構最重要的就是META-DATA元數據存儲的靈活性。
典型的多租戶架構分為獨立數據庫、同一數據庫不同表以及共享一個數據庫一種表結構的不同架構模式。獨立數據庫架構是指給每個租戶一套獨立的數據庫系統;同一數據庫不同表架構是指所有租戶共享一個數據庫實例,但是用不同的表來存儲不同租戶的信息;共享一個數據庫一種表結構的架構是指所有租戶共享一個數據庫實例、使用同一張表,僅用字段來區分租戶的信息。除此之外,還存在混合型的架構模式,即有的租戶的數據是獨立數據庫存儲,有的租戶數據用獨立的表存儲,而大部分租戶的數據是采用字段來區分的。
3.1 獨立數據庫多租戶架構
為每個用戶建立獨立的數據庫,適用于對數據隔離性要求非常高的應用場景,比如銀行、證券、保險行業。由于租戶的數據涉及到非常重要的隱私,一旦信息泄露,后果將會非常嚴重,因此必須采用獨立的數據庫來進行保存,才能有效地保證數據隔離性。
多租戶應用MTA通過獨立數據庫為各個租戶提供應用服務,每個租戶的請求處理順序為:(1)租戶訪問MTA首頁,通過Internet的應用層協議HTTP協議進行HTML form表單的提交;(2)MTA服務層通過META-DATA數據庫獲取租戶的數據庫信息,比如獲取了DB-1為租戶A的數據庫名稱;(3)服務層通過數據庫連接池連接DB-1,獲取數據庫的連接,然后進行查詢Select*from tbl_users where user_name='租戶A'and user_passwd='********'。通過這一查詢過程,能夠校驗用戶的密碼,獲取用戶的基本信息。如果校驗失敗,則返回登錄頁面,否則登錄成功,繼續查詢META-DATA數據庫,獲取該租戶的應用配置信息。
在這個過程中,首先要關注的安全風險是HTTP會話劫持。所謂會話劫持,就是某個惡意租戶為了獲取其他租戶的信息,劫持了其他租戶當前的會話,冒充了該租戶的身份來獲取其信息,進而造成了信息泄露。預防會話劫持的途徑主要有以下幾個方面:(1)HTTP會話盡量選擇較短的有效期;(2)HTTP會話的cookie要求做到安全即http only,防止腳本讀取;(3)服務器端要校驗當前請求的用戶信息和會話中信息的一致性。
其次要關注的是傳輸安全。即多租戶共享的MTA架構,必然會有成千上萬的租戶同時訪問系統,惡意的租戶可能通過網絡監聽的方式來獲取其他租戶的賬號密碼信息,這必然造成信息泄露。所以實施MTA架構,一個很重要的安全點就是采用HTTPS部署,形成加密的通信,避免惡意中間人的嗅探攻擊。
在這種獨立數據庫的方案中,還要防止SQL注入攻擊。有預謀的SQL注入攻擊,可能在登錄的時候攜帶惡意構造的登錄認證字符串,比如or 1=1,從而查詢所有租戶的信息,進而盜取其他租戶的隱私。所以,要在MTA服務器端進行SQL注入的過濾,或者采用預編譯的SQL,通過類型檢查來防止SQL注入。
在認證的過程中,還要防止惡意的密碼字典暴力攻擊,即不斷地嘗試密碼,直到找到一個正確的密碼。這需要MTA應用在登錄的時候結合采用圖片驗證碼、短信驗證碼、問題驗證、一次性口令驗證碼等方式來進行登錄校驗,當遇到可疑的登錄嘗試、不斷失敗的請求時,要果斷地封堵此請求的再次登錄。
最后,對于所有租戶的登錄、授權、操作都要有對應的審計記錄。系統安全管理人員可以通過審計記錄評估系統的安全程度,并有效杜絕網絡入侵和網絡欺騙行為。同時,還要確保審計記錄自身的安全性,防止惡意用戶進入系統修改或刪除審計記錄。
3.2 同一數據庫不同表的多租戶架構
同一數據庫不同表的多租戶架構的原理是共享一個數據庫實例,包括META-DATA和其它業務相關的信息,同時為不同的租戶建立不同的表,比如TBL_TENANCY001_META_DATA,TBL_TENANCY002_BUSINESS_DATA等等。如圖1所示,此MTA架構的優勢在于僅有一個數據庫實例,便于整體的備份和恢復,維護成本低。缺點是開發工作量比傳統的單用戶架構要多一些。因為要管理不同用戶的表結構,而且隨著用戶需求的發展,不同用戶的表結構可能不同,這會導致代碼的復雜性增加,增加開發企業的維護成本。
要訪問這一MTA架構中的數據,租戶首先需要訪問MTA的首頁,輸入賬號密碼后,應用服務層通過META-DATA表獲取租戶的基本信息,判斷密碼是否正確。如果正確,則根據META-DATA反饋的表名稱信息,到具體的表中獲取用戶的具體業務信息,從而完整地展現該租戶的所有業務。
由于此MTA架構在一個數據庫實例中部署,根據META-DATA中反饋的租戶信息來獲取表名稱,從而訪問表內的數據,所以根據META-DATA獲取表名稱的這個判斷點的安全性非常重要。惡意租戶可能會通過SQL注入獲取所有的META-DATA中的租戶表名稱,從而獲取其他租戶的具體表,再通過SQL注入修改自己在META-DATA中的表名稱,從而達到獲取其他用戶業務數據的目的。所以說,在此種MTA架構中的應用層,一定要通過過濾的方式防止各種類型的SQL注入,過濾的關鍵字包括各種SQL關鍵字(比如“and”、“or”)、單引號等等。
假設惡意租戶通過攻擊上述防御得到了其他用戶的表名,那么系統還可以通過加密設置第二道防線。通過采用不同的密碼對各個租戶的表進行加密,并且定期變換密鑰。就算惡意租戶修改為其他租戶的表名,他看到的仍然是加密后的數據,因為其不掌握其他租戶的解密密碼,從而無法獲取到有效信息。這樣能夠徹底地保護租戶的數據不被惡意訪問。
此外,由于各個租戶的信息保存在一張META-DATA表格中,如果某個租戶在表格中存儲了一段惡意的JAVASCRIPT腳本,其他租戶如果看到了并點擊了此腳本,那么可能會造成會話劫持或者權限提升攻擊。防止這種腳本攻擊的方式是在應用服務層做JAVASCRIPT腳本關鍵字的過濾,主要包括單引號、雙引號、尖括號、SCRIPT關鍵字等;另外還要在HTTP響應返回給租戶的時候,再次進行上述檢查。
3.3 共享一個數據庫一種表結構的多租戶架構
當MTA開發企業覺得上述兩種架構都太過于復雜,或者增加了開發、維護的成本,那么他們可以選擇另外一種看起來更加簡單的架構,即共享一個數據庫實例,同時也只有一種表結構定義的架構。該MTA架構的優點很明顯:簡單易開發,即開發代碼復雜度明顯降低,開發成本也相應降低。但這同時也帶來了安全方面的問題,如不容易隔離,數據容易串聯,也不易維護。因為大量租戶的數據融合在一張表中,牽一發而動全身,對于數據的安全性要求很高。
采用此架構后,租戶通過MTA首頁進行登錄,應用服務層通過META-DATA表獲取用戶的TENANCY_ID信息。此TENANCY_ID代表該租戶在整個系統中的唯一標識,通過此ID,可以在應用服務層查詢業務表,獲取業務數據。
由此可見,此架構很明顯的一個安全風險就是SQL注入。如果惡意的租戶想訪問其他租戶的信息,那么只需要知道對方的TENANCY_ID就可以了。這時,我們的MTA架構首先要從訪問層進行控制,即客戶端要保障COOKIE的安全性,確保COOKIE是SECURE HTTP ONLY的;其次要保證傳輸層的安全性,即采用HTTPS方式傳輸TENANCY_ID。最后就是防止SQL注入的關鍵字,包括AND、OR、單引號等等,都必須過濾。如果惡意的租戶突破了上述防線,獲取了對方的TENANCY_ID,我們還需要在服務層的會話管理中檢查對方的身份,是否是真實租戶的信息。
此種架構下,由于所有租戶的信息都存儲在一張表中,僅僅通過TENANCY_ID字段區分租戶,就不能采用加密的手段來保障數據的安全。因為如果針對每行做不同密鑰的加密,會導致查詢和分析性能的嚴重下降,從而大大影響整個系統的性能。
多租戶架構是SaaS發展的必然趨勢,它能夠為開發者減少開發和維護的成本,也為使用者減少了使用的成本。但是正因為其減少了硬件和平臺的投資,也帶來了很多安全的隱患,包括數據泄露、篡改、提升權限等安全風險。要想保障信息系統的安全性,就必須根據不同架構的特點,采取相應的安全措施,以防后患。
[1]徐子沛.大數據[M].廣西:廣西師范大學出版社.2012.
[2]孔蘭菊,李慶忠,史玉良,等.面向SaaS應用基于鍵值對模式的多租戶索引研究[J].計算機學報.2010(12):2239-2247.
[3]張一川,張斌,劉瑩.支持多租約個性化業務定制的SaaS業務-租約模型[J].東北大學學報(自然科學版).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
陸阿妮,女,山東昌邑人,碩士,講師,研究方向:管理信息化。