關於這個,大部分只有看到可以防止惡意的更新,消耗設備的CPU資源。
這邊先講解要如何進行防禦。
今天有兩個Router,彼此直連,因此當收到對方的BGP報文時,TTL沒有被減少過的,為最大值如255。
有一個攻擊者,接在任何一顆Router上,要攻擊另外一顆BGP Router,封包會轉送一次,這樣子TTL會減少1,然後才被BGP Router收到。
TTL Security是去檢查TTL的剩餘次數,如上述案例,TTL Security hop設定為1,就會丟棄TTL為254(255-1)以下的BGP報文。
不過呢!BGP的角色可以分為eBGP跟iBGP。在eBGP傳遞BGP報文時,TTL預設是為1;而iBGP則為255。因此,要用在eBGP上面,就要修改TTL。
目的
瞭解eBGP的TTL,修改BGP的TTL,最後施用TTL Security。
設定

R1、R2、R3彼此皆為eBGP關係。
!R1
conf t
int loopback 1
ip addr 1.1.1.1 255.255.255.255
no sh
int g0/0
ip addr 10.1.12.1 255.255.255.0
no sh
router bgp 1
network 1.1.1.1 mask 255.255.255.255
network 10.1.12.0 mask 255.255.255.0
neighbor 10.1.12.2 remote-as 2
neighbor 10.1.13.3 remote-as 3
exit
!R2
conf t
int loopback 1
ip addr 2.2.2.2 255.255.255.255
no sh
int g0/0
ip addr 10.1.12.2 255.255.255.0
no sh
int g1/0
ip addr 10.1.23.2 255.255.255.0
no sh
exit
router bgp 2
network 2.2.2.2 mask 255.255.255.255
network 10.1.12.0 mask 255.255.255.0
network 10.1.23.0 mask 255.255.255.0
neighbor 10.1.12.1 remote-as 1
neighbor 10.1.23.3 remote-as 3
exit
!R3
conf t
int loopback 1
ip addr 3.3.3.3 255.255.255.255
no sh
int g0/0
ip addr 10.1.23.3 255.255.255.0
no sh
int g1/0
ip addr 10.1.34.3 255.255.255.0
no sh
exit
router bgp 3
network 3.3.3.3 mask 255.255.255.255
network 10.1.23.0 mask 255.255.255.0
neighbor 10.1.12.1 remote-as 1
neighbor 10.1.23.2 remote-as 2
exit
設定為後,R1跟R2形成鄰居,R2跟R3形成鄰居,而R1跟R3卻沒有形成鄰居。
R3#show ip bgp summary
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
10.1.12.1 4 1 0 0 0 0 0 never Idle
設著用R3去ping到R1(10.1.12.1),是互通的。
這是因為eBGP的預設TTL為1,所以傳到R2就被丟棄了。要調整一下eBGP的TTL。
R1(config-router)#neighbor 10.1.23.3 ebgp-multihop 255
R3(config-router)#neighbor 10.1.12.1 ebgp-multihop 255
接著,R1跟R3就形成鄰居關係了。
用wireshark看,R1發出的TTL變成255,R1收到的變成254,但到R2只有1。
接著在R2下 TTL Security,然後去影響R3的Route,看R2能不能更新。
R2(config-router)#neighbor 10.1.23.3 ttl-security hops 1
R3(config)#
int loopback 2
ip addr 3.3.4.3 255.255.255.0
router bgp 3
network 3.3.4.0 mask 255.255.255.0
exit
接著觀察R2有沒有從R3收到Loopback2的Route,結果收到從R1傳來的R3的Loopback2,這是因為BGP的收斂速度比較慢,過一陣子就會斷了。
要讓R2跟R3重新建立起鄰居關係,那麼R2收到的TTL需要超過254,因此可以在R3下指令,改成255。
R3(config-router)#neighbor 10.1.23.2 ebgp-multihop 255
很快R2跟R3就建立起鄰居關係了。
接著在R3對R1下TTL Security。
R3(config-router)#neighbor 10.1.12.1 ttl-security hops 1
Remove ebgp-multihop before configuring ttl-security
這裡收到一句提示,其實當我們在R2下TTL-Security時,R2對R3發的BGP報文TTL就已經改為255。這也是因為TTL Security的機制,只有從TTL最大值開始算,對方收到才會是最大值,才能去防禦攻擊。
正確的設定方式!兩鄰居同時啟用ttl-security!
R1(config-router)#neighbor 10.1.23.3 ttl-security hops 2
R3(config-router)#
no neighbor 10.1.12.1 ebgp-multihop
neighbor 10.1.12.1 ttl-security hops 1
R1跟R3中間經過R2轉了一手,因此TTL會減1,等R3收到時,TTL為254,就會被丟棄,於是就沒有辦法更新route。
R3(config-router)#
neighbor 10.1.12.1 ttl-security hops 10
在R3收到TTL為254,新的TTL Security設定只要小於244才會丟棄,254 > 244 所以接收,因此就可以找回鄰居關係。
這樣的機制,除了鄰居直連之外,理論上,只要ttl-security hops超過1,攻擊者可以從中間轉送的Router去偽造BGP報文TTL為255也能成功。
不過TTL-Security已經可以防止從遠處攻擊,降低了不少潛在風險。