Runtime安全為運行中的容器提供主動防護,主要實現方法是檢測並阻止容器內發生惡意活動,減少應用程式的攻擊面。
通過Seccomp等手段限制容器應用對核心進行系統調用
配置容器或Pod以使用Seccomp設定檔
Linux作業系統有幾百個系統調用,但其中大部分不是運行容器所必需的。要開始使用Seccomp,請使用Strace產生堆疊追蹤以查看您的應用程式進行中哪些系統調用,然後使用諸如Syscall2seccomp之類的工具根據從Strace收集的資料建立Seccomp設定檔。更多資訊,請參見strace和syscall2Seccomp。
與SELinux不同,Seccomp並非旨在將容器彼此隔離,而是保護主機核心免受未經授權的系統調用。工作原理是攔截系統調用並只對列入白名單的系統調用允許存取。Docker有一個預設的Seccomp設定檔,適用於大多數通用工作負載。containerd運行時也包含預設的Seccomp設定檔。更多資訊,請參見預設的Seccomp設定檔。
您可以通過向容器或PodSpec添加以下內容來配置容器或Pod以使用此設定檔。
Kubernetes 1.19之前版本:
annotations: seccomp.security.alpha.kubernetes.io/pod: "runtime/default"
Kubernetes 1.19及之後版本:
securityContext: seccompProfile: type: RuntimeDefault
使用RuntimeDefault特性
只適用於v1.22以上叢集。SeccompDefault於社區1.22版本進入Alpha階段,並在1.27版本正式GA。請您參考叢集版本在生產環境中謹慎開啟使用。開啟的方式為:
SeccompDefault特性在1.22至1.24版本間預設不開啟,需要在節點kubelet配置中添加
--feature-gates
參數,指定SeccompDefault=true
開啟特性門控。在節點kubelet配置中添加
--seccomp-default
啟動參數,開啟RuntimeDefault特性。重啟kubelet服務完成開啟。
開啟後在節點上部署的Pod會自動使用節點運行時預設提供的Seccomp設定檔,在應用中將無法使用預設配置白名單外的系統調用。對於生產叢集,請您在充分測試後開啟使用。
使用第三方解決方案進行Seccomp和AppArmor配置的維護
當使用運行時預設提供的Seccomp設定檔無法滿足業務需要時,您可以使用自訂的Seccomp設定檔。如果您對Linux安全不熟悉,那麼建立和管理Seccomp和AppArmor設定檔將會很困難。如果您沒有資源自我維護這些設定檔,請考慮使用商業解決方案。有許多比AppArmor和Seccomp等靜態配置防護更加優越的第三方解決方案,已經開始使用機器學習來對異常活動進行阻斷或警示。
編寫Seccomp策略之前考慮添加或刪除Linux Capabilities
Capabilities涉及對系統調用可訪問的核心功能的各種檢查。如果檢查失敗,系統調用通常會返回錯誤。檢查可以在特定系統調用開始時進行,也可以在核心中多個不同系統調用(例如寫入特定特權檔案)可訪問的地區中進行。另一方面,Seccomp是一個系統調用過濾器,在運行之前應用於所有系統調用。一個進程可以設定一個過濾器,這允許Seccomp撤銷運行某些系統調用或某些系統調用的特定參數的許可權。
在使用Seccomp之前,請考慮添加或刪除Linux capabilities來檢驗是否能按預期控制應用程式的行為。更多資訊,請參見Set capabilities for a Container。
使用配置巡檢動態檢查應用負載中的安全隱患
通過使用ACK提供的安全配置巡檢功能,可以即時檢測叢集工作負載中不安全的配置項,並通過直觀的報表展現給安全營運人員。當巡檢完成時,您可以通過閱讀巡檢報告中的檢查項和對應的修複建議加固工作負載的配置安全。
使用阿里雲Security Center
在雲原生應用運行階段,實現雲端式資訊安全中心的應用運行時威脅檢測與阻斷,即時保障每個應用Pod的安全運行。Security Center雲端式原生的部署能力,實現威脅的資料自動化採集、識別、分析、響應、處置和統一的安全管控。利用多日誌關聯和上下文分析方案,即時檢測命令執行、代碼執行、SQL注入、資料泄露等風險,覆蓋業務漏洞入侵情境。結合K8s日誌和雲平台動作記錄即時進行行為審計和風險識別,實現Container Service和編排平台存在的容器逃逸、AccessKey泄露、未授權訪問風險。更多資訊,請參見什麼是Security Center。