一种对多种编码的数据进行解码的方法和装置与流程

文档序号:16087558发布日期:2018-11-27 22:37阅读:363来源:国知局

本申请涉及IT技术领域,特别涉及一种对多种编码的数据进行解码的方法和装置。



背景技术:

随着互联网技术的飞速发展,在线交易、资讯浏览等各种各样Web网站日益普及,由于黑客攻击带来的损失也越来越大。针对Web网站的安全防护产品应运而生,通过对流量进行检查,识别攻击数据,阻止黑客对web网站的攻击。黑客会使用不同的编码方式、多种编码或者混合编码对攻击数据进行编码处理,提高安全防护产品的解码复杂度,降低攻击数据被识别的概率,对web网站的安全造成了严重危害。



技术实现要素:

本申请实施例提供一种对多种编码的数据进行解码的方法和装置,用以增加对攻击数据的识别准确度,提高web网站的安全性。

第一方面,本发明实施例提供了一种解码方法,解码设备接收到经过多种编码的数据,对数据进行还原处理。解码设备根据编码规则的特点,对数据的格式进行判断,根据判断结果执行不同的转换操作。具体的,解码设备确定数据的第i个字节为第一字符时,判断数据的第i+1和i+2两个字节是否为十六进制,如果是,则将第i个字节、第i+1个字节以及第i+2这3个字节转换为明文字符,其中,i为大于等于0的整数;解码设备确定数据的第i-1个字节为第一字符,或者转换得到的明文字符为第二字符且第i-1个字节为第三字符时,从数据的第i-2个字节重新执行检测。通过上述方式,解码设备识别了数据的特定格式,进行针对性的转换处理,且通过步长调整,将检测点回退,实现对多种编码方式的解码处理。

在一种可能的实施方式中,解码设备确定数据的第i-2个字节为第一字符,或者转换得到的明文字符为第四字符且第i-1个字节为第二字符且第i-2个字节为第三字符时,从数据的第i-3个字节重新执行检测。

在一种可能的实施方式中,当转换得到的明文字符为第一字符或第三字符时,从数据的第i-1个字节重新执行检测。

当多种编码方式嵌套编码时,通过将监测点回退到合适的位置,使得编码设备可以对嵌套编码进行解码。

在一种可能的实施方式中,解码设备确定数据的第a个字节为第三字符且第a+1个字节为第二字符时,将第a和a+1个字节的内容转换为第一字符,从数据的第i-1个字节重新执行检测,其中,a为大于等于0的整数。

在一种可能的实施方式中,解码设备确定数据的第a个字节为第三字符,判断后续的字节内容是否属于html格式,如果是,则执行html转义操作。

所述html转义操作包括:

1.当后续字符为amp;将这五个字符&替换为&)。

2.当后续字符为lt;将这四个字符&lt;替换为<。

3.当后续字符为gt;将这四个字符&gt;替换为>。

4.当后续字符为quot;将这五个字符&quot;替换为“。

5.当后续字符为apos;将这留个字符&apos;替换为‘。

在一种可能的实施方式中,解码设备确定数据的第b个字节为第五字符时,判断第b+1个字节为u,U,x或X中的任意一个,则将第b和b+1字节的内容转换为第一字符,从数据的第i-1个字节重新执行检测;或者,

解码设备确定数据的第b个字节为第五字符时,判断后续的2或3个字节是否为八进制格式,如果是,则将八进制的数据转换为对应的明文字符;

其中,b为大于等于0的整数。

通过上述解码操作,实现了对十六进制以及Unicode解码处理。

在一种可能的实施方式中,解码设备确定数据的某个字节为大写字母时,将所述大写字母转换为对应的小写字母;或者,

解码设备将数据中包含的符合十六进制格式的连续字符转换为明文字符;或者,

解码设备删除数据中包含的“.”或“+”或’.’或‘+’;

解码设备判断数据中包含chr()且括号中的内容为数字时,将chr()替换为第三字符和第二字符的组合。

在一种可能的实施方式中,所述第一字符为%,所述第二字符为#,所述第三字符为&,所述第四字符为x,所述第五字符为\。

第二方面,本发明实施例还提供了一种解码设备,所述解码设备包括判断单元和转换单元,所述判断单元用于执行前述第一方面中的判断操作,所述转换单元,用于执行前述第一方面中的格式转换操作。

第三方面,本发明实施例还提供了一种解码设备,所述解码设备为物理服务器,具有实现上述各方面中解码设备的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。

在一个可能的设计中,解码设备包括收发器和处理器,其中,处理器用于调用一组程序代码,以执行如第一方面中所述的方法。

第四方面,提供了一种计算机存储介质,用于储存为上述方面所述的解码设备所用的计算机软件指令,其包含用于执行上述方面所设计的程序。

附图说明

图1为本发明实施例中的安全防护系统的结构示意图;

图2为本发明实施例提供的一种多种编码的数据进行解码的方法流程示意图;

图3为本发明实施例提供的各种分支下对编码数据进行解码还原的流程示意图;

图4为本发明实施例提供的一种解码设备的逻辑结构示意图;

图5为本发明实施例提供的一种解码设备的硬件结构示意图。

具体实施方式

下面将结合附图对本申请作进一步描述。

如图1所示,为本发明实施例提供的一种安全防护系统结构示意图,所述安全防护系统100包括解码设备101以及检测引擎102,客户端的数据在经过编码设备103编码后,进入安全防护系统,解码设备101对接收到的数据进行解码,将解码得到的数据发送到检测引擎102进行分析,识别出攻击数据,从而保护服务104免受攻击。而安全防护系统能够识别出攻击数据的其中一个关键是解码设备101成功的将接收到的额编码数据解码出来。在一种可能的实施方式中,所述服务104可以为web网站。

据统计,约有40%的攻击数据经过了编码处理,其中,20%的攻击数据经过了多种编码处理。攻击者采用多种编码方式使用编码设备103对攻击数据进行编码,如果编码后的攻击数据未被安全防护系统识别出来,攻击数据即可进入服务104,对服务104进行攻击。

安全防护系统100对接收到的数据进行扫描,采用解码算法对数据进行解码,由于来自攻击者的攻击数据使用了多种编码方式进行编码,安全防护系统也需要使用对应的多种编码算法进行多次解码还原,由于每种解码算法均需要对数据进行从头到尾的遍历解码,因此使用多种解码算法对数据进行多次解码还原将带来较大的时间开销。本发明实施例提供了一种对多种编码的数据进行解码的方法,一次扫描数据进行多种解码处理。常见的8种编码方式为:url_encode、unicode编码、xml编码、html编码、hex编码、chr函数拼接、字符串拼接(java\php\python等)、大小写变换混淆等。攻击者使用前述8种编码方式中的任意几种方式对攻击数据进行编码。

如图2所示,为本发明实施例提供的一种对多种编码的数据进行解码的方法,包括:

步骤201:解码设备101接收报文,所述报文的载荷payload中携带经过编码设备103编码处理的数据。

步骤202:解码设备101从数据的第一个字节开始对数据进行扫描,按照下述分支1-7对数据进行解码处理。

如图3所述,为本发明实施例给出的解码分支示意图。

分支1(将大写字母转换为小写字母):解码设备确定第i个字节的内容为大写字母A至Z中的任意一个,则将大写字母修改为该大写字母对应的小写字母,继续扫描下一字节。

在具体的实施方式中,解码设备101判断str[i]是否介于A到Z之间,如果是,则进行大写字母转换,并执行i=i+1,继续扫描下一字节。例如,将phpiNfo();中的N修改为n。在本发明实施例中,Str[i]表示第i个字节的内容。

分支2(Url_encode的还原):解码设备101对第i个字节的内容进行判断,当第i个字节的内容为%时,判断第i+1和i+2字节是否为十六进制格式,如果是,则将ASCII码转换为明文字符。例如,将'%37'转换为'7'

在具体的实施方式中,解码设备判断str[i]为%时,确定str[i+1:i+2]两个字节是否为十六进制格式,如果是,则将ASCII码转换为明文字符。确定str[i+1:i+2]两个字节是否为十六进制格式的方式为,判断str[i+1:i+2]是否属于0-9或者a-f的范围,如果是,则表示str[i+1:i+2]为十六进制格式,如‘20’或‘0a’都属于十六进制格式,‘hi’不属于该格式。

分支2执行完成后,进一步执行下述动作:

分支2.1:确定第i-2个字节Str[i-2]为%,或者,转化得到的明文字符为x且Str[i-1]为#且Str[i-2]为&时,执行i=i-3,即从第i-3个字节重新扫描,比如%35%3832,将%35替换为#,%38替换为&之后,得到#&32,需要再次解码,所以需要退回继续扫描。

分支2.2:确定第i-1个字节Str[i-1]为%,或者,转化得到的明文字符为#且Str[i-1]为&时,执行i=i-2,即从第i-2个字节重新扫描。

分支2.3:转化得到的明文字符为%或者&时,执行i=i-1,即从第i-1个字节重新扫描。

分支3(十六进制及Unicode解码处理):当第i个字节Str[i]为\时,执行下述动作:

分支3.1:判断第i+1个字节Str[i+1]是否为u,U,x或X,如果是,则将\x或\U替换为%,执行i=i-1,即从第i-1个字节重新扫描,继续执行分支2的动作。

分支3.2:判断第i+1到i+3的三个字节(或i+1到i+2的两个字节)是否八进制格式(每个字节都在0~7之间),如果是,则将其转为明文字符,如\163修改为s。分支4(XML编码、html转义的处理):当第i个字节Str[i]为&时,执行下述动作:

分支4.1:判断第i+1个字节Str[i+1]是否为#,如果是,则将&#替换为%;

如果第i+2个字节为x,那么后续两个字节为十六进制,执行i=i-1,即从第i-1个字节重新扫描,继续执行分支2的动作;

如果第i+2字节为0-9中的任意一个,那么检测第i+3字节和i+4个字节是否也属于0-9中的一个,如果第i+3字节为0-9中的任意一个且i+4字节也为0-9中的任意一个,则说明Str[i+2:i+4]为三位十进制的数字,将三位十进制的数字转换为十六进制,如果第i+3字节为0-9中的任意一个但i+4字节不为0-9中的任意一个,则说明Str[i+2:i+3]为两位十进制的数字,将两位十进制的数字转换为十六进制。执行i=i-1,即从第i-1个字节重新扫描,继续执行分支2的动作。

分支4.2(html转义):

1.当后续字符为amp;将这五个字符&amp;替换为&)。

2.当后续字符为lt;将这四个字符&lt;替换为<。

3.当后续字符为gt;将这四个字符&gt;替换为>。

4.当后续字符为quot;将这五个字符&quot;替换为“。

5.当后续字符为apos;将这留个字符&apos;替换为‘。

分支5(SQL语句中的十六进制处理):当第i个字节Str[i]为0时,判断Str[i+1]是否为x或者X,如果是,则将后续的两个字节[i+2:i+3]的十六进制编码转化为明文字符,继续扫描下一字节Str[i+4]。

分支6(php的chr转码拼接处理):当第i至i+3四个字节Str[i:i+3]为chr(时,将chr(89)或chr(89).转换为&#89,将chr(112).或chr(112)转换为&#112;通过调整步长即i=i-1,进入Case4中。

分支7(php、java、python的字符拼接):当从Str[i]到str[i+2]的三个字节为“.”或“+”或’.’或‘+’时,删掉“.”或“+”或’.’或‘+’这些字符。例如,把"php"+"info()"改为"phpinfo()"。继续扫描下一字节。

步骤203:解码设备101将经过步骤202解码的数据发送到检测引擎。

步骤204:检测引擎分析解码后的数据,识别出攻击数据。

本发明实施例对步骤204的分析方法不进行限定,步骤204可以采用现有技术中的分析方法。

本发明实施例通过将多种解码的处理逻辑编排为一个算法函数,实现了一个算法函数对数据进行一次扫描即可解码经过多种编码处理的数据。

具体的,本发明实施例对已知的常见的几种编码的特征作为检查点,当满足前述预设的各种分支时,执行相应的转换操作,并通过调整步长,将扫描的字节回退前述分支中定义的步长,从而实现对多次编码的处理。

例如,一段攻击数据中包含字符串:%2%37,从第一个字节开始,第一个%出现之后,发现并不满足上述分支,继续扫描到第3个字节满足分支2,将%37转码为7。此时,输入解码为%27。此时满足分支2.1条件,重新从第一个字节开始扫描,又满足情2,将%27转换为单引号。

与前述各实施例相对应,如图4所示,本发明实施例还提供了一种解码设备100,所述解码设备100包括:

判断单元,用于当数据的第i个字节为第一字符时,判断数据的第i+1和i+2两个字节是否为十六进制,其中,i为大于等于0的整数;

转换单元,用于判断单元判断数据的第i+1和i+2两个字节为十六进制时,将第i个字节、第i+1个字节以及第i+2这3个字节转换为明文字符;

所述判断单元,还用于确定数据的第i-1个字节为第一字符,或者转换得到的明文字符为第二字符且第i-1个字节为第三字符时,从数据的第i-2个字节重新执行检测。

所述判断单元,还用于确定数据的第i-2个字节为第一字符,或者转换得到的明文字符为第四字符且第i-1个字节为第二字符且第i-2个字节为第三字符时,从数据的第i-3个字节重新执行检测。

所述判断单元,还用于确定转换得到的明文字符为第一字符或第三字符时,从数据的第i-1个字节重新执行检测。

所述判断单元,还用于确定数据的第a个字节为第三字符且第a+1个字节为第二字符时,将第a和a+1个字节的内容转换为第一字符,从数据的第i-1个字节重新执行检测,其中,a为大于等于0的整数。

所述判断单元,还用于确定数据的第a个字节为第三字符,判断后续的字节内容是否属于html格式,如果是,则通知转换单元执行html转义操作。

所述判断单元,还用于确定数据的第b个字节为第五字符时,判断第b+1个字节为u,U,x或X中的任意一个,则通知转换单元将第b和b+1字节的内容转换为第一字符,从数据的第i-1个字节重新执行检测;或者,

所述判断单元,还用于确定数据的第b个字节为第五字符,判断后续的2或3个字节是否为八进制格式,如果是,则通知转换单元将八进制的数据转换为对应的明文字符;

其中,b为大于等于0的整数。

所述判断单元,还用于确定数据的某个字节为大写字母时,通知转换单元将所述大写字母转换为对应的小写字母;或者,

所述转换单元,还用于将数据中包含的符合十六进制格式的连续字符转换为明文字符;或者,

所述转换单元,还用于删除数据中包含的“.”或“+”或’.’或‘+’;

所述判断单元,还用于判断数据中包含chr()且括号中的内容为数字时,通知转换单元将chr()替换为第三字符和第二字符的组合。

基于同一发明构思,参阅图5所示,本申请实施例还提供了解码设备100硬件结构示意图,解码设备100,包括收发器501、处理器502和存储器503,收发器501、存储器503均与处理器502连接,需要说明的是图5所示的各部分之间的连接方式仅为一种可能的示例,也可以是,收发器501与存储器503均与处理器502连接,且收发器501与存储器503之间没有连接,或者,也可以是其他可能的连接方式。

其中,存储器503中存储有程序,处理器502用于调用存储器503中存储的程序,以执行前述图1至图4所示的方法中解码设备100的功能。

在图5中,处理器502可以是中央处理器(英文:central processing unit,缩写:CPU),网络处理器(英文:network processor,缩写:NP)或者CPU和NP的组合。

存储器501可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);存储器501也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);存储器401还可以包括上述种类的存储器的组合。

以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1