我们将使用 AS-164 作为我们的攻击目标。这个自治系统向整个互联网通告了前 缀 10.164.0.0/24(P),因此每个 BGP 的路由表中都有此目的地的一个条目。子网 10.164.0.0/25 (A) 和 10.164.0.128/25 (B) 两个前缀都是 P 的子集,但联合起来 A 和 B 就覆盖了整个 P 地址空间。以下我们使用二进制表示法来表示 IP 前缀的最后一 位(* 表示它可以为 0 或 1)。
10.164.0.0/24     涵盖 10.164.0.********   ➙目标前缀
10.164.0.0/25     涵盖 10.164.0.0*******
10.164.0.128/25 涵盖 10.164.0.1*******

    如果 A 和 B 同时在路由表中出现,那么 10.164.0.0/24 地址空间中的任何 IP 地 址除了匹配 P 以为,还将匹配 A 或者 B。但是由于 A 和 B 的前缀长度为 25 位,而 P 的前缀长度只有 24 位,因此 A 或 B 会被选择,P 不会。

    那么如何让 A 和 B 进入每一个 BGP 路由器呢?这很简单。攻击者只需要从一台 BGP 路由器向整个互联网广告这些前缀,并告诉所有人他们的自治系统是这两个前缀 的起源地。这意味着去往这些网络的数据包应该被路由到他们那里。

    我们可以在仿真器中尝试一下。我们选择 AS-150 作为攻击者,AS-164 作为目标。我们的工作就是劫持 AS-164 所拥有的 10.164.0.0/24 网络前缀。我们在 AS-150 的 BGP 路由器的 BIRD 配置文件中添加以下条目。我们最好需要运行 "birdc configure" 将 更新后的配置文件加载到 BIRD 服务中。

protocol static hijacks {
   ipv4 { table t_bgp; };
   route 10.164.0.0/25 blackhole {  
         bgp_large_community.add(LOCAL_COMM);
   };
   route 10.164.0.128/25 blackhole {  
        bgp_large_community.add(LOCAL_COMM);
  };
}

   

    这将在 BGP 路由表中添加两条静态路由。blackhole 动作意味着一旦一个数据包 到达这个 BGP 路由器,它将被丢弃。AS-150 的 BGP 路由器会将这些路由通告给其 对等方,并最终导致整个互联网上的 BGP 路由器都收到这些路由通告。我们可以选择 一个 BGP 路由器来检查它的 BGP 路由表和内核路由表,我们将看到这两个条目:

最后修改: 2025年04月28日 星期一 22:54