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%左右。有时又能正常启动。如果实在不行,可以考虑更换其他同类软件。