我们在BGP上进行海战

BGP是Internet的粘合剂。 对于1989年在两张餐巾纸上使用的协议,它处理ISP之间几乎所有的交互(这是Internet的基本组成部分同时令人感到惊讶和可怕。

BGP的信誉很差,主要是因为默认情况下对等体之间的链接具有可信任性,并且很难验证路由的合法性。 这就是为什么我们到处都听到不同程度的BGP骇客的原因:从将所有YouTube的路由更改为AWS Route 53

但是要了解这些黑客的性质,您需要了解Internet的拓扑。 让我们从一个单独的路由器开始:



如果单个路由器无法路由任何内容,则几乎没有用。 因此,我们将在物理级别上将另一个路由器连接到它(可以是任何东西:从铜缆以太网和水下光纤到802.11 Wi-Fi链路)。

然后,两个连接的路由器(在我们的示例中为红色和蓝色)应了解它们可以相互路由流量。 毕竟,路由器的重点是将流量从一个目的地路由到另一个目的地。

如上所述,在ISP之间执行此操作的一种常用方法是在两侧都安装BGP,并让它们彼此“通告”它们可以路由流量:



但是,如果他们仅互相交谈,突然红色和蓝色路由器没有直接连接,那不是很有用吗? 我们连接的路由器越多,形成的路由拓扑就越复杂。 这是可能的,因为每个BGP对等方都与其连接的其他对等方共享路由表:



路由器之间如何交换信息取决于配置策略,这通常取决于相邻节点的实际条件。 客户,流量交换协议和高级提供商有多种设置。

因此,路由器需要一组已编程的指令来过滤掉它们不希望从其他节点获得或获得的东西。 但是,攻击者有时会获得对连接到另一台没有此类过滤器的路由器的访问权。 在软件级别解决此问题非常困难 ,因为这需要更改每个提供商的路由器。 先前的尝试并不广泛

BGP有一种使用称为社区的路由对信息进行编码的方法。 它是在RFC1997中定义的(不幸的是,写于1996年,略有遗漏)。 社区可以附加到路由声明中,并且由32位数字组成。 实际上,此值分为两个16位数字(一个用于ASN,一个用于与/关联的信号)。



它们用于传输有关路由的其他信息,例如,提供者采用此路由的位置:



这在过滤方面很有用。 例如,如果您有很多提供者,并且尝试不让国外流量通过,则可以使用适当的社区来引导这些路线上的流量。

这让我思考。 我还能通过社区传达什么信号? 您能走多远?

经过一些测试,结果表明,除前一个级别3之外,每个第1层网络都会删除社区,从而使社区可以从源路由器传输到客户端。 这也意味着即使没有直接连接,一台路由器也可以向其他路由器发送信息。

海战


知道存在通过BGP的间接通信通道后,我想以某种方式使用它来建立一些非传统的通信。 我选择“海战”作为媒介,因为该游戏需要传递最少的信息(X和Y坐标以及有关最后一击的信息:命中或未命中)。

在BGP两个社区上创建了两个游戏。



整个游戏可以容纳两个16位数字,从而可以在两个社区中可靠地进行游戏。

由于海战是两个人的游戏,所以我邀请AS203729参加。 它连接到纽约的BGP,我的安装在伦敦工作。

在规划游戏时,我们假设由于更新路由的频率而可以抑制BGP流量 。 由于我们俩都坐拥实际的生产流量,因此我们同意为每次移动设置30秒计时器,因为阻尼会导致生产服务器出现故障。

其他流量也通过游戏路由器传递,因此我必须保持路由守护程序联机,并且无法使用特殊的BGP守护程序。 为了解决此限制,游戏的二进制文件使用守护程序的控制套接字生成并重新加载了BIRD配置,以轮询路由更改。

通过这些设置,在2018年5月16日, AS206924AS203729可能玩了历史上第一个完全在BGP上进行的棋盘游戏。



比赛进行得很顺利,但由于上述阻尼,暂停了45分钟。 这发生在我这一边,使Level 3在45分钟内针对我的流量应用了次优路线。 为了防止这种情况再次发生,我们决定将两次移动之间的间隔改为90秒。

尽管如此,对我的朋友AS203729的舰队的最后一击还是在第68 步中发生。 这使我成为使用公共Internet路由协议进行的棋盘游戏的第一位获胜者。

那合乎逻辑吗? 可能不是。 好玩吗? 天哪,是的。

尽管我不建议重复此实验,但是源代码已经在两方面都公开了。

直到下一次!

Source: https://habr.com/ru/post/zh-CN415689/


All Articles