BGP 劫持 — 连 IP 都是假的

写在前面

当你打不开某个网站的时候你会怎么办?

你可能会先 ping 一下域名看一下延迟。如果延迟正常的话你大概会检查一下自己的 DNS 解析结果是否正确。如果 DNS 解析也是正确的你大概会怀疑网站本身出了问题。但是你老家的亲戚能打开你却打不开,这是怎么回事呢?

这种情况下你可能遇到了「BGP 劫持」,它可以将你的通信劫持到指定主机上,并且 IP 地址不发生变化。

什么是 BGP ?

BGP(Border Gateway Protocol),即边界网关协议,用于各个 AS(自治系统)之间互相交换路由信息。

自治系统(AS):可以简单地理解为一个或多个网络管理员管理的网络区域,比如一块属于某个 ISP 的网络,某个学校的网络,你自己在家里建立一个局域网也可以理解为自治系统。

一般来说路由器可以通过 RIP 或 OSPF 协议来互相交换路由信息,但是这通常只能用于不那么大的网络。如果网络太大,比如国与国之间,那么 RIP 和 OSPF 协议就力不从心了。

首先就是要维护的路由信息太大,软硬件成本都不可接受。然后就是各个网络内部的情况可能不同,比如计算路线代价的时候可能各个自治系统的定义不一样,比如自治系统 A 的某条线路代价为 100 表示速度比较慢的线路,但是自治系统 B 的代价 100 则表示不可用的线路。最后就是一些特殊的需求,比如国家内部的终端在公网交换信息,理论上有两种路线,一种是走国内的线路,另一种是从国外的线路绕行到国内的线路,BGP 协议可以让国内的通信无需绕行国外,提高速度。

下图是一个简单的 BGP 工作示意图。

BGP 协议

BGP 协议的安全缺陷

BGP 协议并不能验证 BGP 发言人所声明的信息是否为真,也就是说 BGP 发言人完全可以声明一个不属于自己的网络,然后将被声明的网络的流量引到自己的自治系统内,完成 BGP 劫持。

下图是一个 BGP 劫持的示意图。

BGP 劫持

此时攻击者可选择丢弃掉 N3 网络所有的流量、进行窃听或者篡改。

为什么 IP 不会变?

回顾 OSI 七层模型,其中第三层为网络层,负责根据 IP 转发 IP 数据报。一旦 BGP 劫持成功,路由器会错误地将发往网络 N3 的数据报发往网络 N4,但是路由器并不知道,所以从使用者的角度看,自己的 IP 地址是正常的。

BGP 协议的改进

BGP Operations and Security — RFC7454 中记录了一些最佳实践,如引入 ACL(访问控制列表),在传输层建立安全机制等,有兴趣的读者可以自行阅读。

本文作者:ADD-SP
本文链接https://www.addesp.com/archives/4225
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。
暂无评论

发送评论 编辑评论


上一篇
下一篇