圖3:在BSD系統(tǒng)中檢查友鄰緩存
注意,雖然上面的結(jié)果與Linux有一些不同,但是兩者的信息是基本一致的。
如果有攻擊者能夠在友鄰緩存中加入一些非法映射,那么他就能夠?qū)⒈镜財(cái)?shù)據(jù)包隨意引流到任意節(jié)點(diǎn),然后執(zhí)行中間人(MITM)攻擊或分布式拒絕服務(wù)(DDoS)攻擊。決定最終的攻擊屬于MITM還是DDoS的因素是受攻擊地址映射的目標(biāo)鏈路層地址:如果攻擊者能夠?qū)⑹芄舻腎Pv6地址映射到自己的鏈路層地址,那么他執(zhí)行的就是MITM攻擊。如果他將受攻擊地址映射到一個(gè)不存在的鏈路層地址,那么這就是DDoS攻擊。
另一個(gè)診斷工具是SI6 Networks的IPv6 Toolkit,它是一個(gè)開(kāi)源IPv6安全評(píng)估和故障修改綜合工具,它支持各種操作系統(tǒng)(包括GNU/Linux、BSD和Mac OS)。它包含許多實(shí)用工具,如可用于發(fā)送偽造友鄰廣告(NA)消息的na6工具。
na6可用于執(zhí)行前面提到的MITM或DDoS攻擊。例如,如果將通向IPv6地址fc00:1::1的所有流量轉(zhuǎn)發(fā)到鏈路層地址11:22:33:44:55:66,攻擊者可以執(zhí)行下面的na6命令:
na6 -i eth0 -W fc00:1::1 -E 11:22:33:44:55:66 -L -v –o
按前面介紹的方法手工檢查友鄰緩存,就可以看到這個(gè)工具對(duì)于ND緩存的攻擊效果。
正如前面所提到的,攻擊者可能利用IPv6擴(kuò)展頭和/或碎片去回避安全控制。因此,如果攻擊者想要繞開(kāi)一些無(wú)法處理整個(gè)IPv6頭信息的安全設(shè)備,那么他可以執(zhí)行下面的命令,發(fā)送一些惡意NA消息:
na6 -i eth0 -W fc00:1::1 -E 11:22:33:44:55:66 -L -v -o
-u 64
顯然,這個(gè)命令只是在前一條命令的基礎(chǔ)上添加了選項(xiàng)“-u 64”,它的作用是在規(guī)定的IPv6頭信息之后插入一條64字節(jié)的目標(biāo)選項(xiàng)頭信息。
最后,理論上ND消息(包括NA消息)都采用了碎片機(jī)制。雖然RFC 6980禁止在ND中使用碎片,但是一些未更新的實(shí)現(xiàn)可能仍然接受這些數(shù)據(jù)包。在評(píng)估一個(gè)IPv6網(wǎng)絡(luò)或?qū)崿F(xiàn)時(shí),我們應(yīng)該檢查是否可以使用帶有IPv6碎片的ND去繞開(kāi)安全控制。這里有兩個(gè)不同的測(cè)試?yán)梢允褂茫喊l(fā)送一個(gè)IPv6原子碎片格式的NA消息和發(fā)送一個(gè)超大IPv6頭信息鏈的NA消息。
RFC 6946定義的IPv6原子碎片實(shí)際上是一些包含偏移值為0和MF(更多碎片)位為0的IPv6碎片頭信息的IPv6數(shù)據(jù)包——即包含一個(gè)碎片頭但只有一個(gè)碎片的數(shù)據(jù)包。執(zhí)行下面的命令,就可以在na6工具中發(fā)送原子碎片格式的數(shù)據(jù)包:
na6 -i eth0 -W fc00:1::1 -E 11:22:33:44:55:66 -L -v -o
-y 500
其中,選項(xiàng)“-y 500”表示工具會(huì)將友鄰廣告消息分割為500字節(jié)為單位的碎片——但是由于整個(gè)NA消息遠(yuǎn)遠(yuǎn)小于500字節(jié),所以最終發(fā)送的消息將采用原子碎片格式。
第二個(gè)測(cè)試?yán)且粋€(gè)超大IPv6頭信息鏈。如果一個(gè)數(shù)據(jù)包已經(jīng)分割為碎片,并且第一個(gè)碎片不包含所有協(xié)議頭信息,包括從第一個(gè)規(guī)定的IPv6頭信息到最上層協(xié)議(如傳輸協(xié)議頭信息),那么這個(gè)數(shù)據(jù)包就是一個(gè)超大IPv6頭信息鏈。下圖顯示的就是一個(gè)超大IPv6頭信息鏈。
圖4:一個(gè)超大IPv6頭信息鏈
RFC 7112定義了超大IPv6頭信息鏈,反對(duì)使用這種頭信息,并且明確規(guī)定在遇到時(shí)允許丟棄相應(yīng)的數(shù)據(jù)包。然而,一些過(guò)時(shí)的IPv6實(shí)現(xiàn)可能仍然接受這些數(shù)據(jù)包,因此不可能認(rèn)為受攻擊節(jié)點(diǎn)一定會(huì)丟棄這些數(shù)據(jù)包。使用na6工具,執(zhí)行下面的命令就可以以超大IPv6頭信息鏈的格式發(fā)送NA消息:
na6 -i eth0 -W fc00:1::1 -E 11:22:33:44:55:66 -L -v -o
-u 500 -u 100 -y 400
這實(shí)際上就是前面使用的同一個(gè)攻擊命令,只是增加了兩個(gè)目標(biāo)選項(xiàng)頭信息(一個(gè)是500字節(jié),后面緊跟一個(gè)100字節(jié)的頭信息),以及一個(gè)將NA消息分割為最大400字節(jié)碎片的請(qǐng)求(“-y 400”選項(xiàng))。因此,第一個(gè)碎片的大小不足以傳輸整個(gè)IPv6頭信息鏈,因此IPv6頭信息鏈會(huì)被分割為兩個(gè)碎片。