探索云原生安全測試
作者 | 潘立峰
背景
容器和云原生平臺使企業能夠實現自動化應用部署,從而帶來巨大的業務收益。但是,這些新部署的云環境與傳統環境一樣,容易受到黑客和內部人員的攻擊和利用。勒索軟件、加密貨幣挖礦、數據竊取和服務中斷的攻擊持續發生在針對基于容器的云原生環境之中。由于云平臺安全缺陷導致頻繁發生的重大網絡安全事故,使得云平臺下的安全測試顯得尤為重要。
網絡安全事故相關案例:
- 2017年,網絡安全導致美國征信公司 Equifax約 1.48 億美國公民數據遭泄露。(來源:新華網)
- 2018年,特斯拉云服務器遭黑客劫持,變為加密貨幣礦機,機密數據遭泄漏。(來源:網易)
- 2022年,匯豐網絡銀行遭到拒絕服務攻擊(DDOS)攻擊,在不到一個月內癱瘓了兩次。(來源:安全狗)
云時代的安全視角
那么該如何開展云原生環境下的安全測試呢?首先讓我們來了解下不同時代安全的視角和安全測試重點的差異。
在單體架構的終端時代,所有的業務場景的表示層、業務邏輯層、數據訪問層放在一個工程里面,然后經過編譯打包部署到一臺服務器上,結構比較簡單,防護起來相對也比較容易。
在互聯網的時代,使用面向服務的架構。這種架構將應用程序的不同功能單元進行拆分,并且通過服務之間定義良好的接口和契約進行聯系。這種架構使得安全防護變得更加復雜,它需要做好應用級的防火墻,要對IDP、SSL、VPN做好相關的防護。
在云的時代,使用微服務的架構。微服務的架構其實是多服務的結合體。這些服務開放不同的端口,開放多個應用程序API,這樣就會導致網絡的攻擊面增加,帶來嚴重的安全挑戰。在這種情況下,所有的微服務都需要得到充分的保護,才能克服這種安全的威脅。
云時代安全測試面臨的挑戰
了解不同時代安全視角差異后,再讓我們從這些差異來審視云時代安全測試技術相較傳統安全測試所面臨的挑戰:
- 微服務架構帶來了大量的內部網絡流量與動態復雜的網絡環境,使得云網內部可視化變得相當低,以至于傳統的網絡安全測試手段無法勝任任務
- 資源的彈性伸縮特性使得傳統的安全測試方案難以發揮作用,無法有效測試出系統的最終安全性
- 大量的開源軟件漏洞、復雜的內部攻擊以及應用的快速迭代,使我們對安全防護的及時性要求更高。
由于云時代所面臨的安全測試挑戰,傳統安全測試手段和工具由于架構和技術上的差異無法有效應對,例如:檢測容器漏洞、識別云網絡內部流動的信息以及同大規模部署的可擴展性缺乏等,因此,需要采用更加先進的技術和工具來進行更有效地安全測試。
云原生安全測試方案
傳統安全測試工具和手段無法適用于云原生環境下的安全測試,因此必須引入云原生環境下一些特殊的安全測試工具和測試方法,針對云原生網絡和基礎架構的特點,設計全新的安全測試方案,解決這些傳統的安全測試工具無法覆蓋的盲點。
當我們設計云原生安全測試方案前,首先讓我們先了解下云原生安全測試的內容:
- 基礎架構層面,我們需要開展主機和基礎架構安全合規測試、Docker/Kubernetes 標準合規性測試、鏡像漏洞、病毒掃描測試、鏡像審計測試、云上數據庫和存儲安全測試
- 鏡像安全方面,我們需要開展鏡像漏洞、病毒掃描,自動實時掃描,第三方日志工具集成測試
- 云原生網絡層面,我們需要開展云原生網絡安全測試,Macvaln、Calico、Ovs等云原生cni集成安全測試等。
- 應用和容器安全測試方面,我們需要開展容器病毒掃描測試、應用漏洞掃描測試
- 應用運行時候安全,我們需要開展服務運行時安全測試,惡意進程掃描測試
- 同時,我們也可以結合一些傳統的滲透測試手段對云上的存儲、數據庫,操作系統開展相關滲透測試
開源安全測試工具箱
基于以上云原生安全測試內容,引入一套完全以開源安全工具為基礎的測試工具為基礎設計的測試方案,就可以開展我們的安全測試了,這套安全測試工具,我們稱它為開源安全測試工具箱,開源安全測試工具箱包含以下工具:
- 云原生基礎架構總體安全:NeuVector
- 鏡像審計和漏洞、病毒掃描測試:Clair、Anchore、Dagda
- 云原生網絡安全測試:kubescape
- 容器運行時安全測試:Falco
- 容器病毒掃描測試:ClamAV
- 滲透測試:sqlmap、Metasploit
使用開源安全測試工具箱開展云原生安全測試具有以下優點:
- 經濟性:采用開源工具,和動輒上百萬、千萬級別其他商用方案相比,工具使用零成本。
- 安全性:可以查看和取得全部檢測工具源代碼,匹配金融、政府、軍工等行業特殊安全需求。
- 擴展性和全面性:數以千計社區安全測試工具,可以任意根據客戶需求擴展云原生安全測試策略,覆蓋客戶所有安全測試盲點。
- 靈活性:可以靈活地定制云原生安全解決方案,根據客戶需求選擇最合適的云原生安全測試策略。
下面我們用Nginx、Nodejs和Redis部署多層應用程序,使用開源安全工具NeuVector演示開展和進行威脅攻擊測試:
1. 創建測試演示命名空間:kubectl create namespace demo
2. 使用yaml 創建 Redis 服務和部署
3. 使用yaml 創建 Nodejs 服務和部署
4. 使用此 yaml 創建 Nginx 服務和部署
5. 外部訪問Nginx服務,找到NodePort分配給它的隨機端口(映射到80端口:
6. 然后連接到其中一個kubernetes節點的公共IP地址/端口,例如:
7. 登錄容器,在容器內部安裝DDos攻擊工具hping3,開始模擬攻擊:
8. 對另一個容器節點發起攻擊:
9. 打開「通知→安全事件」頁面,查看告警信息
來源:自行部署的開源安全測試環境截圖10. 告警信息有 Ping Death 攻擊容器的相關內容,NeuVector 自動記錄該違規動作。測試期望結果和實際結果一致,威脅攻擊測試用例通過。
云原生DevSecOps
DevSecOps其實是在DevOps基礎上增加了Security的一個步驟,DevSecOps概念是在2012年提出來的,它把安全測試理念融入了整個DevOps的概念里面,在整個開發和運維的過程中都會持續地運行安全測試的相關內容。它有幾個特性,它會和CI/CD流水線做集成,實現測試左移和右移。它能夠對接標準的監控告警體系,對研發和生產環境中運行的應用實現24小時安全監控。
圖片來源:https://www.sohu.com/a/207924559_804262
DevSecOps強調安全是團隊每個人的責任,無論我們是研發測試還是運維,安全的理念要貫穿在產品整個生命周期當中。它解決了安全測試的孤立性、滯后性、隨機性,覆蓋性、變更一致性等問題。通過固化流程,加強了不同人員的協作。通過工具和技術手段,將可以自動化重復運行的部分安全測試工作融入到整個研發體系內,讓產品的安全屬性嵌入到整條的研發和運維的流水線之中。
總結
當我們使用開源的云原生安全測試工具結合滲透測試工具、方法和手段,通過設計良好的安全測試策略,就能很好地開展云平臺基礎架構合規測試、容器網絡安全測試、容器運行時安全測試、鏡像安全測試等云原生環境下特有的安全測試。從而了解云平臺和云上應用存在的安全隱患和風險,通過修復相關的安全隱患和風險,來不斷提升我們云平臺和云上應用的安全性。