我有一台对外服务的 MS-SQL 资料库主机,最近从事件检视器里面发现一直有不明的攻击者利用暴力破解法想要登入 MS-SQL 管理角色。
事件检视器里几乎全是 MSSQL$MSSQLSERVER 登入失败事件,
观察下来每一天有超过上千次的登入失败,有时同一秒钟就有 10 几次的登入失败。
从 SSMS 管理工具可以显示 Log,开启 「SSMS > 管理 > SQL Server 记录档」
显示 Log 讯息
事件检视器里 MS-SQL 登入失败的讯息归纳有这 2 种。
而讯息 2 中的 ‘admin’ 帐号则会一直改变,例如 root, sys, system 都有可能出现。
表示攻击者一直尝试不同帐号登入,若确认帐号存在後,则会继续用密码暴力破解攻击。
事件检视器会记录来源 IP,我发现 IP 不止一个,表示有不同的主机同时发动攻击。
如果从 IP 反查 的话,会发现来源 IP 在全世界都有,包含欧洲、美洲、亚洲都出现过。
如果未即时处理,可能会有以下风险
此攻击为严重性风险,如有发现需要立即处理。
如果想要避免攻击者登入 MS-SQL 主机,有几种方式可以执行。
接下来我会示范在 Windows Server 2019 如何避免 MS-SQL 受暴力登入攻击
白名单表示符合指定 IP 才可连线,这是一个很有效的防护方式,只是某些客户环境因无法指定 IP而无法这样做。
在「具有进阶安全性的 Windows Defender 防火墙」,建立新连线规则
规则: 连接埠
本机连接埠: TCP / 特定本机连接埠:1433
动作:允许连线
名称: MS-SQL
完成之後,再点击新建立的规则,在「领域」内设定白名单 IP。
开启「开始 > Microsoft SQL Server 2019 > SQL Server 2019 设定管理员」
开启左侧「SQL Server 网路组态 > MSSQLSERVER 的通讯协定 > TCP/IP」
修改「IP 位址 > IPALL > TCP 通讯埠」的值
预设为 1433,修改成其他的通讯埠,并确保并未被使用,可选的范例在 0 ~ 65535。
修改组态设定档需要重启服务才会生效。
注意: 修改连线 port 要注意其他应用程序连线设定也要跟着修改,已允许连线的防火墙 port 也要一起修改。
以管理者角色登入 SSMS 後,在「安全性 > 登入(按右键) > 新增登入」
选择「SQL Server 验证」,输入「登入名称」,密码需勾选「强制执行密码原则」
服务器角色勾选「sysadmin」要取代原有 sa 角色
在「使用者对应」勾选所有的资料库,并勾选下方的「db_owner」
此设定可以取代原有 sa 帐号权限
我们刚刚已经新增了管理者帐号,所以这里就需要用新管理者帐号重新登入。
使用新管理者登入,才可以删除旧有的 sa 帐号。
将预设的 sa 帐号停用并改名後,避免攻击者直接暴力破解 sa 密码
执行「安全性 > 登入 > sa (按右键) > 属性」
在「状态」将「登入」设定「已停用」
执行「安全性 > 登入 > sa (按右键) > 重新命名」
换成别的名字
当我们建立新使用者给应用程序使用时,不要求方便就给予最大权限。
针对使用者帐号能用的权限再赋予就好。
在建立新使用者时,一定要勾选「强制执行密码原则」
密码原则说明
密码复杂性原则是为了阻止暴力攻击而设计,方法是尽可能地增加密码数目。当强制执行密码复杂性原则时,新的密码必须符合下列指导方针:
密码长度最多可达 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 免费开发版
今天要来练习第一道题目及一些基本的操作。 先点CPE历届考古题2013/12/17 的第一题Hell...
今日目标: 做出一个在网页上常会出现的遮屏广告 先来介绍几个 Position 元素 static(...
时间管力大师就是要忙里偷闲 各位应该知道 JavaScript 是单执行绪(单线程)的程序语言,也...
今天来点不一样的!来讲一个我最近常用的 React UI component library,就是 ...
鬼故事 - CS 高手 Credit: Vince mcmahon 灵感来源: UCCU Hacke...