「BGP」- 安全

  CREATED BY JENKINSBOT

问题描述

常见 BGP 攻击主要有两种:
1)建立非法 BGP 邻居关系,通告非法路由条目,干扰正常路由表;
2)发送大量非法 BGP 报文,路由器收到后上送 CPU,导致 CPU 利用率升高;

解决方案

为了保证 BGP Peer 间的交互安全,BGP 使用两个方法:
1)对端认证(BGP Peer Authentication);
2)GTSM(Generalized TTL Security Mechanism,通用 TTL 安全保护机制)

对端认证(BGP Peer Authentication)

BGP 使用 TCP 作为传输协议,只要 TCP 数据包的源地址、目的地址、源端口、目的端口、TCP 序号是正确的,BGP 就会认为这个数据包有效,但数据包的大部分参数对于攻击者来说是不难获得的。

为了保证 BGP 免受攻击,可以在 BGP Peer 间使用认证来降低被攻击的可能性。

BGP Authentication 分为 MD5-AuthKeychain-Auth,对 BGP Peer 关系进行认证能够预防非法 BGP 邻居建立:
1)MD5 算法配置简单,配置后生成单一密码,需要人为干预才可以更换密码;
2)Keychain 具有一组密码,可以根据配置自动切换,但是配置过程较为复杂,适用于对安全性能要求比较高的网络;
3)注意,两种认证互斥;

MD5-Auth(TCP Authentication)

BGP 使用 TCP 作为传输层协议,为提高 BGP 的安全性,可以在建立 TCP 连接时进行 MD5 认证。BGP 的 MD5 认证只是为 TCP 连接设置 MD5 认证密码,由 TCP 完成认证。

Keychain-Auth(TCP authentication)

Keychain 是一系列 key-id 的集合
而 key-id 唯一标识认证信息
认证信息包括认证密码和认证算法。

BGP Peer 两端必须都配置针对使用 TCP 连接的应用程序的 Keychain 认证,且配置的 Keychain 必须使用相同的加密算法和密码,才能正常建立 TCP 连接,交互 BGP 消息。

配置命令

# 配置 BGP 对等体在建立 TCP 连接时,对 BGP 消息进行 MD5 认证
[Huawei-bgp] peer { group | address } password { cipher pwd | simple pwd }

# 配置 BGP 对等体在建立 TCP 连接时,的 Keychain 认证
[Huawei] keychain ...
[Huawei-bgp] peer { group | address } keychain keychain-name

GTSM(通用 TTL 安全保护机制)

问题描述

设备收到大量非法 BGP 报文后,发现是发送给本机的报文,会直接上送控制层面处理。这时将会因为控制层面处理大量攻击报文,导致设备 CPU 占用率高,系统异常繁忙。

解决方案

BGP 的 GTSM 功能检测 IP.Header.TTL 值是否在预期的范围内,并对不符合 TTL 值范围的报文进行丢弃,这样就避免网络攻击者模拟“合法”BGP 报文攻击设备。

原理简述

当部署 GTSM 特性后,设备发送的 BGP 报文,其 TTL =255;

在 R2 中,针对每个 BGP Perr 部署 GTSM 特性:
1)R2 收到 R1 BGP 报文的最小 TTL 为 255(剩余 TTL < 255,则为非法 BGP 报文,并被丢弃);
2)当攻击者模拟合法的 BGP 报文时,当针对 R2 发送非法报文进行攻击时,经过多跳,TTL < 255;

配置命令

// ---------------------------------------------------------------------------- // 在 BGP 对等体(组)上应用 GTSM 功能。

# GTSM 的配置是对称的,需要在 BGP 对等体间同时使能 GTSM;
# 如果配置为 hops,则被检测的报文的 TTL 值有效范围为 [255-hops+1, 255]
# hops:指定需要检测的 TTL 跳数值。整数形式,1~255,缺省 255
[Huawei-bgp] peer { group | address } valid-ttl-hops [ hops ]

// ---------------------------------------------------------------------------- // 可选,设置未匹配 GTSM 策略的报文的缺省动作

# 缺省情况下,未匹配 GTSM 策略的报文可以通过过滤。
# drop:未匹配 GTSM 策略的报文不能通过过滤,报文被丢弃。
# pass:未匹配 GTSM 策略的报文可以通过过滤。
[Huawei] gtsm default-action { drop | pass }

// ---------------------------------------------------------------------------- // 可选,打开单板的 LOG 信息开关,在单板 GTSM 丢弃报文时记录 LOG 信息

# 缺省情况,在单板 GTSM 丢弃报文时不记录 LOG 信息。
# 对于丢弃的报文,可以通过该命令打开 LOG 信息开关,控制是否对报文被丢弃的情况记录日志,以方便故障的定位。
# all:所有单板。
[Huawei] gtsm log drop-packet all

// ---------------------------------------------------------------------------- // 查看 GTSM 配置

<Huawei> display bgp peer 10.1.3.3 verbose
...
GTSM has been enabled, valid-ttl-hops: 2
...