专利名称:P2p蠕虫防御系统的制作方法
技术领域:
P2P蠕虫防御系统属于互联网技术领域,尤其涉及对等网络技术和蠕虫防御技术。
背景技术:
蠕虫病毒在计算机网络上的扩散可看作是某种拓扑结构下的网络传播行为,而不同的网络拓扑结构又会极大地影响蠕虫的传播速度。在网络中当一台主机被蠕虫感染后,处于同一网络中的其它主机都将受到威胁,在缺乏有效的防御措施的情况下,蠕虫会在短时间内感染整个网络。那么,当在一台主机上发现感染蠕虫病毒后如何尽快告知其他主机进行病毒防御将变得十分重要。
面对大规模的蠕虫病毒的侵袭,只做到单机防毒是远远不够的,单一的、传统的蠕虫防御手段也已无法有效抵御复杂情况下不断变化的蠕虫病毒威胁。对用户而言,采用网络病毒综合防御解决方案构建自防御网络就显得非常关键,所以研发专门的网络病毒防御系统具有十分重要的实际意义。
本发明通过在各个节点上安装本P2P蠕虫防御系统对等端交互软件,基于优化直径网络拓扑结构和d分路由算法在Internet上架构起一个P2P网络,在其上定义统一的蠕虫扫描监测策略,由各个分布在P2P网络中的端节点实施这些策略,将无组织、各自为政的病毒防御变成一种自组织、可预警、高效率并可共享补丁文件和预警信息的病毒监测防御体系,从而极大地提高整个网络抵御蠕虫的能力,使得系统的安全性随着参与者的增多而加强。该系统是一种基于P2P网络上的端节点之间共享信息的方案,用以从整体上防御蠕虫攻击,它的实现依赖于优化的网络拓扑结构和快速的路由算法以及多节点协同文件传输机制,通过在这个P2P网络上实现高效的分组转发和文件传输机制为蠕虫防御搭建起了一个良好的平台。
发明内容
本发明的目的在于克服现有蠕虫病毒防御技术的不足,通过构建P2P蠕虫自防御网络,提供一种新的蠕虫病毒综合防御解决方案。
本发明解决其技术问题所采用的技术方案是主机通过安装运行对等端交互软件搭建起一个P2P蠕虫防御网络,同时对等端交互软件实现对本地主机的安全漏洞扫描和病毒监测,并通过这个自组织的P2P蠕虫防御网络实现高效的信息共享,通过启发式路由算法——d分法实现了在发现蠕虫病毒入侵时能快速发布预警信息,通过多节点协同数据传输机制实现了主机在受到蠕虫病毒攻击时能快速获取补丁文件。
本发明的特征在于在P2P网络中各节点的众多对等主机上安装对等端交互软件,简称PES,从而搭建起一个P2P蠕虫防御网络,简称PWN,从而使这些安装了所述PES的对等主机和所述PWN在整体上构成了所述P2P蠕虫防御系统,所述的PES含有A对等网络构建模块,简称PNC模块,实现Radar节点的创建和对等主机的加入退出、状态维护、分组转发功能,该PNC模块由如下子模块组成A1Radar创建子模块,所述Radar是指某个对等节点上的一台对等主机;该子模块含有所有不饱和对等节点当前的饱和度、对等主机IP以及ID在内的信息,并以节点的ID从小到大排序;所述对等节点的饱和度是指一个对等节点所拥有的对等主机数量,当该数量达到系统最大设定值时,称该对等节点为饱和的,或处于饱和状态,否则为不饱和的,处于非饱和状态;该子模块不仅是其他对等主机加入所述PWN时的入口,而且为节点的数据传输提供支持,实现步骤如下A1(1)选取一个性能良好的对等主机作为Radar,而Radar又对应到一个众所周知的域名上;但系统在最初时刻的Radar由第一个节点中的某对等主机担任;A1(2)当某个作为Radar的对等主机想要退出时会从与它同在一个节点中的对等主机里挑一个性能良好的主机,把自己的所有信息传输给该挑选出的主机,然后通知域名服务器DNS进行重定向;A2对等主机加入子模块,实现对等主机向所述PWD网络的加入动作,实现方法如下A2(1)所述对等主机运行PES软件,通过访问一个众所周知的域名定位到系统中的某个Radar上;A2(2)该对等主机从该Radar上获取系统中当前非饱和节点信息并根据当前P2P网络状态获取自身ID;A2(3)由d分网络算法求出其父对等主机ID,并获得其IP,所述d分网络算法依次含有以下步骤A2(31)节点以自然数为标识,首先从0节点开始;A2(32)任何一个节点只允许有一个父节点和d个子节点;A2(33)为了节点之间维持状态信息的需要,节点间采用双向链路;A2(34)新加入一个节点时,保持网络原有结构不变;A2(35)设本节点ID为x,父节点ID为k,节点的度为d,一个节点所拥有子节点的个数称为该节点的度,则1)k=0 当x<d时2)k=x-1 当x为本层最小值时3)k=(x-d-(x Mod d))/d其它情形A2(4)该对等主机向所述父对等主机发送一个请求加入分组并完成链接动作,使该对等主机成为该父对等主机的一个子对等主机;A2(5)在对应的Radar上注册自身信息,其中包括一个唯一的ID和对等主机IP、所用端口;A2(6)当系统中所有节点都处于饱和状态时,Radar通过创建新的节点来拓展网络当前的结构;A3对等主机退出子模块,实现对等主机从所述PWD网络中退出和注销的动作,实现步骤如下A3(1)该对等主机向Radar注销其信息;A3(2)该对等主机断开与其父对等主机的链接;
A4对等节点失效恢复子模块,实现过程依次含有以下步骤A4(1)原对等主机退出时的消息发布并挑选继承人原对等主机通过Radar检查该节点上是否所有对等主机都已退出,若还有对等主机存在,则不必恢复;否则便在Radar上找到ID号最大的一个对等主机,以此作为继承人;A4(2)继承人的到位原对等主机要向继承人发送一个请求恢复节点的消息,其中包括继承人的新ID号和继承人的父对等主机的IP和ID号,也就是原对等主机的相关信息,同时请求继承人补充到原对等主机所在的节点顶替原对等主机的位置和ID号,然后原对等主机退出;继承人得到并解析所述消息后,断开与自己原父对等主机的连接,建立自己新的ID号和新的父对等主机的IP和ID号并向Radar注册,成为原对等主机所在节点的一个对等主机;A4(3)原对等主机的子对等主机恢复链接所述子对等主机接到原父对等主机的退出消息后,就间隔地访问Radar,判断父对等主机是否已经恢复,若一旦恢复,就以恢复后的对等主机作为自己的父对等主机,自动建立连接;A5分组转发子模块,在对等主机之间传输分组,实现步骤如下A5(1)把目的主机的ID和消息内容封装;A5(2)根据步骤A2(3)所述的d分路由机制进行计算,决定下一跳要转发的对等主机的ID;A5(3)把分组转发给一下跳对等主机,判断是否已经到达目的主机,若已到达,则停止转发;否则执行步骤A5(2);B多节点协同文件传输模块,简称U2X模块,所述多节点协同文件传输是指当用户把自己的资源提供给系统中其他对等几点以共享系统中的信息和服务时,每个用户把自己的最新补丁数据制作成元数据,上传到Radar上,再以多节点协同传输的方式提供给其他用户,以达到传输速度的快速化,其实现步骤如下B1Radar把用户上传的一个大文件分割成许多数据碎片,给每个碎片一个标记,以超级文本传输协议HTTP方式传送给多个用户,各用户会自动寻找、随机下载具有不同标记的数据碎片并将其整合成完整的文件,同时,也从Radar那里获取参与下载的其他对等节点的包括IP地址、端口号在内的信息;B2当用户间要获取文件时,便可根据Radar定位到其他下载对等节点的信息按照对等协议进行通信;C扫描模块,简称Scanner模块,实现开放端口扫描、特定漏洞扫描、进程扫描,根据扫描到的系统漏洞调整安全策略,发现后台服务或可疑开放端口后对其予以关闭;发现可能被蠕虫利用的系统漏洞后通过PNC模块发布告警信息,通过所述U2X模块查找和快速定位补丁信息并快速传输所需的补丁文件,所述的扫描模块包括以下各个子模块C1端口扫描子模块,用于发现系统的安全漏洞和系统目前向外界提供的服务,其实现步骤如下C1(1)建立注册端口和弱端口数据库,记录端口号及其对应服务、连接类型;C1(2)选择扫描端口类型注册端口、已知漏洞端口,手动设置扫描端口的范围;C1(3)记录扫描结果记录,其中包括开放端口、已注册端口和弱端口;C2漏洞扫描子模块,检查目标对等主机是否存在漏洞,实现步骤如下C2(1)建立漏洞数据库,依次含有以下步骤
C2(11)建立注册端口数据库,记录注册端口号及其对应服务、连接类型;C2(12)选择被扫描端口的类型;C2(13)记录扫描结果;C2(2)执行如下几大类系统漏洞扫描■义件传输协议漏洞扫描,简称FTP漏洞扫描;■统一字符编码漏洞扫描,简称unicode漏洞扫描;■网络数据查询脚本缓冲区溢出漏洞扫描,简称idq漏洞扫描;■公共网关接口漏洞扫描,简称CGI漏洞扫描;■打印缓冲区溢出漏洞扫描,简称printer漏洞扫描;C2(3)把所扫描端口扫描得到的目标对等主机开启的端口以及端口上的网络服务和网络漏洞扫描子模块提供的漏洞库进行匹配,查看是否有符合匹配条件的端口存在,弱匹配成功,则表明目标对等主机存在安全漏洞;C3蠕虫监测子模块,探测用户列出的以及系统开放的端口,实时监测蠕虫病毒的入侵端口,实现步骤如下C3(1)通过界面设置需要实时监测的系统开放的端口;C3(2)建立蠕虫病毒数据库,记录一定量已知病毒及其对应入侵端口号;C3(3)实时监测指定端口,对用户列出的以及系统开放的端口进行实时监测以发现蠕虫病毒攻击。
本发明所提出的P2P蠕虫防御系统,克服了现有蠕虫病毒防御技术的不足,提供了一种新的蠕虫病毒综合防御解决方案,通过构建P2P蠕虫自防御网络,可以实现大规模网络上自组织、可预警、高效率并可共享补丁文件和预警信息的蠕虫病毒监测防御体系,从而解决现有方法中信息获取不及时、蠕虫病毒防御效果差的问题。
图1.P2P蠕虫防御系统的拓扑结构图; 对等主机 雷达图2.多节点协同文件传输示意图;图3.对等端交互软件PES总体框架图;图4.P2P网络拓扑构建示意图;图5.对等节点之间的连接示意图;图6.链路恢复示意图;图7.Scanner模块框架图;图8.PNC模块整体框架图;图9.对等主机加入过程流程图;图10.对等主机退出过程流程图;图11.分组发送过程数据流图;图12.Radar实现流程图;图13.U2X模块数据传输过程中的连接示意图。
→对等主机之间的连接 对等主机与Radar的连接
具体实施例方式
本发明的特征在于通过在众多对等主机上安装运行对等端交互软件PES(Peer ExchangeSoftware)搭建起一个高效大规模的结构优化的P2P蠕虫防御网络PWN(P2P Worm DefenseNetwork),并采用启发式d分路由算法,实现低延迟的蠕虫病毒告警发布和快速的分组转发;通过多节点协同文件传输机制实现快速的病毒库和补丁文件传输。这些安装有PES的对等主机和PWN整体上构成了P2P蠕虫防御系统PWD(P2P Worm Defense System)。
我们首先给出几个重要概念(1)对等节点扩展d叉树拓扑结构中的一个点,记为Peer-node,简记为node。
(2)对等主机位于某个对等节点上的一台主机,记为Peer-host,简记为host。
这两个概念之间的关系是一个对等节点上可以有多个对等主机,一个对等主机只能位于一个对等节点上;对等节点的标识随着网络规模的扩大而顺序递增。
(3)对等节点的饱和度一个对等节点所拥有的对等主机数量。
当对等节点的饱和度等于系统最大设定值时,称该对等节点为饱和的;反之,称为非饱和的。
(4)伙伴同一节点中的不同主机之间互为伙伴,他们之间以UDP方式通信。伙伴之间要在分组转发时互相协调同步发送分组。
P2P蠕虫防御系统PWD包含有以下步骤步骤1.对等端交互软件PESPES是运行在端主机上的对等端交互软件,用于实现与其他对等主机的一切交互动作以及实现安全策略,PES由三大模块组成(见图3)■PNC(Peer Network Consture)模块■U2X模块■Scanner模块步骤2.各个模块的功能■PNC模块实现Radar的创建和对等主机的加入退出、状态维护、分组转发功能;■U2X模块实现多节点协同快速传输文件功能;■Scanner模块实现对主机的端口扫描、特定漏洞扫描以及蠕虫病毒实时监测功能。
步骤3.PNC模块PNC模块由如下子模块组成图8所示为PNC模块整体框架图,它描述了该模块与子主机、父主机以及Radar主机之间的通信关系。
□Radar创建子模块功能Radar其实也是一台对等主机,在它上面记录着所有不饱和对等节点当前的饱和度、对等主机的IP以及ID等信息,并且以节点的ID由小到大排序,它不仅是其他对等主机加入PWN时的入口,而且为节点间的数据传输提供支持;
实现步骤(1).选取一个性能良好的对等主机来作为Radar,Radar对应到一个众所周知的域名上,对等主机加入自己PWN时只需要访问这些众所周知的域名即可通过动态域名解析访问到某个Radar上;(2).系统在最初时刻,Radar由第一个节点中的对等主机担任;(3).当某个作为Radar的对等主机想要退出时,它会从与它同在一个节点中的对等主机里挑一个性能良好的主机,将它上的所有信息传输给该对等主机,由它来担任新的Radar,然后通知域名服务器DNS进行重定向。
□对等主机加入子模块功能实现对等主机向PWD网络的加入动作;实现步骤(1)一台对等主机运行PES,通过访问一个众所周知的域名定位到系统中某个Radar上;(2)从该Radar上获取系统中当前非饱和节点信息,并根据当前P2P网络状态获取自身ID;(3)由d分网络算法求出其父对等主机ID,并找到其IP;(4)向该父主机发送一个请求加入分组并完成建连动作,从而主机A成为该父节点的一个子主机;(5)在Radar上注册自身信息;(6)当系统中所有节点都处于饱和状态时,需要通过创建新的节点来拓展网络当前的结构。
□对等主机退出子模块功能实现对等主机从PWD网络中退出和注销的动作;实现步骤(1).注销它在Radar上的注册信息;(2).断开与其父主机的连接。
□对等节点失效恢复子模块功能只要一个节点上还有一个主机存在,那么这个节点就是有效的,无需恢复,它还可以进行分组转发,当一个节点上所有的主机都退出后,该节点失效,这时候需要对该节点进行恢复;实现步骤(1).原主机退出时进行消息发布并完成继承主机的挑选;(2).继承主机顶替该位置;(3).失去连接的子主机重新获取父主机信息并建立连接。
□分组转发子模块功能在对等主机之间传递分组;
实现步骤(1).将目的主机的ID和消息内容进行封装;(2).根据d分路由算法进行计算,来决定下一跳要转发的主机ID;(3).将分组转发给下一跳主机并判断是否到达目的主机,若是则停止转发,否则继续上一步操作。
步骤4.U2X模块功能实现主机间的快速文件传输;实现步骤(1).与发送分组不同,为了保证传输最小延迟,文件传输肯定不能用单点之间逐级转发的方式。我们所要采用的机制必须保证系统对于速度的需求,我们设计多节点协同传输机制(U2X机制)来实现文件传输;(2).该方法支持文件的断点续传,符合P2P网络动态变化的需求。我们利用U2X机制架构起的网络是一种无严格结构的P2P网路,用户在传输文件时实时地建立链接,其结构始终在动态变化中;(3).U2X机制具有优化的分布式文件管理机制,它将一个大文件分割成许多碎片,给每一个碎片一个标识,用户无需到一个固定地点去下载完整的文件;(4).系统自动寻找、随机下载具有相同标识的文件碎片,并将其加以整合最终形成完整的文件,下载与上传双向互动、同时进行;(5).在Radar上发布一些小的元信息文件(.U2X文件),通常为几k,所以在这里并不会形成网络瓶颈。只要有一定的对等主机和一个源文件提供者就能完成下载;数据在传输时被分片协同传输,数据碎片在进行下载的对等主机之间来回传递,形成一种多对多的映射关系,而且传输速度会随着参与者的增多而变的越来越快。
步骤5.Scanner模块功能扫描模块功能包括开放端口扫描、特定漏洞扫描、进程扫描,根据扫描到的系统漏洞调整安全策略,发现可疑后台服务或可疑开放端口后对其予以关闭,发现可能被蠕虫利用的系统漏洞后通过PNC模块发布告警信息,通过U2X模块查找和快速定位补丁信息并快速传输所需的补丁文件;Scanner模块由如下子模块组成□端口扫描一个端口就是一个潜在的通信通道,也就可能成为蠕虫的入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。通过端口扫描,可以得到许多有用的信息,从而发现系统的安全漏洞和系统目前向外界提供了哪些服务。
功能实现对主机开发端口的扫描;实现步骤(1)建立注册端口和弱端口数据库,记录端口号及其对应服务、连接类型;
(2)选择扫描端口类型注册端口、已知漏洞端口、手动设置扫描端口的范围;(3)扫描结果记录,包括开放端口、已注册端口、弱端口。
□漏洞扫描漏洞扫描主要通过以下两种方法来检查目标主机是否存在漏洞在端口扫描后得知目标主机开启的端口以及端口上的网络服务,将这些相关信息与网络漏洞扫描模块提供的漏洞库进行匹配,查看是否有满足匹配条件的漏洞存在;通过模拟蠕虫的攻击手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱口令等。若模拟攻击成功,则表明目标主机系统存在安全漏洞。
功能实现对主机安全漏洞的扫描;实现步骤1.建立漏洞数据库(1).建立注册端口数据库;记录注册端口号及其对应服务、连接类型;(2).建立弱端口字典;记录端口号、连接类型和可能的攻击病毒名;(3).扫描结果记录;开放端口记录该开放端口所对应的服务和可能收到的攻击已注册端口记录该注册端口所对应的服务弱端口记录该弱端口可能收到的攻击类型2.实现如下几大类系统漏洞扫描■文件传输协议漏洞扫描,简称FTP漏洞扫描;■统一字符编码漏洞扫描,简称unicode漏洞扫描;■网络数据查询脚本缓冲区溢出漏洞扫描,简称idq漏洞扫描;■公共网关接口漏洞扫描,简称CGI漏洞扫描;■打印缓冲区溢出漏洞扫描,简称printer漏洞扫描;□蠕虫监测功能探测用户列出的以及系统开放的端口,实时监测蠕虫病毒的入侵端口;实现步骤(1).建立蠕虫病毒数据库,记录一定量已知病毒及其对应入侵端口号;(2).实时监测指定端口,对用户列出的以及系统开放的端口进行实时监测以发现蠕虫病毒攻击;图1是P2P蠕虫防御系统PWD的拓扑结构图,图3是对等端软件PES的总体框架图,整个PWD网络由两个层面构成d-分网络和U2X网络。d-分网络是一个稳定的扩展d叉树网络,该网络上的路由算法采用启发式路由算法-d分法,U2X网络是一个结构动态变化的多节点协同文件传输网络。
■PNC模块的实现PNC模块实现主机加入和退出对等网络的全部动作,包括对等节点发现、主机加入、退出、邻居状态维护、分组的低延迟转发等。该模块主要负责与PWN上其他对等节点的通信,并通过本模块来搭建起整个对等网络,同时PNC模块还要和U2X模块进行通信,以帮助其转发查询分组。
1.Radar创建子模块如图12所示为Radar实现流程图,从图中可见它主要包括RawServer、HTTPHandler、Radar这3个类和Peer列表。
Radar是PWD系统中必需的角色,一个Peer在下载开始以及下载进行的过程中,要不停的与Radar进行通信,以报告自己的信息,并获取其它下载Peer的信息。它的过程是这样的(1)Peer向Radar发一个HTTP的GET请求,并把它自己的信息放在GET的参数中;其内容为一个唯一的id、需要传输的文件名、ip、所用端口;(2)Radar对所有下载者的信息进行维护,当它收到一个请求后,首先把对方的信息记录下来(如果已经有记录,那么就检查是否需要更新),然后将一部分(并非全部,根据设置的参数已经下载者的请求)参与下载同一个文件(一个Radar可能同时维护多个文件的下载)的下载者的信息返回给对方;(3)Peer在收到Radar的响应后,就能获取其它下载Peer的信息,那么它就可以根据这些信息,与其它下载Peer建立连接,从它们那里下载文件片断。
主要函数为r.bind(config[′port′],config[′bind′],True)r.listen_forever(HTTPHandler(t.get,config[min_time_between_log_flushes]))2.对等主机加入子模块如图9所示为对等主机加入过程的流程图,对等主机的标识为IDofNode_IDofHost系统中的一个对等主机标识由两部分组成所在节点ID和主机ID三个主要函数procedure TFormLogin.FormCreate(SenderTObject);IdHTTP.Get(′url′,MemStr);ServerList.LoadFromStream(MemStr);(1)主机列表HostListIP IDofNode_IDofHost10.255.39.1=0_010.255.39.2=0_110.255.39.3=1_010.255.39.4=1_1
10.255.39.5=2_010.255.39.8=3_0出于简化,我们只考虑一个节点上有2个对等主机的情况,其他情况类似。
节点号 主机号 主机号0 0_0 0_11 1_0 1_12 2_0 2_13 3_0 3_1……n n_0 n_1(2)主机A加入流程(2.1)当前系统中存在非饱和节点时A对文件HostList扫描,令A的主机号是MyID,首先扫描到0_0,再扫下一行,如果是0_1,则达到饱和度2,说明节点0饱和;再扫下如果是1_0,再扫下一行,如果是1_1,则说明节点1饱和,否则说明节点1不饱和,那么此时可以决定A的ID为1_1,停止扫描;如果第三行先扫到的是1_1,第四行就成了2_0,而缺少1_0,则此时可以决定A的ID为1_0,停止扫描;(2.2)当前系统中所有节点都饱和时如果扫描完所有行发现所有节点都饱和,那么,A的ID可以决定为n+1_0,n为当前系统中的节点数(此时的n不包括A新创建的那个节点)。需要注意的是要保证上述加入流程能成功,前提是必须保证文件HostList的有序性,即文件HostList中的对等主机ID号一定要是从小到大顺序排列的。因为有些主机会随时退出,又随时加入,所以在一个主机加入时一定要将其按照ID有小到大的顺序插入到自己恰当的位置。
(2.3)当A查到自己的ID为m_1以后,就可以根据我们的算法求出其父节点ID,比如j那么,其父主机ID就是j_1。同样,若A的ID是m_0,则其父主机ID为j_0;(2.4)当一台主机退出系统时,就需要将其记录从文件HostList中删除。
(2.5)由于我们这里只实现的是2主机情况,所以经过分析求MyID时一共有4种可能的插入情况1)i_0后面紧接着是i+1_0,这时本主机的ID应该为i_12)i_1后面紧接着是i+1_1,这时本主机的ID应该是i+1_03)HostList文件中第一行,即系统中第一个主机就是0_1,这时本主机的ID应该是0_0能这样做的前提是我们考虑的系统中所有节点都是有效的,即系统中的任何一个节点上至少存在1台主机,当然,当某个节点失效时我们还有节点恢复机制来保证;4)HostList文件中最后一行,即系统中最后一个主机若是n_0时,这时本主机的ID应该是n_1
上面这四条规则是从上到下依次过滤的,只要满足其中一条就可以退出。图4所示为随着对等节点的增加PWD网络的拓扑结构的扩展情况。
3.对等主机退出子模块如图10所示为对等主机退出过程流程图,从图中可见退出过程分为从雷达上注销、断开与父主机连接以及通知子等对主机三个步骤。
(1)一个host正常退出时,首先向Radar注销其信息;(2)断开与其父节点主机的连接,当该主机所处的对等节点上还有其他主机时,此时不影响父子节点之间的通信;当该主机所处的对等节点上没有其他主机时,该节点失效,启动节点恢复机制,若该节点为叶子节点则无需启动节点恢复机制;(3)发送一个通告分组给其伙伴主机;三个主要函数为IdHTTP.Post(′url′,LogoutList,Response);Server.CreateObject(″Scripting.FileSystemObject″)Request.Form(UserIP)4.对等节点恢复子模块(1)只要当一个节点上还有一个主机存在,那么这个节点就是有效的,无需恢复,它还可以进行分组的转发,当一个节点上所有的主机都退出后,该节点失效,这时候需要对该节点进行恢复;(2)为了减小负载和减小复杂度,我们首先考虑从叶子节点中抽调出主机来恢复失效节点。其一、叶子节点的数量很大,便于挑选;其二、抽调叶子节点所带来的通信负载最小。整个节点恢复过程分为三步原主机退出时的消息发布和继承人的挑选;继承人的到位;子主机重新恢复连接;(3)一个主机A,假设其ID是d_1,在退出时首先要去Radar上进行判断,看它所在节点d会不会因为它的退出而变得失效,如果不会失效则直接退出即可;(3.1)首先在Radar上查找d_0看它是否存在,若d_0存在,则不用恢复该节点。
(3.2)若d_0不存在,则在Radar上找到最后一行(即系统中的最后一个主机),并获取其ID号;再计算出其所处的层数a,同时计算出d_1所处的层数b,若a=b,则无需恢复节点d;若a>b,则需要恢复节点d。
(3.3)在恢复节点d时,主机A无需给其所有子主机发送退出消息,因为一旦主机A退出,其所有子主机都会自动下线;(3.4)A首先需要从Radar上找出最后一个主机B(也就是ID号最大的一个),那么它一定是一个叶子节点,就以B作为A的继承人;(3.5)然后A在退出之前要向B发送一个请求恢复节点消息M(该消息M中包括B的新ID号d_1和B的父主机IP和ID号s_1,这些信息其实都是原来A的),消息M请求B补充到节点d中来顶替A的位置和ID;显然这时需要给B重新分配一个ID就是d_1,然后主机A就可以退出了;(3.6)B收到消息M以后,首先解析消息M,从中获取到B的新ID号d_1和B的父主机IP和ID号s_1这些信息,然后退出(即断开其与原父主机的连接),再B以d_1为自己的ID号,以s_1为父主机重新建立自动完成加入过程,并将自己的IP和ID号d_1注册进Radar,到这里主机B的工作就完成了,B这时也就成为了节点d的一个主机d_1;(3.7)接下来原来以主机A作为父主机的那些主机在接到A的退出通知消息开始就每隔一段时间去访问Radar,看他们的父主机d_1是否已经恢复,一旦检测到d_1上线,这些主机就重新以d_1为父主机自动建立连接,到这里整个节点恢复过程结束。
5.分组转发子模块图11所示为分组发送过程数据流图,分组转发机制我们采用d分路由算法进行分组的低延时转发。分组转发支持两种方式(1)对等节点A中的对等主机i向对等节点B中的对等主机j发送分组;(2)对等节点A中的对等主机i向对等节点B中的所有对等主机发送分组。
这只需要在接收端进行ID判断即可实现。源主机根据目的节点主机的ID,利用d分路由算法计算出下一跳转发的节点ID,并将分组转发给该邻居节点主机。
为了增强系统的鲁棒性,我们采用多台对等主机支撑一个对等节点的机制,所以同一个节点中的多台主机要同时协调动作,才能保证节点的有效性,两个对等节点A和B相连的充要条件是存在一条主机a(主机a属于节点A)到主机b(主机b属于节点B)的双向链路。在转发过程中一个节点中的所有主机都要同时参与转发,这几台主机在对外发送分组时要进行同步发送。分组转发时数据包格式SourceHostID#ObjectHostID#StateValue#WLayer#NextHopID#PayLoad参数说明SourceHostID源对等主机的IDObjectHostID目标对等主机的IDStateValue当前状态值 WLayer转折点所处层数NextHopID下一跳的ID PayLoad净载荷信息分组■U2X模块的实现(1)多节点协同文件传输机制图2为多节点协同文件传输机制示意图,图13为U2X子模块数据传输过程中的连接示意图。在PWD系统中,每个节点都具有相同的能力,负有相同的责任。它们将自己的资源提供给系统中其他对等节点,同时可以共享系统中的信息和服务。每个用户可以将自己的最新补丁数据做成元文件,上传到Radar上,提供给需要的用户来下载,下载时采用多节点协同传输机制,进行多点同时协助传输的方式,以达到传输速度的快速化。
与消息发送不同,为了保证传输最小延迟,文件传输肯定不能用单点之间逐级转发的方式。我们采用多节点协同传输机制来实现多点同时传送,并支持文件的断点续传,符合P2P网络动态变化的需求。它将一个大文件分割成许多碎片,给每一个碎片分配一个标识,用户无需到一个固定地点下载完整的文件,系统会自动寻找、随机下载具有不同标识的文件碎片,并将其加以整合最终形成完整的文件。用户的下载速度取决于其上传速度,上传速度越快,就能获得越高的下载速度,下载与上传双向互动、同时进行。
该机制中需要部分对等节点来担任Radar的角色,Radar上发布一些小的元信息文件。数据在传输时被分片传输,数据碎片在进行下载的node之间来回传递,形成一种多对多的映射关系,而且传输速度会随着参与者的增多而变得越来越快。
在整个传输过程中,Peer端不断与Radar通信,报告自己的状态,同时也从Radar那里获取当前参与下载的其它peers的信息(ip地址、端口等)。Peer端与Radar之间采用HTTP协议通信,Peer端把状态信息放在HTTP协议的GET命令的参数中传递给Radar,Radar则把peers列表等信息放在PUT命令的参数中传递给Peer端。
Peer端要每隔一段时间,就去连接Radar一次,它是以一个单独的线程执行的。这个线程在接受到Radar的响应数据后,交给主线程来进行分析。主程序从响应数据中,获得peers列表。然后调用Encoder∷start_connection()挨个与这些peers尝试建立连接。通过与Radar的通信,Peer端获得了参与下载的其它peers的列表。有了这些peers的信息,客户端就可以主动向它们发起连接,为进一步从它们那里获取所需要的文件片断做好准备。
同时,每个Peer端在启动以后,都会监听某个端口,用于接受其它peers的连接请求。Peer端在接受外来的连接请求之后,就会产生一个新的连接,称之为“被动连接”,因为连接的发起方是其它peer。
无论是被动连接,还是主动连接,一旦连接建立之后,双方就要进行对等协议的握手。握手成功之后,双方才可以通过这个连接互相传递消息了。
(2)Radar端U2X Peer端与Radar端之间,通过HTTP协议进行通信,而U2X Peer端之间以对等协议进行通信。Radar端的职责是搜集Peer端信息,并帮助Peer端相互发现对方,从而使得Peer端之间能够相互建立连接,进而互相能传输所需的文件碎片。
Radar端的实现,首先是通过RawServer类来实现网络服务器的功能,然后由HTTPHandler类来完成对协议数据的第一层分析,然后把URL和HTTP消息头进一步交给Radar类来进行第二层分析,并把分析的结果按照HTTP协议的格式封装以后,发给Peer端。
Radar类对Radar HTTP协议做第二层分析,它根据第一层分析后的URL以及HTTP消息头,进一步得到客户端的信息,然后综合当前所有传输Peer的情况,生成一个列表,这个列表记录了传输同一个文件的其它Peer的信息,并把这个列表交给HTTPHandler类,由它进一步返回给Peer端。
(3)Peer端Peer端的核心类就是RawServer,这个类在Radar端中已分析过它的作用。通过调用它的listen_forever()函数,Peer端就进入了一个循环之中。此后,所有的下载、上传、文件存储以及其它工作都在循环之中完成。
在进入循环之前,需要调用RawServer∷bind()函数,Peer端会选择一个可用的端口,然后通过监听这个端口,从而可以接受其它Peer端的连接请求(也就是对等连接)。从它的循环处理逻辑、监听端口的处理可知,这显然就是一个典型的网络服务器的表现。所以,Peer端同时也是一个服务器。一旦在监听端口上有某个Peer发来连接请求,Peer端会创建一个新的端口,这个端口用来与请求者建立连接;有几个peer请求连接,就会创建几个端口,可以说这是一些“被动端口”。
■Scanner模块的实现图7是PWD系统中的Scanner子模块的结构图,它由参数设置子模块、基本信息探测子模块、端口扫描子模块、漏洞扫描子模块以及蠕虫监测子模块等组成。
(1)端口扫描全连接扫描是TCP端口扫描的基础,现有的全连接扫描有TCP connect()扫描和TCP反向ident扫描等。我们这里采用TCP connect()扫描,TCP connect()扫描的实现原理为扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接。连接由系统调用connect开始。如果端口开放,则连接将建立成功;否则,若返回-1则表示端口关闭。建立连接成功响应扫描主机的SYN/ACK连接请求,这一响应表明目标端口处于监听(打开)的状态。如果目标端口处于关闭状态,则目标主机会向扫描主机发送RST的响应。
1.1.首先定义需要扫描的端口;1.2.创建Winsocks;1.3.获取开始端口、结束端口以及开始扫描的时间;1.4.则进入循环,设置RemoteHost、RemotePort、LocaIPort;1.5.利用操作系统提供的connect()系统调用,与每一个目标计算机的端口进行连接;1.6.如果端口处于侦听状态(tcpClient(lngCurrentWinsock).State=sckConnected),那么connect()就能成功,检索漏洞数据库并进行匹配,在log文件中记录漏洞端口;1.7.否则(tcpClient(lngCurrentWinsock).State=sckError),这个端口不能用,既没有提供服务。
TCP的三次握手连接程序Client--------Syn------->ServerClient<-----Syn/Ack------ServerClient-------Ack-------->ServerTCP connect()扫描的一个最大的优点是,不需要任何权限。系统中的任何用户都有权利使用这个调用。另一个好处就是速度快。如果对每个目标端口以线性的方式,使用单独的connect()调用,那么将会花费相当长的时间,我们可以通过同时打开多个套接字,从而加速扫描。使用非阻塞I/O允许设置一个低的时间用尽周期,同时观察多个sockt。
(2)漏洞扫描整个扫描子模块的工作流程是用户通过控制平台发出了扫描命令之后,控制平台即向扫描模块发出相应的扫描请求,扫描模块在接到请求之后立即启动相应的子功能模块,对被扫描主机进行扫描。通过对从被扫描主机返回的信息进行分析判断,扫描模块将扫描结果返回给控制平台,再由控制平台最终呈现给用户。
扫描模块在工作时,首先进行初始化,在初始化阶段,主要是读取所需的参数。除了读取参数外,还要建立一些文件以供以后使用。初始化后,建立非阻塞socket并连接,然后根据得到的相关端口及对应的服务,来调用相应的漏洞扫描子模块,包括CGI漏洞扫描子模块、unicode漏洞扫描子模块、FTP漏洞扫描子模块和printer漏洞扫描子模块和idq漏洞扫描子模块。
漏洞形成的原因形形色色、不一而足,在我们的设计中,主要包含以下类型的漏洞CGI脚本漏洞、FTP漏洞、unicode漏洞、printer漏洞和idq漏洞,下面我们简单介绍CGI脚本漏洞、unicode漏洞以及idq漏洞。
(2.1)CGI脚本漏洞CGI脚本是实现Web交互功能的重要手段。Shell脚本、Perl程序和C可执行程序是CGI脚本最常采用的形式。很多CGI脚本都存在漏洞,CGI漏洞的危害主要有三种1.缓冲区溢出攻击2.数据验证型溢出攻击3.信息泄漏(2.2)unicode漏洞IIS 4.0和IIS 5.0在Unicode字符解码的实现中存在一个安全漏洞,导致用户可以远程通过IIS执行任意命令。当IIS打开文件时,如果该文件名包含unicode字符,它会对其进行解码,如果用户提供一些特殊的编码,将导致IIS错误的打开或者执行某些web根目录以外的文件。
对于IIS 5.0/4.0中文版,当IIS收到的URL请求的文件名中包含一个特殊的编码例如″%c1%hh″或者″%c0%hh″,它会首先将其解码变成0xc10xhh,然后尝试打开这个文件,Windows系统认为0xc10xhh可能是unicode编码,因此它会首先将其解码,因此,利用这种编码,可以构造很多字符,攻击者可以利用这个漏洞来绕过IIS的路径检查,去执行或者打开任意的文件。
(2.3)idq漏洞idq.dll缓冲区溢出漏洞是近期最新的漏洞之一,破坏性极强的蠕虫病毒红色代码,及其变种病毒就是利用此漏洞攻击WindowsNT主机的。微软发布安全公告,指出其Index Server和Indexing Service存在漏洞。
作为安装过程的一部分,IIS安装了几个ISAPI扩展。其中的idq.dll存在问题,它是Index Server的一个组件,对管理员脚本(.ida文件)和INTERNET数据查询(.idq文件)提供支持。但是,idq.dll在一段处理URL输入的代码中存在一个未经检查的缓冲区。攻击者利用此漏洞能导致受影响服务器产生缓冲区溢出,从而执行自己提供的代码。而更为严重的是,idq.dll是以SYSTEM身份运行的,攻击者成功利用此漏洞后能取得系统管理员权限。
(3)蠕虫监测3.1.通过界面设置需要实时监测的对外没有开放的端口3.2.读取数据库,变量初始化3.3.开始监测进程3.4.创建Scoket数组用于被监测的端口3.5.标志复位,设置被监测端口,如果scoket初始化成功则计数器加1主要函数1.StartWatch()主监测进程,结合数据库对被设置端口进行监测2.wskPort_ConnectionRequest(Index As Integer,ByVal requestID As Long)当有连接企图访问被监测端口时,相应的socket监测到此事件,并报告该端口受到攻击。
3.AttackDetected(intIndex As Integer)当发现蠕虫攻击时,弹出告警对话框并报告攻击源和被攻击端口的详细信息由此可见,本发明达到了预期目的。
权利要求
1.P2P蠕虫防御系统,其特征在于在P2P网络中各对等节点的众多对等主机上安装对等端交互软件,简称PES,从而搭建起一个P2P蠕虫防御网络,简称PWN,从而使这些安装了所述PES的对等主机和所述PWN在整体上构成了所述P2P蠕虫防御系统,所述的PES含有A对等网络构建模块,简称PNC模块,实现Radar节点的创建和对等主机的加入退出、状态维护、分组转发功能,该PNC模块由如下子模块组成A1Radar创建子模块,所述Radar是指某个对等节点上的一台对等主机;该子模块含有所有不饱和对等节点当前的饱和度、对等主机IP以及ID在内的信息,并以对等节点的ID号从小到大排序;所述对等节点的饱和度是指一个对等节点所拥有的对等主机数量,当该数量达到系统最大设定值时,称该对等节点为饱和的,或处于饱和状态,否则为不饱和的,处于非饱和状态;该子模块不仅是其他对等主机加入所述PWN时的入口,而且为对等节点的数据传输提供支持,实现步骤如下A1(1)选取一个性能良好的对等主机作为Radar,而Radar又对应到一个众所周知的域名上;但系统在最初时刻的Radar由第一个对等节点中的某对等主机担任;A1(2)当某个作为Radar的对等主机想要退出时会从与它同在一个对等节点中的对等主机里挑一个性能良好的主机,把自己的所有信息传输给该挑选出的主机,然后通知域名服务器DNS进行重定向;A2对等主机加入子模块,实现对等主机向所述PWD网络的加入动作,实现方法如下A2(1)所述对等主机运行PES软件,通过访问一个众所周知的域名定位到系统中的某个Radar上;A2(2)该对等主机从该Radar上获取系统中当前非饱和节点信息并根据当前P2P网络状态获取自身ID;A2(3)由d分路由算法求出其父对等主机ID,并从Radar上获得其IP,所述d分路由算法依次含有以下步骤A2(31)对等节点以自然数为标识,首先从0节点开始;A2(32)任何一个对等节点只允许有一个父节点和d个子节点;A2(33)为了对等节点之间维持状态信息的需要,对等节点间采用双向链路;A2(34)新加入一个对等节点时,保持网络原有结构不变;A2(35)设本对等节点ID为x,父对等节点ID为k,对等节点的度为d,一个对等节点所拥有子节点的个数称为该对等节点的度,则1)k=0当x<d时;2)k=x-1 当x为本层最小值时;3)k=(x-d-(x Mod d))/d其它情形;A2(4)该对等主机向所述父对等主机发送一个请求加入分组并完成链接动作,使该对等主机成为该父对等主机的一个子对等主机;A2(5)在对应的Radar上注册自身信息,其中包括一个唯一的ID和对等主机IP、所用端口;A2(6)当系统中所有对等节点都处于饱和状态时,Radar通过创建新的对等节点来拓展网络当前的结构;A3对等主机退出子模块,实现对等主机从所述PWD网络中退出和注销的动作,实现步骤如下A3(1)该对等主机向Radar注销其信息;A3(2)该对等主机断开与其父对等主机的链接;A4对等节点恢复子模块,实现过程依次含有以下步骤A4(1)原对等主机退出时的消息发布并挑选继承人原对等主机通过Radar检查该对等节点上是否所有对等主机都已退出,若还有对等主机存在,则不必恢复;否则便在Radar上找到ID号最大的一个对等主机,以此作为继承人;A4(2)继承人的到位原对等主机要向继承人发送一个请求恢复对等节点的消息,其中包括继承人的新ID号和继承人的父对等主机的IP和ID号,也就是原对等主机的相关信息,同时请求继承人补充到原对等主机所在的对等节点顶替原对等主机的位置和ID号,然后原对等主机退出;继承人得到并解析所述消息后,断开与自己原父对等主机的连接,建立自己新的ID号和新的父对等主机的IP和ID号并向Radar注册,成为原对等主机所在对等节点的一个对等主机;A4(3)原对等主机的子对等主机恢复链接所述子对等主机接到原父对等主机的退出消息后,就间隔地访问Radar,判断父对等主机是否已经恢复,若一旦恢复,就以恢复后的对等主机作为自己的父对等主机,自动建立连接;A5分组转发子模块,在对等主机之间传输分组,实现步骤如下A5(1)把目的主机的ID和消息内容及相关信息进行封装;A5(2)根据步骤A2(3)所述的d分路由机制进行计算,决定下一跳要转发的对等主机的ID;A5(3)把分组转发给一下跳对等主机,判断是否已经到达目的主机,若已到达,则停止转发;否则执行步骤A5(2);B多节点协同文件传输模块,简称U2X模块,所述多节点协同文件传输是指当用户把自己的资源提供给系统中其他对等几点以共享系统中的信息和服务时,每个用户把自己的最新补丁数据制作成元数据,上传到Radar上,再以多节点协同传输的方式提供给其他用户,以达到传输速度的快速化,其实现步骤如下B1Radar把用户上传的一个大文件分割成许多数据碎片,给每个碎片一个标记,以超级文本传输协议HTTP方式传送给多个用户,各用户会自动寻找、随机下载具有不同标记的数据碎片并将其整合成完整的文件,同时,也从Radar那里获取参与下载的其他对等节点的包括IP地址、端口号在内的信息;B2当用户间要获取文件时,便可根据Radar定位到其他下载对等节点的信息按照对等协议进行通信;C扫描模块,简称Scanner模块,实现开放端口扫描、特定漏洞扫描、进程扫描,根据扫描到的系统漏洞调整安全策略,发现后台服务或可疑开放端口后对其予以关闭;发现可能被蠕虫利用的系统漏洞后通过PNC模块发布告警信息,通过所述U2X模块查找和快速定位补丁信息并快速传输所需的补丁文件,所述的扫描模块包括以下各个子模块C1端口扫描子模块,用于发现系统的安全漏洞和系统目前向外界提供的服务,其实现步骤如下C1(1)建立注册端口和弱端口数据库,记录端口号及其对应服务、连接类型;C1(2)选择扫描端口类型注册端口、已知漏洞端口,手动设置扫描端口的范围;C1(3)记录扫描结果记录,其中包括开放端口、已注册端口和弱端口;C2漏洞扫描子模块,检查目标对等主机是否存在漏洞,实现步骤如下C2(1)建立漏洞数据库,依次含有以下步骤C2(11)建立注册端口数据库,记录注册端口号及其对应服务、连接类型;C2(12)选择被扫描端口的类型;C2(13)记录扫描结果;C2(2)执行如下几大类系统漏洞扫描■文件传输协议漏洞扫描,简称FTP漏洞扫描;■统一字符编码漏洞扫描,简称unicode漏洞扫描;■网络数据查询脚本缓冲区溢出漏洞扫描,简称idq漏洞扫描;■公共网关接口漏洞扫描,简称CGI漏洞扫描;■打印缓冲区溢出漏洞扫描,简称printer漏洞扫描;C2(3)把所扫描端口扫描得到的目标对等主机开启的端口以及端口上的网络服务和网络漏洞扫描子模块提供的漏洞库进行匹配,查看是否有符合匹配条件的端口存在,弱匹配成功,则表明目标对等主机存在安全漏洞;C3蠕虫监测子模块,探测用户列出的以及系统开放的端口,实时监测蠕虫病毒的入侵端口,实现步骤如下C3(1)通过界面设置需要实时监测的系统开放的端口;C3(2)建立蠕虫病毒数据库,记录一定量已知病毒及其对应入侵端口号;C3(3)实时监测指定端口,对用户列出的以及系统开放的端口进行实时监测以发现蠕虫病毒攻击。
全文摘要
P2P蠕虫防御系统涉及对等网络的蠕虫防御技术领域,其特征在于对等主机通过安装运行含有对等端交互软件、多节点协同快速文件传输软件和病毒扫描软件在内的对等交互软件搭建起一个P2P蠕虫防御网络,实现对本地主机的安全漏洞扫描和病毒监测,实现自组织的P2P蠕虫防御网络的高效信息共享,通过d分路由机制实现在发现蠕虫病毒时的快速发布预警信息,以及通过多节点协同数据传输机制实现对等主机在受到蠕虫病毒攻击时能快速获取补丁文件。本发明实现了大规模网络上自组织、可预警、高效率并可共享补丁文件和预警信息的功能,解决了现有方法中信息获取不及时、蠕虫病毒防御效果差的问题。
文档编号H04L29/06GK1710906SQ20051001212
公开日2005年12月21日 申请日期2005年7月8日 优先权日2005年7月8日
发明者徐恪, 丁强, 崔勇 申请人:清华大学