雖然前面整理了一些常見的容器逃逸手法,但攻擊手法日新月異,肯定會出現以往沒見過的攻擊方式。此時就需要有好的偵測機制作為輔助,除了可以針對異常的行為進行告警之外,萬一遇到沒看過的攻擊也可保存相關軌跡做為日後查找事件根因或是研究攻擊手法的依據。
Falco 是一款針對雲原生安全而設計的 Linux 資安工具,它會針對 kernel 事件部署客製化的規則,這些規則會結合容器、Kubernetes 的 metadata 以提供即時的告警資訊。 Falco 可以幫助偵測異常行為、潛在安全威脅和合規性違規,有助於確認執行期間的容器、Kubernetes 安全。相關教材均可參考官網 Falco 101。Falco 的安裝算是比較麻煩一點點,除了本身的軟體程式之外,還可以安裝不同類型的驅動程式。這邊就先從軟體程式開始安裝起。
curl -s https://falco.org/repo/falcosecurity-packages.asc | sudo apt-key add - ;
echo "deb https://download.falco.org/packages/deb stable main" | sudo tee -a /etc/apt/sources.list.d/falcosecurity.list ;
sudo apt-get update -y ;
sudo apt-get -y install linux-headers-$(uname -r) ;
#這邊如果使用 0.33.1 版本,才會有 systemctl 可以下。
#sudo apt-get install -y falco=0.33.1 ;
#但我故意不用
sudo apt-get install -y falco ;
# 然後就失敗惹,因為這邊還沒安裝抓取事件的驅動程式
sudo falco ;
falco 可以透過三種驅動程式去擷取資訊,包含了 kernel module、eBPF probe、ptrace(2) userspace program。 參考 Choosing a Falco driver 裡面會對不同驅動做比較。其中如何利用 eBPF 作為驅動去啟動 falco,這部分會參考 Falco binary 去進行安裝,當然也可以自己透過原始碼去編譯出檔案,但是比較容易遇到問題,編譯方式可參考 Build Falco from source、Choosing a Falco driver。
sudo apt install -y llvm clang ;
# 安裝 Kernel Module 的驅動程式
sudo falco-driver-loader module ;
sudo falco ;
# 測試偵測效果
sudo find /root -name "id_rsa" ;
grep falco /var/log/syslog | grep "find /root -name id_rsa" ;
# 透過這道指令可以編譯出 bpf 的 probe
sudo falco-driver-loader bpf ;
# falco 以 bpf 的方式來啟動
sudo FALCO_BPF_PROBE="/root/.falco/falco-bpf.o" falco ;
Falco 也可以透過容器的方式進行安裝軟體跟驅動部分,畢竟之前說過當給予容器以特權方式啟動時它就具備足夠高的權限去影響宿主機,這部分可以參考 Operating and Managing Falco,以容器安裝方式這邊就不多加贅述。
如果想要將告警輸出到檔案的話,則必須要去修改 /etc/falco/falco.yaml 底下的設定,參考如下 :
file_output:
enabled: true
keep_alive: true
filename: ./events.txt
最後我們一樣來探討 falco 到底能夠看到多少攻擊呢? (此處以0.33.1版本為主)
攻擊手法 | falco 預設能否偵測? |
---|---|
privileged + host pid | N (只看到開啟特權容器) |
--cap-add=ALL + host pid | N (連開容器都偵測不到,因為不是特權容器) |
privileged | Y |
(CVE-2022-0492) unshare + cgroup 特權逃逸手法 | Y (寫入release_agent 會觸發規則) |
安裝 linux_module | Y (安裝模組 insmod 會觸發規則) |
docker.sock 掛載 | Y (docker.sock 掛載、docker client 執行均會觸發規則) |