Psychz -马赫什
投票:0发布时间:2019年9月25日11:37:37
BGP劫持通常有时被称为路由劫持、前缀劫持或IP劫持,通过破坏使用边界网关协议(BGP)维护的互联网路由表非法接管IP地址组来实现。现在,在我们理解这是如何做到的之前,我们将尝试理解什么是BGP(边界网关协议)。
那么什么是BGP呢?
边界网关协议可以被需要在不同位置宣布IP,撤回IP和或前缀能力的客户使用。BGP会话路由器通过一系列的BGP更新来交换路由信息。始发BGP路由器向它的邻居通告一个IP地址前缀,邻居将这个信息传播给其他路由器,直到某个目标路由器知道这个前缀和到达该前缀中的目的地的路由。
什么是BGP前缀劫持?
BGP协议中没有验证路由的可信机制,这就导致了一个漏洞问题,任何BGP路由器都可以宣布任何前缀,就好像它拥有该前缀一样,甚至可以修改与该前缀相关联的路由。大多数网络运营商配置BGP路由器与其他自治系统建立对等关系,目的是交换路由信息。但是,它们不能控制允许谁进入BGP。另外,BGP协议本身也有必要的机制来验证前缀所有权(或到特定前缀的路径)。恶意实体可以通过危及BGP会话路由器或自己参与全局路由来劫持其他自治系统的前缀。在某些情况下,BGP劫机是由于配置错误造成的。
现在让我们了解BGP前缀黑客是如何完成的
在前缀劫持攻击中,BGP会话路由器宣布一条到前缀p的直接路由,而这条路由实际上不是它自己拥有的,也没有被授权宣布。相邻的BGP speaker在路由选择过程中,要么接受这条路由,将现有的路由替换为前缀p,要么拒绝这条路由。为了更好地理解这些攻击,请考虑图1中所示的示例。这里,路由器asn1宣布了一个27.1/19的前缀。通告通过网络传播并到达路由器asn3,该路由器安装了一条27.1/19的路由,并将下一跳设置为asn2。现在假设一个恶意路由器asn4想要劫持27.1/19;它只是简单地宣布到邻居asn3的路由为27.1/19。假设asn3没有为27.1/19设置local policy,则asn3会根据AS-PATH属性为27.1/19选择路由。在这种情况下,来自asn1的27.1/19的路由是AS-PATH:,而来自对手的27.1/19的路由是AS-PATH:。由于来自对手的路由较短,路由器asn3将选择这条路由并将任何流量转发到27.1/19覆盖的目的地到路由器asn4。
监控BGP劫持的方法
当IP前缀被劫持时,连接可能被重定向并被丢弃。在这种情况下,检测劫持是一项很容易的任务,因为服务变得不可用。但有时在攻击过程中,数据可能会被截获或修改,由于连接正在工作,检测并不那么简单。然而,由于BGP的AS_PATH属性发生了变化,BGP劫持仍然可以被检测到。此外,网络流量采用不同的(非最优)路径,导致性能下降和往返时间(RTT)增加。供应商的Looking Glass (LG)服务器或路由视图是发现路由路径变化的好工具。
Traceroute
traceroute工具打印数据包到达目标主机的路由。在内部,traceroute发送一系列消息(通常是ICMP), IP TTL值设置为它希望发现的跳数。由于TTL在到达目标跳点时到期,该跳点上的节点将响应一条错误消息。通过这种方式,traceroute可以计算出到达目的地的路径。
Netstat
可以使用netstat命令行实用程序打印主机的IP转发表。它还可以用来打印关于主机网络活动的一些有用信息,包括列出每个协议的活动连接、包统计信息等。有关netstat及其选项的更多信息,请参阅手册页(在任何Linux机器上):man netstat
斑驴
Quagga是一款跨平台的路由软件包,支持RIP、RIPng、OSPFv2、OSPFv3、BGP等多种路由协议。Quagga可以安装在一台通用机器上,把它变成一个基于软件的路由器。此外,它还提供了一个在主机上设置静态路由的简单接口。对于这个实验练习,我们对Quagga的BGP路由部分特别感兴趣。在整个练习中,我们假设Quagga运行在Ubuntu Linux上。
Quagga将其配置文件存储在/etc/quagga/目录中,并为其支持的每种路由协议都有一个单独的配置文件。例如,BGP的路由配置文件保存在“/etc/quagga/bgpd.conf”中。配置文件/etc/quagga/daemons指定主机上启用了哪些路由协议守护进程(设置为“yes”以启用协议)。Quagga还支持通过telnet接口实时输入配置命令。例如,通过telnet到本地主机,并指定bgpd作为端口号(bgpd是2605端口的别名),可以实时配置BGP实例。
几种基本的BGP前缀劫持预防方法
限制最大前缀
为了避免来自客户的BGP通告泛滥,我们可以控制从邻居接收的前缀数量。一旦邻居发送的前缀超过配置的限制,会话将从Established切换到Idle (PfxCt)。
过滤器默认路由
除非客户不需要默认路由,否则他们应该阻止它。序列10拒绝使用默认前缀。所有其他的路由都被序列20匹配并允许。
限制已宣布前缀中的AS_PATH
我们可以使用BGP作为路径过滤器限制已宣布前缀中的AS_PATH。ACL语句中的正则表达式^$匹配空AS_PATH,因此它只允许本地声明的前缀被发送到ISP。
只宣布拥有的前缀
现在,我们在客户路由器上创建一个前缀列表,该列表只允许发布已分配的前缀199.1.1.0/24。此列表应用于ISP路由器。所有其他前缀都没有被发送。