1. 程式人生 > >SQL Server 安全篇——服務賬號安全性(3)——服務賬號的威脅與對策

SQL Server 安全篇——服務賬號安全性(3)——服務賬號的威脅與對策

在安全領域中,“攻”“防”一直在持續著,並且很不幸,攻擊者永遠處於主動地位,一切防禦方案都是基於已經發生的攻擊來制定的,但是深入理解原理,不僅可以快速應對攻擊,也能從中推測出一些可能的衍生攻擊方案並作出提前防禦。
 本文將集中在服務帳號上的攻擊介紹。曾經看過一部外國電影,名字早忘了,但是有一句話一直記在腦海裡(大概也有十幾年了吧):世界上不存在沒有漏洞的系統。所以我不能完全防禦所有的攻擊,總會有漏洞可以進入你的系統。
假設一個攻擊者已經進入了例項,不管是來自於外部還是內部漏洞,比如SQL注入,一旦進入例項,那麼就可以使用SMB(server message block)攻擊來破壞伺服器帳號憑據。又比如一直都被提醒的xp_系統儲存過程如xp_dirtree,可以直接使用public角色即不需要任何許可權就能夠執行,進入例項後,使用這個系統儲存過程,可以找到伺服器上的資料夾資訊甚至猜測的特定檔案。要訪問資料夾,必須先對SQL Server引擎服務帳號授權,當儲存過程借用服務帳號訪問資料夾,那麼攻擊者可以使用 Metasploit 等工具中的 SMB 捕獲來捕獲身份驗證請求。裡面還包含雜湊密碼, 還包括偽隨機加密號, 這意味著攻擊者有足夠的資訊通過使用專用工具來顯示明文密碼。


防範策略:

首先當然是選擇合適的服務帳號,如果動不動就使用最高特權的帳號,那麼安全性可想而知。但是由於不同企業的實際需求不同,不能一概而論。需要權衡安全和操作支援力度。絕對的安全和絕對的便利都是極端的。比如微軟的最佳實踐是隔離服務帳號,單獨專用。而在現實當中,隨著資料庫環境的增多及其他SQL服務的增加,帳號管理將面臨越來越大的複雜度。但是如果為了減少這種現象而通用服務帳號,雖然增加了操作支援力度,但是也降低了安全性。
這是一個權衡的問題,並沒有絕對的對與錯,對於域層面做得很好的企業,使用MSAs、gMSAs和適當使用虛擬帳號,會更有價值。但是即使在OS和域層面都已經做得很好,DBA團隊所嚴重依賴的自動化管理操作又會因為虛擬帳號並沒有足夠許可權而帶來很多其他問題。
對此,如果是使用域賬號作為服務帳號,建議對每套應用進行隔離。但是要注意許可權不能過高,也不能不夠。
在SQL 2016中,基於其需要服務帳號的元件,最多可以到11個服務帳號,每個帳號配置最低所需許可權,這種量級如果擴充套件到HA/DR層面和且用層面,帳號數量將非常可觀,不管有什麼建議,都應該按照自己的實際情況做好規劃和按計劃調整現有環境。
最後強調一下,每個服務帳號型別都有其好處和壞處,但是總得來說,優先使用虛擬帳號、MSAs和gMSAs會更加安全。另外從系統外圍就應該做好各層的防禦。