方欣
(長春職業(yè)技術(shù)學院,吉林 長春 130000)
在對TCP/IP協(xié)議棧內(nèi)各種網(wǎng)絡協(xié)議的研究中發(fā)現(xiàn),許多網(wǎng)絡協(xié)議如ARP、STP、DHCP、DNS等都存在安全漏洞,攻擊者通過構(gòu)造攻擊報文發(fā)向目標網(wǎng)絡或主機,致使被攻擊者遭受不同程度的損害[1]。本文為了研究RIP路由協(xié)議的安全性,首先在實驗環(huán)境下搭建網(wǎng)絡拓撲,利用Python程序構(gòu)造RIP攻擊報文發(fā)送給被攻擊路由器實施路由欺騙,通過查看被攻擊路由器的路由表,獲悉目標路由器已被攻擊且無法正常轉(zhuǎn)發(fā)路由信息;然后通過Python編寫RIP抓包嗅探程序,捕獲攻擊者的攻擊報文,分析攻擊報文以掌握其攻擊手法;最后提出相應的安全防護措施,保護RIP路由協(xié)議的安全運行。
Python 是一個結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言。Python 語言注重的是如何解決問題而不是編程語言的語法和結(jié)構(gòu),是一種簡單易學、功能強大的編程語言,可以簡單有效地實現(xiàn)面向?qū)ο缶幊蘙2]。Python 簡潔的語法和對動態(tài)輸入的支持,再加上解釋性語言的本質(zhì),使得它在協(xié)議安全型研究上是一個理想的腳本語言,特別適用于快速的應用程序開發(fā)[3]。
Scapy 是一款基于Python 開發(fā)的開源軟件,可以運行于Linux 和Windows 等主流操作系統(tǒng)平臺。目前,在國外應用較為廣泛,具有良好的開放性和可擴展性。Scapy 是一款強大的交互式數(shù)據(jù)包處理工具、數(shù)據(jù)包生成器、數(shù)據(jù)包嗅探與分析工具,它能方便地對數(shù)據(jù)包進行修改、發(fā)送、嗅探、應答等操作,利用它可以構(gòu)造各種數(shù)據(jù)包用于網(wǎng)絡協(xié)議分析與研究[4]。
在安裝Scapy 之前,我們需要為Python 配置環(huán)境變量。首先,進入“控制面板”,找到并點擊“系統(tǒng)和安全”,然后點擊進入“系統(tǒng)”,再點擊“高級系統(tǒng)設(shè)置”,就可以看到右下方的“環(huán)境變量”了;接著,點擊進入“環(huán)境變量”,在“系統(tǒng)變量”中找到Path,在Path 中增加C:Python27 和C:Python27Scripts兩條路徑;最后,進入Windows 命令行,在命令行輸入“python27”可以進入Python 命令行模式,輸入print(“hello python”),控制臺輸出hello python,則說明Python 環(huán)境變量已配置完成。
配置完python 的環(huán)境變量后,將解壓完的Scapy 安裝包拷貝到C盤根目錄下,打開Windows命令行,進入Scapy解壓目錄,運行python setup.py install 安裝Scapy 程序。Scapy 程序安裝完畢之后,輸入“scapy”,若出現(xiàn)Scapy 的交互式運行界面,則表示Scapy已安裝成功[5]。
RIP(路由信息協(xié)議)是一種內(nèi)部網(wǎng)關(guān)協(xié)議,也是一種動態(tài)路由選擇協(xié)議,用于自治系統(tǒng)(AS)內(nèi)路由信息的傳遞。RIP協(xié)議基于距離矢量算法,使用“跳數(shù)”來衡量到達目標地址的路由距離。這種協(xié)議的路由器只與自己相鄰的路由器交換信息,范圍限制在15跳之內(nèi),16跳為不可達。
我們首先需要搭建實驗環(huán)境,并在網(wǎng)絡設(shè)備上運行RIP路由協(xié)議。本實驗利用長春職業(yè)技術(shù)學院網(wǎng)絡攻防實訓室中真實的路由器與交換機設(shè)備,搭建如圖1所示的網(wǎng)絡拓撲,在三層交換機ESW1、路由器R1 和路由器R2 上運行RIP 路由協(xié)議。
圖1 RIP路由協(xié)議安全性研究實驗拓撲圖
在三層交換機ESW1中,查看ESW1的原始路由表,路由表信息如圖2。從圖中我們可以知道,ESW1中有2條從RIP協(xié)議學習到的路由,分別是去往2.0.0.0 和3.0.0.0 網(wǎng)段的RIP路由。
圖2 三層交換機ESW1原始路由表
在編寫攻擊程序之前,我們需要先了解RIP 報文的結(jié)構(gòu),RIP報文的格式見表1。RIP路由協(xié)議首部包括命令(1為請求,2 為響應或路由更新)、版本和未使用三個字段。每條路由20 個字節(jié),包括地址族標識(網(wǎng)絡層所使用的地址協(xié)議)、路由標記(外部路由標記,一般值為0)、網(wǎng)絡地址、子網(wǎng)掩碼、下一跳路由器地址、距離等字段。一個RIP 報文最多通告25條路由,每條路由為20字節(jié)。RIP協(xié)議在傳輸層上使用UDP協(xié)議,源端口號與目的端口號均為520[6]。
表1 RIP協(xié)議報文結(jié)構(gòu)
根據(jù)RIP協(xié)議的報文結(jié)構(gòu),我們利用Python程序編寫攻擊程序,用于后續(xù)實施RIP協(xié)議的攻擊,攻擊代碼如下:
在PC1中運行上述攻擊程序,幾分鐘后查看ESW1的路由表信息,ESW1新的路由表項如圖3。從圖中我們可以發(fā)現(xiàn),ESW1去往3.0.0.0網(wǎng)段的跳數(shù)從之前的1跳變?yōu)榱?跳,并且路由表中多了一條去往4.0.0.0網(wǎng)段的RIP路由。ESW1的路由表被攻擊成功,網(wǎng)絡中的用戶無法正常訪問3.0.0.0網(wǎng)段,且攻擊者讓網(wǎng)絡設(shè)備學習到了本不存在的路由信息(圖4)。
圖3 三層交換機ESW1被攻擊后的路由表
圖4 攻擊后網(wǎng)絡中的用戶PC1無法正常訪問3.0.0.0網(wǎng)段
利用Python 程序編寫抓包嗅探程序,抓取網(wǎng)絡中的RIP攻擊報文,抓包程序代碼如下:
分析抓包程序捕獲的攻擊報文,我們可以從中發(fā)現(xiàn),攻擊者通過向網(wǎng)絡中的所有路由器組播發(fā)送偽造的RIP 路由更新報文,讓其他路由器學習攻擊者所發(fā)送的RIP 路由,并更新自身的路由表,使被攻擊的路由器被虛假路由所欺騙,導致路由器無法正常轉(zhuǎn)發(fā)數(shù)據(jù)包[7]。
通過上述分析得知,利用RIP協(xié)議漏洞進行路由欺騙的后果嚴重,攻擊者在竊取敏感信息的同時可能造成網(wǎng)絡的癱瘓,為了防止路由器的RIP 路由信息被非法篡改,可以采取認證的方式進行安全防范。
RIPv2可以進行MD5加密認證,只有相互認證的路由器發(fā)送過來的路由信息才會被寫入到路由表中。當一方開啟認證之后,另一方也需要開啟認證,并且雙方密鑰一致,才能互相傳送路由信息。認證是基于接口配置的,密鑰使用key chain來定義,key chain中可以定義多個密鑰,每個密鑰都有一個序號,雙方需要配置相同的序號和密鑰[8]。
以ESW1為例,認證配置命令如下:
本文使用Python 初步實現(xiàn)了RIP 協(xié)議的攻擊與報文捕獲,分析了RIP協(xié)議的安全漏洞,并提出了RIP協(xié)議的安全防護措施。通過對RIP協(xié)議的安全性研究,不僅可以更深入地理解RIP協(xié)議攻擊的機理,而且對其他網(wǎng)絡協(xié)議如STP、OSPF、DHCP 等的安全性研究有很好的借鑒意義,同時為后續(xù)開展網(wǎng)絡協(xié)議的研究與教學打下了堅實的基礎(chǔ)。