Skip to content

理財工程師 Mars

運用工程師能力創造財富自由人生

  • 網頁開發
    • ASP.NET MVC 開發實作
    • 伺服器管理
    • 資料庫管理
      • SQL Server
      • MySQL
      • Cassandra
      • Oracle
    • WordPress 架站
      • 安裝與設定
      • 修改技巧
      • 實用外掛
      • 金流
      • SEO
      • 資安防護
    • C# 技術筆記
  • 程式交易
    • 券商 API 串接
      • 證交所 API
      • 群益 API
      • 富邦 API
  • 投資理財入門
    • 加密貨幣理財
  • 站長推薦
    • 站長服務
    • 關於站長
    • 新手書單推薦
    • 實用工具
    • 個人成長

理財工程師 Mars

運用工程師能力創造財富自由人生

  • 網頁開發
    • ASP.NET MVC 開發實作
    • 伺服器管理
    • 資料庫管理
      • SQL Server
      • MySQL
      • Cassandra
      • Oracle
    • WordPress 架站
      • 安裝與設定
      • 修改技巧
      • 實用外掛
      • 金流
      • SEO
      • 資安防護
    • C# 技術筆記
  • 程式交易
    • 券商 API 串接
      • 證交所 API
      • 群益 API
      • 富邦 API
  • 投資理財入門
    • 加密貨幣理財
  • 站長推薦
    • 站長服務
    • 關於站長
    • 新手書單推薦
    • 實用工具
    • 個人成長
security-mssql-login-attack
SQL Server

如何避免 MS-SQL 暴力登入攻擊 (嘗試評估密碼時發生錯誤、找不到符合所提供名稱的登入)

Mars 2021 年 6 月 2 日

我有一台對外服務的 MS-SQL 資料庫主機,最近從事件檢視器裡面發現一直有不明的攻擊者利用暴力破解法想要登入 MS-SQL 管理角色。

事件檢視器

事件檢視器

事件檢視器裡幾乎全是 MSSQL$MSSQLSERVER 登入失敗事件,
觀察下來每一天有超過上千次的登入失敗,有時同一秒鐘就有 10 幾次的登入失敗。

從 SSMS 管理工具可以顯示 Log,開啟 「SSMS > 管理 > SQL Server 記錄檔」

顯示 Log 訊息

SSMS 管理工具可以顯示 Log

事件檢視器裡 MS-SQL 登入失敗的訊息歸納有這 2 種。

  1. “使用者 ‘sa’ 的登入失敗。 原因: 嘗試評估密碼時發生錯誤。”
  2. “使用者 ‘admin’ 的登入失敗。 原因: 找不到符合所提供名稱的登入。”

而訊息 2 中的 ‘admin’ 帳號則會一直改變,例如 root, sys, system 都有可能出現。
表示攻擊者一直嘗試不同帳號登入,若確認帳號存在後,則會繼續用密碼暴力破解攻擊。

事件檢視器會記錄來源 IP,我發現 IP 不止一個,表示有不同的主機同時發動攻擊。
如果從 IP 反查 的話,會發現來源 IP 在全世界都有,包含歐洲、美洲、亞洲都出現過。

如果未即時處理,可能會有以下風險

  1. 管理者密碼被破解,攻擊者隨意瀏覽、刪除、偷取資料,甚至勒索請求付款。
  2. 伺服器效能變慢,主機忙於回應不必要的登入請求。
  3. 伺服器 Log 記錄不正常膨脹,佔用硬碟空間。
  4. Vollgar 攻擊事件,入侵主機使用資料庫挖礦加密貨幣。
  5. 植入病毒程式,繼續攻擊其他主機。

此攻擊為嚴重性風險,如有發現需要立即處理。

如果想要避免攻擊者登入 MS-SQL 主機,有幾種方式可以執行。

  1. 建立防火牆白名單可連線 IP
  2. 更改連線 port,不要使用預設 1433 port。
  3. 另建管理者帳號並停用 sa 帳號
  4. 賦予需要的使用權限並啟用密碼原則

接下來我會示範在 Windows Server 2019 如何避免 MS-SQL 受暴力登入攻擊

Contents

  • 1 建立防火牆白名單可連線 IP
  • 2 更改連線 port,不要使用預設 1433 port。
  • 3 另建管理者帳號並停用 sa 帳號
    • 3.1 另建管理者帳號
    • 3.2 停用並改名預設 sa 登入帳號
  • 4 賦予需要的使用權限並啟用密碼原則
    • 4.1 強制執行密碼原則設定
    • 4.2 伺服器角色設定
    • 4.3 使用權限設定
  • 5 資安心得

建立防火牆白名單可連線 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」

更改連線 port,不要使用預設 1433 port

修改「IP 位址 > IPALL > TCP 通訊埠」的值
預設為 1433,修改成其他的通訊埠,並確保並未被使用,可選的範例在 0 ~ 65535。

更改連線 port,不要使用預設 1433 port

修改組態設定檔需要重啟服務才會生效。

注意: 修改連線 port 要注意其他應用程式連線設定也要跟著修改,已允許連線的防火牆 port 也要一起修改。

另建管理者帳號並停用 sa 帳號

另建管理者帳號

以管理者角色登入 SSMS 後,在「安全性 > 登入(按右鍵) > 新增登入」

另建管理者帳號並停用 sa 帳號

選擇「SQL Server 驗證」,輸入「登入名稱」,密碼需勾選「強制執行密碼原則」

另建管理者帳號並停用 sa 帳號

伺服器角色勾選「sysadmin」要取代原有 sa 角色

另建管理者帳號並停用 sa 帳號

在「使用者對應」勾選所有的資料庫,並勾選下方的「db_owner」

另建管理者帳號並停用 sa 帳號

此設定可以取代原有 sa 帳號權限

停用並改名預設 sa 登入帳號

我們剛剛已經新增了管理者帳號,所以這裡就需要用新管理者帳號重新登入。
使用新管理者登入,才可以刪除舊有的 sa 帳號。

將預設的 sa 帳號停用並改名後,避免攻擊者直接暴力破解 sa 密碼

執行「安全性 > 登入 > sa (按右鍵) > 屬性」

另建管理者帳號並停用 sa 帳號

在「狀態」將「登入」設定「已停用」

執行「安全性 > 登入 > sa (按右鍵) > 重新命名」

換成別的名字

賦予需要的使用權限並啟用密碼原則

當我們建立新使用者給應用程式使用時,不要求方便就給予最大權限。
針對使用者帳號能用的權限再賦予就好。

強制執行密碼原則設定

在建立新使用者時,一定要勾選「強制執行密碼原則」

密碼原則說明
密碼複雜性原則是為了阻止暴力攻擊而設計,方法是盡可能地增加密碼數目。當強制執行密碼複雜性原則時,新的密碼必須符合下列指導方針:

  1. 密碼不包含使用者的帳戶名稱。
  2. 密碼長度至少為八個字元。
  3. 密碼包含下列四種類別的其中三種:
    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 免費開發版

如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝

加入社團一起討論

關注我的 IG

MSSQL登入攻擊資安

文章導覽

Windows Server 安裝 MySQL Community 免費社群版
[ASP.NET MVC] 如何使用 MOTP 搭配 OTP Authenticator App 產生一次性密碼登入

熱門文章

  • 舊版 Office 2010 – 免破解,到期後可繼續使用 - 155,026 views
  • 如何將亂碼簡體檔名、資料夾在繁體電腦正常顯示-使用 ConvertZZ 免費軟體 - 106,555 views
  • Windows Server 如何安裝 SQL Server 2019 免費開發版 - 87,638 views
  • 免費 FTP 伺服器 FileZilla Server 安裝教學 (新版設定) - 80,469 views
  • 如何設定 Windows 開機自動登入帳號密碼 - 60,726 views
  • 如何申請免費 Let’s Encrypt SSL 自動更新憑證,自架 IIS 站台適用 - 54,290 views
  • 如何在 Win10 / Win11 家用版安裝 Hyper-V 虛擬機器? - 50,957 views
  • 玉山信用卡智能客服剪卡(停卡、註銷) 操作 - 48,726 views
  • [C#][Line] 如何發送 Line Notify 通知訊息 (開發人員用) - 43,777 views
  • Windows Server 2019 如何安裝 IIS 運行 ASP.NET 專案 - 36,721 views

近期文章

  • Word 大綱顯示大小標題:左側功能窗格
  • 電子發票媒體申報檔:9張圖解教學,快速搞定申報
  • 電腦筆電回收 6 管道:舊電腦回收前 5 個必要動作
  • Adobe Firefly 教學:5 大功能 AI 生圖快速上手
  • Brave無廣告瀏覽器:免安裝的無廣告瀏覽器,安全嗎?
Copyright © 宏雲悠遊數位有限公司 (統編 94000171) 版權所有