如何避免 MS-SQL 暴力登入攻擊 (嘗試評估密碼時發生錯誤、找不到符合所提供名稱的登入)
我有一台對外服務的 MS-SQL 資料庫主機,最近從事件檢視器裡面發現一直有不明的攻擊者利用暴力破解法想要登入 MS-SQL 管理角色。
事件檢視器裡幾乎全是 MSSQL$MSSQLSERVER 登入失敗事件,
觀察下來每一天有超過上千次的登入失敗,有時同一秒鐘就有 10 幾次的登入失敗。
從 SSMS 管理工具可以顯示 Log,開啟 「SSMS > 管理 > SQL Server 記錄檔」
顯示 Log 訊息
事件檢視器裡 MS-SQL 登入失敗的訊息歸納有這 2 種。
- “使用者 ‘sa’ 的登入失敗。 原因: 嘗試評估密碼時發生錯誤。”
- “使用者 ‘admin’ 的登入失敗。 原因: 找不到符合所提供名稱的登入。”
而訊息 2 中的 ‘admin’ 帳號則會一直改變,例如 root, sys, system 都有可能出現。
表示攻擊者一直嘗試不同帳號登入,若確認帳號存在後,則會繼續用密碼暴力破解攻擊。
事件檢視器會記錄來源 IP,我發現 IP 不止一個,表示有不同的主機同時發動攻擊。
如果從 IP 反查 的話,會發現來源 IP 在全世界都有,包含歐洲、美洲、亞洲都出現過。
如果未即時處理,可能會有以下風險
- 管理者密碼被破解,攻擊者隨意瀏覽、刪除、偷取資料,甚至勒索請求付款。
- 伺服器效能變慢,主機忙於回應不必要的登入請求。
- 伺服器 Log 記錄不正常膨脹,佔用硬碟空間。
- Vollgar 攻擊事件,入侵主機使用資料庫挖礦加密貨幣。
- 植入病毒程式,繼續攻擊其他主機。
此攻擊為嚴重性風險,如有發現需要立即處理。
如果想要避免攻擊者登入 MS-SQL 主機,有幾種方式可以執行。
- 建立防火牆白名單可連線 IP
- 更改連線 port,不要使用預設 1433 port。
- 另建管理者帳號並停用 sa 帳號
- 賦予需要的使用權限並啟用密碼原則
接下來我會示範在 Windows Server 2019 如何避免 MS-SQL 受暴力登入攻擊
Contents
建立防火牆白名單可連線 IP
白名單表示符合指定 IP 才可連線,這是一個很有效的防護方式,只是某些客戶環境因無法指定 IP而無法這樣做。
在「具有進階安全性的 Windows Defender 防火牆」,建立新連線規則
規則: 連接埠
本機連接埠: TCP / 特定本機連接埠:1433
動作:允許連線
名稱: MS-SQL
完成之後,再點擊新建立的規則,在「領域」內設定白名單 IP。
更改連線 port,不要使用預設 1433 port。
開啟「開始 > Microsoft SQL Server 2019 > SQL Server 2019 設定管理員」
開啟左側「SQL Server 網路組態 > MSSQLSERVER 的通訊協定 > TCP/IP」
修改「IP 位址 > IPALL > TCP 通訊埠」的值
預設為 1433,修改成其他的通訊埠,並確保並未被使用,可選的範例在 0 ~ 65535。
修改組態設定檔需要重啟服務才會生效。
注意: 修改連線 port 要注意其他應用程式連線設定也要跟著修改,已允許連線的防火牆 port 也要一起修改。
另建管理者帳號並停用 sa 帳號
另建管理者帳號
以管理者角色登入 SSMS 後,在「安全性 > 登入(按右鍵) > 新增登入」
選擇「SQL Server 驗證」,輸入「登入名稱」,密碼需勾選「強制執行密碼原則」
伺服器角色勾選「sysadmin」要取代原有 sa 角色
在「使用者對應」勾選所有的資料庫,並勾選下方的「db_owner」
此設定可以取代原有 sa 帳號權限
停用並改名預設 sa 登入帳號
我們剛剛已經新增了管理者帳號,所以這裡就需要用新管理者帳號重新登入。
使用新管理者登入,才可以刪除舊有的 sa 帳號。
將預設的 sa 帳號停用並改名後,避免攻擊者直接暴力破解 sa 密碼
執行「安全性 > 登入 > sa (按右鍵) > 屬性」
在「狀態」將「登入」設定「已停用」
執行「安全性 > 登入 > sa (按右鍵) > 重新命名」
換成別的名字
賦予需要的使用權限並啟用密碼原則
當我們建立新使用者給應用程式使用時,不要求方便就給予最大權限。
針對使用者帳號能用的權限再賦予就好。
強制執行密碼原則設定
在建立新使用者時,一定要勾選「強制執行密碼原則」
密碼原則說明
密碼複雜性原則是為了阻止暴力攻擊而設計,方法是盡可能地增加密碼數目。當強制執行密碼複雜性原則時,新的密碼必須符合下列指導方針:
- 密碼不包含使用者的帳戶名稱。
- 密碼長度至少為八個字元。
- 密碼包含下列四種類別的其中三種:
a. 拉丁文大寫字母 (A 到 Z)。
b. 拉丁文小寫字母 (a 到 z)。
c. 以 10 為基底的數字 (0 到 9)。
d. 非英數字元,例如:驚嘆號 (!)、錢幣符號 ($)、數字符號 (#) 或百分比符號 (%)。
密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。
伺服器角色設定
bulkadmin: 可以執行大量插入作業
dbcreator: 可建立與修改資料庫
diskadmin: 管理磁碟中的檔案
processadmin: 管理 SQL Server 中執行的程序
public: 觀看系統中有哪些資料庫
securityadmin: 管理 SQL Server 登入相關事項
serveradmin: 調整與設定 SQL Server
setupadmin: 可新增、移除本機之外所連結的 SQL Server
sysadmin: 可處理 SQL Server 中的任何事情(最大權限)
使用權限設定
db_accessadmin: 可以新增或移除資料庫的登入帳戶
db_backupoperator: 可備份資料庫
db_datareader: 觀看資料庫中的資料表內容
db_datawriter: 新增、修改、刪除資料庫中資料表的內容
db_ddladmin: 此角色可以新增、修改、刪除資料庫中的物件
db_denydatareader: 不允許觀看資料庫中資料表的內容
db_denydatawriter: 不允許改變資料庫中資料表的內容
db_owner: 擁有維護與設定資料庫的權限(包含資料庫的所有權限) (最大權限)
db_securityadmin: 可管理資料庫物件的擁有者.資料庫角色.角色的成員.權限
public: 資料庫的使用者都屬於public角色(擁有預設的資料庫權限)
資安心得
以上的防護方法不一定執行完就絕對安全,攻擊者的方法會進化,在未來某一天可能會失效。
想要更完善的保護需要定期的觀察,或是寫程式偵測伺服器狀態,以避免因忙碌而疏忽。
除了做好防護,定期的備份也要確實執行,自動更新 Windows 系統安全性及病毒碼。
對於資安的議題,請各位不要覺得麻煩,方便性與安全性的對立的,不方便就會相對安全。
相關學習文章
- Windows Server 2012 R2 安裝微軟免費防毒軟體 Microsoft Security Essentials
- SQL Server 每日定期備份與定期刪除舊有備份檔
- Windows Server 如何安裝 SQL Server 2019 免費開發版
如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝