防范边界网关协议路由劫持的协同监测方法

文档序号:7961090阅读:396来源:国知局

专利名称::防范边界网关协议路由劫持的协同监测方法
技术领域
:本发明提出一种防范边界网关协议(BGP)路由劫持(包括前缀劫持和下一跳劫持)的协同监测方法,属于计算机网络安全
技术领域

背景技术
:互联网是计算机技术与通信技术相互融合的产物,自20世纪90年代中期以来,随着网络规模的快速增长和基于互联网的商业应用日益增多,互联网正逐步演变成为人类社会重要的信息基础设施。为了增强可扩展性,互联网采用了层次式的路由体系结构,在自治系统(AutonomousSystem,AS)粒度上被划分为“域内”和“域间”两个层次。自治系统被定义为运行在统一的策略之下,向外展示出一致的路由策略的一组路由设备。边界网关协议(BGP)是当前域间路由协议事实上的标准,其主要作用是在自治系统之间交换网络可达信息。基于BGP的路由系统是互联网的核心基础设施,使分布在世界范围内的网络终端、设备能够通过互联网进行通信。路由劫持是BGP路由系统当前面临的最严重的安全威胁,具体分为前缀劫持和下一跳劫持。前缀劫持直接表现为一个AS(攻击者AS)宣告了属于另外一个AS(受害者AS)的IP地址空间(受害网络)。在互联网发展的历程中,前缀劫持事件时有发生,严重干扰了互联网的正常运行,影响较大的包括1997年的AS7007事件,2005年Google被Cogent劫持事件,以及2008年的YouTube事件等。这些事件都造成了受害网络提供的服务被中断两小时以上。BGP前缀劫持的根源在于BGP邻居之间过度的无条件的信任。每个AS依据从邻居AS学到的路由进行最优路由的选择,然后使用最优路由转发数据,而不会实际上也不能对路由的可信性进行判断。当前缀劫持发生时,借助于RouteViews和RIPE-RIS等路由采集项目,可以从路由数据中发现受害者网络同时被两个或者多个不同的AS宣告,具备明显的特征。另一种更具隐蔽性的攻击方式称为下一跳劫持,攻击者AS假称自己是受害者AS的直接邻居。由于只有受害者AS本身才知道攻击者AS是否自己的邻居,而前缀劫持/下一跳劫持发生时,攻击者AS发出的错误路由一般都不会传播到受害者AS本身,因此前缀劫持和下一跳劫持都非常难于检测。为了防范路由劫持,学术界和工业界做出了大量的努力,当前的工作主要集中在两个方面。一是针对脆弱的BGP信任模型,通过设计安全协议机制,为BGP提供全面的保护,在本质上是限定“只允许做什么”的方法;二是针对前缀劫持,通过对到特定网络的路由以及数据转发路径进行监测来保证前缀的安全,在本质上是限定“不允许做什么”的方法。在安全协议机制设计方面,目前仍然没有形成一个在效果和代价上可接受的方案,其原因是多方面的。其一,绝大多数安全协议机制都需要修改路由协议,部署代价高昂;其二,路由器上的计算和存储资源都非常有限,而安全协议的实现往往需要较大的开销;其三,很多安全机制都需要全网范围内的公钥基础设施(PublicKeyInfrastructure,PKI)的支持,而这在分布式的互联网上非常难于实现;其四,从动机上讲,当前提出的安全机制往往只有在全网范围内部署之后才能受益,商业利益驱动的运营商往往缺乏动力去部署。同样,致力于检测前缀劫持的监测机制也没有得到广泛的推广,其原因包括以下三个方面。一是,网络前缀和宣告者AS之间的映射会随着商业关系变化,当前并没有一个权威的机构或数据源能够提供准确实时的映射关系,只有网络前缀的拥有者本身才知道映射关系的变化是否合法;二是,由于运营商之间本质上是相互竞争关系,观察到前缀劫持的AS并没有通知受害者AS的义务,往往缺乏及时的处理与控制;三是当前缀劫持发生时,被劫持网络到互联网上其它AS的通信在很大程度上已经被切断,因此即使有AS愿意将此前缀劫持事件通知给受害者AS,网络管理员之间常用的通过Email等依赖于互联网的手段业已基本失效。本发明方法的提出基于以下几个基本事实(1)路由安全的重要性日益突出,对路由劫持进行防范具有广泛的需求和广阔的市场。相关研究表明,互联网流量在网络前缀之间的分布是不均衡的,一少部分网络前缀承载了互联网中相当大一部分流量。提供互联网搜索、视频共享和实时新闻等在线服务的内容提供商(InternetContentProvider,ICP)的服务质量严重地依赖于路由系统,具体体现在以ICP提供的服务为目的地的流量能否被正确地路由到该ICP提供服务的网络。路由劫持的直接体现就是“流量吸附”,攻击者AS能够通过劫持受害网络的路由从而达到重定向流量到自身的目的,因此防范路由劫持对于ICP尤为重要。(2)对路由劫持进行防范需要协同。对BGP路由劫持的防范存在着一对天然的、不可调和的矛盾。一方面,只有网络前缀的拥有者本身才能鉴别路由变化是否由于攻击行为引起;另一方面,BGP传播路由的机制以及网络运营商的路由策略使得攻击者发起的错误路由很难传播到受害者AS本身,因此,依赖于BGP协议本身的路由传播机制并不能让AS保护自己的路由不被劫持,必须引入协同让攻击者发起的错误路由能够传播到受害者AS。(3)路由数据采集项目RouteViews和RIPE-RIS,发布路由数据供网络学术研究和面向整个hternet的路由监测服务使用,已经与遍布全球的400多个自治系统与建立了BGP会话。这些自治系统设立了专为RouteViews和RIPE-RIS提供数据的网络基础设施,但是自身并没有得到有针对性的有效的网络安全服务。同时,互联网中绝大部分AS都拥有自己的网络测量、管理设施对域内的路由状态和流量分布进行监测,对网络设备进行管理。本方法所提出的协同监测方法通过协同AS中这些平时闲置或利用率很低的设施对BGP路由劫持攻击进行监测,AS不需要进行额外的投资就可以获得额外的回报,有助于本方法的推广和应用。
发明内容本发明要解决的技术问题是通过充分利用多个自治系统(AS)内现有的网络管理与测量基础设施,构建用于监测边界网关协议(BGP)路由劫持的协同网络,以增强互联网域间路由系统的安全性。技术方案是参与协同的AS利用原有的或新设立的服务器运行BGP协议,与一个或多个内部路由器建立用于采集路由更新报文的BGP会话,同时与多个其他AS中的监测服务器建立协同监测会话,具体由路由更新监测方法和会话状态监测方法二部分组成。在控制平面,分析监测会话获取的路由更新报文,检测BGP前缀劫持和下一跳劫持;在数据平面,对协同监测会话的状态进行维护和检测,实时发现针对于协同网络本身的路由劫持事件。本发明新定义的术语有监测器、监测会话、监测邻居、内部邻居和外部邻居等。监测器是每个参与构建协同监测网络的AS所设立的监测服务器;监测器之间建立的用于通信的BGP会话称之为监测会话;相应地,一个监测会话连接的两个监测器称为监测邻居;根据是否处在同一AS内,监测器与其他路由器或监测服务器的BGP邻居关系分为内部邻居和外部邻居。本发明使用的其他符号和术语说明如下网络前缀一个连续的IP地址块在路由系统中表示为一个网络前缀,简称前缀;M1,M2...Mn已经与自治系统u建立了监测会话的η个监测器,本发明中所有方法的描述均从自治系统u的角度出发,下文将不区分自治系统及其设立的监测器;Iffl监测器m试图进行保护的前缀集合,在本发明中指ASm直接宣告的所有网络;ipem:监测器m用于和外部邻居建立监测会话的IP地址,由于该地址必须具备全互联网范围内的可达性,因此ASm必须向路由系统中宣告包含该地址的网络前缀;ipim监测器m用于和内部邻居建立BGP会话的IP地址,由于该地址仅需在ASm内部可达,建议采用私有网络地址,且不向路由系统中宣告包含该地址的地址块;cm监测器m的协同前缀(cooperatingprefix),ASm宣告的,包含ipeim的前缀中地址空间最小的网络前缀;Gm=ASm的非用于构建协同网络的一般前缀(generalprefix)的集合,也就是监测器m宣告的除了协同前缀之外的前缀的集合,Gffl=Iffl-{cj。1.路由更新监测方法本方法对来自监测邻居的路由更新报文进行检测,即“控制平面”的检测,以发现针对于本自治系统的BGP前缀劫持和下一跳劫持事件。本方法涉及的符号说明和术语定义如下r:一条路由,是一个二元组r=(d,ρ),其中d是网络前缀,ρ是路由的AS-Path属性,具体指本地自治系统到达网络d所需依次经过的自治系统序列,记为[VkVlri...V1V0]。BGP中传播的的路由更新有‘Announcement,和‘Withdrawal,两种类型,分别记为‘A,和‘W’,‘A’类型的路由更新对应于非空的AS-Path属性,‘W’类型的路由更新对应于空的AS-Path属性。r.origin在路由系统中宣告网络d的自治系统,当r·;^0时,r.origin=V0;r.firsthop路由r在互联网上的传播过程中所经过的第一个不同于r.origin的自治系统;u的策略对于Iu中的任意前缀d,u的策略包括前缀和宣告者之间的映射关系策略0u(d)以及前缀和第一跳AS之间的映射关系策略Lu(d)。Ou(d)表示自治系统u认为有权利宣告前缀d的自治系统集合,Lu(d)表示u的AS邻居中被允许直接从u处学习到前缀d的路由的自治系统集合,反映了u的路由输出策略;MiM从监测器虬处观察到的到达前缀d的路由;OSetu(d,t)在t时亥lj,U从各个监测邻居观察到的到前缀d的宣告者集合;FSetu(d,t)在t时刻,U从各个监测邻居观察到的到前缀d的路由的第一跳自治系统的集合;前缀d对Mi不可达(deIu)监测邻居Mi没有去往本地自治系统网络d的路由;7前缀d可达性丧失表明所有的监测邻居Mi(1彡i彡η)都没有去往前缀d的路本检测方法的具体过程是监测服务器u在t时刻接收到监测邻居Mi发送的关于前缀d的路由更新报文r时,执行以下步骤(1)判断该路由涉及的前缀d是否在集合Iu中,如果是,则说明该路由与本自治系统的相关性,继续(2-6),否则返回;(2)对路由r进行内容解析,得到该路由对应AS-Path属性r.ρ;(3)如果r.p=^0,该路由更新是‘A’类型,对该路由进一步解析得到r.origin属性和r.firsthop属性,并更新监测器Mi对应的信息,Mi[d]=r;(4)如果np=0,该路由更新是‘W’类型,则MJd]=0,同时,意味着Mi所在的AS到网络前缀d变得不可达,生成前缀d对Mi不可达告警信息;(5)重新计算当前时刻从各个监测邻居观察到的到前缀d的宣告者集合和下一跳集合,0Setu(d,t)—UiLiCMi[d].origin)-,FSetu{d,t)—U^MiIdlfirsthop)-,(6)检测新接收到的源自治系统和第一跳自治系统与预定义策略的一致性,若r.origin不属于Ou(d),则生成前缀劫持告警,若r.firsthop不属于Lu(d),则生成下一跳劫持告警,若OSetu(d,t)为空或FSetu(d,t)为空,则生成前缀d可达性丧失告警。2.会话状态监测方法本方法通过对多个监测器之间建立的协同监测会话的通信状态进行监测,防范针对于协同监测网络本身的路由劫持。本方法工作在‘数据平面’上,实时监测本监测器与监测邻居之间的数据通路是否正常,并在检测到协同监测会话失效时启动故障诊断方法,推断导致失效的原因。协同监测会话通常连接两个并不直接相邻的监测器,建立多跳步的BGP外部连接(ebgp-multihop),在本质上与通常的BGP会话并没有区别。出于维护连通性的目的,BGP会话的每一方都需要为维护两个定时器,KeepAlive和HoldDown。按照路由协议标准RFC4271的规定,BGP会话的每一方均需要在时长为Ke印Alive的间隔内向另一方发送一个KeepAlive报文;若BGP会话的任意一方在时长为HoldDown的间隔内未收到Ke印Alive报文,则将该会话重置。在默认的设置中,KeepAlive和HoldDown定时器分别是60秒和180秒。BGP为每个会话邻居维护一个单独的有限状态机(FiniteStateMachine,FSM),每个状态机有六个状态:Idle,Connect,Active,OpenSent,OpenConfirm禾口Established。一个协同监测会话从其中的一方来看,它的状态处于“UP”当且仅当状态机处于“Established”状态,而当状态机处于其它五个状态时均认为会话是处于“DOWN”状态。监测器u和它的监测邻居ν之间通过建立在Cu和Cv之间的监测会话交换关于前缀集Iu和Iv的路由更新,但是当前缀^或Cv被劫持时,会使监测会话中断而导致本监测方法的失效。同时,在u—ν或ν—u任意一个方向上的路由故障也可能导致监测会话被中断。弓丨起协同监测会话故障的具体原因可以归结为以下四种情况(l)u—ν方向上的路由故障,称为前向路径故障;⑵ν—u方向上的路由故障,称为后向路径故障;(3)u的协同前缀从ν处被劫持;(4)ν的协同前缀从u处被劫持。在实际网络环境下监测会话故障的原因可能是以上四种因素的任意组合。8会话状态监测方法通过协同监测会话的状态来判断协同网络的工作状态,并将协同前缀被劫持(Cu或Cv被劫持)与路由故障引发的监测会话中断区分开来,实现路由安全事件的精确报告和定位。本方法涉及的符号说明和术语定义如下T长度为T的时间窗口,一般设置为3个KeepAlive或1个HoldDown间隔;Si与监测邻居Mi建立的协同监测会话,其中Si.State指该监测会话的状态,即“DOWN”或"UP",Si.fp指u到Mi的路径,称为前向路径,Si.bp指从Mi到u的路径,称为后向路径;ebufi监测器u为每个监测邻居Mi维护一个缓存,存储最近T时间内从与Mi的监测会话上观察到的事件,包括BGPKeepAlive,BGPNotification,TCP连接建立和撤销的报文以及相关于前缀cMi的ICMP报文。每个事件定义为一个(时间,类型,原始报文)三元组,存储的原始报文用于网络管理员进行深度分析;bPi监测器U通过协同监测会话从监测邻居Mi学到的、自己使用的协同前缀Cu的路由的AS-Path属性,这实际上就是Si.bp;监测器u为其可见的任意网络前缀d维护以下三种状态(l)hd监测器u为每个网络前缀d维护从内部邻居学到的最近一段时间的路径变化,每个元素为(t,path),其中t为接收到路由更新的时间,path为接收到的路由更新报文中的AS-Path属性;(2)neWpd:当前时刻监测器u用于去往网络前缀d的最优路由的AS-Path属性;(3)Oldpd在T时间以前监测器u用于去往网络前缀d的最优路由的AS-Path属性;stable(hd)根据hd中的信息计算当前本地自治系统到目标网络d的AS-Path属性,以及T时间以前的该AS-Path属性。具体的计算过程如下(1)将hd中的元素根据时间标记以升序排列;(计算相邻两个元素之间的时间差;(选取生成最大时间差的两个相邻元素,将较小时间戳的元素的AS-Path属性设为Oldpd;(4)将Iiewpd设为所有元素中最大时间戳的元素的AS-Path属性;(5)stable(hd)=(οIdpd,newpd);E事件候选集,每个元素为(oldpd,neWpd),表示网络前缀d的路径由Oldpd变为newpd;C:故障候选集,其元素(U,ν)代表自治系统1!和¥之间的边,当U=ν时,代表自治系统U的内部链路,每个元素(u,v)和一个计数器(U,V),counter相关联,表示该链路相关的事件个数;F故障集,确认发生了故障的链路或节点,是C的一个子集。会话状态监测方法由两个独立的部分组成,一部分负责更新和维护所监测到的各种状态,称为会话状态维护子方法;另一部分在检测到会话状态变化时对导致变化的原因进行分析,并生成日志以辅助网络管理员进行网络调试,称为会话故障诊断子方法。会话状态监测方法仅只读取而不更改路由协议的运行状态,在实现上独立于路由协议,无须对路由协议进行修改。2.1会话状态维护子方法会话状态维护子方法在监测器上使用原始套接字进行监听,在t时刻接收到IP报文P时执行以下步骤第一步,获取IP报文的“协议”(Protocol)字段(IP报文的第10个字节),解析得到报文的源地址字段Psm;第二步,若‘协议’字段为1,则P是ICMP报文,否则返回;如果ICMP报文的类型代码(type)为3,则该报文通告的是“目标不可达”异常状态,读取错误代码(code),提取其数据部分中包含的未成功送往目标地址的IP数据的目的地址,记为b,否则返回;若监测器存在外部邻居Mi,使得=&,则执行以下步骤,否则返回(1)若该ICMP是“网络不可达”(类型代码3,错误代码0),则向ebuf,中加入(t‘网络不可达’,P);(2)若该ICMP是“主机不可达”(类型代码3,错误代码1),则向ebuf,中加入(t‘主机不可达’,P);(3)若该ICMP是“未知的网络”(类型代码3,错误代码6),则向ebuf,中加入(t‘网络未知’,P);(4)若该ICMP是“未知的主机”(类型代码3,错误代码7),则向ebufi中加入(t‘主机未知’,P);(5)若该ICMP是“端口不可达”(类型代码3,错误代码3),则向ebuf,中加入(t‘端口不可达’,P);(6)若该ICMP是“TTL超时”(类型代码11,错误代码0),则向ebufi中加入(t‘TTL超时’,ρ);(7)从前至后扫描ebufi,只保存最近T时间内收到的事件,之后返回;第三步,若‘协议,字段为‘6,(TCP),且TCP部分的‘目的端口,(Destinationport)字段(TCP部分的第3,4字节)为179,则ρ是一个BGP报文,否则返回;第四步,解析BGP报文的‘类型(Type)’字段(BGP部分的第19字节),记为type;第五步,若type为1或3或4,该报文是BGPOpen报文,或Ke印Alive报文,或Notification报文,则进行以下处理(1)若pSM是本监测器的内部邻居,即pSM==ipiu,则返回;(2)若是本监测器的外部邻居Mi,即^<==ρ^ιν则在ebufi对应加入(t,‘BGPOpen,,ρ),或(t,‘BGPKe印Alive,,ρ),或(t,‘BGPNotification,,ρ);(3)从前至后扫描ebufi,只保存最近T时间内收到的事件,之后返回;第六步,若type为2,该报文是BGP路由更新(BGPUpdate)报文,解析得到撤销的前缀列表wp,宣告的前缀列表ap,以及AS-Path属性pathp;第七步,若是本监测器的内部邻居,即Psrc=ipiu,则进行以下处理(1)若Wp牛0,则对于任意网络前缀deWp,向hd中加入其最新的变化^0),表明从本地自治系统去往网络前缀d的路由在t时刻其路径属性变为0;(2)若OpΦ0,则对于任意网络前缀de、,向hd中加入其最新的变化(t,pathp),表明从本地自治系统去往网络前缀d的路由在t时刻其路径属性变为pathp;(3)对于ρ中涉及的任何网络前缀dewpU、,查看并更新相应的hd,具体地,仅保留[t_T,t]时间内接收到的路由更新,以及t-Τ时刻以前接收到的最后一个路由更新;第八步,若Ps,。是本监测器的外部邻居Mi,即Pm=Φ%,则进行以下处理(1)若Wp*0,若CueWp,则Z^·=0,表明从监测邻居Mi到本地自治系统u的路径,即后向路径,被撤销;(2)若αρ*0,若CueWp,则bPi=pathp,表明从监测邻居Mi到本地自治系统u的路径变为Pathp。2.2会话故障诊断子方法会话故障诊断子方法检测到一个会话状态变化,即Si.StateSi-Si'(Si^Si')时,执行以下步骤第一步,判断Si'的状态,如果是“DOWN”,则继续执行;否则是“UP”,返回;第二步,初步判断引起监测会话Si失效的原因(1)计算Si失效前的前向路径,监测会SSi对端的(监测邻居Mi—方)IP地址是ipeM.,Si-fp=stable(hCM.)■oWpCM;;(2)计算Si失效前的后向路径,Si.bp=bPi;(3)监测会话Si对端的(监测邻居Mi—方)IP地址是ipeMi,若中最新的元素的AS-Path属性为0,则Si的失效由前向路径故障引起,前向路径为Si.fp;(4)若ebufi中存在ICMP事件,表明Mi的协同前缀不可达,Si的失效由前向路径故障引起,该前向路径为Si.fp;(5)查看^,若宣告前缀的AS发生了变化,则SiW失效由于对端协同前缀被劫持引起;第三步,若第二步中的条件均未满足,则引发Si失效的原因包括本地协同前缀Cu被劫持,或后向路径失效。首先初始化F—0,C——0,然后对于U可见的每个网络前缀d,按以下步骤进一步诊断监测会话Si失效的原因(1)根据hd计算newpd和oldpd,(oldpd,newpd)=stable(hd);(2)若newpdΦoldpd,向事件候选集中加入事件e:oldpd—newpd,记为E—EU{(oldpd,newpd)};(3)对于事件e中涉及的两条AS-Path,newPd和oldpd,首先去除每条AS-Path中连续重复的出现(ASPr印ending),得到形如VkVk^1......V1V0的AS-Path(对于任意的O^m<η^k,vm^vn);(4)向故障候选集中加入节点,C—CUUUOin,)},更新节点对应的计数器(vm,vm).counter一(vm,vm).counter+1;(5)向故障候选集中加入边工—〔0141-=1(){(>1+1,771)},更新边对应的计数器(vm+1,Vm).counter一(vm+1,vm).counter+1;第四步,将故障候选集C中的元素按照其关联的计数器的值以降序排列,然后进行以下步骤(1)若EΨ¢),则从C中选取计数器值最高的元素(X,y);(2)对于E中任何一个事件e:oldpd—newpd,若其oldpd或者newpd属性包含节点或边(x,y),则将之移除;(3)将(x,y)从C中移除,若(x,y)成功地从E中移除过一个或多个事件,将该链路加入到故障集F中,F—FU{(x,y)};(4)若E=0,返回;否则转(1);第五步,计算F中的节点/边与前向路径Si.fp的交集!^,以及与后向路径Si.bp的交集Fbp;第六步,若Φ0,则是前向路径故障,若Fbp*0且ebufi中最近2T/3时间内无任何BGP相关报文(仅限于Ke印Alive和Notification),则属后向路径故障,并返回非空的故障集Ffp或Fbp;若以上条件均不满足,判定本地协同前缀被劫持。采用本发明能达到以下有益效果本发明充分利用了AS内部现有的网络管理、测量设施,以及公共路由数据发布项目所设立的数据采集设施,通过协同和整合现有的网络资源,构建监测BGP前缀劫持和下一跳劫持的协同网络。采用本发明可以取得以下效果(1)从控制平面监测针对于本自治系统网络的前缀劫持和下一跳劫持事件。尤其值得一提的是,目前其他的路由安全监测方法一般只能对前缀劫持进行检测。从控制平面对这两类事件进行检测具有开销小,准确率高的特点。(2)从数据平面对协同网络正常工作所依赖的底层IP网络的通信进行保护。协同监测会话采用类似于BGP会话的连通性维护机制,能够保证不受正常的路由事件的干扰;不需要建立新的叠加网络和实现新的叠加网络协议,部署简单。通过对协同监测会话的状态监控,可以诊断导致会话状态中断的关键节点和链路,为自治系统管理员进行网络调试提供依据。(3)由于对前缀劫持和下一跳劫持的检测均在本地进行,不存在着检测到安全事件无法通知受害者自治系统的问题。参加公共路由数据发布服务的互联网运营商没有数据隐私方面的顾虑,并且直接获益于本方法的部署,实现了责权利的统一,有利于协同网络规模的持续扩展和演化。图1是本发明在自治系统内的部署示意;图2是本发明在自治系统之间的部署示意;图3是监测器在内部邻居和外部邻居之间的路由输入/输出策略示意;图4是本发明的功能模块设计;图5展示了本方法在服务器上的具体实现;图6是采用本发明后每3分钟内接收到的BGP更新报文的数量及存储开销;图7是采用本发明后,一个AS分别与5n(l彡η彡11)个AS建立协同监测会话所能覆盖的安全范围,以展示本发明监测方法的覆盖能力。具体实施例方式图1是监测器在自治系统(AS)内部的互联示意图。出于备份的目的,每个监测器最好与两个或以上的内部邻居互联。AS内部的边界路由器存在着多种组织形式,包括采用iBGP全互联,路由反射器和BGP联邦。根据AS内部边界路由器之间互联方式的不同,监测器所连接的内部邻居也略有不同。(1)对于采用iBGP全互联边界路由器的AS,如图1(a)所示,监测器需要与其中任意的两个或以上路由器建立BGP会话;(2)对于采用路由反射部署方式的AS,如图1(b)所示,监测器需要与其中任意的两个或以上的路由反射器(RouteReflector,RR)建立BGP会话,并将监测器配置为路由反射器的客户(RouteClient,RC);(3)对于采用BGP联邦部署方式的AS,监测器只需加入其中的任意一个联邦,并与该联邦内任意两台或以上的路由器建立BGP会话即可,连接方式和图1(a)所示的相同。当监测器与内部邻居互联时,本方法要求监测器建立BGP会话时使用AS内部地址块,即该地址块既不向外部自治系统宣告,也禁止从外部自治系统学习到关于该地址块的路由。该地址块可以是,但不局限于私有地址。对该类型地址块的处理方式类似于对AS内部路由器地址的处理,仅在AS内部通过IGP进行传播以提供该地址块在整个AS内部的连通性,但是在AS边界上被过滤掉。使用这种方式可以保证监测器和内部邻居之间的通信不被劫持。在实现方式上,自治系统管理员可以有多种选择。例如,在边界路由器上使用route-map,filter-list,redistribute-list/prefix-list等配置手段对路由器使用的地址块进行过滤;或者在由内部网关路由协议向BGP进行路由发布时标记上预定义的COMMUNITY属性,在边界路由器上对特定的COMMUNITY属性进行过滤。图2是本方法的域间部署示意,域间部署方式体现了本方法的协同特性,从整个hternet范围内看,部署了监测器的AS之间按照自定义的策略互联从而形成了一个监测器的对等网络。监测器之间基于TCP进行通信,交换相互感兴趣的路由更新。原则上,一个监测器应该与多个监测器建立协同监测会话。与域内部署不同的是,为了实现不同AS域中监测器之间的通信,监测器用于与外部邻居建立协同监测会话的网络地址必须是互联网上可路由的,换言之,包含该地址的地址块必须向AS邻居宣告进而在整个域间路由系统中传播,从而具有全网范围内的可达性。一般地,一个监测器只使用一个地址与外部所有的监测器邻居建立协同监测会话,以便于故障诊断时在多个监测会话之间的状态关联。图3是监测器的输入/输出策略在CISCO路由器格式下的示意说明。每个监测器与其内部邻居事实上处于同一自治系统的管辖范围之内,因此它们之间的输入输出策略相对简单。监测器需要不加过滤地接收所有内部邻居发送过来的路由,而不向内部邻居发送任何路由,监测器的具体配置如图3第一行第二列;自治系统u中与监测器互联的其他路由器,即监测器的内部邻居,需要向监测器不加过滤地输出所有的路由,而拒绝监测器发送过来的任何路由,具体的配置如图3第一行第三列。对于处于不同AS中的监测器u和V,在U—ν方向上,u仅限于输出关于Iv前缀的路由,同时,ν也仅限于输入关于Iv中前缀的更新。同理,在ν—u方向上ν也仅限于输出关于Iu中的前缀的路由,u仅输入关于Iu中前缀的路由更新。在向外部邻居输出路由时,需要将路由中的LocalPreference,Community和Med属性都重置为空或0,u和ν具体配置分别参考图3第二行的第二列和第三列。图4是监测器的功能模块设计,包括底层的路由器/路由软件,管理配置模块、监测器邻居关系配置模块、路由更新监测模块、会话状态监测模块、网络探测模块和报警模块。底层的路由器/路由软件模块具体可以采用路由器设备,也可以采用普通服务器运行软件路由器,如Quagga,Zebra或M)RP来实现,其被用于和监测器邻居交换各自感兴趣的网络更新。管理配置模块实现两方面的功能。对于任意一个自治系统U,首先,自治系统管理员需要配置监测器进行协同监测前缀劫持所必需的知识,包括本自治系统拥有的前缀集合,与本自治系统存在直接连接的自治系统邻居,以及宣告给每个邻居的前缀集合。再则,13还需要配置当本自治系统监测器与和其它自治系统中监测器建立会话关系时,需要的辅助信息包括保护会话的安全机制和密钥,以及路由输入和输出策略。路由更新监测模块负责对来自邻居监测器的BGP路由更新进行检查,当发现与预先定义的知识存在冲突时向报警模块告警。会话状态监控模块负责监控本监测器与邻居监测器之间的数据通信的状态,当会话被中断时向报警模块告警。报警模块从路由更新监控模块和会话状态监测模块接收告警信息,并启动网络探测模块对告警信息进行确认,当前缀劫持被确认后向自治系统管理员告警。网络探测模块使用当前所广泛用于拓扑探测的技术Ping,TraceRoute和TCPPing对收到的初步告警信息从数据平面进行验证。图5展示了本方法在服务器上的具体实现。本实现采用开源的路由软件Quagga(http://www.quagga.net)和内部邻居以及外部邻居建立协同监测会话,通过原始套接字(RawSocket)捕获报文。通过对报文处理流程的优化,融合了路由更新监测方法和会话状态监测方法。对捕获的报文首先根据‘协议’进行过滤,只保留‘ICMP’和‘TCP’类型,若是ICMP报文,进一步解析‘错误类型’和‘错误代码’,并根据ICMP报文的数据部分解析导致出错的IP报文的目的地址,若该目的地址是某外部邻居,则更新该邻居对应的ebuf;若该报文是TCP类型,则进一步检查该报文是否BGP报文,若该报文是BGP报文,则需进一步解析该BGP消息的类型(type),当type为2时,将该报文送至路由更新检测模块检测路由劫持,由会话状态监测方法更新后向路径,若type为1,3,4,则直接送至会话状态监测方法更新ebuf。对协同会话在数据平面上的状态(通信状态)采用Quagga自身提供的‘vtysh’进行,本实现采用的命令是‘vtysh-eshowbgpneighbors’,然后对返回的文本进行分析提取每个监测会话的状态。周期性查询Quagga以实现对会话状态的实时监控,查询周期设为10s,当检测到协同监测会话的状态不是‘Established,时,启动故障诊断。图6展示了协同监测系统的开销。评估中使用的数据来自于美国俄勒冈州立大学RouteViews项目的采集器(route-views,routeviews.org),选取了从2010年1月1日零时零分至2010年12月31日11时59分从39士3个自治系统采集的BGP路由更新。具体地,假定被评估的监测器与这39士3个监测器建立了协同监测会话,主要对两个指标进行评估,一是在T设为默认的3分钟时,监测器在T内接收到的BGP路由更新数量;二是在T设为默认的3分钟时,监测器存储T时间内接收到的BGP更新所需要的内存空间(以KB计),前者的平均值为698.5个/3分钟,峰值3661个/3分钟;后者的平均值为104KB,峰值为417KB。考虑到现今核心网络中的流量动辄以(计,且服务器、路由器的内存已达2GB以上,这些开销是可以承受的。图7展示采用三种不同的策略选取建立协同监测会话的合作自治系统时,所能达到的安全效果。评估基于真实的互联网拓扑(采集于2010年1月1日RouteViews项目发布的路由表),共有33232个自治系统和97485条连接不同自治系统的边。假设u部署了本协同监测方法,参与了协同监测网络,当一个AS劫持u的前缀时,就很有可能被u发现。本方法对于u的安全范围定义为劫持u的前缀会被u发现的AS集合,相应地,安全范围的大小定义为这一类AS的数量。“随机策略”是指u随机地选择协同邻居;“优选连接”指u总是选择节点度数最大的AS作为自己的协同邻居;“绝对效用”指u总是选择能给自己带14来最大的安全范围的AS作为自己的协同邻居。实验表明,在选择的协同邻居数小于35时,“绝对效用”策略具有显著的优势,但是当选取的协同邻居数超过45之后,三种策略在效果上的差别并不明显。说明本方法的效果对节点的选取策略并不敏感,允许自治系统管理员灵活地选取本自治系统的协同邻居,增强了部署上的灵活性。权利要求1.防范边界网关协议路由劫持的协同监测方法,其特征在于,该方法的技术方案是参与协同的AS利用原有的或新设立的服务器运行BGP协议,与一个或多个内部路由器建立用于采集路由更新报文的BGP会话,同时与多个其他AS中的监测服务器建立协同监测会话,具体由路由更新监测方法和会话状态监测方法二部分组成。2.根据权利要求1所述的防范边界网关协议路由劫持的协同监测方法,其特征在于,路由更新监测方法对来自监测邻居的路由更新报文进行检测,即“控制平面”的检测,以发现针对于本自治系统的BGP前缀劫持和下一跳劫持事件,检测方法的具体过程是监测服务器u在t时刻接收到监测邻居Mi发送的关于前缀d的路由更新报文r时,执行以下步骤(1)判断该路由涉及的前缀d是否在集合Iu中,如果是,则说明该路由与本自治系统的相关性,继续(2-6),否则返回;(2)对路由r进行内容解析,得到该路由对应AS-Path属性r.ρ;(3)如果印*0,该路由更新是‘Α’类型,对该路由进一步解析得到r.origin属性和r.firsthop属性,并更新监测器Mi对应的信息,Mi[d]=r;(4)如果印=0,该路由更新是‘W’类型,则岣[d]=0,同时,意味着Mi所在的AS到网络前缀d变得不可达,生成前缀d对Mi不可达告警信息;(5)重新计算当前时刻从各个监测邻居观察到的到前缀d的宣告者集合和下一跳集合,0Setu(d,t)—UJLiCMi[d].origin)-,FSetu(d,t)—U1I^M^d].firsthop)·,(6)检测新接收到的源自治系统和第一跳自治系统与预定义策略的一致性,若r.origin不属于Ou(d),则生成前缀劫持告警,若r.firsthop不属于Lu(d),则生成下一跳劫持告警,若OSetu(d,t)为空或FSetu(d,t)为空,则生成前缀d可达性丧失告警。3.根据权利要求1所述的防范边界网关协议路由劫持的协同监测方法,其特征在于,会话状态监测方法通过对多个监测器之间建立的协同监测会话的通信状态进行监测,防范针对于协同监测网络本身的路由劫持,该方法工作在‘数据平面’上,实时监测本监测器与监测邻居之间的数据通路是否正常,并在检测到协同监测会话失效时启动故障诊断方法,推断导致失效的原因;会话状态监测方法由两个独立的部分组成,一部分负责更新和维护所监测到的各种状态,称为会话状态维护子方法;另一部分在检测到会话状态变化时对导致变化的原因进行分析,并生成日志以辅助网络管理员进行网络调试,称为会话故障诊断子方法;会话状态监测方法仅只读取而不更改路由协议的运行状态,在实现上独立于路由协议,无须对路由协议进行修改。4.根据权利要求1所述的防范边界网关协议路由劫持的协同监测方法,其特征在于,会话状态维护子方法在监测器上使用原始套接字进行监听,在t时刻接收到IP报文ρ时执行以下步骤第一步,获取IP报文的“协议”(Protocol)字段(IP报文的第10个字节),解析得到报文的源地址字段Psm;第二步,若‘协议’字段为1,则P是ICMP报文,否则返回;如果ICMP报文的类型代码(type)为3,则该报文通告的是“目标不可达”异常状态,读取错误代码(code),提取其数据部分中包含的未成功送往目标地址的IP数据的目的地址,记为b,否则返回;若监测器存在外部邻居Mi,使得=&则执行以下步骤,否则返回;(1)若该ICMP是‘络不可达’,P);(2)若该ICMP是‘机不可达’,P);(3)若该ICMP是‘络未知’,P);(4)若该ICMP是‘机未知’,P);(5)若该ICMP是‘网络不可达’主机不可达’未知的网络’未知的主机’端口不可达’(类型代码3,错误代码0),则向ebufi中加入(t,‘网(类型代码3,错误代码1),则向ebuf,中加入(t(类型代码3,错误代码6),则向ebuf,中加入(t(类型代码3,错误代码7),则向ebuf,中加入(t(类型代码3,错误代码3),则向ebuf,中加入(t主网主端口不可达’,P);(6)若该ICMP是“TTL超时”(类型代码11,错误代码0),则向ebufi中加入(t,iTTL超时,,P);(7)从前至后扫描ebufi,只保存最近T时间内收到的事件,之后返回;第三步,若‘协议,字段为‘6,(TCP),且TCP部分的‘目的端口,(Destinationport)字段(TCP部分的第3,4字节)为179,则ρ是一个BGP报文,否则返回;第四步,解析BGP报文的‘类型(Type),字段(BGP部分的第19字节),记为type;第五步,若type为1或3或4,该报文是BGPOpen报文,或Ke印Alive报文,或Notification报文,则进行以下处理(1)若Psrc是本监测器的内部邻居,即Psrc==ipiu,则返回;(2)若psrc是本监测器的外部邻居Mi,即Psrc==ipeMi,则在ebufi对应加入(t,‘BGPOpen,,ρ),或(t,‘BGPKe印Alive,,ρ),或(t,‘BGPNotification,,ρ);(3)从前至后扫描ebufi,只保存最近T时间内收到的事件,之后返回;第六步,若type为2,该报文是BGP路由更新(BGPUpdate)报文,解析得到撤销的前缀列表wp,宣告的前缀列表ap,以及AS-Path属性pathp;第七步,若Psm是本监测器的内部邻居,即Psm=ipiu,则进行以下处理(1)若%ΦO,则对于任意网络前缀deWp,向hd中加入其最新的变化(,0),表明从本地自治系统去往网络前缀d的路由在t时刻其路径属性变为0;(2)若Op*0,则对于任意网络前缀de、,向hd中加入其最新的变化(t,pathp),表明从本地自治系统去往网络前缀d的路由在t时刻其路径属性变为Pathp;(3)对于P中涉及的任何网络前缀dewpUap,查看并更新相应的hd,具体地,仅保留[t-T,t]时间内接收到的路由更新,以及t-T时刻以前接收到的最后一个路由更新;第八步,若Ps,。是本监测器的外部邻居Mi,即Vc=ipeMi,则进行以下处理(1)若%*0,若CueWp,则%=0,表明从监测邻居Mi到本地自治系统u的路径,即后向路径,被撤销;(2)若本0,若Cuewp,则bPi=pathp,表明从监测邻居Mi到本地自治系统u的路径变为pathp。5.根据权利要求1所述的防范边界网关协议路由劫持的协同监测方法,其特征在于,会话故障诊断子方法检测到一个会话状态变化,即Si.State=Si—Si'(Si^Si')时,执行以下步骤第一步,判断s/的状态,如果是“DOWN”,则继续执行;否则是“UP”,返回;第二步,初步判断引起监测会话Si失效的原因(1)计算Si失效前的前向路径,监测会SSi对端的(监测邻居Mi—方)IP地址是Φ(,Si.fp=Stable(hCM.).oldpCMi;(2)计算Si失效前的后向路径,Si.bp=bPi;(3)监测会SSi对端的(监测邻居Mi—方)IP地址是ipeMi,若、^中最新的元素的AS-Path属性为0,则Si的失效由前向路径故障引起,前向路径为Si.fp;(4)若ebufi中存在ICMP事件,表明Mi的协同前缀不可达,Si的失效由前向路径故障引起,该前向路径为Si.fp;(5)查看,若宣告前缀;的AS发生了变化,则Si的失效由于对端协同前缀被劫持引起;第三步,若第二步中的条件均未满足,则引发Si失效的原因包括本地协同前缀Cu被劫持,或后向路径失效。首先初始化F—礼C—φ,Ε—0,然后对于u可见的每个网络前缀d,按以下步骤进一步诊断监测会话Si失效的原因(1)根据hd计算newpd禾口oldpd,(oldpd,newpd)=stable(hd);(2)若IiewpdΦoldpd,向事件候选集中加入事件e=Oldpd—newpd,记为E—EU{(oldpd,newpd)};(3)对于事件e中涉及的两条AS-Path,Iiewpd和oldpd,首先去除每条AS-Path中连续重复的出现(ASPr印ending),得到形如VkVlri......V1V0的AS-Path(对于任意的O彡m<η<k,vm兴vn);(4)向故障候选集中加入节点,C—CUUUOm,)},更新节点对应的计数器(vm,vm).counter一(vm,vm).counter+1;(5)向故障候选集中加入边,C—CUL4_=U0m+1Wm)},更新边对应的计数器(vm+1,vm).counter一(vm+1,vm).counter+1;第四步,将故障候选集C中的元素按照其关联的计数器的值以降序排列,然后进行以下步骤(1)若EΦ0,则从C中选取计数器值最高的元素(X,y);(2)对于E中任何一个事件e=Oldpd—newpd,若其oldpd或者Iiewpd属性包含节点或边(x,y),则将之移除;(3)将(x,y)从C中移除,若(x,y)成功地从E中移除过一个或多个事件,将该链路加入到故障集F中,F—FU{(x,y)};(4)若E=0,返回;否则转(1);第五步,计算F中的节点/边与前向路径Si.fp的交集Ffp,以及与后向路径Si.bp的交集^bp;第六步,若^0,则是前向路径故障,若Fiip*0且ebufi中最近2T/3时间内无任何BGP相关报文(仅限于Ke印Alive和Notification),则属后向路径故障,并返回非空的故障集Ffp或Fbp;若以上条件均不满足,判定本地协同前缀被劫持。全文摘要本发明涉及一种防范边界网关协议(BGP)路由劫持(包括前缀劫持和下一跳劫持)的协同监测方法。技术方案是参与协同的AS利用原有的或新设立的服务器运行BGP协议,与一个或多个内部路由器建立用于采集路由更新报文的BGP会话,同时与多个其他AS中的监测服务器建立协同监测会话,具体由路由更新监测方法和会话状态监测方法二部分组成。在控制平面,分析监测会话获取的路由更新报文,检测BGP前缀劫持和下一跳劫持;在数据平面,对协同监测会话的状态进行维护和检测,实时发现针对于协同网络本身的路由劫持事件。本发明充分利用了AS内部现有的网络管理、测量设施,以及公共路由数据发布项目所设立的数据采集设施,通过协同和整合现有的网络资源,构建监测BGP前缀劫持和下一跳劫持的协同网络。文档编号H04L29/06GK102394794SQ20111034382公开日2012年3月28日申请日期2011年11月4日优先权日2011年11月4日发明者徐明,曹华阳,朱培栋,王小强,胡罡,郑倩冰,陈侃,陈颖文申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1