k8s kube-apiserver tls-cipher-suites nmap SWEET32 cipher suites

kube-apiserver tls-cipher-suites configuration to solve SWEET32 attack

Weber 2020/09/29 16:17:38
3254

最近又遇到新狀況,所以記錄一下解決過程

因為k8s apiserver有出現SSL Medium Strength Cipher Suites Supported(SWEET32)弱點,需要修正

客戶是使用nmap來掃描apiserver使用的port號

剛好我們的ERP系統也是使用k8s cluster,所以就順便一併解決這個問題

 

這邊先安裝好nmap 7.80版,nmap工具的介紹大家就自行google囉

可以看到我用nmap去掃描其中一台AP3的6443 port,有出現C級的ciphers,警告說這個會發生SWEET32 attack

其實概念很簡單

他是顯示這五個cipher,其中一個有問題,表示kube-apiserver有用到這五種cipher

所以目標就是將不合格的那個拿掉

ciphers:

|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C

|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A

|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A

|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A

|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A

 

所以我們就來修改一下kube-apiserver的command

 vim /etc/kubernetes/manifests/kube-apiserver.yaml

參數的內容,可以參考kubernetes的官方文件,我們是使用v1.18的版本,總共有底下圖示這些
https://v1-18.docs.kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/

增加這一段啟動參數,我們只保留四個strength為A的ciphers

- --tls-cipher-suites=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384

存檔離開,打完收工

喔不~出現錯誤了Orz

來檢查為什麼,看一下apiserver log

發現啟動過程中,有缺少所需要的cipher

那就查看看有哪些是相關的cipher吧

可以看到有三個跟AES_128_GCM_SHA256相關的cipher

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_128_GCM_SHA256

其中TLS_RSA_WITH_AES_128_GCM_SHA256已經有了,那我們就再修改一次yaml,將二個TLS_ECDHE開頭的追加上去吧

 

- --tls-cipher-suites=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

存檔後再來看一下apiserver是否有成功啟動

為什麼還是死掉的!!!為什麼為什麼為什麼

出現新的錯誤

其實這跟go語法裡檢查cipher排列順序有關,所以cipher要依照前述的kube-apiserver tls-cipher-suites內容順序來排

https://go.googlesource.com/net/+/master/http2/server.go

因此我們修正tls-cipher-suites的內容為

- --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_GCM_SHA384

嘿嘿~看起來可以囉

再來驗證一下nmap

可以看到之前有問題的cipher已經被拿掉,並且least strength變為A

 

再將其他二台kube-apiserver加上相同的設定,就搞定了

後續要注意的可能是少了TLS_RSA_WITH_3DES_EDE_CBC_SHA這個cipher,對於apiserver會有什麼影響尚未知

目前還沒出問題,功能一切正常

Weber