如何安全是MySQL协议的认证?(How secure is authentication in m

2019-07-30 02:39发布

我的用户在使用MS Access和ODBC连接器连接到我的远程MySQL数据库。 我不知道如何安全这一点,在可能的密码泄露给第三方的感觉。 是MySQL协议验证安全窃听,甚至人在这方面的中间人攻击? 我将与防止窃听的安全非常高兴。 请注意,我关心的是唯一的身份验证,我不关心数据披露。

请不要回复,我应该使用SSL。 我知道这将是理想不过的设置似乎并不十分简单。 无论如何,我想知道什么是普通MySQL协议的安全水平。

Answer 1:

它是什么,你想成为“ 安全的窃听,甚至人在这方面的中间人攻击 ”? 您的密码,或者你的数据?

你的问题的标题专指认证 。 MySQL的不保护你的密码不被泄露(它没有明文发送,并使用随机数击败重放攻击)的合理的工作。 引用MySQL协议的内部 :

MySQL的4.1及更高版本

请记住,mysql.user.Password店SHA1(SHA1(密码))

  • 服务器发送一个随机字符串(加扰)到客户端
  • 客户端计算:
    • stage1_hash = SHA1(密码),使用用户已经输入的密码。
    • 标记= SHA1(加扰+ SHA1(stage1_hash))XOR stage1_hash
  • 客户端发送的令牌服务器
  • 服务器计算
    • stage1_hash” =令牌XOR SHA1(加扰+ mysql.user.Password)
  • 该服务器比较SHA1(stage1_hash')和mysql.user.Password
  • 如果它们是相同的,密码是好的。

(注SHA1(A + B)为A与B的级联的SHA1)

该协议修复旧的缺陷,也不Snooping在电线也不mysql.user.Password足以用于连接成功。 但是,当一个既mysql.user.Password和电线上截获的数据,他有足够的信息来连接。

然而,验证的会话继续以明文方式:窃听者就可以看到所有的查询和结果; 和MITM将能够做出改变,以相同的。 正如指出的手册 :

默认情况下,MySQL使用的客户端和服务器之间的非加密连接。 这意味着有人可以访问网络可以看到你的通信,并期待在数据被发送或接收。 他们甚至可以更改数据,而它在客户端和服务器之间传输。

虽然你可能不喜欢的答案,SSL是一个旨在打败两个数据被窃听(还能如何通信进行加密?)和MITM攻击的工具 (还能怎么一方验证其同伴是它认为谁是?)。 事实上,如果MySQL客户端 - 服务器协议单独击败了这些威胁,那么也就没有理由使用SSL上的MySQL(和因此不太可能是一个支持的配置)。



Answer 2:

简短的回答:是的,该协议是由窃听和中间人攻击安全。

只有当攻击者成功嗅出认证尝试如果攻击者知道mysql.user的内容,那么他就可以对后续的服务器进行身份验证。 例如,如果你正在使用两个不同的MySQL服务器和攻击者能够访问到其中一个相同的密码,他也可以连接到第二个服务器。



文章来源: How secure is authentication in mysql protocol?