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);
};
}
bridc configure 重启AS161
可以看到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网络的包
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网络夺回收包权,如图