Cilium是如何防止常規網路攻擊的?
最近一個影響許多Kubernetes CNI元件的漏洞被發現,這個漏洞通過讓攻擊pod傳送假冒的IPv6 *“Router Advertisement”*資料包給主機工作節點,導致該節點將所有的IPv6網路流量路由到攻擊pod(即“中間人攻擊”)。幸運的是,對於Cilium的使用者,由於Cilium提供了許多內建預設的安全特性,其生產環境並沒有受到該漏洞的影響。在這篇博文中,我們將討論Cilium的預設特性是如何自動地防護常見型別的網路攻擊的。在我們深入之前,先看看有關IPv4和IPv6的基礎知識,以及它們是如何和漏洞聯絡起來的。
IPv4和IPv6基礎
在IPv4中,當一個機器連到網路上,它能通過DHCP獲取到網路配置資訊(包括路由資訊)。這個機器首先傳送一個DHCPDISCOVER
廣播資料包到網路上的所有使用者,正常的話,只有DHCP伺服器返回一個DHCPOFFER
資料包。然而,網路上的任何裝置都能夠被設定為監聽DHCPDISCOVER
資料包並返回一個應答資料包,這意味著存在一個競態條件(決定客戶端信任哪個DHCP伺服器)。
類似於DHCP,網路中的一個IPv6主機能夠通過NDP(Neighbor Discovery Protocol)機制獲取到其路由和鄰居節點的資訊。一臺機器能夠向本地節點傳送Router Solicitation資料包獲取本地路由資訊,或者路由主動傳送一個Router Advertisement資料包到本地主機表示自己是IPv6流量的路由裝置。這個Router Advertisement傳送到一個特殊的IPv6地址(ff02::1
)從而廣播到所有節點,因而同一網路上的所有節點都能夠接收到並信任這個資料包。在IPv6中有一些需要注意的改進,特別是link-local地址(用於領域發現協議和無狀態自動配置程式中鏈路本地上節點之間的通訊。使用鏈路本地地址作為源或目的地址的資料包不會被轉發到其他鏈路上)的使用能夠確保Router Advertisement資料包不會被路由到其他的鏈路並且只對本地節點可見。
link-local addresses: These addresses refer only to a particular physical link and are used for addressing on a single link for purposees such as automatic addresss configuration and neighbor discovery protocol. Link-local addresses can be used to reach the neighboring nodes attached to the same link. The nodes do not need a globally unique address to communicate. Routers will not forward datagram using link-local addresses. IPv6 routers must not forward packets that have link-local source or destination addresses to the other links. All IPv6 enabled interfaces have a link-local unicast address.
漏洞
通過傳送欺詐性的router advertisements資料包,惡意的容器能夠重新配置主機從而主機上的所有IPv6流量重定向到被攻擊者控制的容器。
所有的支援IPv6的介面都有一個fe80::/10
的網路地址,這意味著攻擊pod能夠使用自己的link-local地址作為Router Advertisement資料包的源IP地址。CAP_NET_RAW
許可權能允許kubernetes中的pod傳送帶有任意源IP地址和埠的資料包,可以通過kubectl exec
命令檢視是否具有該許可權:kubectl exec -it ubuntu-pod -- capsh --print | grep cap_net_raw
. 攻擊pod通過傳送Router Advertisement資料包到節點,使得節點將該pod看作路由並將部分或者所有的IPv6的流量直接傳送到攻擊pod中。
Cilium是如何防護的
Cilium有一些內建的和預設開啟的安全特性從而提供對於上述漏洞的防護。
過濾ipv6資料包
在Cilium中設定enable-ipv6:false
並且通過cilium monitor -t drop
命令驗證IPv6流量被Cilium Agent pod所丟棄。
IP欺詐防護
從上面可以看到,如果我們顯式的禁用IPv6的流量,可以防護該漏洞,但是對於偽造的資料包呢,Cilium又是如何防護的呢?Cilium通過IP Address Management(IPAM)防止源IP地址偽造。
實踐驗證
偽造源IP地址
建立三個pod:
這3個pod是連通的,從centostest可以ping
通centostest1,我們使用scapy工具來測試一下:
在centostest(IP地址為: 10.0.0.215)這個pod容器中執行scapy,傳送一個源IP地址為自己,目的IP地址為centostest1(IP: 10.0.0.18)的正常ICMP請求資料包,可以看到收到了ICMP響應報文。
在centostest1中用tcpdump
能夠監聽到的正常網路流量如下所示:
接下來在centostest中傳送包含偽造的源IP地址的ICMP請求報文(目的地址仍為centostest1的IP地址),偽造的源IP地址是centostest2的IP地址,可以看到此時沒有響應:
在centostest1上面也沒有監聽到ICMP請求資料包:
因此,Cilium能夠防護IP地址偽造攻擊。
ARP中間人攻擊防範
ARP欺騙是非常常用的一種攻擊手段,也成為ARP快取投毒,一般用在中間人攻擊裡面,將攻擊方偽造成閘道器(即閘道器的IP地址對應攻擊方的MAC地址)。攻擊步驟包括:
- 先獲取被攻擊主機的MAC地址和閘道器的MAC地址;
- 欺騙受害主機,使其認為自己是閘道器;
- 欺騙閘道器,使其認為自己是受害主機;
在我們的攻擊實驗中,讓centostest pod作為中間人監聽centostest1與centostest2兩個pod 的通訊流量。結合上述攻擊步驟,首先是讓centostest pod獲取到centostest1與centostest2的MAC地址,如下是執行的結果。
可以看到,ARP請求返回的MAC地址都是62:db:0a:14:8d:4e
,這個MAC地址是centostest這個pod的主機側虛擬網路卡的MAC地址,可以看到,arp請求經過了Cilium BPF程式的特殊處理,直接返回pod主機側虛擬網路卡的MAC地址,而不能正確獲取到正確的MAC地址,因此Cilium能夠防範ARP中間人攻擊。
相關文章
- 什麼是網路攻擊?常見的網路攻擊手段有哪些?
- 網站如何防止攻擊網站
- 如何有效防止網路攻擊?建議收藏!
- 如何防止伺服器被惡意網路攻擊?伺服器
- 如何防止XSS攻擊
- 如何防止SQL隱碼攻擊?網路安全防禦方法SQL
- CSRF攻擊是什麼並且如何防止
- 常見的網路攻擊型別型別
- 常見網路攻擊有哪些?如何防禦?
- 常見網路攻擊:XSS 篇
- 網站存在被攻擊篡改資料的問題 該如何防止網站被攻擊網站
- 常見網路釣魚攻擊有哪些?如何識別?
- 網路安全——常見的幾種WEB攻擊:Web
- 常見網路攻擊的方法與服務
- 如何防止網站資料庫被攻擊 被篡改網站資料庫
- Mybatis如何防止SQL隱碼攻擊MyBatisSQL
- 常見網路攻擊手段有哪些?防禦方法是什麼?
- CDN到底能不能防止DDoS攻擊呢?高防CDN是如何防ddos攻擊呢?
- 網路攻擊
- Nginx防止DDOS攻擊Nginx
- WEB安全入門:如何防止 CSRF 攻擊?Web
- 什麼是CC攻擊?CC攻擊型別【網路安全教程】型別
- DDoS攻擊是什麼?是如何進行攻擊的?
- 伺服器常碰見的幾種網路攻擊伺服器
- 瞭解常見網路攻擊方式,做好網路安全防範!
- 什麼是DOS攻擊?DOS攻擊常見形式是什麼?
- 怎麼防止網站不被攻擊和入侵網站
- 網路釣魚攻擊常用方法是什麼?如何防護?
- 如何更好地緩解網路攻擊
- 防止網站被入侵攻擊的五個辦法網站
- 前端安全系列(一):如何防止XSS攻擊?前端
- 教你如何在Linux中防止SYN Flood攻擊Linux
- 網站被攻擊了 該怎麼解決防止被黑客攻擊的問題網站黑客
- 網際網路公司如何防禦DDoS攻擊?
- 谷歌帳戶獲得新的驗證功能 以防止網路釣魚攻擊谷歌
- 【網路安全】如何有效地防禦DDOS攻擊和CC攻擊?
- CC攻擊原理是什麼?網站被CC攻擊如何防禦?網站
- 什麼是CC攻擊?網站被CC攻擊該如何防禦?網站