K8S 生態周報| 幾乎影響所有 k8s 集群的漏洞

「K8S 生態周報」內容主要包含我所接觸到的 K8S 生態相關的每周值得推薦的一些信息。歡迎訂閱知乎專欄「k8s生態」

Docker v19.03.11 發布

距離 v19.03.10 發布僅一周時間,Docker 又發布了新版本 v19.03.11 。此版本是一個安全修復版本,通過禁用了 IPv6 路由地址廣播(RA)從而防止地址欺騙,對應的漏洞為 CVE-2020-13401

在 Docker 的默認配置中,容器網絡接口是指向主機(veth 接口)的虛擬以太網鏈接,在此配置下,如果一個攻擊者可以在容器中以 root 身份運行進程的話,那么他是可以使用 CAP_NET_RAW 能力,向主機任意發送和接收數據包的。

例如: 在容器內使用 root 用戶,可以正常執行 ping 命令

(MoeLove) ?  ~ docker run --rm -it -u root redis:alpine sh
/data # whoami
root
/data # ping -c 1 moelove.info
PING moelove.info (185.199.108.153): 56 data bytes
64 bytes from 185.199.108.153: seq=0 ttl=49 time=54.389 ms

--- moelove.info ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 54.389/54.389/54.389 ms

在容器內使用非 root 用戶,執行 ping 命令會提示無權限

(MoeLove) ?  ~ docker run --rm -it -u redis redis:alpine sh
/data # whoami
redis
/data $ ping -c 1 moelove.info
PING moelove.info (185.199.109.153): 56 data bytes
ping: permission denied (are you root?)

如果沒有在主機上完全禁用 IPv6 (通過內核參數 ipv6.disable=1), 那么主機上的網絡接口可以自己進行配置。如果配置項為 /proc/sys/net/ipv6/conf/*/forwarding == 0 那表示該接口禁用了 IPv6 轉發。全局的靜態配置可以在以下位置看到:

(MoeLove) ?  ~ cat /proc/sys/net/ipv6/conf/all/forwarding
1

另外,還有一個默認配置是關于是否接收 RA 消息的,如果配置項為 /proc/sys/net/ipv6/conf/*/accept_ra == 1,則表示該接口默認接收 RA 消息。全局的靜態配置可以在以下位置看到:

(MoeLove) ?  ~ cat /proc/sys/net/ipv6/conf/all/accept_ra 
1

上述的兩個系統默認配置的組合,表示系統接受路由廣播(RA)消息,并且使用它配置 IPv6 網絡棧(SLAAC)。如果熟悉 IETF RFC 4861 的小伙伴應該知道,ICMPv6 RA 雖然本意是好的,但它確實存在安全風險。

在尚未使用 IPv6 的網絡中,雙棧主機處于休眠狀態,并等待最終的 RA 消息來喚醒其 IPv6 連接。攻擊者可以制作惡意的 RA 消息,獲取網絡中的雙協議節點以配置其 IPv6 地址,并利用攻擊者的系統作為其默認的網關。這樣便可很簡單的實施中間人攻擊了。在 RFC 6104 中其實早就記錄過這個問題,也有很多相關的解決方案,此處就不展開了,涉及的東西太多了。

對應到此次漏洞中,如果攻擊者通過容器發送惡意 RA 消息(rogue RA),則可以重新配置主機,將主機的部分或者全部 IPv6 通信都重定向到攻擊者控制的容器。

即使之前沒有 IPv6 流量,如果 DNS 服務器返回 A(IPv4)和 AAAA(IPv6)記錄的話,很多 HTTP 庫將會首先嘗試進行 IPv6 連接,然后再回退到 IPv4 。這就為攻擊者提供了制造響應的機會。

如果主機恰好有類似去年 apt 的 CVE-2019-3462 這種漏洞的話,則攻擊者便可能獲取主機權限。

總體而言,Docker 容器默認沒有配置 CAP_NET_ADMIN 能力,所以攻擊者無法直接將其配置為中間人攻擊的 IP,無法使用 iptables 進行 NAT 或者 REDIRECT 流量,也不能使用 IP_TRANSPARENT。但是攻擊者仍然可以使用 CAP_NET_RAW 能力,并在用戶空間實現 TCP/IP 堆棧。

聊完 Docker 相關的這個漏洞,這里就順便展開聊聊相關的一些其他問題吧。

與此漏洞類似的,受影響的還有 Kubernetes , 但并不是 Kubernetes 自身的漏洞,而是官方安裝源倉庫中,kubelet 依賴的 kubernetes-cni CNI 包,也存在漏洞 CVE-2020-10749

受影響版本為:

  • kubelet v1.18.0-v1.18.3
  • kubelet v1.17.0-v1.17.6
  • kubelet v1.16.11 之前版本

第三方組件相關的漏洞信息:

以下第三方組件目前未受此次漏洞影響:

  • Cilium
  • Juniper Contrail Networking
  • OpenShift SDN
  • OVN-Kubernetes
  • Tungsten Fabric

結合前面我對此漏洞的說明,想必你也看到了,解決此漏洞最簡單的方法是:

  • 更新相關組件到最新(包含修復內容)的版本(截至目前,相關受影響組件中,除 Flannel 外,均已發布新版本來解決此漏洞);
  • 可以在系統中禁止接收 RA 消息(如果你不需要 RA 消息的話);
  • 也可以禁用容器的 CAP_NET_RAW 能力,例如:
(MoeLove) ?  ~ docker run --cap-drop CAP_NET_RAW --rm -it -u root redis:alpine sh
/data # ping -c 1 moelove.info
PING moelove.info (185.199.108.153): 56 data bytes
ping: permission denied (are you root?)

Docker Compose v1.26.0 發布

Docker Compose 是一個很方便靈活的工具,大家應該不會陌生。前段時間 Docker 將 Compose 規范開源后,社區在逐步成長中。

本次發布的 v1.26.0 中,包含了很多值得注意的內容:

  • 添加了對 doker context 的支持,context 非常好用!Docker Inc. 在今年的 Docker Con 之前還和 Azure 達成了合作,加速從本地到云的開發/部署等,具體操作上也都是通過 context 實現的;
  • 支持通過 COMPOSE_COMPATIBILITY 環境變量配置其能力;

對此版本感興趣的朋友請參考其 ReleaseNote

Kube-OVN v1.2 發布

Kube-OVN 是首次出現在「K8S 生態周報」中的項目,稍微做下介紹。它是一款基于 OVN 的 Kubernetes 網絡組件,通過將OpenStack領域成熟的網絡功能平移到Kubernetes,來應對更加復雜的基礎環境和應用合規性要求。

Kube-OVN主要具備五大主要功能:Namespace 和子網的綁定,以及子網間訪問控制,靜態IP分配,動態QoS,分布式和集中式網關,內嵌 LoadBalancer。

本次發布的 v1.2 中包含了以下重要更新:

  • 開始支持 OVS-DPDK 以便于支持高性能 dpdk 應用;
  • 支持使用 BGP 將 Pod IP 路由宣告到外部網絡;
  • 在創建后,支持修改子網 CIDR (我個人覺得這個功能特別有用,網絡規劃也有動態調整的實際需求);
  • 當子網網關修改后,路由可以自動更改;

對此版本感興趣的朋友請參考其 RelaseNote

上游進展

本周 Kubernetes v1.19.0-beta1 已經發布!

  • #91113#91481kubectl create deployment 時,增加了 --port 的選項;

另一個值得開心的變更來自 etcd :

  • #11946 為 etcd 添加了一個 --unsafe-no-fsync 的選項,可以禁止文件同步。這對于本地開發/CI 測試都是非常好的!

歡迎訂閱我的文章公眾號【MoeLove】

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,156評論 6 529
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,866評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 174,880評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,398評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,202評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,743評論 1 320
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,822評論 3 438
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 41,962評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,476評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,444評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,579評論 1 365
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,129評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,840評論 3 344
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,231評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,487評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,177評論 3 388
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,568評論 2 370