斯坦福大學計算機網絡CS144課程實驗:基於Mininet實現BGP路徑劫持攻擊演示。html
首先互聯網總體上來講是一個分佈式的網絡,並無整個網絡的中心。可是整個互聯網其實是由成百上千個不一樣的ISP的子網絡組成的。node
這些子網絡互相鏈接,經過BGP
協議告訴對方本身子網絡裏都包括哪些IP
地址段,本身的AS
編號(AS Number
)以及一些其餘的信息。python
這裏又要扯到互聯網的IP
地址分配方式。互聯網的IP
地址分配是中心化的,ICANN
這個機構把IP
地址大段分給Regional Internet Registries(RIR)
,區域互聯網註冊管理機構。RIR
再把IP
地址段細分後分給ISP
們。linux
大部分狀況下,AS Number
和分給該AS
什麼IP
段是沒有任何關係的。git
下面問題來了,BGP
協議裏雖然有一些簡單的安全認證的部分,可是對於兩個已經成功創建BGP
鏈接的AS
來講,基本會無條件的相信對方AS
所傳來的信息,包括對方聲稱所擁有的IP地址範圍。github
對於ISP
分配給大公司客戶的地址段,ISP
每每會對BGP
作一些有限的過濾。可是對於大型ISP
來講,由於對方所擁有的IP
地址段可能過於分散,因此通常是按最大範圍設置BGP prefix
地址過濾。好比假設ISP A
擁有地址段20.1.0.0/16
和20.200.0.0/16
,那麼ISP B
可能會設置過濾對方傳來的20.0.0.0/8
之外的路由。web
固然這種狀況比較極端,通常ISP
分配到的IP
地址段都是連續的,可是基本也都有可操做的空間,能夠把數百到幾萬個不屬於本身的IP
合法加到本身的BGP
信息裏。shell
多數ISP
甚至都沒有把本身自己的IP
段過濾掉,也就是說若是其餘AS
聲稱擁有該ISP
本身的IP
段,這個ISP
的BGP
路由也會相信。數據庫
爲了解決這個問題,有人發明了一個叫Internet Routing Registry (IRR)
的東西,至關於一個開放式的數據庫,像DNS
根服務器同樣採用分佈式鏡像服務器放在世界各地。vim
ISP
能夠向IRR
註冊本身的IP
地址段和路由策略,其餘ISP
就能夠查詢IRR
從而對本身的BGP
路由器作過濾。這樣作的確防止了一些因爲無心而致使的路由劫持。
可是IRR
這個東西自己也是不靠譜的。IRR
裏存了大約10
萬條記錄,若是所有加載進路由器的話是個不小的負擔。另外IRR
基本沒人管,任何人能夠能夠往裏面註冊任何路由記錄。
因此在大部分ISP
都無條件相信IRR
的時代,IRR
也帶來了很多的麻煩。
最簡單的方式就是經過Whois
找到目標IP
段的 管理員郵箱,若是該郵箱或者郵箱所在的域名已通過期,那麼就本身註冊一個,而後就能夠隨便經過郵件向IRR
修改記錄了。
或者直接經過BGP
路由向ISP
發送,反正你們都不care……
利用BGP
進行特殊攻擊,使用假裝的AS
僞造一個更短的路徑到前綴P
,其餘的AS
要路由到前綴P
時就會選擇這個更短的路徑,受到感染的AS
會把該攻擊信息繼續向其餘的AS
傳播,使得更多的AS
受到感染,從而形成BGP
劫持攻擊。
Mininet creates a realistic virtual network, running real kernel, switch and application code, on a single machine (VM, cloud or native), in seconds, with a single command:
Because you can easily interact with your network using the Mininet CLI (and API), customize it, share it with others, or deploy it on real hardware, Mininet is useful for development, teaching, and research.
Mininet is also a great way to develop, share, and experiment with OpenFlow and Software-Defined Networking systems.
Mininet is actively developed and supported, and is released under a permissive BSD Open Source license.
Mininet: An Instant Virtual Network on your Laptop (or other PC) - Mininet http://mininet.org/
網絡與信息安全學報, 2016, 2(8): 54-61 BGP路由泄露研究
http://www.infocomm-journal.com/cjnis/article/2016/2096-109X/2096-109X-2-8-00054.shtml
BlackHat議題分析:淺析BGP劫持利用 - FreeBuf.COM | 關注黑客與極客
http://www.freebuf.com/articles/network/75305.html
BGP Path Hijacking Attack Demo · mininet/mininet Wiki · GitHub
https://github.com/mininet/mininet/wiki/BGP-Path-Hijacking-Attack-Demo
加密貨幣攻擊之比特幣:已成爲可能?(含演示視頻) - FreeBuf.COM | 關注黑客與極客
http://www.freebuf.com/news/155287.html
咱們在mininet
中進行拓撲構建,咱們須要構建以下拓撲:
包含4個AS
:AS1
,AS2
,AS3
和AS4
(流氓AS
)。每一個AS
都有它的路由守護進程(R1,R2,R3,R4
)
守護路由的鏈接狀況:
R1
和R二、R4
是對等的
R2
和R一、R3
是對等的
R3
和R4
是對等的
BGP網絡構建腳本:jvimal / bgp — Bitbucket https://bitbucket.org/jvimal/bgp(實驗環境已經下載好實驗所需的腳本)
網絡實現原理:
1)使用開源組件Quagga
爲每一個AS
節點建立容器,每一個容器都有一個路由守護進程。運行bgpd
來承載BGP
,經過zebra
來配置linux
內核中的路由轉發規則。
2)每一個AS
的配置存儲在conf
目錄中(實驗文件目錄中)
3)Mininet
使用了Linux
的網絡命名空間,因此每一個AS
容器的路由表都是獨立的,也就是說改變AS1
的路由表不會影響AS2
的路由表。
4)AS
之間使用獨立的網口經過靜態路由表項進行相連。R1
的IP地址是9.0.0.1
,R2
的是9.0.0.2
,其餘相似。
打開Shell終端
使用寫好的Python
腳本構建所需的網絡環境,命令以下:
cd ~/bgp
sudo python bgp.py
複製代碼
等待構建完成
mininet>
提示符 就表示網絡構建完成了
查看網絡信息
查看所有節點:nodes
命令
net
node cmd
。例如查看
R1
上的網絡信息,只須要在執行的
ifconfig
命令前加上
R1
主機標誌便可,好比
R1 ifconfig
mininet
在前臺運行
接下來打開另一個shell
窗口完成接下來的操做。
在會話窗口上右鍵選擇New Window
新開一個shell
會話窗口
1.鏈接到AS1
的路由器R1
在新開的shell會話窗口中執行以下命令:
cd ~/bgp/
./connect.sh
複製代碼
輸入密碼 en
回車(注意這裏的密碼不會回顯)
en
進入路由器特權模式
並再次輸入密碼 : en
回車
命令以下:
sh ip bgp (show ip bgp的簡寫)
複製代碼
AS1
上,到達
13.0.0.0/8
的所選
AS
路徑是
2 3
(即經過
AS2
和
AS3
)。 3.在
AS3
中開啓一個
Default Web
站點,並模擬從主機
h1-1
訪問這個站點
再新開一個Shell
會話窗口
cd ~/bgp/
./website.sh
複製代碼
h1-1
主機訪問的是
AS3
中的
Default Web Server
。
4.啓動流氓AS
進行路徑劫持
保持上面的Shell
會話窗口,新開一個窗口,執行以下命令
cd ~/bgp/
./start_rogue.sh
複製代碼
這個流氓AS
鏈接到AS1
並通知它一條路由到13.0.0.0/8
的更短的路徑(即AS1
到AS4
的路徑),這樣AS1
就會的選擇這個更短的路徑。
5.觀察網絡訪問和AS1
的路由表變化
切換到模擬h1-1
主機訪問AS3
站點的Shell
窗口
能夠看到,本來訪問是 Default Web Server
,如今已經變成了 Attacker web server
了。
再來看看AS1
的路由表
使用 ./connect.sh
鏈接到R1
路由器,按提示輸入密碼 en
而後使用 sh ip bgp
查看路由表
咱們在AS1
的路由表中能夠看出AS4
的選擇路徑和AS3
的路徑。因爲經過AS4
到達13.0.0.0/8
的AS
路徑長度較短,因此R1
選擇AS4
做爲下一跳,而再也不選擇AS2
到AS3
再到13.0.0.0/8
。 6.關閉流氓AS
./stop_rogue.sh
複製代碼
關閉以後,你會發現路由收斂很是快,訪問又正常了
切換到mininet>
會話窗口
輸入 exit
便可結束
BGP路徑劫持攻擊實驗完成。
戳下面的連接便可進行在線體驗 BGP路徑劫持攻擊
👇👇👇👇👇
本文由合天網安實驗室原創,轉載請註明來源。
關於合天網安實驗室
合天網安實驗室(www.hetianlab.com)-國內領先的實操型網絡安全在線教育平臺 真實環境,在線實操學網絡安全 ; 實驗內容涵蓋:系統安全,軟件安全,網絡安全,Web安全,移動安全,CTF,取證分析,滲透測試,網安意識教育等。
(本文來源:合天網安實驗室--領先的實操型網絡安全在線教育平臺)