Task 5: BGP Prefifix Attack

BGP路由劫持又称前缀劫持,是一种典型的BGP攻击。在这种攻击中,攻击者的bgp路由器会发布不属于自己的IP前缀,因此到达该IP前缀的流量会被重新路由给攻击者,攻击者可以对流量进行拦截或修改。互联网上的许多事件都是由这种“攻击”引起的,尽管它们大多是由错误配置的BGP路由器引起的。学生在完成这个任务之前应该阅读教程的第12部分。

Task 5.a. Launching the Prefifix Hijacking Attack from AS-161

在本任务中,我们将使用AS-161中的BGP路由器发起前缀劫持攻击。我们的目标是劫持AS-154拥有的IP前缀。如果攻击成功,所有去往AS-154的报文都会被重路由到AS-161,并在那里被丢弃。本质上,我们是在对AS-154进行黑洞化。在BIRD模式下,BGP路由器发布的前缀可以来自不同的来源:它们可以来自直接协议(direct protocol),即从BGP路由器实际连接的网络接口获得。它们也可以来自静态协议,其中包含预定义的路由。BGP路由器发布不属于自己的前缀的最简单方法是使用静态协议。创建一条到10.130.0.0/16的预定义路由,示例如下。有关静态协议的详细说明,请参阅本教程的第3节。需要注意的是,在路由的过滤器部分,我们需要将路由添加到LOCAL COMM community;否则BGP路由器不会将其导出到外部

使用命令docker cp 8af555:/etc/bird/bird.conf ./161bird.conf将AS161上的配置文件导出到VM

在最后加上

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

image-20220813125220117

bridc configure 重启AS161

image-20220813125717197

可以看到AS161成功劫持了发向10.154.0.72的请求

Task 5.b. Fighting Back from AS-154

AS-154有一个探测系统。攻击发起后,它立即检测到攻击。它试图联系AS-161的上游服务提供商AS-3的运营商,请求他们阻止攻击。不幸的是,当时是午夜,所以无法联系到AS-3的运营商。业务损失非常严重,因此AS-154的运营商决定反击:他们想要“偷”回自己的网络前缀,而不需要AS-3的帮助。请重新配置AS-154的BGP路由器,以便恢复流量。

与Task 5.a同理

在AS154的bird.conf加入以下代码

protocol static fightback {
    ipv4 {
        table t_bgp;
    };
    route 10.154.0.0/26 via "net0" { 
        bgp_large_community.add(LOCAL_COMM); 
    };
    route 10.154.0.64/26 via "net0" { 
        bgp_large_community.add(LOCAL_COMM);
    };
    route 10.154.0.128/26 via "net0" { 
        bgp_large_community.add(LOCAL_COMM); 
    };
    route 10.154.0.192/26 via "net0" { 
        bgp_large_community.add(LOCAL_COMM);
    };
}

此时AS154夺回了10.154.0.0网络的包

image-20220813134835576

Task 5.c. Fixing the Problem at AS-3

最终到达AS-3的运营商。在不知道这是AS-161侧的错误配置还是故意攻击的情况下,AS-3决定不切断与AS-161的对等连接,这样AS-161的用户仍然可以到达Internet (AS-3是AS-161的唯一服务提供商)。但是,AS-3必须停止虚假公告的传播。这可以通过从自己的公告中删除虚假路由来实现。更具体地说,AS-3可以在它的过滤器中添加一些代码,这样就可以丢弃假路由。请参阅BGP教程的第12节来学习如何编写过滤器

将154的fightback函数去除,排除之前实验的干扰

在过滤器中修改加入以下代码

if( net != 10.154.0.0/24 ) then reject;

使整段变成

protocol bgp c_as161 {
    ipv4 {
        table t_bgp;
        import filter {
            bgp_large_community.add(CUSTOMER_COMM);
            bgp_local_pref = 30;
            if( net != 10.154.0.0/24 ) then reject;
            accept;
        };
        export all;
        next hop self;
    };
    local 10.103.0.3 as 3;
    neighbor 10.103.0.161 as 161;
}

之后10.154.0.0网络夺回收包权,如图

image-20220813140318944

发表评论