(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】セキュリティ監査ツールFalcoをHelmを用いてインストール/稼働確認を行う

スポンサーリンク

はじめに

システムコールや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)

以上、ご参考になれば幸いです。