はじめに
システムコールやKubernetes監査イベントをキャプチャし、クラスタやアプリケーションへの不正な操作を検出するツールに「Falco」があります。
本記事ではKubernetesクラスターに同ツールをインストールし、実際にアクティビティのログを確認しました。
環境情報
- Falco version 0.28.1
- Kubernetes version 1.20.7
インストール
リポジトリの追加を行い
$ helm repo add falcosecurity https://falcosecurity.github.io/charts
インストールを行います。
$ helm install falco falcosecurity/falco
標準出力は下記となり
NAME: falco LAST DEPLOYED: Sun Jun 6 12:03:46 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None ...
DaemonSetとしてPodが名前空間defalutで起動していました。
$ kubectl get pod NAME READY STATUS RESTARTS AGE falco-dg4qf 1/1 Running 0 ...
稼働確認
Podのログを見ると正常稼働していましたが
$ kubectl logs falco-dg4qf * Setting up /usr/src links from host * Running falco-driver-loader for: falco version=0.28.1, driver version=5c0b863ddade7a45568c0ac97d037422c9efb750 * Running falco-driver-loader with: driver=module, compile=yes, download=yes * Unloading falco module, if present * Trying to load a system falco module, if present * Looking for a falco module locally (kernel 4.15.0-143-generic) * Trying to download a prebuilt falco module from https://download.falco.org/driver/5c0b863ddade7a45568c0ac97d037422c9efb750/falco_ubuntu-generic_4.15.0-143-generic_147.ko * Download succeeded * Success: falco module found and inserted xx: Falco version 0.28.1 (driver version xx) xx: Falco initialized with configuration file /etc/falco/falco.yaml xx: Loading rules from file /etc/falco/falco_rules.yaml: xx: Loading rules from file /etc/falco/falco_rules.local.yaml: xx: Starting internal webserver, listening on port 8765...
ルールと逸脱状況の確認
逸脱状況をチェックするポリシーはConfigMapとしてPodが利用していて
$ kubectl get configmap NAME DATA AGE falco 5 14m
その中に以下のようなyamlファイルが格納されています。
falco_rules.yaml: ---- - required_engine_version: 7 - macro: open_write condition: (evt.type=open or evt.type=openat) and evt.is_open_write=true and fd.typechar='f' and fd.num>=0 ...
試しにPod内にログインして操作をするとfalcoポッドのログに以下が追記されていました。
..: Error File below / or /root opened for writing (user=root user_loginuid=-1 command=vi hoge.sh parent=sh file=/hoge.sh program=vi container_id=a0dd4dxx image=docker.io/library/busybox) k8s.ns=default k8s.pod=busybox-dep-7bd789xx-hz4jz container=a0dd4d5xx k8s.ns=default k8s.pod=busybox-dep-7bd78xx-hz4jz container=a0dd4dxx
ルートディレクトリにてファイルをviで作成したことがエラーとして報告されています。
終わりに
今回は特に手当は不要でインストールできましたが、公式ドキュメントには以下とあるので
Falco needs a driver (the kernel module or the eBPF probe) to work.
If a prebuilt driver is not available for your distribution/kernel, Falco needs kernel headers installed on the host as a prerequisite to building the driver on the fly correctly.
コンテナが稼働するWorkerNode側で適切なカーネルファイルがインストールされていないと動作要件に抵触するので以下のように手動で対応が必要のようです。
# apt-get -y install linux-headers-$(uname -r)
以上、ご参考になれば幸いです。