作为一名数据库管理员,你曾经在一个情况下当你数据库面临蛮力攻击?蛮力攻击可以启动对MySQL的用户帐户。MySQL回复成功或错误的基础上提供的凭证,并验证所需的时间几乎是相同的。因此,攻击者可以推出一个蛮力攻击快速MySQL用户帐户,可以尝试许多不同的密码。
根据加密,蛮力攻击由攻击者尝试许多密码或密码希望最终猜测正确。攻击者系统地检查所有可能的密码和密码,直到找到正确的一个。
它不只是蛮力攻击;IT行业最近出现了稳定的增长在分布式拒绝服务(DDoS)攻击。你也有针对性的在这种类型的连接流在端口3306上吗?
今天我们要介绍一种特殊的插件,也就是说。,connection_control插件!在MySQL 8.0中引入的,也与MySQL 5.7和MySQL 5.6。
连接控制插件是什么?
连接控制插件库允许管理员介绍越来越延迟服务器响应后连接指定数量的连续失败的登录尝试。
使用一个连接控制插件背后的想法是配置一个MySQL服务器,服务器将推迟其响应。未经授权的用户或客户端不知道是否密码是正确的,除非服务器回复。因此,如果攻击者攻击服务器通过产卵多个连接请求,这样的连接必须是活跃的,直到时间服务器回复。引入延迟使得攻击者更难,因为现在资源忙于确保连接请求是活跃的。这种技术可以减缓蛮力攻击MySQL用户帐户。
插件库包含两个插件:
- CONNECTION_CONTROL检查传入的连接尝试,会增加服务器响应时间。这个插件也暴露系统变量,使其操作配置和状态变量提供了基本的监控信息。raybet雷竞技竞猜在线官网
- CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS实现一个INFORMATION_SCHEMA表暴露更详细的监测信息,连接尝试失败。raybet雷竞技竞猜在线官网
如何安装连接控制插件吗
To在运行时加载插件,使用这些语句,根据需要调整,所以后缀为您的平台。在这里我将测试它雷竞技下载官网对MySQL 5.7.36 Percona服务器:
|
1
2
3
4
|
mysql>
安装插件
CONNECTION_CONTROL
SONAME
“connection_control.so”;
安装插件
CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS
SONAME
“connection_control.so”;
查询好吧,0
行
影响(0.01sec)
查询好吧,0
行
影响(0.00sec)
|
或者,你可以安装插件。在my . cnf中所做添加这些选项(mysqld)下选项组在MySQL配置文件)(/ etc / my . cnf中所做:
|
1
2
3
4
5
|
(
mysqld
]
插件
- - - - - -
负载
- - - - - -
添加
=
connection_control
所以
连接
- - - - - -
控制
=
FORCE_PLUS_PERMANENT
连接
- - - - - -
控制
- - - - - -
失败的
- - - - - -
登录
- - - - - -
尝试
=
FORCE_PLUS_PERMANENT
|
现在让我们更深入的看这些配置选项:
- plugin-load-add = connection_control.so
——加载connection_control。所以图书馆每次服务器已启动。
- connection_control = FORCE_PLUS_PERMANENT
——防止服务器没有运行CONNECTION_CONTROL插件,和服务器启动失败,如果插件不初始化成功。
- connection-control-failed-login-attempts = FORCE_PLUS_PERMANENT
——防止服务器没有运行CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS插件,和服务器启动失败,如果插件不初始化成功。
验证插件安装,重启服务器并检查INFORMATION_SCHEMA。表或使用插件显示插件声明:
|
1
2
3
4
5
6
7
8
9
|
mysql>
选择
PLUGIN_NAME,PLUGIN_STATUS
从
INFORMATION_SCHEMA。插件
在哪里
PLUGIN_NAME
就像
“连接%”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
|PLUGIN_NAME
|PLUGIN_STATUS|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
|CONNECTION_CONTROL
|活跃的
|
|CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS|活跃的
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
|
配置连接控制阈值
现在,让我们来配置服务器响应失败的连接尝试使用这些服务器延迟参数。我们将设置阈值的连续失败连接初步三并添加一个连接至少一秒的延迟。
|
1
2
3
|
mysql>
集全球
connection_control_failed_connections_threshold=3;
集全球
connection_control_min_connection_delay=1000;
集全球
connection_control_min_connection_delay=90000;
|
另外,设定并坚持变量在运行时,使用这些语句:
|
1
2
|
mysql>
集
坚持connection_control_failed_connections_threshold=3;
集
坚持connection_control_min_connection_delay=1000;
|
此外,您可以添加这些选项在MySQL (mysqld)选项组配置文件)(/ etc / my . cnf中所做调整以后。
|
1
2
3
4
5
|
(
mysqld
]
connection_control_failed_connections_threshold
=
3
connection_control_min_connection_delay
=
1000年
connection_control_max_connection_delay
=
2147483647
|
让我们更详细地讨论这些变量:
- connection_control_failed_connections_threshold:
——连续连接尝试失败的数量允许账户之前服务器添加一个延迟后续连接尝试。 - connection_control_min_connection_delay
——连接失败的最小延迟毫秒高于阈值。 - connection_control_max_connection_delay
——连接失败的最大延迟毫秒高于阈值。
检测和监控的连接raybet雷竞技竞猜在线官网
第一个终端:
注意,这里我们将添加一个最低一秒钟延迟并设置阈值三个失败的连接。最大连接延迟设置为90秒。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
mysql>
集全球
connection_control_failed_connections_threshold=3;
集全球
connection_control_min_connection_delay=1000;
集全球
connection_control_max_connection_delay=90000;
查询好吧,0
行
影响(0.00sec)
查询好吧,0
行
影响(0.00sec)
查询好吧,0
行
影响(0.00sec)
mysql>
显示
变量
就像
“% connection_control %”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Variable_name
|
价值
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|connection_control_failed_connections_threshold|3
|
|connection_control_max_connection_delay
|90000年|
|connection_control_min_connection_delay
|1000年|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
3
行
在
集
(0.00sec)
|
试图获取这些变量的值:
|
1
2
3
4
5
6
7
8
9
10
|
mysql>
选择
*
从
information_schema.connection_control_failed_login_attempts;
空
集
(0.00sec)
mysql>
显示
全球
状态
就像
“connection_control_ %”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Variable_name
|
价值
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Connection_control_delay_generated|0
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
1
行
在
集
(0.00sec)
|
最初,没有连接尝试失败和没有连接延迟生成的因为我们是新配置的参数。所以,你可以看到有一个空的集为information_schema.connection_control_failed_login_attempts和零Connection_control_delay_generated。
第二个终端:
使用上面的设置,我测试了蛮力为53个假的连接。
打开另一个终端,作为根用户执行这些不正确的连接,每次指定一个错误密码。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
(
根
@
知识产权
- - - - - -
xxx
- - - - - -
xx
- - - - - -
xx
- - - - - -
xx
~
]
我在的seq 1 53 #;做一次mysql mysql -uroot - p“try_an_incorrect_password”
- - - - - -
h
xxx
.xx
以下方式
以下方式
2
>
&
1
>
/
dev
/
零
|
grep
咩
;
完成
0.093
0.092
0.093
1.093
2.093
3.105
4.093
5.093
…
…
45.092
46.093
47.093
48.093
49.092
50.093
|
发生在这些联系是什么?
- 在MySQL processlist,每个连接将在“在connection_control插件。”
- 每个连接将经历虽小但明显延迟后第三次连接尝试将继续增加,直到你做最后的尝试。每次失败,延误增加了一秒钟,直到达到最大极限。意思如果50建立连接登录失败三次后,第51连接将51秒,和52连接再次将52秒,等等。这意味着延迟持续增加直到connection_control_max_connection_delay是达到了。因此,自动化的蛮力攻击工具将不再那么有用,因为他们将面临持续的延迟。
第一个终端
现在切换回第一个终端和复核的变量的值。
connection_control监控所有连接尝试失败开始raybet雷竞技竞猜在线官网,连续跟踪为每个用户连接尝试失败。
直到连续失败的尝试小于阈值,即:3,在我们的例子中,用户没有经历任何延迟。这应该避免延迟在真实的情况下,用户错误输入他/她的密码。
在这里你可以发现Connection_control_delay_generated的状态现在是50,CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS是53岁。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
mysql>
显示
全球
状态
就像
“connection_control_ %”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Variable_name
|
价值
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Connection_control_delay_generated|50
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
1
行
在
集
(0.00sec)
mysql>
选择
FAILED_ATTEMPTS
从
INFORMATION_SCHEMA.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
+ - - - - - - - - - - - - - - - - - - +
|FAILED_ATTEMPTS|
+ - - - - - - - - - - - - - - - - - - +
|
53|
+ - - - - - - - - - - - - - - - - - - +
1
行
在
集
(0.00sec)
|
当你想做一个成功的/真正的登录吗?
请注意t他服务器将继续为所有后续介绍这样一个延迟连接和失败第一个成功的连接。因此,延迟生成的53岁后的第一个成功的登录尝试失败的登录是53秒。假定MySQL不添加任何延迟第一次连接成功后,在这种情况下,攻击者会表明延迟意味着错误的密码,因此免费等待连接后等待一个特定的时间。所以,如果你想做一个成功的连接N的不成功的尝试之后,你一定会经历一个N秒的延迟首次成功登录尝试。
|
1
2
3
4
5
6
7
8
9
|
((电子邮件保护)
- - - - - -xxx- - - - - -xx- - - - - -xx- - - - - -xx~)#日期;mysql -uroot - p 'correct_password -hxxx.xx.x。现在x - e”选择();”;日期
星期二4月1806:27:36点UTC2023年
mysql:(警告)
使用
一个
密码
在
的命令行接口可以是不安全的。
+ - - - - - - - - - - - - - - - - - - - - - - - - +
|
现在()
|
+ - - - - - - - - - - - - - - - - - - - - - - - - +
|2023年- - - - - -04- - - - - -1818:28:29|
+ - - - - - - - - - - - - - - - - - - - - - - - - +
星期二4月1806:28:29点UTC2023年
|
哪个用户造成这种蛮力攻击?
你也可以确定从哪个用户或主机这些连接尝试失败。
|
1
2
3
4
5
6
7
|
mysql>
选择
*
从
information_schema.connection_control_failed_login_attempts;
+ - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
|USERHOST
|FAILED_ATTEMPTS|
+ - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
|
“根”@“xxx-xx-xx-xx”
|
53|
+ - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
1
行
在
集
(0.00sec)
|
如何重置失败连接阈值
如果您想重置这些计数器,你只需要再次赋值的变量connection_control_failed_connections_threshold:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mysql>
集全球
connection_control_failed_connections_threshold=4;
查询好吧,0
行
影响(0.00sec)
现在你可以看到值重置!
mysql>
选择
*
从
information_schema.connection_control_failed_login_attempts;
空
集
(0.00sec)
mysql>
显示
全球
状态
就像
“connection_control_ %”;
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Variable_name
|
价值
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
|Connection_control_delay_generated|0
|
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
1
行
在
集
(0.00sec)
|
结论
MySQL连接控制可以非常有用的限制蛮力攻击的不便或不体面的TCP连接。雷竞技下载官网Percona MySQL服务器也支持这些插件。默认情况下,它不启用,但您可以执行相同的步骤来启用插件为您的环境,建立安全连接。
总而言之,插件提供了以下:
- 配置一个阈值之后,越来越延迟触发
- 能够配置在服务器的延迟回复最小和最大极限
- 一个信息模式视图查看监控信息相关的连接尝试失败raybet雷竞技竞猜在线官网
请检查我们的最新博客如何保证数据库安全:






你好
这可能最终在“太多的连接”的情况下,如果你经常尝试连接
https://bugs.mysql.com/bug.php?id=107570
这个特性可以用来(d) dos mysql服务器,只要你可以连接到港口。