DB2通信协议的解析
tomqq 8/29/2004
1、概述
DB2通信协议是未公开的私密协议,协议比较复杂。由于目前没有能够解析DB2协议的分析工具,所以根据项目需求和实际情况,确定了如下审计方案:
1) 审计数据参照样本最新版本的IBM.DB2.Universal.Database.Eeterprise.Server.Edition.V8.1和8.2,运行平台为:Windows Professional 2000;
2) 通信连接方式使用DB2自带客户端进行;
3) 通过在不同版本、不同设置、3种不同连接方式(CLI、命令编辑器、使用JAVA语言开发的程序)下,执行相同功能的指令,对比所得结果,同时参考其他数据库通信协议,来进行推测和判断。
4) 完成的审计内容包括:数据库登陆行为、登陆结果;SQL语句的内容、执行结果;对数据库操作的部分内容、执行结果;存储过程调用、执行结果;同时对于以上所有内容,记录时间发生时间、源IP、目的IP,操作数据、目的表。
5) 审计结果属于经验数据。
2、DB2协议
DB2协议数据共有特征:
1) 在DB2服务端口(默认为50000),有效载荷第一字节固定为00,第三字节固定为d0,因此可以认为凡是第一字节为00,第三字节为d0的数据包为DB2协议数据;
2) 其中d0后所跟1 字节为操作类型,目前测试发现已有4x系列和5x系列;
3) 相同的功能,在不同的连接方式下,通信数据有一定的差别,目前还没有发现出比较强有力的差别特征;
4) 操作结束后,客户端一般会发出10字节的询问串,服务端应答相应的结果串。
2.1 客户端连接
通过测试对比,对DB2服务端的连接行为,通常有形如以下字段:
客户端向服务端发出请求:
如下图:
00 26 | d0 41 00 01 00 20 10 6d | 00 06 11 a2 00 03 00 16 | 21 10 e2 c1 d4 d7 d3 c5
其中红色字节可以作为特征识别码。
服务端返回应答:
成功则返回:00 10 | d0 43 00 01 00 0a 14 ac | 00 06 11 a2 00 03 00 15 | d0 42 00 02 00 0f 12 19 | 00 06 11 49 00 00 00 05 11 a4
连接失败:00 10 | d0 43 00 01 00 0a 14 ac | 00 06 11 a2 00 03 00 15 | d0 02 00 02 00 0f 12 19 | 00 06 11 49 00 08 00 05 11 a4 0f
如下图:
其中红色加大字节为判断失败成功的标志。
2.2 SQL语句
SELECT:
以下所有图形中,其中黄色为行为特征字节,红色为审计元素值。Client向server发送的串:

执行失败的返回:
INSERT:
Client向server发送的串:
执行成功后,server向client返回的串:
执行失败后,server向client返回的串:
DELETE:
Client向server发送的串:
Server的成功响应:
Server失败的返回:
UPDATE:
Client向server发送的串:
成功后server返回串:
失败后Server返回串:
CREATE DATABASE:
Client向server发出请求:
成功后响应:
DROP DATABASE:
莫法
CREATE TABLE:
Client向server发送的串:
操作成功后Server返回串:

失败后server返回:
DROP TABLE:
Client向server发送的串:
成功后server返回:没有有效特征

失败后server返回:
1.3 存储过程
数据特征类似于sql语句。在DB2中,无论是存储过程还是sql语句,为了提高效率,最后统一转化为存储过程。
操作成功后server的返回串:紧跟请求后的第一帧
操作失败后返回串:

其中第二个失败号为失败代码,第一个代码显示成功。
3、后记
用etheral等抓包分析工具可以顺利的解析oracle,sqlserver等数据库的协议,但是唯独没有关于DB2的。看来DB2协议确实和传统的不太一样,我不知道这种看似规律性不强的协议是出于特殊设计,还是混乱的设计。
最后,该成果被用于某数据库审计系统,取得了较好的成果,服务器部分C语言代码也为本人编制。
阅读(2349) | 评论(0) | 转发(0) |