呂永國,張永棠
(廣東東軟學院計算機學院,廣東 佛山 528225)
數據庫在生產和生活中得到了廣泛的應用,但是數據池面臨著嚴重的安全威脅。目前,由于計算機網絡的發展,技術漏洞等因素,數據庫經常受到攻擊。
隨著數據和數據庫功能的日益復雜,攻擊者攻擊方式的改變和技術的進步,傳統的攻擊方法已經不能滿足實際需要。機器學習(ML)可以將順序掃描轉化為計算模型,將 DBA(數據庫管理員)經驗轉化為預測模型,使入侵檢測更加智能化和動態化,以適應快速的工作量變化[1-4]。現在計算能力可以滿足機器學習的需要。因此,將機器學習應用于數據庫安全威脅響應的文章越來越多,但很少有人對這些應對方法進行梳理,這反映了機器學習在處理某些威脅類型方面的優勢。
主流數據庫一般采用訪問控制、信息流控制、密碼控制和推理控制等方法來保障數據庫安全性。訪問控制機制能確保用戶只有在授權的情況下,才能訪問數據庫資源。制定正確的信息流策略,對信息的收集、存儲、傳輸和處理采用不同的安全等級,確保受保護的數據和不受保護的數據不相互干擾,能有效減低重要數據信息泄露或有缺陷的訪問控制風險。數據庫加密技術是另外一種常用的主動防御機制,基于對關鍵信息存儲的加密,加強應用訪問的安全性,可以有效防止突破防御界限的外部黑客攻擊或者內部高權限用戶的信息泄密,從根本上實現數據高度安全。運用數據庫推理控制策略,分析用戶行為,重要系統命令運行和系統資源異常等情況,再依據相關的監視信息,就能有效對異常情況進行及時的處理防范。
本文對數據庫安全的研究進行了梳理,找出了與數據庫安全密切相關的因素:數據、角色、防御系統、外部因素。因此,我們劃分了四個主要的威脅來源:數據保護無效、用戶異常、防御系統脆弱和外部攻擊。數據可進一步分為三類:數據篡改、數據暴露、監測或收集的數據。用戶異常被細分為:非法行為、未經授權的訪問、弱安全性。
數據庫系統在正常的運行當中,可能會遭受軟硬件攻擊、組織管理體系漏洞和自然災害等各種因素的影響,造成數據庫數據損失或崩潰,影響數據庫提供正常服務。數據庫系統提供數據給應用程序,它出問題會影響整個計算機系統提供服務的可靠性和安全性,因此保證數據庫安全非常重要。隨著科技的不斷進步,新攻擊手段和方法持續增加,數據庫安全性受到的挑戰也愈嚴峻。本文將重點從數據庫的安全屬性及主要安全技術進行重點分析,探索實現數據庫系統可靠安全性的策略。
數據庫主要安全風險如圖1所示。
圖1 數據庫主要安全風險Fig.1 main database security risks
一般而言,數據庫系統都提供對用戶賬號的權限控制。這些權限控制可以很好地限制用戶訪問權限以及數據庫操作。部分數據庫甚至還提供專門的用戶資源控制文件,以限制用戶對數據庫資源的開銷。例如Oracle數據庫允許用戶建立自己獨特的概要文件,用于控制每個用戶可以使用的資源數量,包括連接的會話數量以及CPU使用時間等[5]。
但是在實際情況中,經常會發生合法特權濫用問題。這種情況發生,往往是企事業單位對數據庫用戶職責梳理不到位。對部門、崗位角色和人員的分工、權利和職責劃分不清晰明確,導致在數據庫用戶的角色和權限劃分混亂。此情形下,用戶使用自己擁有的訪問權限,除了訪問本身業務范圍數據,也能訪問超越其業務范圍的資源數據,導致數據濫用。舉一個普通企業信息管理系統為例,假設普通的數據庫管理員,可以訪問數據庫所有記錄,擁有修改銷售和倉庫的數據記錄權限。這樣的特權,會導致銷售或倉庫數據被誤修改的風險。因此,不用用戶擁有不一樣的用戶權限,去執行本身的任務。授權超出業務范圍的權限,會給數據庫帶來數據安全危險。合法的特權濫用會帶來另一個問題,是會間接引誘數據庫用戶進行非法不道德活動,導致客戶敏感信息泄露。比如前段時間,國內部分酒店由于內部權限管理不到位,導致企業內部員工把過億條酒店客戶個人隱私數據放到網上非法銷售。這些事件嚴重侵犯了客戶權益,受影響酒店遭受巨大的經濟損失和聲譽下降。
其次是數據庫特權提升的安全問題。由于數據庫使用的時間較長,在運行的過程中,會出現部分用戶由于崗位業務變更,或者職責的臨時特殊要求,需要對這些用戶進行業務權限的配置更改,或者對業務數據資源訪問操作行為的變動。這種變化,會對初始規劃的數據庫用戶角色權限進行變更。這些后期的權限改變,如果沒有很好的權限管理機制,缺乏有效的安全審計,很容易產生特殊身份濫用,甚至冒用的情形。粗放式的特權提升,例如輕易授予普通用戶管理員權限。會有權限過渡暴露的漏洞。這些漏洞一旦被攻擊者利用,就會篡改權限。擁有特殊權限的惡意用戶,可以對敏感信息進行肆意攻擊。甚至利用漏洞,虛構賬戶,轉移客戶資金等操作,給數據庫使用企業造成重大損失。
數據庫系統的運行,需要有計算機操作系統的支持,主流操作系統有Windows、Linux、Unix和MacOS等。 底層的操作系統有各種漏洞,如DoS、權限管理不當、遠程代碼執行和憑證保護不充分等[6]。其次是數據庫本身系統的漏洞,如數據信道漏洞等。這些漏洞,會導致數據庫數據丟失或者損壞,嚴重會導致拒絕提供服務的情況。由于各類操作系統使用廣泛,用戶數據量基數大,因此出現相關的漏洞,會引起相當大的損失和危害。
以最常用的Linux和Windows操作系統為例,Linux是廣受歡迎免費使用的操作系統,安裝在全球眾多的企業、組織的服務器以及個人電腦上,但是它的安全漏洞不少。以2020年為例,其主要的漏洞原因是內核技術開發人員失誤,例如邏輯和類型轉換錯誤,導致其內核經常會出現邏輯實現不正確,類型轉換溢出等問題[7]。在此類問題上,Linux藍牙模塊和eBPF模塊漏洞較嚴重。這兩個模塊可以實施本地提權和遠程代碼執行,利用寄存器范圍錯誤,繞過檢查,出現非常規的越界讀寫。由于上述模塊在內核運行,漏洞技術難度低,常被黑客利用,且成功率高。Windows操作系統比較復雜,涵蓋系統組件、驅動程序、應用程序等,每年都有大量的系統漏洞,微軟公司為了應付眾多的漏洞,每隔一段時間,就會發布系統補丁以供用戶升級。微軟持續的補丁升級,并沒有有效抑制漏洞的數量和危險性。以2020年為例,Windows系統的高危險漏洞主要是協議漏洞,該漏洞導致各種畸形的數據包未能正確被解析,進入到錯誤的流程處理或者直接繞過處理。該漏洞容易被攻擊者利用遠程代碼執行,變成極具危害和傳播性的蠕蟲攻擊。
對數據庫系統本身漏洞的攻擊,是黑客慣用手段,例如SQL注入攻擊。入侵者將未經授權的語句添加到存儲過程或者 Web應用程序的參數中,然后這些額外語句被傳入數據庫中并執行。如果沒有對應防御措施,入侵者使用這種技術,就可以輕易訪問整個數據庫的數據。SQL注入是正常的Web端口訪問,表面上和其他正常的頁面訪問一致,故服務器的防火墻不會識別并抵御此類攻擊。如果系統管理員工作不嚴謹到位,沒有時常查看日志的習慣,有可能不知曉數據庫系統被長期攻擊,數據已經產生嚴重泄露的情形。
很多主流數據庫,提供審計功能,用于監控所有用戶對數據庫的各項操作。數據庫會將監控的相關記錄放在特定的文件中。數據庫管理員可以根據相關查閱,跟蹤記錄進行審核,用于調查數據庫可疑的異常活動,例如非正常刪除表的操作或者連接數據庫異常等。如果數據庫審計策略缺陷,不能夠自動記錄必要的數據庫異常或者敏感事務,將會對在用的數據庫構成嚴重風險。審計機制是數據庫防御機制的重要一環。如果黑客能夠突破數據庫其他的防御機制,成功攻擊數據庫。事后可跟蹤審核記錄,識別沖突,再確定特定用戶和沖突的關聯,以修復系統[8]。
數據庫軟件提供的審計功能本身存在不少弱點或者限制,使得審核功能失效。首先,數據庫審計功能有缺陷,當啟用審計機制,會消耗計算機資源,如CPU和硬盤,從而導致數據庫服務性能下降。這種情形會導致不少數據庫管理員減少或者不使用該功能。另一個問題是本身的審計記錄細化度不夠,記錄信息不詳盡,不足以支持攻擊檢測、分析與修復。例如不少審計機制沒有記錄數據庫客戶端的應用程序,IP地址等關鍵信息。這就不能提供充足的信息給后期的審核分析。其次,擁有數據庫管理員權限的用戶,進行惡意操作的時候,可以直接先關閉審計功能,使得事后的推理追責審核功能失效。還有,對于多種數據庫混合的綜合平臺,審計流程存在不一致問題。常用的數據庫,Oracle、SQL Server和DB2等,它們的日志各不相同,因此無法在數據庫使用組織中,綜合各個數據庫,執行統一的審計流程[9]。
身份驗證是數據庫安全防范的第一道防線。用戶登錄的身份,后續連接著訪問數據庫權限,可以明確該身份可以使用的功能及相關資源。因此攻擊身份驗證方案,獲取登錄數據庫的憑證,從而獲取合法數據庫用戶身份,成為攻擊者常用的方法。數據庫身份被不法分子獲取的原因中,弱密碼是最常見的。由于人天生的惰性或者記憶的限制,人們喜歡使用簡單,容易記憶的密碼,例如數字的連號,重復號等。部分數據庫有密碼規則的限制,比如要求使用大小寫字母加數字的方式,以減輕弱密碼的使用。但實際應用中,民眾偏愛使用簡單的密碼。這類密碼,較容易被破解,致使數據庫身份被盜用。
用戶缺乏安全意識,是密碼經常泄露的另一種方式。不少用戶直接把登錄用戶名與密碼寫在紙條上,或者粘貼到計算機的文本文件中。這給攻擊者直接竊取用戶憑證提供便利。還有惡意者,利用電話騙術,冒充專業人員,以系統故障,提供維護服務等編造出來的理由,非法獲取受害人的登錄憑證。
網絡不法分子,常利用計算機技術非法獲取用戶憑證。比如采用自動化程序,不斷嘗試輸入不同用戶名和密碼的組合,循環登錄,直到獲取正確的登錄信息。這種暴力破解的方式,有時候會利用用戶曾用密碼做參考,加快效率,以縮短破解時間[10]。部分網絡犯罪者采用網絡釣魚電子郵件的方式獲取用戶的敏感信息。他們使用各種犯罪心理技巧,引誘受害者進行交流,以索要相關數據。這種方式隱蔽可怕,很多受害人被騙以后,對信息泄露卻全然不覺。
數據庫存儲的數據,是應用程序正常運行的基石,因此數據庫備份工作是正常的安全管理要求。一旦發生意外,導致數據庫數據丟失或系統崩潰,數據庫管理員可使用備份數據庫,迅速恢復其正常運作。但數據庫外部存儲介質,如磁帶、DVD、或移動硬盤等備份的數據,如保管不善,也有暴露風險。不少公司發生備份數據暴露事件,其中一個主要原因是公司內部備份數據管理不到位,內部員工能輕易拷貝備份數據,外出泄露。這種行為,會給企業帶來無法挽回的損失,如制造業企業的機密圖紙或工藝流程等敏感數據流出。其次是數據庫管理員安全意識不足,導致備份數據暴露。例如粗心的管理員錯誤將備份文件存放在網站目錄下,外部的黑客就可以訪問Web路徑,技術破解文件名等方式,下載該備份數據文件,從而導致泄露事件。
數據庫的使用過程中,面臨各種風險等級不一的威脅。制定一個可靠的安全策略,并嚴格執行,能有效防范內外部人員對數據庫惡意攻擊,減輕所受威脅傷害。如何根據數據庫面臨不同攻擊手段,采用不同的技術及標準,制定有效的數據安全機制,保護數據庫信息安全,以下將分為四點,給以重點闡述。
如果數據庫用戶擁有超過其職能范圍的權限,就容易引起濫用權限的問題。這種問題的根源來自數據庫管理員在權限初始規劃的時候,沒有對數據庫全體用戶權限業務和職能范圍梳理到位,簡單給用戶或者其角色賦予更高的訪問權限。解決該問題的方案是采用顆粒度小,細化的訪問控制機制。根據不同用戶,要求賦予其的權限不僅限定到最低要求的數據庫DML(數據庫操作語言)操作,而且數據控制到表的級別以下,細化到表里的字段。這種充分細化的控制手段,就可以有效避免超出職權范圍的惡意操作帶來的傷害。例如上文提及到超權限訪問的數據問題就不會發生,用戶查詢相關數據,想惡意修改字段數據的時候,系統就警報該用戶只有查詢權限,沒有修改該字段信息的權限。
用戶私自使用合法的數據庫權限,用于未經正規授權的活動,也會給數據庫安全帶來隱患。例如部分企業組織,由于數據庫存放的敏感數據,會對查詢記錄數進行限制,并不允許復制相關數據。如果企業內部,存在惡意盜取數據的工作人員,就可以采用使用外部的客戶端登錄系統,規避監控獲取信息數據,以供售賣獲利。這些信息,也可能被臨時存放在非法計算機設備。這些設備一旦受到黑客攻擊,就有可能發生泄露。對此類風險,應建立數據庫基于上下文的訪問控制,通過存儲用戶客戶端應用程序、訪問時間、IP地址和端口數據等方式,匹配連接上下文。假若匹配信息不服,系統將會發出異常警報。
隨著Windows與Linux等專業平臺功能愈加強大,復雜,覆蓋面越廣,系統平臺漏洞呈現出數據量逐年遞增,高風險性同比增長的態勢。這些系統所存在的缺陷,容易被黑客采用技術手段利用,攻擊以獲取電腦的控制權,非法獲取其中的重要信息資料。防范此類風險,首先要加強組織的內部計算機服務器的應用軟件安裝和訪問網站的控制。組織內部的機器,不能隨意安裝不明的應用程序,不要使用企業計算機隨意瀏覽與業務無關的網站,以減少黑客通過網絡植入木馬和病毒的方式,攻擊企業服務器的風險。其次是系統管理員應該及時更新軟件程序。軟件系統供應商不定期提供的補丁程序,能有效修補已經發現的各種平臺漏洞,增強系統防御攻擊的能力。
數據庫系統提供的審計功能,可以很好監控用戶數據庫操作及其使用資源情況。但是由于系統的審計功能自身的缺陷,有時候會導致審計功能失效。要避免此類情況,企業組織要組建高性能的網絡審計設備,審計的流程,交由專門的審計設備執行。數據庫運行時,全程啟動審計功能。這樣就能有效避免審計功能消耗系統資源,引起數據庫服務器性能下降的問題。對于有權限的管理員,私下關閉數據庫審計功能,而導致審查跟蹤失效的問題,可以采用審計責任與數據庫管理權限相互獨立的策略。網絡審計設備的運行情況,不與數據庫管理員權限掛鉤。這種情況下,數據庫用戶沒有權限去關閉審計功能,就避免了數據庫用戶對審計功能的攻擊。對于上文提及的審計記錄不足的問題,可以采用細化數據庫事務的跟蹤信息。在對應的日志里面,添加詳細的跟蹤項目信息,如源應用程序名稱、源操作系統、源IP地址及其他關鍵數據。這些詳細的數據,就可以供后期的事務分析和修復使用。
除了在技術手段上完善審核策略,還有在組織機構內部建立健全的問責機制,規范約束內部的操作以及失職行為的追究制度。從規章制度上面約束相關人員的誤操作或惡意操作,杜絕人為的技術性和非技術性錯誤操作行為。為企業組織提供規范行為的依據,就能有效提高數據庫系統審計功能,從而提升其抵抗惡意攻擊的能力。
加密是最常用的安全保密方法,運用特殊的算法改變原有的信息數據。加密后的信息,傳送到目的地后,再采用技術手段還原到原始的信息。在信息傳遞的過程中非法獲取其中加密數據,如果不能正確的解密,也無法獲知其中的內容。為此,加密技術被廣泛運用在數據庫上,以保護其安全。現今的加密算法很多,其中三種數據庫比較常用:對稱加密、非對稱加密和散列加密[11]。
對稱加密要求發送方和接受方都有相同的密鑰。發送方用密鑰加密發送信息,接受方使用同樣的密鑰解密。這種加密方式加密和解密的速度較快,但需要雙方都確保密鑰的安全。對稱加密方式適用于入侵風險較低的封閉系統。非對稱加密在信息傳輸過程中,使用兩個不同的密鑰,公鑰和私鑰[12]。公鑰用于加密在傳送前加密的信息,為發送者擁有。私鑰用于接收信息的解密,為接收者擁有。這種加密方法,在安全性方面比對稱加密高,但是加密和解密的速度比前者低。散列加密,就是將數據信息通過哈希算法,生成一個固定長度的哈希值。散列加密的數據,難以被破譯或者還原。上述的加密方法,經常使用在數據庫敏感信息的保護中,比如用戶賬號及密碼。
數據庫在加密的顆粒度上,總共分為5個級別:數據庫級、表級、記錄級、字段級和數據項級。數據庫級別的加密就是將整個數據庫加密,讀取數據庫所在的物理塊號進行加密。這種加密方式簡單,但是效率比較低,對于數據庫來說,每次常規的操作,例如讀取數據,都要對數據庫進行解密操作。表級加密類似數據庫級別加密,就是對特定的表進行加密處理。相對之前加密方式,在靈活性和系統性能方面有提高,但是也可能加密非必要的額外信息,消耗系統資源。比如加密用戶信息表中,可以加密名字,身份證號,聯系方式等信息,但表中其他信息,如性別,年齡等信息則沒有必要。記錄級別是加密數據庫表中的一條完整的信息,加密后各個字段都是密文。該加密方式顆粒度更小,靈活度更好,但是缺點是記錄數比較大時,每條記錄都對應一個密鑰,解密的過程也是逐條解密,效率比較低。字段級加密是加密數據庫表里面的某個字段。這種方式適合數據庫對特定字段的高頻率查詢,查詢效率高,系統開銷也比較小。
數據庫加密技術,歷經多個階段,一直在持續改進發展中。從加密的層次實現來看,如今主要有4個層次的5種加密方式(如圖2所示):應用層的應用系統和專用數據庫中間件、數據庫系統層、操作系統層和存儲設備層。這幾個層次的加密方式都不相同,各有優劣[13]。
圖2 數據庫加密層Fig.2 database encryption layer
應用系統加密主要是應用程序對敏感數據進行加密后,將加密的數據存入數據庫。數據檢索的時候,先從數據庫讀出數據到客戶端進行解密。這種方式的優點是加密實現靈活,可以根據業務選擇不同的加密函數與密鑰等。劣勢也比較明顯,因為存入數據庫是密文信息,數據庫系統原有對數據高效組織和檢索等功能嚴重受損。應用系統因此額外承擔數據庫原有工作,如索引、查詢分析、執行優化等,這極大增加應用程序的負擔和程序的復雜度。
專用數據庫中間件(前置代理加密技術)[14]在應用程序和數據庫之間加一道安全代理服務。訪問數據庫服務前,先經過該代理服務,對數據庫進行加解密工作,然后再通過數據庫接口實現數據庫存儲。相比之前的技術,前置加密技術減輕客戶端應用程序的壓力,應用層更專注業務邏輯及其實現。但和前者應用系統加密一樣,數據在存儲到數據庫前,已經是密文的形式,數據庫因相同的原因,丟失本身的系統優勢。
數據庫系統層(后置代理加密技術)是在數據庫內部對數據進行加密,應用系統對數據的處理過程完全透明[15]。用戶不需要知道數據庫相關加密操作,就如正常的執行SQL語句一樣[16]。應用系統程序不需要做任何更改就能獲得數據加密功能。后置加密技術是通過視圖及觸發器加外部調用實現加解密工作。這種透明加密的技術比較成熟,被應用在大型的商業數據庫中,如 Oracle和SQL Server[17]。但技術也有缺陷,假如業務要求觸發器運行機制對每條數據的多列讀寫都要外部調用,或者查詢結果集中涉及加密數量比較大的時候,會導致數據庫性能下降。
操作系統層(文件系統加密技術)是通過對操作系統中數據庫文件進行加密的方式實現,與數據庫系統類型無關[18]。因為數據庫系統皆運行在計算機操作系統上,數據庫就是存儲在操作系統上面的一系列文件。對這些文件加密,也就實現對數據庫的加密。對文件加密的方式有一個嚴重缺陷,就是每次對數據庫的DML常規操作[19],都需要對整個數據庫文件進行加解密,系統開銷大,效率低。
存儲設備層加密(磁盤加密技術)是通過存儲設備物理結構實現加密,能發揮設備硬件能力優勢,同時對應用層和數據庫本身沒有關聯[20]。磁盤加密技術與文件加密技術類似,不具備數據庫權限控制。但由于磁盤數據庫加密相關技術還沒有成熟,現今沒有進入大規模實用化和產業化。
綜上所述,數據庫的加密技術,能夠顯著提高數據庫安全性,有效減輕上文提及的身份驗證缺陷和備份數據暴露的風險。數據庫惡意攻擊者,通過非法手段獲取的加密數據,因不是明文方式,所以不清楚里面的具體內容而無法利用。
數據信息已經成為企事業組織的重要財產。如何保護組織的敏感電子數據信息不被惡意攻擊而導致損失是一個巨大挑戰。本文重點分析了影響數據庫安全運行的幾個主要因素,并詳細闡述數據庫相關的安全控制策略,以降低受攻擊的威脅,加強對數據的保護。隨著數據庫技術持續進步,版本不斷更新,對數據庫攻擊手段亦發生變化。因此,應繼續研究對數據庫攻擊方式方法,提高數據庫持續的防御能力。