MySQL 5.7 鉴别信息密码安全性分析

570 阅读2分钟

MySQL 5.7 传输协议分析

  1. Client 发起认证请求,经 1``2``3TCP 协议三次握手后开始通信;

无标题.png

  1. Server 通过 MySQL 协议 Sever Greeting,向 Client 传输数据,具体如下

无标题.png 重点关注两个SaltAuthentication Plugin报文字段,Server 向 Client 说明以下信息:

  • 当前的认证插件是 mysql_native_password
  • 提供两个 Salt值用于实现身份认证。
  1. Client 向 Server 发送 Login Request 请求,携带信息

无标题.png 重点关注UsernamePassword报文字段,Client 向 Server 说明以下信息:

  • 用户名是 root
  • password是经过加密传输的。

根据 MySQL 官网,password的加密算法为

SHA1( password ) XOR SHA1( "20-bytes random data from server" SHA1( SHA1( password ) ) )

其中 20-bytes random data from server为步骤 2 中 Salt字段,而password具体使用算法与 Authentication Plugin相关。

  1. Server 向 Client 发送 Response OK,代表认证成功。

无标题.png

MySQL 认证模式总结

Mysql采用的是一种 challenge/response(挑战-应答)的认证模式

  1. 客户端连接服务器;
  2. 服务器发送随机字符串 challenge给客户端,也就是协议分析中的 Sal
  3. 客户端发送 username + response 给服务器,其中 response 为协议分析中的 password

response = HEX(SHA1(password) ^ SHA1(challenge + SHA1(SHA1(password))))

  1. 服务器验证 response

MySQL 5.7 鉴别信息存储保密性分析

image.png authentication_string是用户的密码存在数据库中的字段,根据官网,其加密算法为 SHA1,具体 image.png

总结

根据抓包对报文的分析、MySQL 官网的解读,涉及等保测评的测评结果应为:

当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。当进行远程管理时,数据库通过 mysql_native_password 插件,利用 SHA1 算法对鉴别信息进行加密,且每次认证都会生成 Salt 保证无法构造登录信息,从而防止鉴别信息在网络传输过程中被窃听。
应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。数据库通过 mysql_native_password 插件,利用 SHA1 算法对鉴别信息在传输过程中的保密性进行保护,但未采用密码算法对重要配置信息的传输保密性进行保护。
应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。数据库利用两次 SHA1 算法保证鉴别信息的保密性,但未采用密码算法对重要配置信息的存储保密性进行保护。