SQLServer数据库遭受暴力登录密码攻击的处理
1,问题描述
某阿里云服务器中安装由SQLServer2005数据库,采用缺省的端口1433,未禁用sa账号。
由于该服务器处于公网中,被某些恶意软件端口扫描之后,发现了数据库的存在。于是不断发起登录密码攻击,最密集时攻击次数达到每秒30次以上。
因此需要对恶意攻击的IP禁止连接服务器,以保护服务器资源。
2,问题分析
SQLServer2005数据库的端口号不能改,因为外部程序的正常连接采用了这些参数。
(12条消息) sqlserver数据库限制用户登录失败次数_xtf__moji的博客-CSDN博客_sqlserver登录失败锁定
上文提供了一种利用windows系统安全策略,对数据库账号多次登录失败进行锁定的方案,实测是可行的。但不适合本文的情况,因为sa账号是公用的,不能锁定。
服务器上安装了火绒软件,可以录入IP黑名单以禁止连接。但是攻击的IP在不断变化,因此需要动态录入黑名单才能 解决问题。
网上有资料说可以采用数据库的Logon触发器来防止密码攻击。但是需要至少需要2005 sp2。目前是sp1版本,考虑到升级可能会对已有应用产生影响,暂不考虑。
3,解决思路
初步思路是采用火绒的IP黑名单,这就需要两个条件,一是IP黑名单分析,二是IP自动化录入火绒。
IP黑名单分析可以从数据库日志中读取,其中的登录频繁失败的IP就是。
IP自动化录入火绒,考虑到火绒未提供API方式录入,同时也禁止外部程序直接访问其黑名单数据库,因此考虑采用鼠标键盘操作记录器软件来实现。经测试KeymouseGo.exe简单易用,可满足需要。
4,解决方案
综合采用以下手段:
1) 编写一个EXE分析程序,定期从数据库日志中分析,输出需要屏蔽连接的IP,按火绒的导入格式写入某个固定的json文件。
关键查询语句如下,其中具体参数在程序中动态赋值:
EXEC xp_readerrorlog 0,1,'Login failed for user ','','2022-3-31','2022-3-31 8:00','DESC'
2) 火绒软件的IP黑名单编辑界面始终打开,且位于固定的位置,不要被其它窗口覆盖
3) KeymouseGo.exe软件录制好回放操作,循环播放即可定期更新火绒软件的黑名单。
5,部署
最终,在该服务器上部署了如下防攻击措施:
1) 某exe程序,每2分钟分析一次最近10分钟内的数据库登录失败日志,凡失败超过20次的IP,输出到文件:D:\InvalidIP.json
2) KeymouseGo程序,每分钟将上述json文件中的IP导入到火绒黑名单中
3) 火绒采用黑名单策略防止入侵IP继续访问服务器
部署后,实测执行密码攻击的IP被动态更新到了火绒的IP黑名单中,有效抵制了恶意的密码攻击。
6,注意事项
KeymouseGo程序的执行非常依赖于执行环境,如果回放时和录制时环境不一致,那么导入黑名单的操作容易失败。以下是注意事项:
1) 火绒设置界面必须保持窗口位置、窗口内界面元素不动。
2) 必须露出“导入”按钮。
3) 系统输入法必须处于英文状态。
4) 执行次数设置为0,然后点击“启动”,即可周期性导入黑名单。
另外, KeymouseGo程序在服务器上有时启动不起来,似乎死在内存中,cpu却耗用50%左右。有时又能正常启动。如果实在不行,可以考虑更换其他同类软件。