方欣
(長春職業技術學院,吉林 長春 130000)
在對TCP/IP協議棧內各種網絡協議的研究中發現,許多網絡協議如ARP、STP、DHCP、DNS等都存在安全漏洞,攻擊者通過構造攻擊報文發向目標網絡或主機,致使被攻擊者遭受不同程度的損害[1]。本文為了研究RIP路由協議的安全性,首先在實驗環境下搭建網絡拓撲,利用Python程序構造RIP攻擊報文發送給被攻擊路由器實施路由欺騙,通過查看被攻擊路由器的路由表,獲悉目標路由器已被攻擊且無法正常轉發路由信息;然后通過Python編寫RIP抓包嗅探程序,捕獲攻擊者的攻擊報文,分析攻擊報文以掌握其攻擊手法;最后提出相應的安全防護措施,保護RIP路由協議的安全運行。
Python 是一個結合了解釋性、編譯性、互動性和面向對象的腳本語言。Python 語言注重的是如何解決問題而不是編程語言的語法和結構,是一種簡單易學、功能強大的編程語言,可以簡單有效地實現面向對象編程[2]。Python 簡潔的語法和對動態輸入的支持,再加上解釋性語言的本質,使得它在協議安全型研究上是一個理想的腳本語言,特別適用于快速的應用程序開發[3]。
Scapy 是一款基于Python 開發的開源軟件,可以運行于Linux 和Windows 等主流操作系統平臺。目前,在國外應用較為廣泛,具有良好的開放性和可擴展性。Scapy 是一款強大的交互式數據包處理工具、數據包生成器、數據包嗅探與分析工具,它能方便地對數據包進行修改、發送、嗅探、應答等操作,利用它可以構造各種數據包用于網絡協議分析與研究[4]。
在安裝Scapy 之前,我們需要為Python 配置環境變量。首先,進入“控制面板”,找到并點擊“系統和安全”,然后點擊進入“系統”,再點擊“高級系統設置”,就可以看到右下方的“環境變量”了;接著,點擊進入“環境變量”,在“系統變量”中找到Path,在Path 中增加C:Python27 和C:Python27Scripts兩條路徑;最后,進入Windows 命令行,在命令行輸入“python27”可以進入Python 命令行模式,輸入print(“hello python”),控制臺輸出hello python,則說明Python 環境變量已配置完成。
配置完python 的環境變量后,將解壓完的Scapy 安裝包拷貝到C盤根目錄下,打開Windows命令行,進入Scapy解壓目錄,運行python setup.py install 安裝Scapy 程序。Scapy 程序安裝完畢之后,輸入“scapy”,若出現Scapy 的交互式運行界面,則表示Scapy已安裝成功[5]。
RIP(路由信息協議)是一種內部網關協議,也是一種動態路由選擇協議,用于自治系統(AS)內路由信息的傳遞。RIP協議基于距離矢量算法,使用“跳數”來衡量到達目標地址的路由距離。這種協議的路由器只與自己相鄰的路由器交換信息,范圍限制在15跳之內,16跳為不可達。
我們首先需要搭建實驗環境,并在網絡設備上運行RIP路由協議。本實驗利用長春職業技術學院網絡攻防實訓室中真實的路由器與交換機設備,搭建如圖1所示的網絡拓撲,在三層交換機ESW1、路由器R1 和路由器R2 上運行RIP 路由協議。

圖1 RIP路由協議安全性研究實驗拓撲圖
在三層交換機ESW1中,查看ESW1的原始路由表,路由表信息如圖2。從圖中我們可以知道,ESW1中有2條從RIP協議學習到的路由,分別是去往2.0.0.0 和3.0.0.0 網段的RIP路由。

圖2 三層交換機ESW1原始路由表
在編寫攻擊程序之前,我們需要先了解RIP 報文的結構,RIP報文的格式見表1。RIP路由協議首部包括命令(1為請求,2 為響應或路由更新)、版本和未使用三個字段。每條路由20 個字節,包括地址族標識(網絡層所使用的地址協議)、路由標記(外部路由標記,一般值為0)、網絡地址、子網掩碼、下一跳路由器地址、距離等字段。一個RIP 報文最多通告25條路由,每條路由為20字節。RIP協議在傳輸層上使用UDP協議,源端口號與目的端口號均為520[6]。

表1 RIP協議報文結構
根據RIP協議的報文結構,我們利用Python程序編寫攻擊程序,用于后續實施RIP協議的攻擊,攻擊代碼如下:

在PC1中運行上述攻擊程序,幾分鐘后查看ESW1的路由表信息,ESW1新的路由表項如圖3。從圖中我們可以發現,ESW1去往3.0.0.0網段的跳數從之前的1跳變為了2跳,并且路由表中多了一條去往4.0.0.0網段的RIP路由。ESW1的路由表被攻擊成功,網絡中的用戶無法正常訪問3.0.0.0網段,且攻擊者讓網絡設備學習到了本不存在的路由信息(圖4)。

圖3 三層交換機ESW1被攻擊后的路由表

圖4 攻擊后網絡中的用戶PC1無法正常訪問3.0.0.0網段
利用Python 程序編寫抓包嗅探程序,抓取網絡中的RIP攻擊報文,抓包程序代碼如下:


分析抓包程序捕獲的攻擊報文,我們可以從中發現,攻擊者通過向網絡中的所有路由器組播發送偽造的RIP 路由更新報文,讓其他路由器學習攻擊者所發送的RIP 路由,并更新自身的路由表,使被攻擊的路由器被虛假路由所欺騙,導致路由器無法正常轉發數據包[7]。
通過上述分析得知,利用RIP協議漏洞進行路由欺騙的后果嚴重,攻擊者在竊取敏感信息的同時可能造成網絡的癱瘓,為了防止路由器的RIP 路由信息被非法篡改,可以采取認證的方式進行安全防范。
RIPv2可以進行MD5加密認證,只有相互認證的路由器發送過來的路由信息才會被寫入到路由表中。當一方開啟認證之后,另一方也需要開啟認證,并且雙方密鑰一致,才能互相傳送路由信息。認證是基于接口配置的,密鑰使用key chain來定義,key chain中可以定義多個密鑰,每個密鑰都有一個序號,雙方需要配置相同的序號和密鑰[8]。
以ESW1為例,認證配置命令如下:

本文使用Python 初步實現了RIP 協議的攻擊與報文捕獲,分析了RIP協議的安全漏洞,并提出了RIP協議的安全防護措施。通過對RIP協議的安全性研究,不僅可以更深入地理解RIP協議攻擊的機理,而且對其他網絡協議如STP、OSPF、DHCP 等的安全性研究有很好的借鑒意義,同時為后續開展網絡協議的研究與教學打下了堅實的基礎。