云原生運行時安全 Falco 入門
Falco(https://falco.org) 是一個開源的運行時安全工具,可以幫助你保護各種環(huán)境的安全,最初由 Sysdig 創(chuàng)建,并于2018年成為 CNCF 項目。Falco 的工作方式是查看文件更改、網(wǎng)絡(luò)活動、進程表和其他數(shù)據(jù)是否存在可疑行為,然后通過可插拔后端發(fā)送警報,通過內(nèi)核模塊或擴展的 BPF 探測器在主機的系統(tǒng)調(diào)用級別檢查事件。Falco 包含一組豐富的規(guī)則,你可以編輯這些規(guī)則以標記特定的異常行為,并為正常的計算機操作創(chuàng)建允許列表。
Falco 對容器安全特別有用--尤其是當(dāng)你使用 Kubernetes 來運行它們的時候。Falco 通過獲取 Kubernetes API 審計日志,用于運行時威脅檢測和了解應(yīng)用程序行為。
Falco 通過使用定義意外行為的檢測規(guī)則來工作,雖然它自帶有默認規(guī)則,但你可以擴展這些規(guī)則來定義自定義規(guī)則,以進一步加固你的集群。通過 Falco 我們可以檢測下面的場景:
從一個容器中打開一個 shell 會話 Host Path 卷掛載 讀取 secret 和敏感文件,比如 /etc/shadow文件在運行的容器中安裝新的軟件包 從不屬于 CMD 的容器中產(chǎn)生的新進程 打開一個新的端口或意外的網(wǎng)絡(luò)鏈接 創(chuàng)建一個特權(quán)容器 ......
Falco 可以確保我們知道應(yīng)用什么時候有潛在的違規(guī)行為,以便我們可以提前修復(fù)這些安全問題,F(xiàn)alco 對現(xiàn)有的 Kubernetes 原生安全措施(如 RBAC 和 Pod 安全策略)進行了補充,這些措施有助于我們預(yù)防一些安全問題。
安裝
首先當(dāng)然需要確保我們有一個可訪問的 Kubernetes 集群:
$?kubectl?get?nodes
NAME??????STATUS???ROLES????AGE???VERSION
master1???Ready????master???12d???v1.19.3
node1?????Ready???????12d???v1.19.3
node2?????Ready???????9d????v1.19.3
然后我們使用 Helm 來快速安裝,所以我們先安裝 Helm,安裝 Helm 很簡單,下載你的操作系統(tǒng)對應(yīng)的最新包,解壓并將文件移動到 PATH 路徑上即可。
$?wget?https://get.helm.sh/helm-v3.4.0-linux-amd64.tar.gz
$?tar?-xvf?helm-v3.4.0-linux-amd64.tar.gz?
$?chmod?+x?linux-amd64/helm?
$?mv?linux-amd64/helm?/usr/local/bin/
$?helm?version
version.BuildInfo{Version:"v3.4.0",?GitCommit:"7090a89efc8a18f3d8178bf47d2462450349a004",?GitTreeState:"clean",?GoVersion:"go1.14.10"}
現(xiàn)在我們用官方的 Helm Chart 來安裝 Falco,先添加 Helm repo 倉庫:
$?helm?repo?add?falcosecurity?https://falcosecurity.github.io/charts
"falcosecurity"?has?been?added?to?your?repositories
$?helm?repo?update
Hang?tight?while?we?grab?the?latest?from?your?chart?repositories...
...Successfully?got?an?update?from?the?"falcosecurity"?chart?repository
Update?Complete.??Happy?Helming!?
現(xiàn)在我們就可以直接使用 Helm Chart 來安裝 Falco 了:
$?helm?install?falco?falcosecurity/falco
NAME:?falco
LAST?DEPLOYED:?Thu?Oct?29?20:10:01?2020
NAMESPACE:?default
STATUS:?deployed
REVISION:?1
TEST?SUITE:?None
NOTES:
Falco?agents?are?spinning?up?on?each?node?in?your?cluster.?After?a?few
seconds,?they?are?going?to?start?monitoring?your?containers?looking?for
security?issues.
No?further?action?should?be?required.
Helm 會安裝一個 Falco DaemonSet 對象,正常我們可以看到每個節(jié)點上會啟動一個 Falco Pod。
$?kubectl?get?pods?-l?app=falco
NAME??????????READY???STATUS????RESTARTS???AGE
falco-q6mcq???1/1?????Running???0??????????24m
falco-tjmqs???1/1?????Running???0??????????24m
falco-vkrv7???1/1?????Running???0??????????24m
到這里我們就成功安裝了 Falco,并在所有節(jié)點上運行。
測試
接下來我們進行一個簡單的測試,比如創(chuàng)建一個 NGINX 的 Pod,并嘗試做一些平時很少執(zhí)行的操作。
創(chuàng)建 NGINX Pod:
$?kubectl?run?--generator=run-pod/v1?nginx?--image=nginx
上面 Pod 啟動后查看運行在哪個節(jié)點上:
$?kubectl?get?pod?nginx?-o?wide
NAME????READY???STATUS????RESTARTS???AGE???IP????????????NODE????NOMINATED?NODE???READINESS?GATES
nginx???1/1?????Running???0??????????26s???10.244.2.17???node2??????????????
我們可以看到 NGINX Pod 運行在節(jié)點 node2 上,對應(yīng)的 Falco Pod 是 falco-q6mcq,下面我們打開兩個窗口,在左側(cè)窗口中執(zhí)行以下操作,同時在右側(cè)窗口中使用 kubectl logs -f falco-q6mcq 命令查看 Falco 容器的日志:
在 NGINX 容器中啟動一個 shell Cat 一個敏感文件 /etc/shadow 從 shell 中退出

我們可以看到每當(dāng)我們做操作是潛在的安全漏洞時,右側(cè)窗口就會出現(xiàn)對應(yīng)的日志信息。我們也可以將這些日志導(dǎo)出到 ?Grafana 等監(jiān)控工具中,也可以觸發(fā)一個 webhook 到釘釘或者企業(yè)微信上進行即時通知。
這是因為 Falco 已自帶了很多默認監(jiān)控規(guī)則,具體可以查看 Falco pod 中的 /etc/falco/falco_rules.yaml 文件。
總結(jié)
Falco 是 Kubernetes 中非常流行的運行時安全工具,非常建議在所有環(huán)境中使用它 - 尤其是生產(chǎn)環(huán)境,我們還可以修改規(guī)則來滿足你的要求,關(guān)于 Falco 的規(guī)則后續(xù)再詳細介紹。
訓(xùn)練營推薦


?點擊屏末?|?閱讀原文?|?即刻學(xué)習(xí)