使用 Falco 監(jiān)聽運(yùn)行時(shí)安全
?1. Falco 是什么
Falco 是由 Sysdig 貢獻(xiàn)給 CNCF 的云原生運(yùn)行時(shí)安全相關(guān)項(xiàng)目。
Falco 實(shí)現(xiàn)了一套可擴(kuò)展的事件規(guī)則過濾引擎,通過獲取事件、匹配安全規(guī)則、產(chǎn)生告警通知系列操作,能夠發(fā)現(xiàn)系統(tǒng)中的安全問題。其中的事件來自系統(tǒng)調(diào)用,同時(shí)也支持 ebpf 探針,規(guī)則是開源的[1],可以自行定義擴(kuò)展[2]。下圖為其架構(gòu)圖:
Falco 可以檢測(cè)到的典型事件包括:
- 在容器中運(yùn)行 shell
- 以特權(quán)形式運(yùn)行的容器
- 讀取敏感數(shù)據(jù),比如 /etc/shadow
- 容器掛載主機(jī)的敏感路徑
- 出站網(wǎng)絡(luò)連接
2. 生成證書
Falco 的 gRPC 需要雙向的 TLS 認(rèn)證 [3]。Falco exporter 通過 gRPC 暴露相關(guān)事件,自研的系統(tǒng)也可以通過 gRPC 直接集成 Falco。下面的步驟用來生成交互所需的證書,F(xiàn)alco 官方的文檔有些陳舊,有些操作會(huì)報(bào)錯(cuò)。
- 創(chuàng)建證書目錄
- 創(chuàng)建 CA 證書
- 創(chuàng)建服務(wù)端證書
- 創(chuàng)建客戶端證書
- 查看全部生成的證書
3. 在 Kubernetes 上安裝 Falco
- 添加 Helm 源
- 安裝 falco [4]
- 安裝 falco-exporter
- 查看服務(wù)
在運(yùn)行過程中會(huì)請(qǐng)求 ghcr.io 下載默認(rèn)規(guī)則 falco_rules.yaml.tar.gz,在網(wǎng)絡(luò)受限環(huán)境下,可能會(huì)下載失敗。
- [可選]卸載 Falco
4. 使用 Grafana 面板查看 Falco 事件數(shù)據(jù)
通過查看 falco-exporter svc 可以看到其已經(jīng)將 metrics 暴露給了 Prometheus。
接下來,只需要添加 Grafana 面板即可。導(dǎo)入 11914,即 https://grafana.com/grafana/dashboards/11914-falco-dashboard/。查看數(shù)據(jù)如下圖:
但 Metrics 中暴露的信息比較有限,在 Prometheus 中查詢 falco_events{rule="Read sensitive file untrusted"}?,得到結(jié)果 falco_events{app_kubernetes_io_instance="falco-exporter", app_kubernetes_io_managed_by="Helm", app_kubernetes_io_name="falco-exporter", app_kubernetes_io_versinotallow="0.8.0", helm_sh_chart="falco-exporter-0.9.1", hostname="falco-h57xg", instance="1.1.1.1:9376", job="kubernetes-service-endpoints", k8s_ns_name="<NA>", k8s_pod_name="<NA>", namespace="falco", node="node1", priority="4", rule="Read sensitive file untrusted", service="falco-exporter", source="syscall", tags=",T1020,T1083,T1212,T1552,T1555,container,filesystem,host,mitre_credential_access,mitre_discovery,"} ,并不會(huì)展示執(zhí)行的用戶、執(zhí)行的命令等詳情信息,只能看到事件的優(yōu)先級(jí)、觸發(fā)的規(guī)則等有限的信息。
5. 使用 falcosidekick-ui 查看事件
falcosidekick 主要是實(shí)現(xiàn)了對(duì)事件的集中管理,并提供豐富的告警通道能力,能夠?qū)⒏婢l(fā)送給 slack、rocketchat、elasticsearch 等 [5]。
而 falco-falcosidekick-ui 提供了對(duì) falco 事件的查看能力。
- 安裝 falco-falcosidekick-ui
剛才在安裝 falco 時(shí),已經(jīng)添加如下參數(shù),因此 falcosidekick 及 falcosidekick-ui 已經(jīng)安裝。
- 暴服務(wù)端口
- 登錄頁(yè)面查看 UI
通過主機(jī) IP:32000 端口,即可打開 falcosidekick ui 的頁(yè)面。默認(rèn)賬戶是 admin,默認(rèn)密碼是 admin。
在主機(jī)上,讀取敏感文件 cat /etc/shadow 之后,在 falcosidekick ui 頁(yè)面就可以查看到相關(guān)的事件,如下圖:
Output 內(nèi)容,由于是主機(jī)上的操作,會(huì)缺失集群相關(guān)字段,但文件、命令等信息會(huì)豐富不少:
Dashboard 頁(yè)面提供的是全局統(tǒng)計(jì)的視圖,可以從整體上對(duì)集群、主機(jī)的安全進(jìn)行評(píng)估,視圖如下:
6. 參考
- https://github.com/falcosecurity/rules/blob/main/rules/falco_rules.yaml
- https://falco.org/docs/rules/basic-elements/
- https://falco.org/docs/grpc/grpc-config/
- https://github.com/falcosecurity/charts/tree/master/falco#enabling-grpc
- https://github.com/falcosecurity/falcosidekick