首页> 中国专利> 解析和还原TNS协议314版本中SQL命令和参数的方法

解析和还原TNS协议314版本中SQL命令和参数的方法

摘要

本发明实施例提供了一种解析和还原TNS协议314版本中SQL命令和参数的方法。该方法包括:采用旁路获取网络中客户端向Oracle数据库服务器发送的TNS协议Data类型数据包,将Data类型数据包进行过滤获取Data类型数据包的负载部分数据,将所述Data类型数据包的负载部分解析到TNS协议的SQL语句软件中进行处理,获取0x035e命令位置后,通过五个模块的解析处理最终还原出客户端的SQL命令和包含参数的SQL语句。本发明通过分析Oracle数据库的应用系统客户端与Oracle数据库之间的通讯协议TNS的314版本的Data类型数据包的负载部分,将SQL语句进行有效的分解,分别分析出通讯报文长度小于255字节的SQL语句、长度大于255字节的SQL语句以及客户端可视操作生成SQL语句所带的参数。

著录项

  • 公开/公告号CN107038208A

    专利类型发明专利

  • 公开/公告日2017-08-11

    原文格式PDF

  • 申请/专利权人 北京交通大学;

    申请/专利号CN201710091069.3

  • 申请日2017-02-20

  • 分类号

  • 代理机构北京市商泰律师事务所;

  • 代理人黄晓军

  • 地址 100044 北京市海淀区西直门外上园村3号

  • 入库时间 2023-06-19 02:59:30

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-04-28

    授权

    授权

  • 2017-09-05

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20170220

    实质审查的生效

  • 2017-08-11

    公开

    公开

说明书

技术领域

本发明属于网络信息安全与计算机应用技术领域,尤其涉及一种解析和还原TNS协议314版本中SQL命令和参数的方法。

背景技术

专利CN102801714B发明了一种旁路式解析和还原TNS协议中SQL命令的方法,利用开源库获取并输出所有网络设备接口号、名称和描述信息,选择需要捕获的网络设备接口号作为指定的数据捕获网络设备接口,其次设置参数device、参数snaplen、网络设备接口工作模式、超时时间参数、参数ebuf,打开指定的数据捕获网络设备接口。然后判断捕获数据的数据链路层类型,若为以太网,则编译包过滤表达式“TCP”进入驱动程序。最后开始循环捕获网络数据帧,根据包过滤表达式对每个数据帧调用回调函数解析出SQL语句。

现有技术方法不能提取新版本TNS(Transparence Network Substrate,透明网络底层)协议(314版本)中的SQL命令,无法满足长度大于255个字节的SQL命令还原要求,也无法还原客户端可视操作产生SQL命令中的参数。

发明内容

本发明的实施例提供了一种解析和还原TNS协议314版本中SQL命令和参数的方法,通过分析Oracle数据库的应用系统客户端与Oracle数据库之间的通讯协议TNS的Data类型数据包的负载部分,将SQL语句进行有效的分解,分别分析出通讯报文长度小于255字节的SQL语句、长度大于255字节的SQL语句以及客户端可视操作生成SQL语句所带的参数。

为了实现上述目的,本发明采取了如下技术方案。

一种解析和还原TNS协议314版本中SQL命令和参数的方法,其特征在于,该方法包括:

旁路获取网络中客户端向Oracle数据库服务器发送的TNS协议314版本的Data类型数据包,对所述TNS协议314版本的Data类型数据包进行过滤,获取所述TNS协议314版本的Data类型数据包的负载部分数据;

根据所述TNS协议314版本的Data类型数据包的负载部分中的第一和第二个字节的值,通过解析处理获取所述TNS协议314版本的Data类型数据包中的0x035e命令位置,根据所述0x035e命令位置通过TNS协议SQL语句解析处理流程得到所述客户端的SQL命令和包含参数的SQL语句。

所述的对TNS协议314版本的Data类型数据包进行过滤,获取所述TNS协议314版本的Data类型数据包的负载部分数据,包括:

提取TNS协议314版本数据包的包头部分,当所述包头部分的第5个字节值为0x06,则确定所述包头部分为Data类型数据包,该Data类型数据包的数据部分的前4个字节为Data flag,且Data flag的值为0x00,数据部分的前4个字节之后的字节为Data负载部分。

所述的根据所述TNS协议314版本的Data类型数据包的负载部分中的第一和第二个字节的值,通过解析处理获取所述TNS协议314版本的Data类型数据包中的0x035e命令位置,包括:

步骤一,分别读取TNS协议数据包Data负载的第一个和第二个字节值并将其保存到firstByte和secondByte中;

步骤二,若firstByte值为0x03,secondByte值为0x5e,则执行步骤6,否则执行步骤3;

步骤三,若firstByte值为0x11,secondByte值为0x69,则执行步骤4,否则结束;

步骤四,赋值变量skip为8,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则执行步骤5;

步骤五,将skip值加2,并判断firstByte+skip和secondByte+skip值,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则结束;

步骤六,指针p指向命令0x035e的子命令0x5e,并进行模块一解析处理流程。

所述模块一解析处理流程,包括:

步骤11,获取指针p+14指向字节的值并赋给变量type,若type的值为0x04,则该数据包sql语句为select语句,执行步骤12;若type的值为0x00,则该数据包sql语句为CREATE、DROP、ALTER、INSERT、UPDATA或DELETE命令语句,执行步骤13;

步骤12,赋值给变量offset为43,并进行模块二解析处理;

步骤13,赋值给变量offset为37,并进行模块三解析处理。

所述模块二解析处理流程包括:

步骤21,若p+offset值为0x00,则执行步骤22,否则进行模块三解析处理;

步骤22,将指针p+offset指向的字节值赋值给变量sqlcmdlen;

步骤23,指针sqlcmdstart=p+offset+1,指针sqlcmdend=p+offset+1+sqlcmdlen;

步骤24,读取sqlcmdstart开始到sqlcmdend结束的字符串,将字符串拷贝出来即为完整的sql命令。

所述模块三解析处理流程包括:

判断位置[p+offset+1]字节的值是否为0xfe,并获取返回值result,若result值为true,则本数据包传送的sql语句长度超过了255个字节,选择模块四解析处理,若result值为false,则本数据包传送的sql语句长度不超过255字节且包含参数,选择模块五解析处理流程。

所述模块四解析处理流程包括:

步骤41,指针pos=p+offset+3,赋值变量len=0x40,i=0;

步骤42,读取第pos位到第pos+len位字节为buffer(i),pos=pos+len+1,

将i的值加1;

步骤43,若指针pos指向字节值为0x40,则pos=pos+1,并重复执行步骤42,否则执行步骤44;

步骤44,将指针pos指向的字节值赋值给变量len,读取第pos+1位到第pos+1+len位字节为最后一个sql语句块bufferfinal,并组合buffer=sum(buffer(i))+bufferfinal,输出长度大于255个字节的完整sql命令buffer,指针sqlcmdend=pos+1+len;

步骤45,若指针sqlcmdend+18指向的字节为Data负载最后一个字节,则结束,否则,定义指针paranum为sqlcmdend+19,赋值给变量paracount为0;

步骤46,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤47,否则执行步骤48;

步骤47,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤46;

步骤48,输出变量paracount的值;

步骤49,若指针paranum指向的字节值为0x07,则执行步骤10,否则结束;

步骤410,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;

步骤411,指针paraend=parastart+paralen;

步骤412,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;

步骤413,若j的值等于paracount,则结束,否则执行步骤414;

步骤414,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤411。

所述模块五解析处理流程包括:

步骤51,将[p+offset+1]字节的值赋给变量sqlcmdlen;

步骤52,记指针Sqlcmdstart=p+offset+2,指针Sqlcmdend=p+offset+2+sqlcmdlen;

步骤53,拷贝Sqlcmdstart开始到Sqlcmdend结束的字符串为完整的sql语句,并输出;

步骤54,sql语句结束后跳过17个字节为参数部分,定义指针paranum为sqlcmdend+18,赋值给变量paracount为0;

步骤55,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤56,否则执行步骤57;

步骤56,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤55;

步骤57,输出变量paracount的值;

步骤58,若指针paranum指向的字节值为0x07,则执行步骤59,否则结束;

步骤59,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;

步骤510,指针paraend=parastart+paralen;

步骤511,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;

步骤512,若j的值等于paracount,则结束,否则执行步骤513;

步骤513,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤510。

由上述本发明的实施例提供的技术方案可以看出,本发明实施例应用网络旁路监听技术,不需要对应用系统进行任何的配置改动和变更,对应用系统的正常运行没有任何影响,可以给用户、应用系统提供商及时了解系统运行状态提供有力的支持,同时可以为Oracle数据库细粒度审计、精准化行为回溯、全方位风险控制功能和安全审计功能提供理论基础。

本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的技术方案总体流程图;

图2为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的确定命令0x035e命令位置和模块一的处理流程图;

图3为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的模块二和模块三处理流程图;

图4为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的模块四处理流程图;

图5为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的模块五处理流程图。

具体实施方式

下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。

为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个实施例并不构成对本发明实施例的限定。

图1为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的技术方案总体流程图,其主要流程包括:

首先从以太网络中截获Oracle客户端和服务器通讯的数据包,之后过滤掉数据包的IP包头和TCP包头,接下来筛选出Data类型的TNS数据包,过滤掉TNS数据包包头部分,将Data类型数据包的负载部分数据输入到解析TNS协议314版本的SQL语句软件中进行处理,最终输出从TNS数据包中提取出的SQL语句。

TNS协议314版本数据包的包头部分(前8个字节)的第5个字节值为0x06的数据包为Data类型数据包,数据部分前4个字节为Data flag,且Data flag的值一般为0x00,之后的字节为Data负载部分。

图2为本发明实施例提供的一种解析和还原TNS协议314版本中SQL命令和参数的方法的确定0x035e命令位置和模块一的解析流程,其主要步骤如下:

步骤1,分别读取TNS协议314版本的数据包Data负载的第一和第二个字节值并将其保存到firstByte和secondByte中;

步骤2,若firstByte值为0x03,secondByte值为0x5e,则执行步骤6,否则执行步骤3;

步骤3,若firstByte值为0x11,secondByte值为0x69,则执行步骤4,否则结束;

步骤4,赋值变量skip为8,若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则执行步骤5;

步骤5,将skip值加2,并判断firstByte+skip和secondByte+skip值。若firstByte+skip值为0x03,secondByte+skip值为0x5e,则执行步骤6,否则结束;

步骤6,指针p指向命令0x035e的子命令0x5e,并进行模块M1处理。

模块一处理流程如下:

步骤11,获取指针p+14指向字节的值并赋给变量type,若type的值为0x04,则该数据包sql语句为select语句,执行步骤12;若type的值为0x00,则该数据包sql语句为CREATE、DROP、ALTER、INSERT、UPDATA或DELETE命令语句,执行步骤13;

步骤12,赋值给变量offset为43,并进行模块二解析处理;

步骤13,赋值给变量offset为37,并进行模块三解析处理。

图3为模块二和模块三的处理流程图,如图3所示,模块二的解析处理流程为:

步骤21,若p+offset值为0x00,则执行步骤22,否则进行模块三解析处理;

步骤22,将指针p+offset指向的字节值赋值给变量sqlcmdlen;

步骤23,指针sqlcmdstart=p+offset+1,指针sqlcmdend=p+offset+1+sqlcmdlen;

步骤24,读取sqlcmdstart开始到sqlcmdend结束的字符串,将字符串拷贝出来即为完整的sql命令。

如图3所示,模块三的解析处理流程为:

判断位置[p+offset+1]字节的值是否为0xfe,并获取返回值result,若result值为true,则本数据包传送的sql语句长度超过了255个字节,选择模块四解析处理,若result值为false,则本数据包传送的sql语句长度不超过255字节且包含参数,选择模块五解析处理。

图4为模块四处理流程图,如图4所示,模块四的解析处理流程为:

步骤41,指针pos=p+offset+3,赋值变量len=0x40,i=0;

步骤42,读取第pos位到第pos+len位字节为buffer(i),pos=pos+len+1,将i的值加1;

步骤43,若指针pos指向字节值为0x40,则pos=pos+1,并重复执行步骤42,否则执行步骤44;

步骤44,将指针pos指向的字节值赋值给变量len,读取第pos+1位到第pos+1+len位字节为最后一个sql语句块bufferfinal,并组合buffer=sum(buffer(i))+bufferfinal,输出长度大于255个字节的完整sql命令buffer,指针sqlcmdend=pos+1+len;

步骤45,若指针sqlcmdend+18指向的字节为Data负载最后一个字节,则结束,否则,定义指针paranum为sqlcmdend+19,赋值给变量paracount为0;

步骤46,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤47,否则执行步骤48;

步骤47,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤46;

步骤48,输出变量paracount的值;

步骤49,若指针paranum指向的字节值为0x07,则执行步骤10,否则结束;

步骤410,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;

步骤411,指针paraend=parastart+paralen;

步骤412,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;

步骤413,若j的值等于paracount,则结束,否则执行步骤414;

步骤414,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤411。

图5为模块五放入处理流程图;如图5所示,模块五的解析处理流程为:

步骤51,将[p+offset+1]字节的值赋给变量sqlcmdlen;

步骤52,记指针Sqlcmdstart=p+offset+2,指针Sqlcmdend=p+offset+2+sqlcmdlen;

步骤53,拷贝Sqlcmdstart开始到Sqlcmdend结束的字符串为完整的sql语句,并输出;

步骤54,sql语句结束后跳过17个字节为参数部分,定义指针paranum为sqlcmdend+18,赋值给变量paracount为0;

步骤55,若指针paranum和paranum+1指向的字节值为0x01,0x03,则执行步骤56,否则执行步骤57;

步骤56,将paracount加1,赋值变量skip为17,paranum=paranum+skip,并重复执行步骤55;

步骤57,输出变量paracount的值;

步骤58,若指针paranum指向的字节值为0x07,则执行步骤59,否则结束;

步骤59,将指针paranum+1指向的字节值赋给变量paralen,指针parastart=paranum+2,赋值给变量j为1;

步骤510,指针paraend=parastart+paralen;

步骤511,拷贝parastart开始到paraend结束的字符串为parameter(j),并输出,将j的值加1;

步骤512,若j的值等于paracount,则结束,否则执行步骤513;

步骤513,将指针paraend+1指向字节的值赋给变量paralen,指针parastart=paraend+2,并重复执行步骤510。

综上所述,本发明实施例通过分析Oracle数据库的应用系统客户端与Oracle数据库之间的通讯协议TNS314版本的Data类型数据包的负载部分,将SQL语句进行有效的分解,分别分析出通讯报文长度小于255字节的SQL语句、长度大于255字节的SQL语句以及客户端可视操作生成SQL语句所带的参数。

本发明实施例应用网络旁路监听技术,不需要对应用系统进行任何的配置改动和变更,对应用系统的正常运行没有任何影响,可以给用户、应用系统提供商及时了解系统运行状态提供有力的支持,同时可以为Oracle数据库细粒度审计、精准化行为回溯、全方位风险控制功能和安全审计功能提供理论基础。

本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号