转自:http://www.eol.cn/20030826/3089816.shtml
数据库通信协议分析与安全检测
| |||||||||||||||||||||||
雒群 刘秋实
| |||||||||||||||||||||||
摘要:本文介绍了对SYBASE和MICROSOFT SQL SERVER数据库中CLIENT端和SERVER 数据库技术目前已经渗入到我们生活中的方方面面,数据库的客户端和服务器端的通 二. TDS协议概述 1.协议的历史和版本问题
TDS客户端使用称为表格格式数据流 (TDS) 的 SQL Server 专用应用程序级协议来发送 SQL 语句。数据包由用于 SQL Server 的 Microsoft OLE DB 提供程序、SQL Server ODBC 驱动程序或 DB-Library DLL 生成。TDS 数据包然后被传递给 SQL Server 客户端 Net-Library,客户端 Net-Library 将 TDS 数据包封装为网络协议数据包。在服务器上,服务器 Net-Library 接收网络协议数据包,且析取 TDS 数据包并将其传递给关系数据库服务器。在将结果返回给客户端时,这一进程反向执行。 3.TDS协议定义 TDS是一种协议,一系列描述两个计算机间如何传输数据的规则。象别的协议一样,它定义了传输信息的类型和他们传输的顺序。总之,协议描述了“线上的位”,即数据如何流动。表格数据流协议是建立在TCP/IP Net-Library之上的,包含在TCP数据段内。TDS用1433端口进行数据库通信。 TDS协议的特点: TDS是sybase传送规则表格数据的专用协议·与传送的语言无关 ·与传送的数据无关(长度,字节顺序) ·与具体的网络或硬件平台无关 ·是单一的协议 TDS协议的最大优点是,它负责处理所有数据传送细节。 三.TDS协议分析 TDS协议位于TCP的数据段内,结构如下:
TDS数据库模型的TDS解码信息.它主要包括以下的主题: ●TDS信息头 ●TDS登陆记录 ●TDS SQL请求 ●TDS标记和他们的功能 下图示出了用这些标志的一个客户和一个数据库服务器间连接的例子。在这个例子当中,客户日志中记录的是数据库服务器的信息,请求和接收一些数据(用语言标志),然后再把日志发出去。
下表给出了TDS框架头的格式:
0X01 TDS4。2或7。0的请求报 对于状态: 0X00 下面还有更多的包 ●一个TDS信息类型 ●一个TDS登陆记录 ● 通常包含两个TDS框架 TDS登陆记录包括多个固定长度和可变长度的域。每一个可变长度的域有一个相应的长度类型,表明这个域的长度。 紧跟登陆记录之后是一个对命令信息的回应。服务器会表明注册的成功或失败。一个成功注册的结果是: ●在SQL环境变量里数据库、本地语言和包的大小的改变。 ● 客户和服务器之间能力的交换。
在数据库结构中,客户从数据库服务器中请求服务或数据。服务器对这些请求结果进行回应。客户用下面的TDS信息类型对SQL服务器进行请求: ●信息类型1-----语言命令 ●信息类型15-----对TDS标志类型0X21的正常请求或回应 ●信息类型16-----对TDS标志类型0X21的紧急请求或回应 TDS并没有指出语言命令的语法必须是什么。语言命令的变化范围是整个的Transact-SQL命令设置。 对SQL请求的回应 一个数据库服务器如何回应一个SQL请求呢?假如SQL请求是“select*from发生一系列: 1.发给服务器的是相同的TDS请求格式,而不管发出命令的应用(比如,isql,esql,ODBC,orPowerBuilder)。 2.数据库服务器用TDS的类型4回应SQL请求---回应一个命令 SQL回应会包括客户请求的数据,一行一行的传输。发回给客户的每一行数据的前面会有一个TDS标志,它表明这一行的数据类型。 ●标志是单个位值表明紧跟的数据值的and\or格式 ●标志能够描述固定或可变的数据长度 ● 固定长度的标志没有相应的长度域(因为他们长度是固定的不需要长度域) 这部分列出了TDS的标志类型,描述了它们的功能。重调用一个标志如果是一个单个位值表明下面紧接的数据值and\in的格式.在客户端和数据库服务器的每一个信息交换都包含一个标志位,描述了在信息中包含的数据.标志能描述固定或可变长度的数据长度.固定标志的长度没有相应的长度域.下表列出了不同客户和服务器的标志. 标志被分成下面几种范畴: ●0长度的数据标志.0长度的标志后面没有长度域.数据后面紧跟一个0长度的标志是一种自我描述(比如,行数据) ●固定长度的数据.固定长度的标志后面有一位,二位,四位,或八位的数据.固定长度的标志后面没有长度域. ●可变长度的数据标志.这些标志并不描述0长度或固定长度的数据.这些标志后面是一个两位或四位的长度域,表明后面数据的长度. TDS基本上是一个以标志为基础的协议。一个标志是一个单个的位值,它表明接下来的数据和值的格局。在一个客户机和一个数据库服务器间的每一个信息交换包括一个标志,它描述了包含在信息中的数据。这种自我描述格局允许客户请求数据而不用提前知道一些细节,比如域的类型,返回值的数量和一些别的服务器中存储信息。标志能够描述固定的或可获得的数据长度。 应用在TDS协议中的客户标志包括: ·注册记录 ·语言命令 ·指针命令 ·远程数据库调用过程 ·注意事项 ·动态SQL语句 ·信息 应用在TDS协议中的服务器标志包括: ·注册认证 ·行结果 ·返回身份认证 ·完成回应 ·错误信息 ·注意认证 ·指针身份认证 ·信息回应 四.安全检测很多网络协议的网络下层结构设计的不安全。没有一个基本上安全的下层结构,网络保护是非常困难的。进一步讲,网络是一个根据拓扑结构和浮现技术的非常动态的环境。因为网络内部的公开性和协议的原始设计,总的来说,网络攻击是又快又容易又便宜而且很难探测和跟踪。 构造TDS包向数据库服务器不断发包,通过反复更改TDS协议参数,观察数据库服务器的反映,检查TDS协议存在的问题。 比如SQL SERVER7。0用TDS协议和客户端通信的时候,攻击者向脆弱的SQL SERVER发一个畸形的TDS包可能引起服务器出错甚至崩溃。 五.小结 通过对应用在SYBASE和SQL Server数据库中的TDS协议的分析,测试,检查该协议的安全漏洞和存在的问题,最终形成了一个风险评估的工具。 |