一种客户端验证方法及装置
技术领域
本发明涉及网络安全技术,尤其涉及一种客户端验证方法及装置。
背景技术
随着网络通信技术的进步,各种网络攻击引发的网络安全问题日益受到人们的关注。越来越多的企业以及运营商开始使用诸如防火墙等网络安全设备为网络通信提供保护措施。
伪造IP地址(又可称为伪造客户端)的攻击行为是非常常见的网络攻击,这种攻击的特点是会消耗大量的服务器资源,以致服务器没有足够的资源去响应其他客户端的访问请求。其中Dos(Denial of Service,拒绝服务攻击)以及DDos(Distributed Denial of Service,分布式拒绝服务攻击)是常见的伪造IP地址的网络攻击行为。
现有技术大量着手于研究Dos以及DDos等攻击行为在攻击模式上的特点,比如通过报文速率统计,甚至分布式的报文速率统计来应对这些攻击行为。然而现有技术的处理方式仍然有其局限性,攻击者仍然可以通过巧妙安排攻击模型,比如攻击的速率等来适应这些安全措施。
发明内容
有鉴于此,本发明一种客户端验证装置,其应用于网络安全设备中,用于验证经由所述网络安全设备接入网络的客户端,其中该装置包括:
报文检查单元,用于检查网络安全设备接收到的报文是否为ICMP端口不可达报文,如果是,则转客户端判决单元处理;如果否,则进一步检查发出报文的客户端是否存在于客户端列表中,如果不在,则转验证发起单元处理;
验证发起单元,用于构造UDP报文并向客户端发出,其中该UDP报文目的端口为客户端未开放的UDP端口,该UDP报文的UDP头部携带有预设的验证信息;以及
客户端判决单元,用于检查该ICMP端口不可达报文是否携带有所述预设的验证信息,如果是,则将发出该报文的客户端加入到客户端列表中作为信任客户端。
优选地,所述UDP报文的目的端口为非知名端口或者端口号大于50000。
优选地,还包括老化处理单元,用于在预定的客户端老化时间到达时将客户端列表中的客户端删除。
优选地,所述验证信息是与该客户端相对应的Cookie认证信息。
优选地,所述客户端判决单元进一步用于在检查到所述ICMP端口不可达报文没有携带所述预设的验证信息时,将所述客户端加入客户端列表中作为不信任客户端。
本发明还提供一种客户端验证方法,其应用于网络安全设备中,用于验证经由所述网络安全设备接入网络的客户端,其中该方法包括:
A,检查网络安全设备接收到的报文是否为ICMP端口不可达报文,如果是,则转步骤C;如果否,则进一步检查发出报文的客户端是否在客户端列表中,如果不在,则步骤B;
步骤B,用于构造UDP报文并向客户端发出,其中该UDP报文目的端口为客户端未开放的UDP端口,该UDP报文的UDP头部携带有预设的验证信息;
步骤C,检查该ICMP端口不可达报文是否携带有所述预设的验证信息,如果是,则将发出该报文的客户端加入到客户端列表中作为信任客户端。
优选地,所述UDP报文的目的端口为非知名端口或者端口号大于50000。
优选地,还包括:D,在预定的客户端老化时间到达时将客户端列表中的客户端删除。
优选地,验证信息是与该客户端相对应的Cookie认证信息。
优选地,所述客户端列表包括信任列表以及不信任列表,步骤C进一步包括:在检查到所述ICMP端口不可达报文没有携带所述预设的验证信息时,将所述客户端加入不信任列表;在检查到所述ICMP端口不可达报文携带所述预设的验证信息时,将所述客户端加入不信任列表。
附图说明
图1是本发明一般处理流程图。
图2是本发明客户端验证装置的逻辑结构图。
图3是ICMP报文封装在IP报文中的格式图。
图4是ICMP报文格式图。
图5是本发明UDP报文格式图。
图6是ICMP端口不可达报文格式图。
图7是本发明携带有认证信息的ICMP端口不可达报文格式图。
具体实施方式
本发明提出一种客户端验证的方法及装置来解决客户端伪造的问题。请参考图1,其显示了本发明一般的处理流程。首先,一个新的客户端(client)接入网络后根据自己的应用需求发出报文来访问各种服务器(Server)。位于服务器与客户端之间的网络安全设备(Dev)会构造一个带有验证信息的UDP报文发给客户端。如果网络安全设备能够收到带有同样验证信息的ICMP回应报文,则证明客户端是真实存在的,其IP地址并不是伪造的,;否则说明客户端的IP地址是伪造的。以下结合图2至图7,以网络安全设备通过CPU执行内存中的计算机软件为例进行介绍,然而本发明显然不局限于纯计算机软件的实现方式,其完全可以通过软硬结合甚至包括固件的组合方式加以实现。请参考图2,本发明客户端验证装置10位于所述网络安全设备中,其包括:报文检查单元11、验证发起单元12、客户端判决单元13以及老化处理单元14。上述各个单元在通过CPU运行软件代码实现,并执行如下流程。
步骤101,检查网络安全设备接收到的报文是否为ICMP端口不可达报文,如果是,则转步骤103;如果否,则进一步检查发出报文的客户端是否在客户端列表中,如果不在,则步骤102;本步骤由报文检查单元11执行。
如前所述,本发明是通过检查接收到的ICMP端口不可达报文来确定客户端是否是真实的,所以对于所有的报文都需要先检查其是否为ICMP端口不可达报文。如果是ICMP端口不可达报文,则需要在步骤103做特别处理。如果不是ICMP端口不可达报文,则进入步骤102的一般处理程序。
请参考图3以及图4,ICMP报文一般包括查询报文以及差错报文,ICMP端口不可达报文属于差错报文的一种,其在ICMP协议定义中是:报文类型为3,代码为3。报文检查单元即通过检查协议类型,报文类型以及代码类型即可找到ICMP报文,关于特定报文的识别现有技术已经有较好的教导,不再一一赘述。
当一个新的客户端接入网络并发起对远端主机(如服务器)的访问时,其第一个报文到达网络安全设备时。报文检查单元11遍历客户端列表(以客户端IP地址列表为例)会发现客户端的IP地址并不存在于所述客户端列表中,如此表明该客户端的IP地址是真实的还是伪造的无法确定。因此转入步骤102对客户端的真伪进行验证。
步骤102,用于构造UDP报文并向客户端发出,其中该UDP报文目的端口为客户端未开放的UDP端口,该UDP报文的UDP头部携带有预设的验证信息;本步骤由验证发起单元12执行。
UDP协议有一个规则,如果主机收到一份UDP数据报文,但该报文的目的端口与主机上正在使用的进程不相符,那么主机UDP协议栈会返回一个ICMP端口不可达报文。这个规则是UDP协议本身为了防止通信双方发现错误时的通知机制,而本发明则巧妙地利用这个规则来向客户端发起验证流程。
请参考图5,验证发起单元12首先要构造一个对于一个客户端接收来说极其有可能出错的UDP数据报文,其是用来触发客户端发出ICMP端口不可达报文的。根据前面所述的规则,本发明要构造的UDP数据报文可以携带一个对客户端的进程来说是一个不存在的UDP目的端口。考虑到实际的情况,通常对于刚刚接入网络的客户端来说,其上开启的进程通常很少,这样一来UDP报文的构建方式有很多。比如说,随机选择一个目的端口,因为端口取值范围是0到65535;其导致客户端发现UDP端口不存在的概率将非常高,再比如说,选择一个不常用的非知名端口;再比如说,选择一个值很大的端口(比如端口60000),一般来说即便客户端的进程使用了一些端口,其通常不会使用端口值很大的端口,再比如说,选择一个端口段(如大于等于50000)。以上列举的是较为常见的方式,本领域普通技术人员完全可以根据协议的定义来“刻意”制造各种可能的UDP端口不存在的错误。
进一步来说,考虑到攻击者可能会依葫芦画瓢不断地用伪造的IP地址(即不真实的客户端)发送ICMP端口不可达报文,以欺骗网络安全设备;本发明进一步在构造UDP报文的时候,需要在UDP头部(比如源端口字段)填写特定的验证信息,现有技术已经给出了很多验证信息的生成手段,本发明采用一种较佳的方式是写入认证信息Cookie的方式,其目标是确保U DP报文所携带的认证信息是唯一,且与客户端相对应;其中Cookie可以根据IP地址信息按照预定的算法计算出来。对于本发明来说,验证信息设置在UDP头部,因为本发明巧妙利用了协议的规定,即一旦UDP报文出现端口错误的情况,该出错报文的UDP头部将会被携带在ICMP不可达报文中返回来。
步骤103,检查该ICMP端口不可达报文是否携带有所述预设的验证信息,如果是,则将发出该报文的客户端加入到客户端列表中作为信任客户端;本步骤由客户端判决单元13执行。
由于步骤102已经构造了UDP报文并发送给客户端,如果客户端是真实存在的(在本实施方式中即IP地址是客户端自身的IP地址),客户端收到该报文后发现该报文的端口与其上运行的进程不符合,客户端协议栈会自动返回ICMP端口不可达报文。但是如果客户端不是真实存在的,即其IP地址没有对应的客户端的,其实是攻击者伪造出来的,那么多数情况下,其并不会回应。
但是考虑到部分攻击者可能会刻意构造ICMP端口不可达报文进行回应,因此上述报文经过步骤101被确定为ICMP端口不可达报文后则送入本步骤进行判决。请参考图6和图7,而这个ICMP端口不可达报文会根据协议要求,将安全设备发出的UDP报文的UDP首部携带在其中。由于验证信息就在UDP首部中,因此判决单元收到之后可以将验证信息提取出来与其在步骤102发出的验证信息做比对,如果两者相同,则客户端是真实的,可以将该客户端的IP地址加入到客户端列表作为信任客户端,即通常所说的白名单。由于大部分攻击者并不会回应,因此攻击者伪造的IP地址并不会被加入到客户端列表中。
进一步来说,如果发现验证信息不同,说明是攻击者放入的,也可以将其加入客户端列表,但作为不信任客户端,即我们通常所说的黑名单。需要补充说明的是,步骤101中如果检查到发出报文的客户端已经在客户端列表,对于信任客户端则继续其他安全处理或者转发给服务器,对于不信任客户端则可以选择丢弃该报文。
步骤104,在将客户端加入客户端列表中时,为其创建定时器,在预定的老化时间到达时(即定时器超时),删除该客户端对应的表项。本步骤由老化处理单元14执行。
无论是信任客户端还是不信任客户端,在客户端列表中其均需要一个老化时间,对于信任客户端其有可能下线,其使用过的IP地址可能被攻击者利用起来;同样对于不信任客户端的IP地址,其有可能被后来新上线的真实客户端所使用。因此都可以设置老化时间以在防攻击以及保护用户体验上取得平衡。
本发明巧妙地利用ICMP协议来验证客户端的真伪性,在兼容标准协议的基础上实现网络安全防护效果,并不需要客户端有相应的应用支持本发明,整个过程对于客户端之前的用户来说是无法感知的,因此其实施成本很低,适用范围很广。以上所述仅仅为本发明较佳的实现方式,任何基于本发明精神所做出的等同的修改皆应涵盖于本发明的权利要求范围中。