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