12個數據庫安全故障和錯誤
在當今的大多數企業技術堆棧中,數據庫是聚集數字資產的重地,對于依賴它的數據庫管理員、程序員和DevOps團隊來說,保護數據庫免受攻擊是最重要的工作之一。
但是,雖然有足夠多的安全工具,采取了良好的安全措施,依然會有許多潛在的錯誤、疏忽甚至愚蠢行為,為數據庫安全防護埋下隱患。以下我們整理了十二個最危險的“地雷”:
01權限管理不到位
許多數據庫運行在本地物理服務器上,這臺機器應該盡可能地被鎖定,只有必要的用戶才能以數據庫管理員的身份登錄,并且登錄應僅限于網絡和其他機器的狹窄范圍,防火墻可以阻止IP地址。相同的規則也應適用于操作系統層,如果它在虛擬機上運行,則適用于管理程序或云管理。這些限制會減慢更新軟件和修復問題的工作,但限制攻擊者的可用路徑是值得的。
02松垮的物理訪問控制
你永遠不知道狡猾的攻擊者可能會在服務器機房內做什么。云公司和主機托管設施在戒備森嚴的建筑物內提供上鎖的籠子,而且訪問受限。如果您的數據本地存儲在您自己的數據中心,請遵循相同的規則,確保只有受信任的少數人才能訪問存放物理磁盤驅動器的房間。
03未受保護的備份
很多時候,一個團隊在保護數據庫服務器方面做得很好,但卻忘記了保護備份,這種情況并不少見。備份與原件擁有相同的信息,因此需要同樣等級的防護。磁帶、驅動器和其他靜態介質應鎖在保險箱中,最好是在另一個位置,這樣它們不會被一場大火或者洪災與原件一起被毀掉。
04未加密的靜態數據
加擾數據的算法通常是值得信賴的,因為它們已經過廣泛的測試,并且當前的標準沒有發現公開的弱點。為數據庫添加良好的加密技術,可以輕松地對所有靜態數據進行備份。但即使算法和實現是安全的,也必須小心保護密鑰。
云提供商和服務器開發人員正在創建與普通工作流程不同的可信硬件,因此密鑰在內部更安全。即使系統不完美,也有總比沒有好。當數據將在一段時間內保持加密狀態時,有些人更喜歡將密鑰放在不同的物理位置,最好是離線的。有些人甚至打印出鑰匙放在保險箱中。
05未使用隱私保護算法
只要您可以保護密鑰,加密就是保護數據庫物理副本的好工具。各種各樣的好算法也會永久地加擾數據。雖然它們無法解決所有問題,但當不需要保留所有敏感數據時,它們會非常有效。最簡單的可能只是用隨機假名替換名字。數十種其他方法使用恰到好處的數學運算來保護個人數據,同時仍然保留足夠的數據來實現數據庫的目標。
06缺乏擴散控制
當數據被使用時,它會被復制到緩存和運行的服務器中。數據存儲架構師的目標是盡量減少副本的數量,并確保一旦數據不被使用就將其銷毀。許多數據庫提供常規鏡像或備份選項,以防設備故障。雖然這對于提供穩定的服務至關重要,但在設計過程中仔細考慮擴散風險是值得的。在某些情況下,可以限制過量的復制而不會過多地影響服務。有時,如果可以限制攻擊者的攻擊面,那么選擇速度較慢、冗余較少的方案可能會更好。
07缺乏數據庫控制
最好的數據庫是幾十年進化的產物,由無休止的測試和安全研究驅動其不斷發展,其安全性能是毋庸置疑的。此外,數據庫廠商添加了用于管理和限制訪問的好工具。用戶需要用好這些工具,確保只有正確的應用程序才能訪問正確的表。不要對所有應用程序重復使用相同的密碼。當然,不要使用默認值。在可行的情況下限制對本地進程或本地網絡的訪問。
08易受攻擊的輔助數據庫
許多技術堆棧使用高速內存緩存(如Redis)來加快響應速度。這些輔助數據庫和內容交付網絡通常在數據庫中擁有相同信息的副本。花費與正確配置主數據庫一樣多的時間。
09可訪問數據的易受攻擊的應用程序
當受信任的應用程序表現不佳時,特別是當受信任的應用程序可以訪問所有數據時,所有的數據庫安全措施都沒有多大意義。一個常見問題是SQL注入,這是一種利用編碼錯誤的應用程序將惡意SQL傳遞到數據庫的攻擊。另一個是應用程序本身的安全性差。在許多架構中,應用程序可以看到一切信息。如果不能很好地阻止過度訪問,所有這些數據都可能被泄露出去。
10有風險的網絡暴露
數據庫通常被放置在沒有公共訪問的內部網絡區域。雖然一些開發人員希望通過互聯網訪問數據庫來簡化他們的生活,但任何保護重要信息的人都不應該有這種想法。
11缺乏誠信管理
現代數據庫提供了多種功能,可以防止錯誤和不一致進入數據集。為數據指定模式可確保各個數據元素符合一組規則。使用事務和鎖定可防止在更新一個表或行而另一個未更新時引入錯誤。部署這些完整性管理選項會增加計算開銷,但盡可能多地使用可以減少隨機錯誤的影響,還可以防止用戶插入不一致或不正確的數據。
12保留不需要的數據
有時最安全的解決方案是銷毀數據庫。開發團隊經常會像花栗鼠一樣,存儲一些永遠用不上的信息。有時,防止數據泄露的最簡單方法是擦除數據。如果您不能完全確定數據不會再次被使用,您可以刪除在線副本,并僅在訪問受到進一步限制的深度存儲中保留離線備份。