12個數(shù)據(jù)庫安全故障和錯誤,看看你“踩雷”沒?
在當(dāng)今的大多數(shù)企業(yè)堆棧中,數(shù)據(jù)庫是我們存儲所有秘密的地方。它是安全屋,是待命室,也是用于存儲可能非常私密或極具價值的物品的集散地。對于依賴它的數(shù)據(jù)庫管理員、程序員和DevOps團(tuán)隊來說,保護(hù)它免受所有入侵是最重要的工作之一。
不過,這項工作并不容易。雖然數(shù)據(jù)庫創(chuàng)建者為我們提供了所有工具,并且建立了良好的安全措施,但是實踐過程中存在的無數(shù)潛在失誤、疏忽以及愚蠢的錯誤,卻使保護(hù)數(shù)據(jù)庫安全成為一場無休止的挑戰(zhàn)。
為了幫助企業(yè)認(rèn)識錯誤并保持警覺,以下列出了12種不同的故障模式,即便是團(tuán)隊中最優(yōu)秀的人也不可避免地會出現(xiàn)這些失誤。
1. 權(quán)限管理不到位
許多數(shù)據(jù)庫存在于它們自己的設(shè)備上,這臺設(shè)備應(yīng)該盡可能地鎖定。只有必要的用戶才能以數(shù)據(jù)庫管理員的身份登錄,并且登錄應(yīng)僅限于網(wǎng)絡(luò)和其他設(shè)備的有限范圍。防火墻可以阻止IP地址。相同的規(guī)則也應(yīng)適用于操作系統(tǒng)層,而且如果它在虛擬機上運行,則適用于管理程序或云管理。雖然這些限制會減緩軟件更新和修復(fù)問題的工作,但同時也能限制攻擊者可以采取的路徑,一切都是值得的。
2. 輕松地物理訪問
我們永遠(yuǎn)不知道狡猾的攻擊者可能會在服務(wù)器機房內(nèi)做些什么。云公司和主機托管設(shè)施提供的服務(wù)等同于在戒備森嚴(yán)的建筑物內(nèi)提供了一個上鎖的籠子,而且訪問受限。但如果您沒有選擇云或主機托管服務(wù),而是將數(shù)據(jù)本地存儲在您自己的數(shù)據(jù)中心,那么請遵循相同的規(guī)則,確保只有受信任的少數(shù)人才能訪問存放物理磁盤驅(qū)動器的房間。
3. 未受保護(hù)的備份
一個團(tuán)隊在保護(hù)數(shù)據(jù)庫服務(wù)器方面做得很好,但卻忘記了備份,這種情況并不少見。要知道,它們擁有相同的信息,因此需要獲取同樣等級的保護(hù)。磁盤、驅(qū)動器和其他靜態(tài)介質(zhì)應(yīng)鎖在保險箱中,而且最好是存放在另一個位置,以免原件遭遇火災(zāi)或洪水破壞的同時也損壞了備份。
4. 未加密的靜態(tài)數(shù)據(jù)
加擾數(shù)據(jù)的算法通常是值得信賴的,因為它們已經(jīng)過廣泛測試,并且當(dāng)前的標(biāo)準(zhǔn)沒有公開已知的弱點。如今,為數(shù)據(jù)庫和備份添加良好的加密,是對所有靜態(tài)數(shù)據(jù)都很容易實現(xiàn)的。不過,即使算法和實現(xiàn)是安全的,也必須小心保護(hù)密鑰。云提供商和服務(wù)器開發(fā)人員正在創(chuàng)建與普通工作流程不同的可信硬件,以便密鑰在內(nèi)部更安全。即便系統(tǒng)不完美,有也總比沒有好。當(dāng)數(shù)據(jù)需要靜態(tài)加密一段時間時,有些人更喜歡將密鑰放在不同的物理位置,并且處于離線狀態(tài);而有些人甚至?xí)蛴〕雒荑€信息并將紙鎖在保險箱中。
5. 不使用隱私保護(hù)算法
只要您可以保護(hù)好密鑰,加密就能成為保護(hù)數(shù)據(jù)庫物理副本的好幫手。各種各樣的好算法也會永久地加擾數(shù)據(jù)。它們不能解決所有問題,但當(dāng)不需要保留所有敏感數(shù)據(jù)時,它們會非常有效。最簡單的可能只是用隨機假名替換名字。數(shù)十種其他方法使用恰到好處的數(shù)學(xué)運算來保護(hù)個人數(shù)據(jù),同時仍然保留足夠的數(shù)據(jù)以實現(xiàn)數(shù)據(jù)庫的目標(biāo)。
6. 缺乏增殖控制
當(dāng)數(shù)據(jù)被使用時,它會被復(fù)制到緩存和運行的服務(wù)器中。數(shù)據(jù)存儲架構(gòu)師的目標(biāo)是盡量減少副本的數(shù)量,并確保在數(shù)據(jù)不使用時立即銷毀它們。許多數(shù)據(jù)庫提供常規(guī)鏡像或備份選項,作為防御機器故障的功能。雖然這對于提供穩(wěn)定的服務(wù)至關(guān)重要,但在設(shè)計過程中仔細(xì)考慮增殖問題是值得的。在某些情況下,完全有可能在限制猖獗復(fù)制的同時不過多地影響服務(wù)。有時,如果可以限制攻擊者的“入口”數(shù)量,那么選擇速度較慢、冗余較少的選項可能會更好。
7. 缺乏數(shù)據(jù)庫控制
最好的數(shù)據(jù)庫是由幾十年無休止的測試和安全研究驅(qū)動進(jìn)化的產(chǎn)物。選擇一個好的數(shù)據(jù)庫是第一要求。此外,數(shù)據(jù)庫創(chuàng)建者還在其中添加了用于管理和限制訪問的好工具。請務(wù)必記得使用它們。確保只有正確的應(yīng)用程序才能得到想要的結(jié)果,同時記得不要對所有應(yīng)用程序重復(fù)使用相同的密碼。當(dāng)然,也不要使用默認(rèn)值。在可行的情況下,限制對本地進(jìn)程或本地網(wǎng)絡(luò)的訪問同樣至關(guān)重要。
8. 易受攻擊的二級數(shù)據(jù)庫
許多堆棧使用高速的內(nèi)存緩存(如Redis)來加快響應(yīng)速度。這些二級數(shù)據(jù)庫和內(nèi)容交付網(wǎng)絡(luò)通常擁有與數(shù)據(jù)庫中相同的信息副本。正確配置它們所花的時間通常跟配置主數(shù)據(jù)庫一樣多。
9. 擁有數(shù)據(jù)訪問權(quán)限的脆弱應(yīng)用程序
當(dāng)受信任的應(yīng)用程序——尤其是擁有所有數(shù)據(jù)訪問權(quán)限的應(yīng)用程序——出現(xiàn)故障時,所有部署謹(jǐn)慎的數(shù)據(jù)庫都發(fā)揮不了作用。一個常見問題是SQL注入,這種攻擊會誘使編碼錯誤的應(yīng)用程序?qū)阂釹QL傳遞到數(shù)據(jù)庫。另一個是應(yīng)用程序本身的安全性差。在許多架構(gòu)中,應(yīng)用程序擁有幾乎所有數(shù)據(jù)的訪問權(quán)限,如果不能對其進(jìn)行有效控制,所有數(shù)據(jù)都將面臨泄露的風(fēng)險。
10. 有風(fēng)險的網(wǎng)絡(luò)暴露
數(shù)據(jù)庫是生活在沒有公開訪問的網(wǎng)絡(luò)部分的理想候選人。雖然一些開發(fā)人員希望通過向通用互聯(lián)網(wǎng)開放數(shù)據(jù)庫來簡化他們的生活,但是任何意識到隱私重要性的人都應(yīng)該有不同的看法。如果您的數(shù)據(jù)庫只與前端服務(wù)器通信,那么它就可以愉快地生活在只有這些前端服務(wù)器可以訪問它的網(wǎng)絡(luò)部分。
11. 缺乏完整性管理
現(xiàn)代數(shù)據(jù)庫提供了多種功能,可以防止錯誤和不一致進(jìn)入數(shù)據(jù)集。為數(shù)據(jù)指定模式可確保各個數(shù)據(jù)元素遵循一組規(guī)則。使用數(shù)據(jù)庫事務(wù)和鎖定(transactions and locking)功能可以防止當(dāng)一個表/行更新而另一個沒有更新時引入錯誤。部署這些完整性管理選項雖然會增加財務(wù)支出,但盡可能多地使用它們可以減少隨機錯誤的影響,還可以防止用戶插入不一致或不正確的數(shù)據(jù)。
12. 保留不需要的數(shù)據(jù)
有時候,最安全的解決方案是銷毀數(shù)據(jù)庫。開發(fā)團(tuán)隊的行為通常很像“堆積鼠”(packrat,有在窩中貯藏東西的習(xí)性),會為可能永遠(yuǎn)不會到來的未來存儲信息。要知道,有時防止數(shù)據(jù)泄露最簡單的方法就是擦除數(shù)據(jù)。如果你不需要這些數(shù)據(jù)來提供一些未來的服務(wù),而且客戶永遠(yuǎn)不會要求查看它們,您可以選擇將這些信息歸零,也省去了保護(hù)它們所需的時間、精力和財力。如果您不能完全確定是否會再次利用這些數(shù)據(jù),也可以刪除在線副本,并僅將離線備份保存在訪問受到進(jìn)一步限制的深度存儲中。