安全研究 | MySQL 流量深度解析:解码数据库访问控制与身份验证流程

2025-05-29 来源:长扬科技

一、MySQL协议概述


1. MySQL数据库发展简史


MySQL诞生背景与重要里程碑:MySQL由瑞典MySQL AB公司于1995年开发,最初目标是提供一个快速、可靠的关系型数据库管理系统,2000年开源是其发展的重要转折点。


Oracle收购与社区版分支:2010年Oracle收购Sun Microsystems后获得MySQL所有权,引发社区对MySQL未来开源性的担忧,促使多个分支项目出现。


MariaDB的诞生与发展:MariaDB由MySQL原创始人Michael "Monty" Widenius于2009年创建,作为MySQL的开源替代品,保持与MySQL的高度兼容性同时提供更多创新特性。


开源社区贡献与驱动力:MySQL的成功很大程度上归功于全球开发者社区的持续贡献,包括性能优化、安全补丁和新功能开发,使其成为最流行的开源数据库之一。


2. MySQL客户端/服务器协议架构


经典的C/S架构:MySQL采用典型的客户端/服务器架构,客户端发起请求,服务器处理并返回响应。


基于TCP/IP协议:客户端与服务器之间通过可靠的TCP/IP协议进行通信,保证数据传输的可靠性和顺序性。


长连接机制:MySQL 客户端与服务器建立连接后,通常会维持长连接,避免频繁建立和断开连接的开销,提高效率。


同步请求-响应模式:客户端发送请求后,通常会等待服务器的响应,属于同步请求-响应模式,但也支持异步操作(例如在某些客户端库中)。


Socket通信:客户端和服务器之间的通信底层基于 Socket 套接字实现,通过网络进行数据交换。


轻量级与高效设计:MySQL 协议设计目标是轻量级和高效,减少网络开销,提升数据库性能。


3. 协议版本历史与演进


MySQL 3.x协议:基础协议框架,认证机制简单:早期协议版本,建立了客户端-服务器通信的基础框架,认证方式基于简单的密码哈希,安全性较弱,功能相对有限。


MySQL 4.1协议:增强密码认证,字符集支持:关键改进是引入了更安全的密码认证机制 (challenge-response 挑战-响应模式),有效抵抗中间人攻击,并增强了字符集支持,更好地支持国际化应用。


MySQL 5.x协议:预处理语句,插件式认证架构:添加了预处理语句支持,提升了SQL执行效率和安全性(防止SQL注入),改进了二进制日志格式,并引入了插件式认证架构,为更灵活和可扩展的认证方式奠定基础。


MySQL 8.0协议:更强认证插件,X Protocol,连接属性优化:默认采用更安全的 caching_sha2_password 认证插件,显著提升默认认证强度,引入 X Protocol 支持 NoSQL 文档存储和操作,改进了连接属性传递机制,优化了网络层性能,更好地支持现代应用场景。


4. MySQL通信基本单元


包头部结构:每个MySQL协议包由4字节头部和变长数据体组成,头部包含3字节的包长度和1字节的序列ID。


包大小限制:最大包大小为16MB(0xFFFFFF),超过此限制需分包传输。


序列ID机制:序列ID从0开始,每发送一个包自增1,达到255后循环归零,用于检测包丢失和乱序。


分包处理策略:大型查询结果集通常需要分包传输,客户端需要重组这些分包以获取完整数据。


空包处理:MySQL协议允许发送仅包含头部的空包(数据长度为0),通常用于特定控制场景。


包边界识别:由于包头明确定义了长度,使得接收方能够准确识别包边界,提高协议解析效率。


图片1.png图 1


5. MySQL协议状态机模型


基本状态定义:MySQL协议基于状态机设计,包括连接阶段、命令阶段、结果集传输阶段等多个状态。


连接阶段状态:包括初始握手、认证请求、认证验证、认证切换等子状态。


命令阶段状态:包括命令等待、命令解析、命令执行等子状态。


结果集传输状态:包括字段定义传输、行数据传输、传输完成等子状态。


状态转换触发条件:每个状态有明确的转换条件和处理逻辑,由特定的包类型或内部事件触发。


异常状态处理:包括超时处理、错误包处理、连接中断处理等异常状态转换逻辑。


会话状态维护:服务器为每个客户端连接维护独立的状态机实例,确保多客户端并发访问的隔离性。


状态持久化:某些状态信息(如事务状态、临时表)在会话期间持久保存,直到显式重置或会话终止。


状态机安全保障:状态机设计确保协议交互的可预测性和稳定性,防止非法状态转换导致的安全问题。


二、MySQL身份验证机制


1. 密码加密机制演变历史


旧式认证(Old Password Authentication):MySQL 4.1之前使用的简单哈希算法,仅对密码进行单次哈希,安全性较低,容易受到彩虹表攻击。


新式认证(Native Password Authentication):MySQL 4.1引入,采用双重SHA1哈希算法,显著提高了密码存储安全性,成为长期以来的默认认证方式。


SHA-256认证:MySQL 5.6引入,基于更安全的SHA-256算法,支持SSL连接下的安全密码传输,为高安全性需求场景提供更强保护。


2. 挑战-响应机制(Challenge-Response)工作原理


MySQL采用挑战-响应机制防止密码明文传输,服务器先发送随机挑战数据(salt),客户端使用此salt和用户密码计算响应值,服务器验证响应值而非直接比对密码,有效防止嗅探攻击和重放攻击。


3. 身份验证插件架构


mysql_native_password:基于SHA1算法的传统认证插件,兼容性最佳,但安全性相对较低,MySQL 8.0之前的默认插件。


sha256_password:使用SHA-256算法的增强认证插件,需要SSL连接或RSA密钥对支持,提供更高安全性但有性能开销。


caching_sha2_password:MySQL 8.0默认认证插件,结合SHA-256安全性与内存缓存机制,平衡了安全性和性能需求。


auth_socket:基于操作系统用户的Unix套接字认证,仅适用于本地连接,无需密码即可验证系统用户身份。


PAM认证插件:集成操作系统PAM(可插拔认证模块)框架,支持LDAP、Kerberos等外部认证系统集成。


4. 客户端认证响应包(Authentication Response)结构解析


客户端认证响应包包含客户端能力标志、最大包大小、字符集、保留字段、用户名、加密密码响应和数据库名等字段,其中加密密码响应格式因认证插件而异,整个包结构设计确保安全传输认证信息并支持不同认证机制的灵活扩展。


5. 认证失败处理与防护机制


失败延迟:MySQL实现了认证失败延迟机制,每次失败后增加响应延迟,有效防止暴力破解攻击。


失败日志:认证失败事件会被记录到错误日志,包含时间戳、用户名和客户端IP,便于安全审计。


账户锁定:MySQL 5.7.17后支持账户自动锁定功能,连续多次认证失败后临时锁定账户。


防护配置:通过max_connect_errors参数控制允许的连续失败次数,超过阈值后阻止来源主机的后续连接。


图片2.png图 2


三、MySQL连接建立流程


1. TCP三次握手与连接建立


标准TCP连接过程:MySQL连接首先通过标准TCP三次握手建立,客户端发送SYN包,服务器回应SYN+ACK,客户端确认ACK。


默认端口监听:MySQL服务器默认在TCP 3306端口监听连接请求,可通过配置文件修改。


图片3.png图 3


2. 服务端初始握手包(Server Greeting)


在 TCP 连接建立之后,MySQL 服务器会主动向客户端发送握手初始化消息,也称为 "Server Greeting"。


  • 协议版本标识(1字节):通常为10(0x0A),表示Protocol::HandshakeV10

  • 服务器版本字符串:NULL结尾的变长字符串

  • 连接ID:当前会话的唯一标识符

  • 认证挑战数据:20字节随机盐值(分两部分传输),用于密码加密

  • 服务器能力标志(4字节):指示支持的协议特性(长密码、压缩、SSL等)

  • 字符集:服务器默认字符集编码

  • 服务器状态标志(2字节):表示自动提交、事务状态等

  • 认证插件信息:指定使用的认证方式

图片4.png

图 4


3. 客户端认证请求包


客户端在收到服务器握手包后,会发送认证请求包,包含用户名、密码等信息。


  • 用户名:客户端输入的用户名

  • 密码:客户端输入的密码

  • 数据库名:客户端连接的数据库名

  • 认证插件信息:指定使用的认证方式

图片5.png

图 5


4. 服务器认证响应包


服务器收到客户端认证请求包后,会发送认证响应包,包含认证结果和认证插件信息。


如果认证成功,服务器会发送认证成功包,响应码为OK_Packet(0x00)

图片6.png

图 6


如果认证失败,服务器会发送认证失败包,响应码为ERR_Packet(0xFF)

图片7.png

图 7


5. 认证成功后的会话建立与命令执行


  • 认证成功后,客户端与服务器之间建立了一个有效的会话连接;

  • 客户端可以开始发送SQL命令请求包(COM_QUERY),格式为命令标识符(0x03)后跟SQL语句;

  • 服务器接收并执行SQL命令,返回相应的结果集或状态信息;

  • 会话期间维持TCP连接,直到客户端发送COM_QUIT命令(0x01)或连接超时断开;

  • 整个交互过程遵循MySQL客户端/服务器协议规范,确保命令的可靠执行和结果的准确传输。

图片8.png

图 8


四、长扬科技在MySQL数据库安全分析领域的核心优势


作为国家信息安全漏洞库(CNNVD)的重要技术支撑单位,长扬科技凭借深厚的工控安全技术积累,成功将核心技术优势扩展至MySQL数据库安全分析领域


公司突出的跨域技术融合能力体现在:


将200+工控漏洞分析的深度逆向工程经验直接检测MySQL协议包解析,构建了业界领先的全版本MySQL协议深度解析框架


依托艾默生DCS、西门子PLC、VxWorks等工控0Day漏洞挖掘领域的核心方法论,创新性与工控漏洞挖掘技术迁移至数据库安全领域;


基于公司威胁情报库的数据优势,实现MySQL攻击行为的精准识别和实时预警,并将MySQL安全监测技术深度应用于电力、石化、制造等关键信息基础设施领域,结合Modbus、DNP3、IEC 61850等工控协议分析能力,形成了独具特色的OT/IT融合安全设备体系,为国家关键信息基础设施保障提供了多样化的专业技术支撑。


长扬科技安全研究院


长扬科技安全研究院专注工控协议和安全漏洞库研究,具备持续性的工业协议分析能力、漏洞挖掘以及病毒处理能力、灾后数据恢复能力,为国家多个管理机构提供漏洞上报和预警信息上报。分析过200个以上的工控漏洞,挖掘出艾默生DCS、西门子PLC、VxWorks等多款设备的0Day漏洞。成立至今,累计上报国家工业信息安全漏洞库(CICSVD)原创通用型漏洞百余个,国家信息安全漏洞库(CNNVD) 原创通用型漏洞百余个。


长扬科技工控漏洞库维护着数千个工控漏洞及工控漏洞利用代码和扫描指纹、近千种各工控设备厂商产品信息;拥有威胁情报库、安全事件知识库数量110万余条,同时维护着数百种工控固件/软件版本识别指纹库。已获得国家信息安全漏洞库(CNNVD)-二级技术支撑单位、国家信息安全漏洞库(CNNVD)年度优秀技术支撑单位、2021年度国家工业信息安全漏洞库技术支持组成员单位、工业信息安全应急服务支撑单位(NISIA)、工业信息安全监测预警网络建设-CICS-CERT支撑单位等称号。


目前,长扬科技提交的工业和信息化部网络安全威胁和漏洞信息共享平台通用网络产品安全漏洞库的漏洞中,有数十项漏洞已被收录,包括超危、高危、中危漏洞。


ISO9001

质量管理体系认证

ISO14001

环境管理体系认证

ISO27001

信息安全管理体系认证

ISO20000

信息技术服务管理体系认证

信息系统

安全运维服务资质