发明内容
本发明的主要目的为提供一种全面、有效的防御会话劫持攻击的方法和防火墙。
本发明提出一种防御会话劫持攻击的方法,包括步骤:
接收合法客户端发送的第一访问请求,并将所述第一访问请求发送至服务器;
接收所述服务器返回的第一响应,所述第一响应中包括第一认证令牌;
根据所述合法客户端的网络地址和所述合法客户端的标识码生成第一序列值,将所述第一认证令牌和第一序列值重组为第二认证令牌;
将所述第一响应中的第一认证令牌替换为所述第二认证令牌,并将包含所述第二认证令牌的所述第一响应发送至所述合法客户端。
优选地,所述将包含所述第二认证令牌的所述第一响应发送至所述合法客户端的步骤之后还包括:
接收当前客户端发送的第二访问请求,所述第二访问请求中包括第二认证令牌;
从所述第二认证令牌中分离出所述第一认证令牌和第一序列值;
根据当前客户端的网络地址和当前客户端的标识码,生成第二序列值;
当所述第二序列值与所述第一序列值相同时,确定当前客户端为所述合法客户端;
将所述第二访问请求中的第二认证令牌替换为所述第一认证令牌;
将包含所述第一认证令牌的所述第二访问请求发送至所述服务器,供所述服务器验证所述第一认证令牌和响应所述第二访问请求。
优选地,所述根据合法客户端的网络地址和所述合法客户端的标识码,生成第一序列值的步骤具体包括:
采用随机串和散列算法,将所述合法客户端的网络地址和所述合法客户端的标识码生成第一序列值。
优选地,所述根据当前客户端的网络地址和当前客户端的标识码,生成第二序列值的步骤具体包括:
采用与生成第一序列值时相同的随机串和散列算法,将当前客户端的网络地址和当前客户端的标识码生成第二序列值,作为第二序列值。
优选地,所述接收合法客户端发送的第一访问请求的步骤之前还包括:
在所述服务器中查找一个依赖令牌访问的页面;
在预设时间内获取多个访问请求中的Cookie数据和多个响应中的Set-Cookie数据;
获取各个所述Cookie数据和Set-Cookie数据的键值对;
根据各个所述键值对及其组合,分别生成对应的第三访问请求;
分别采用各个所述第三访问请求,访问所述页面;
接收所述页面返回的对应于各个所述第三访问请求的第三响应;
当所述第三响应有效时,有效的所述第三响应对应的键值对为所述第一认证令牌存放的位置。
本发明还提出一种防御会话劫持攻击的防火墙,包括:
收发模块,用于接收合法客户端发送的第一访问请求,并将所述第一访问请求发送至服务器;接收所述服务器返回的第一响应,所述第一响应中包括第一认证令牌;
重组模块,用于根据所述合法客户端的网络地址和所述合法客户端的标识码生成第一序列值,将所述第一认证令牌和第一序列值重组为第二认证令牌;
替换模块,用于将所述第一响应中的第一认证令牌替换为所述第二认证令牌;
所述收发模块还用于,将包含所述第二认证令牌的所述第一响应发送至所述合法客户端。
优选地,所述防御会话劫持攻击的防火墙,还包括判断模块;
所述收发模块还用于,接收当前客户端发送的第二访问请求,所述第二访问请求中包括第二认证令牌;
所述重组模块还用于,从所述第二认证令牌中分离出所述第一认证令牌和第一序列值;根据当前客户端的网络地址和当前客户端的标识码,生成第二序列值;
所述判断模块用于,当所述第二序列值与所述第一序列值相同时,确定当前客户端为所述合法客户端;
所述替换模块还用于,将所述第二访问请求中的第二认证令牌替换为所述第一认证令牌;
所述收发模块还用于,将包含所述第一认证令牌的所述第二访问请求发送至所述服务器,供所述服务器验证所述第一认证令牌和响应所述第二访问请求。
优选地,所述重组模块具体用于:
采用随机串和散列算法,将所述合法客户端的网络地址和所述合法客户端的标识码生成第一序列值。
优选地,所述重组模块具体还用于:
采用与生成第一序列值时相同的随机串和散列算法,将当前客户端的网络地址和当前客户端的标识码生成第二序列值,作为第二序列值。
优选地,所述防御会话劫持攻击的防火墙,还包括查找模块;
所述查找模块用于,在所述服务器中查找一个依赖令牌访问的页面;
所述重组模块具体还用于,在预设时间内获取多个访问请求中的Cookie数据和多个响应中的Set-Cookie数据;获取各个所述Cookie数据和Set-Cookie数据的键值对;根据各个所述键值对及其组合,分别生成对应的第三访问请求;
所述收发模块还用于,分别采用各个所述第三访问请求,访问所述页面;接收所述页面返回的对应于各个所述第三访问请求的第三响应;
所述判断模块用于,当所述第三响应有效时,有效的所述第三响应对应的键值对为所述第一认证令牌存放的位置。
本发明采用了客户端身份验证机制,避免非法客户端假冒合法客户端访问服务器,有效防御各种会话劫持攻击,即使更换了令牌,也不会产生误报或漏报,防御性更加全面、可靠。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1为本发明防御会话劫持攻击的方法的第一实施例的流程图。本实施例提到的防御会话劫持攻击的方法,包括步骤:
步骤S10,接收合法客户端发送的第一访问请求,并将第一访问请求发送至服务器;
在合法客户端首次访问服务器时,合法客户端发送的访问请求(即步骤S10中的第一访问请求)中并未包含令牌,此时,防火墙直接对该访问请求放行。
步骤S20,接收服务器返回的第一响应,第一响应中包括第一认证令牌;
服务器在接收到访问请求后,对访问请求应答,返回包含认证令牌的响应(即步骤S20中的包括第一认证令牌的第一响应)。
步骤S30,根据合法客户端的网络地址和合法客户端的标识码生成第一序列值,将第一认证令牌和第一序列值重组为第二认证令牌;
本步骤为对认证令牌重组的步骤,其中,合法客户端的标识码可以是合法客户端的物理地址或其他可以收集的合法客户端信息。可采用随机串和散列算法,将合法客户端的网络地址和合法客户端的标识码生成第一序列值。
步骤S40,将第一响应中的第一认证令牌替换为第二认证令牌,并将包含第二认证令牌的第一响应发送至合法客户端。
防火墙将替换后的响应发送至合法客户端,合法客户端将响应中的第二认证令牌存储起来,以便在再次访问服务器时提供给服务器验证。由于此时第二认证令牌中包含有合法客户端的信息。因此,当有客户端发起访问服务器的请求时,只需将第二认证令牌中包含的合法客户端的信息与当前发起访问请求的客户端的信息进行比较,如果匹配,则说明当前发起访问请求的客户端是步骤S40中合法获得第二认证令牌的合法客户端;否则,当前发起访问请求的客户端为非法客户端,防火墙拒绝放行。
本实施例采用了客户端身份验证机制,避免非法客户端假冒合法客户端访问服务器,有效防御各种会话劫持攻击,即使更换了令牌,也不会产生误报或漏报,防御性更加全面、可靠。
如图2所示,图2为本发明防御会话劫持攻击的方法的第二实施例的流程图。本实施例以图1所示实施例为基础,在步骤S40之后还包括:
步骤S50,接收当前客户端发送的第二访问请求;
发送第二访问请求的客户端可能是再次发起访问请求的合法客户端,也可能是盗取令牌后的非法客户端,因此,在第二访问请求中包括有第二认证令牌。
步骤S60,从第二认证令牌中分离出第一认证令牌和第一序列值;
将第二认证令牌分离为两部分,一部分与第一认证令牌相同,另一部分与第一序列值相同,作为验证客户端身份的标识。
步骤S70,根据当前客户端的网络地址和当前客户端的标识码,生成第二序列值;
防火墙获取当前客户端的信息,生成第二序列值,用于验证当前客户端是否合法。第二序列值的生成方式与第一序列值生成方式相同。可采用与生成第一序列值时相同的随机串和散列算法,将当前客户端的网络地址和当前客户端的标识码生成第二序列值,作为第二序列值。
步骤S80,当第二序列值与第一序列值相同时,确定当前客户端为合法客户端;
如果当前客户端是再次发起访问请求的合法客户端,则当前客户端的信息与合法客户端的信息相同,生成的第二序列值也应与第一序列值相同。如果当前客户端是盗取令牌后的非法客户端,则非法客户端的信息与合法客户端的信息显然不同,此时生成的第二序列值也与第一序列值不同。通过该步骤即可判断出当前客户端是否为合法客户端。
步骤S90,将第二访问请求中的第二认证令牌替换为第一认证令牌;
防火墙在判定当前客户端为合法客户端后,将第二认证令牌还原为第一认证令牌,再发送至服务器进行验证。
步骤S100,将包含第一认证令牌的第二访问请求发送至服务器,供服务器验证第一认证令牌和响应第二访问请求。
本实施例由于采用了客户端信息进行身份验证,在当前客户端信息与合法客户端信息一致时,防火墙对当前客户端放行,避免了非法客户端假冒合法客户端访问服务器,有效防御各种会话劫持攻击,即使更换了令牌,也不会产生误报或漏报,防御性更加全面、可靠。
如图3所示,图3为本发明防御会话劫持攻击的方法的第三实施例的流程图。本实施例以图2所示实施例为基础,增加了查找令牌位置的步骤,在步骤S10之前还包括:
步骤S101,在服务器中查找一个依赖令牌访问的页面;
查找一个依赖令牌访问的页面即查找一个需要通过登录认证后才可以访问的页面。确定依赖令牌访问的页面可以通过提供一个给管理员的配置接口来确定,或者在防火墙部署前通过防火墙自带的扫描功能来确定,还可以通过实时检测登录的请求和响应来确定。本实施例采用实时检测登录的请求和响应的方法来确定。
步骤S102,在预设时间内获取多个访问请求中的Cookie数据和多个响应中的Set-Cookie数据;
防火墙刚刚部署后,在足够长的设定时间内,检测所有接收到的请求或响应报文,获取尽可能多的样本,例如,从请求报头Cookie或响应报头Set-Cookie中获取样本。
步骤S103,获取各个Cookie数据和Set-Cookie数据的键值对;
步骤S104,根据各个键值对及其组合,分别生成对应的第三访问请求;
获取的Cookie数据和Set-Cookie数据的部分或者全部键值对,并在生成第三访问请求报文时,把第三访问请求报文的Cookie消息报头修改为某一个键值对或其组合,即自定义的访问请求,直到遍历完所有键值对的组合。
步骤S105,分别采用各个第三访问请求,访问页面;
步骤S106,接收页面返回的对应于各个第三访问请求的第三响应;
步骤S107,当第三响应有效时,有效的第三响应对应的键值对为第一认证令牌存放的位置;
防火墙根据服务器的响应来判断发送的第三访问请求的Cookie中是否含有令牌,判定的标准可以是报文长度、关键字等可以区分的指标,如果报文长度与正确响应页面的长度相等,说明第三访问请求中的Cookie键值对或其组合含有令牌,并记录该键值对或其组合。当有效的位置为多个时,为了确定最精简的存放会话令牌的位置,可检索最简的一个。本实施例通过防火墙自学习功能确定令牌存放位置,可准确在访问请求中获得认证令牌,可避免令牌获取错误的情况发生。
如图4所示,图4为本发明防御会话劫持攻击的防火墙的第一实施例的结构示意图。本实施例提到的防御会话劫持攻击的防火墙,包括:
收发模块10,用于接收合法客户端发送的第一访问请求,并将第一访问请求发送至服务器;接收服务器返回的第一响应,第一响应中包括第一认证令牌;
重组模块20,用于根据合法客户端的网络地址和合法客户端的标识码生成第一序列值,将第一认证令牌和第一序列值重组为第二认证令牌;
替换模块30,用于将第一响应中的第一认证令牌替换为第二认证令牌;
收发模块10还用于,将包含第二认证令牌的第一响应发送至合法客户端。
重组模块20具体用于,采用随机串和散列算法,将合法客户端的网络地址和合法客户端的标识码生成第一序列值。
本实施例中,在合法客户端首次访问服务器时,合法客户端发送的访问请求中并未包含令牌,此时,防火墙直接对该访问请求放行。服务器在接收到访问请求后,对访问请求应答,返回包含认证令牌的响应。合法客户端的标识码可以是合法客户端的物理地址或其他可以收集的合法客户端信息。可采用随机串和散列算法,将合法客户端的网络地址和合法客户端的标识码生成第一序列值。防火墙将替换后的响应发送至合法客户端,合法客户端将响应中的第二认证令牌存储起来,以便在再次访问服务器时提供给服务器验证。由于此时第二认证令牌中包含有合法客户端的信息。因此,当有客户端发起访问服务器的请求时,只需将第二认证令牌中包含的合法客户端的信息与当前发起访问请求的客户端的信息进行比较,如果匹配,则说明当前发起访问请求的客户端是合法获得第二认证令牌的合法客户端;否则,当前发起访问请求的客户端为非法客户端,防火墙拒绝放行。本实施例采用了客户端身份验证机制,避免非法客户端假冒合法客户端访问服务器,有效防御各种会话劫持攻击,即使更换了令牌,也不会产生误报或漏报,防御性更加全面、可靠。
如图5所示,图5为本发明防御会话劫持攻击的防火墙的第二实施例的结构示意图。本实施例以图4所示实施例为基础,增加了判断模块40。其中:
收发模块10还用于,接收当前客户端发送的第二访问请求,第二访问请求中包括第二认证令牌;
重组模块20还用于,从第二认证令牌中分离出第一认证令牌和第一序列值;根据当前客户端的网络地址和当前客户端的标识码,生成第二序列值;
判断模块40用于,当第二序列值与第一序列值相同时,确定当前客户端为合法客户端;
替换模块30还用于,将第二访问请求中的第二认证令牌替换为第一认证令牌;
收发模块10还用于,将包含第一认证令牌的第二访问请求发送至服务器,供服务器验证第一认证令牌和响应第二访问请求。
重组模块20具体还用于,采用与生成第一序列值时相同的随机串和散列算法,将当前客户端的网络地址和当前客户端的标识码生成第二序列值,作为第二序列值。
本实施例中,发送第二访问请求的客户端可能是再次发起访问请求的合法客户端,也可能是盗取令牌后的非法客户端,因此,在第二访问请求中包括有第二认证令牌。将第二认证令牌分离为两部分,一部分与第一认证令牌相同,另一部分与第一序列值相同,作为验证客户端身份的标识。防火墙获取当前客户端的信息,生成第二序列值,用于验证当前客户端是否合法。第二序列值的生成方式与第一序列值生成方式相同。可采用与生成第一序列值时相同的随机串和散列算法,将当前客户端的网络地址和当前客户端的标识码生成第二序列值,作为第二序列值。如果当前客户端是再次发起访问请求的合法客户端,则当前客户端的信息与合法客户端的信息相同,生成的第二序列值也应与第一序列值相同。如果当前客户端是盗取令牌后的非法客户端,则非法客户端的信息与合法客户端的信息显然不同,此时生成的第二序列值也与第一序列值不同。通过该步骤即可判断出当前客户端是否为合法客户端。防火墙在判定当前客户端为合法客户端后,将第二认证令牌还原为第一认证令牌,再发送至服务器进行验证。本实施例由于采用了客户端信息进行身份验证,在当前客户端信息与合法客户端信息一致时,防火墙对当前客户端放行,避免了非法客户端假冒合法客户端访问服务器,有效防御各种会话劫持攻击,即使更换了令牌,也不会产生误报或漏报,防御性更加全面、可靠。
如图6所示,图6为本发明防御会话劫持攻击的防火墙的第三实施例的结构示意图。本实施例以图5所示实施例为基础,增加了查找模块50。其中:
查找模块50用于,在服务器中查找一个依赖令牌访问的页面;
重组模块20具体还用于,在预设时间内获取多个访问请求中的Cookie数据和多个响应中的Set-Cookie数据;获取各个Cookie数据和Set-Cookie数据的键值对;根据各个键值对及其组合,分别生成对应的第三访问请求;
收发模块10还用于,分别采用各个第三访问请求,访问页面;接收页面返回的对应于各个第三访问请求的第三响应;
判断模块40用于,当第三响应有效时,有效的第三响应对应的键值对为第一认证令牌存放的位置。
本实施例中,查找一个依赖令牌访问的页面即查找一个需要通过登录认证后才可以访问的页面。确定依赖令牌访问的页面可以通过提供一个给管理员的配置接口来确定,或者在防火墙部署前通过防火墙自带的扫描功能来确定,还可以通过实时检测登录的请求和响应来确定。本实施例采用实时检测登录的请求和响应的方法来确定。防火墙刚刚部署后,在足够长的设定时间内,检测所有接收到的请求或响应报文,获取尽可能多的样本,例如,从请求报头Cookie或响应报头Set-Cookie中获取样本。获取的Cookie数据和Set-Cookie数据的部分或者全部键值对,并在生成第三访问请求报文时,把第三访问请求报文的Cookie消息报头修改为某一个键值对或其组合,即自定义的访问请求,直到遍历完所有键值对的组合。防火墙根据服务器的响应来判断发送的第三访问请求的Cookie中是否含有令牌,判定的标准可以是报文长度、关键字等可以区分的指标,如果报文长度与正确响应页面的长度相等,说明第三访问请求中的Cookie键值对或其组合含有令牌,并记录该键值对或其组合。当有效的位置为多个时,为了确定最精简的存放会话令牌的位置,可检索最简的一个。本实施例通过防火墙自学习功能确定令牌存放位置,可准确在访问请求中获得认证令牌,可避免令牌获取错误的情况发生。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。