背景
雲原生技術在各大公司的落地如火如荼,研發模式和基礎設施都發生了很大的變化,新的 Kubernetes 和容器技術正逐步取代傳統的物理機和虛擬機器。在雲原生架構的演變過程中我們發現也帶來了一些新的風險和挑戰,包括容器網路安全、容器逃逸、映象安全等多個方面。
為保障業務上雲安全,一方面是要分析解決新的安全風險,另一方面需要加快相應的安全基礎建設。本文將介紹針對一些已知的風險點,如何使用 HIDS 來保障雲原生環境的安全。
容器威脅來源
- Linux 核心提權:收集對寫 exploit 有幫助的資訊,比如核心版本及安全漏洞,然後透過觸發該漏洞去執行特權程式碼,使得低許可權使用者提升到 root 使用者許可權,最終控制整個系統。
- 容器逃逸:透過突破 Namespace 的限制,將高許可權的 Namespace 賦到 exploit 程式的 task_struct 中,這往往是由於 Docker 安全漏洞或配置不當導致的。
Docker 其他 CVE:比如透過惡意映象利用 Docker runc 在使用檔案系統描述符時存在的漏洞。
攻擊過程:
docker run
啟動了被惡意修改的映象
宿主機 runc 被替換為惡意程式
宿主機執行docker run/exec
命令是觸發執行惡意程式- 特權容器或 Capability 許可權過大:配置不當導致容器內的程式實現 Linux 系統許可權提升。
檢測手段
基線檢測
用於檢測部分非預期環境。
雲原生重點關注 Kubernetes 和 docker 的安全漏洞以及錯誤配置兩方面,原理就是檢查軟體版本是否被爆出過 CVE 漏洞,並檢測配置檔案內的配置項是否有風險,包含風險的檢查項及時讓業務或運維知曉並修復。
雲原生相關檢查項:
除此之外,還會檢查容器及宿主機內其他的軟體配置(Redis、MySQL、Tomcat 等)、弱口令、等保基線等。
入侵檢測
用於檢測部分非預期邏輯。
入侵檢測的第一步就是採集足夠詳細的資料
其中包括:
- 檔案的建立、讀寫、link、重新命名等操作;
- 網路的連線、bind 等狀態;
- 程式關於 execve、setsid、prctl、ptrace、call_usermode 的呼叫;
- 登入日誌、SSH 日誌;
- 系統已安裝元件,RPM、PYPI 包等;
- crontab、port 詳細資訊。
關於程式監控的方案主要有以下幾種:
方案 | Docker 相容性 | 開發難度 | 資料準確性資料 | 系統侵入性 |
---|---|---|---|---|
connector | 定製 Docker | 一般 | 存在核心拿到的 pid,在 /proc/ 下丟失的情況 | 無 |
Audit | 定製 Docker | 一般 | 同 connector | 弱,但依賴 Auditd |
EBPF | 定製 Docker | 中等 | 精確 | 中等,依賴核心版本 3.18 以上 |
Hook(kernel module) | 定製 | 高 | 精確 | 強 |
Hook 的方案,對系統侵入性太高了,尤其是這種最底層做 Hook syscall 的做法,如果測試不充分將可能導致災難級的故障,主機大面積癱瘓。
綜合穩定性考慮,HIDS 程式建立監控採用 cn_proc 的方案,相比較 Audit,對系統無侵入。但這種方式存在核心拿到的 pid,在 /proc/
下丟失的情況,因為很多程式啟動後就立刻消失了,去讀取 /proc/
時就存在找不到的可能,但為了系統穩定性,可以犧牲一些資料的準確性。
透過 Netlink Connector 在使用者態即可獲得核心提供的資訊:
檔案監控的主要邏輯:docker inspect
命令透過 container id 找到對應的容器目錄,透過對映目錄獲取 docker 內檔案並進行監控。
Docker 容器檔案系統:
監控網路連線:
Docker 內網路隔離是透過 Network Namespace 來實現的,每個 Network Namespace 都有獨立的網路裝置、IP 地址、路由表、/proc/net/
目錄。
先獲取所有 docker init1 程式在宿主機的 pid,然後透過 /proc/pid/net
獲取 docker 網路連線資訊。
識別威脅的下一步就是透過策略發現
透過內建的規則引擎對上報資料關聯分類,並判斷黑、灰行為,支援動態白名單,將檢測結果寫入 ES 中。
此處僅做科普,策略包括但不限於:
- 比如子程式執行異常命令(訪問登錄檔、新增使用者、刪除高危目錄等);
- 網路外連未知 IP,需要透過 IP 匹配威脅情報;
- 比對檔案 MD5 和病毒特徵庫,發現 rootkit 等;
- 透過
tcpdump
發現網路代理攻擊; - ……
未來展望
結合 ATT&CK 框架,從行為的視角來看待攻擊者和防禦措施,構建容器化應用安全體系,透過模擬紅藍對抗,評估企業目前的安全能力,對提升企業安全防護能力是很好的參考。