Version 0.23.0

Falcoをインストールする

Linuxおよび、さまざまなコンテナプラットフォームで起動して実行する

次のいずれかの方法を使用して、Falcoをインストールします。 特定のインフラストラクチャ要件によって、選択するインストール方法が決まります。

  • FalcoをKubernetesクラスターにインストールします。そのためには、DaemonSetをKubernetesクラスターにデプロイします。 KubernetesにFalcoをインストールすると、クラスター、そのワーカーノード、および実行中のコンテナーで異常なビヘイビアが監視されます。
  • FalcoをLinuxホストに直接インストールします。 これにはさまざまな理由があります。
    • Kubernetes内で実行されているコンテナを監視するため。ワーカーノードOSに直接インストールすると、Kubernetesで実行されているアプリケーションやKubernetes APIのユーザーからの分離レベルがさらに高まります。
    • Linuxホストで直接実行されているコンテナ、またはCloud FoundryやMesosphere DC/OSなどの別のプラットフォームで実行されているコンテナを監視するため。
    • Linuxホストで直接実行されているアプリケーション(つまり、コンテナ化されていないワークロード)を監視するため。

Kubernetes

KubernetesでFalcoを実行するデフォルトの方法は、DaemonSetを使用することです。 Falcoは、選択したデプロイメント方法と基盤となるKubernetesバージョンに応じて、さまざまなインストール方法をサポートしています。デフォルトのインストールには、カーネルモジュールを介したシステムコールイベントのサポートが含まれているため、ワーカーノードの基盤となるオペレーティングシステムに依存しています。ワーカーノードに適切なカーネルヘッダーをインストールすると、Falcoはポッドの起動時にカーネルモジュールを動的に構築(および「insmod」)できます。Falcoはまた、一般的なディストリビューションとカーネル用にいくつかのビルド済みモジュールを提供します。Falcoは、モジュールのコンパイルが失敗した場合、事前に構築されたモジュールを自動的にダウンロードしようとします。

基盤となるカーネルへのアクセスが制限されているGoogleのContainer Optimized OS&GKEなどのプラットフォームについては、以下のGKEセクションを参照してください。

HTTPs経由のカーネルモジュールのダウンロード

HTTPsを使用してカーネルモジュールを事前に構築し、Falcoポッドに提供します。カーネルモジュールを構築する最も簡単な方法は次のとおりです:

  1. 必要なカーネルヘッダーを持つノードにFalcoをデプロイします。
  2. Falcoで falco-driver-loaderスクリプトを使用して、カーネルモジュールをビルドします。
  3. カーネルモジュールをポッドまたはコンテナから移動します。 デフォルトでは、カーネルモジュールは /root/.falco/にコピーされます。

DRIVERS_REPO - Falcoポッドのこの環境変数を設定して、ビルド済みカーネルモジュールおよびeBPFプローブのデフォルトのベースURLを、スラッシュなしで上書きします。 - つまり、https://myhost.mydomain.com、またはサーバーにサブディレクトリ構造https://myhost.mydomain.com/driversがある場合。 koo はそれぞれカーネルモジュールとeBPFプローブを表します。 ドライバは、次の構造でホストされる必要があります: /${driver_version}/falco_${target}_${kernelrelease}_${kernelversion}.[ko|o].

例:

  • /a259b4bf49c3330d9ad6c3eed9eb1a31954259a6/:falco_amazonlinux2_4.14.128-112.105.amzn2.x86_64_1.ko

falco-driver-loaderスクリプトは、デフォルトでこの形式でモジュールに名前を付けます。

Helm

Helmは、FalcoをKubernetesにインストールするための推奨される方法の1つです。 Falco Helm chartは、広範なセットである設定値を提供し、異なる構成でFalcoを起動できます。

Helmがデプロイされているクラスターにデフォルト構成でFalcoをデプロイするには、次を実行します。

helm install --name falco stable/falco

クラスターからFalcoを削除するには、次を実行します:

helm delete falco

Kubernetes レスポンスエンジン

Falco Helmチャートを使用することは、Falco Kubernetes Response Engine(KRE)をデプロイする最も簡単な方法です。KREは、NATS、AWS SNS、Google Pub/SubなどのメッセージングサービスにFalcoアラートを送信する機能を提供します。これにより、各メッセージングサービスのサブスクライバーがFalcoアラートを処理できます。 この統合を有効にするには、Helmチャートの `integrations ** 構成オプションを参照してください。

KREを使用すると、Falcoルールに違反した場合にアクションを実行できるセキュリティプレイブックを(サーバーレス機能を介して)デプロイすることもできます。付属のプレイブックをデプロイする方法については、Response Engine documentationを参照してください。

DaemonSet マニフェスト

FalcoをKubernetes DaemonSetとして実行するには、以下の手順に従ってください。 これらはKubernetesの「一般的な」手順です。 プラットフォーム固有の手順については、それぞれのセクションを参照してください。

  1. Falcoリポジトリのクローンを作成し、マニフェストのあるディレクトリに移動します。
git clone https://github.com/falcosecurity/falco/
cd falco/integrations/k8s-using-daemonset
  1. サービスアカウントを作成し、必要なRBAC権限を付与します。Falcoはこのサービスアカウントを使用してKubernetes APIサーバーに接続し、リソースメタデータを取得します。
kubectl apply -f k8s-with-rbac/falco-account.yaml
  1. Falcoポッド用のサービスを作成します。これにより、Falcoは[Kubernetes Audit Log Events](event-sources / kubernetes-audit)を受信できるようになります。この機能を使用する予定がない場合は、この手順をスキップできます。
kubectl apply -f k8s-with-rbac/falco-service.yaml
  1. DaemonSetはKubernetes ConfigMapにFalcoの設定を保存し、設定をFalcoポッドで使用できるようにします。 これにより、基になるPodを再ビルドおよび再デプロイすることなく、カスタム構成を管理できます。 ConfigMapを作成するには:

  2. k8s-with-rbac/falco-configディレクトリを作成します。

  3. このGitHubリポジトリから必要な設定を k8s-with-rbac/falco-config/ディレクトリにコピーします。

元のファイルを変更しないでください。 コピーしたファイルを使用して、設定を変更します。

mkdir -p k8s-with-rbac/falco-config
k8s-using-daemonset$ cp ../../falco.yaml k8s-with-rbac/falco-config/
k8s-using-daemonset$ cp ../../rules/falco_rules.* k8s-with-rbac/falco-config/
k8s-using-daemonset$ cp ../../rules/k8s_audit_rules.yaml k8s-with-rbac/falco-config/
  1. 環境のカスタムルールを falco_rules.local.yamlファイルに追加すると、開始時にFalcoによって読み込まれます。falco.yamlファイルを変更して、デプロイメントに必要な[設定オプション](configuration /)を変更することもできます。次のようにconfigMapを作成します:
kubectl create configmap falco-config --from-file=k8s-with-rbac/falco-config
  1. configMapの依存関係を作成したら、DaemonSetを作成できます。
kubectl apply -f k8s-with-rbac/falco-daemonset-configmap.yaml
  1. Falcoが正しく起動したことを確認します。これを行うには、対応するログファイルでFalcoポッドのステータスを確認します。
kubectl logs -l app=falco-example

Minikube

ローカル環境のKubernetesでFalcoを使用する最も簡単な方法は、Minikubeです。Kubernetes YAMLマニフェストとHelmチャートの両方が、Minikubeで定期的にテストされています。

Minikube カーネルモジュール

デフォルトの --driver引数で minikubeを実行すると、MinikubeはさまざまなKubernetesサービスを実行するVMとPodなどを実行するコンテナフレームワークを作成します。一般に、FalcoカーネルモジュールをMinikube VMで直接ビルドすることはできません。実行中のカーネルのカーネルヘッダーがVMに含まれていないためです。

これに対処するためfalco 0.13.1から、最新のMinikube 10バージョンのカーネルモジュールを事前にビルドし、https://s3.amazonaws.com/download.draios.comで利用できるようにしています。これにより、ロード可能なカーネルモジュールでダウンロードフォールバックステップを成功させることができます。

今後、Falcoの新しいリリースごとに、Minikubeの最新バージョンを10バージョンをサポートします。 現在、ダウンロード用にプレビルドしたカーネルモジュールを保持しているため、引き続き限定的に履歴サポートを提供します。

GKE

Google Kubernetes Engine(GKE)は、ワーカーノードプールのデフォルトのオペレーティングシステムとしてContainer-Optimized OS(COS)を使用します。COSは、基盤となるOSの特定の部分へのアクセスを制限するセキュリティが強化されたオペレーティングシステムです。このセキュリティ上の制約のため、Falcoはカーネルモジュールを挿入してシステムコールのイベントを処理できません。ただし、COSは、eBPF(extended Berkeley Packet Filter)を活用して、システムコールのストリームをFalcoエンジンに提供する機能を提供します。

eBPFサポートの有効化

Falcoは、最小限の構成変更でeBPFを使用できます。それには、 FALCO_BPF_PROBE環境変数を空の値に設定します:FALCO_BPF_PROBE = ""

eBPFは現在GKEとCOSでのみサポートされていますが、ここでは幅広いプラットフォームのインストールの詳細を提供します

重要: プローブファイルの代替パスを指定する場合、FALCO_BPF_PROBEを既存のeBPFプローブのパスに設定することもできます。

プローブの入手

公式のコンテナイメージを使用する場合、この環境変数を設定すると、falco-driver-loaderスクリプトがトリガーされ、適切なバージョンのCOSのカーネルヘッダーがダウンロードされ、適切なeBPFプローブがコンパイルされます。他のすべての環境では、 falco-driver-loaderスクリプトを自分で呼び出してこの方法で取得できます:

sudo FALCO_VERSION="0.23.0" FALCO_BPF_PROBE="" falco-driver-loader

上記のスクリプトを正常に実行するには、clang llvmがインストールされている必要があります。

KubernetesにおけるHelmの使用

Helmを使用している場合、ebpf.enable設定オプションを設定することでeBPFを有効にできます。

helm install --name falco stable/falco --set ebpf.enabled=true

Kubernetesにおけるyamlファイルの使用

提供されているDaemonSetマニフェストを使用している場合は、対応するYAMLファイルの次の行のコメントを解除します。

          env:
          - name: FALCO_BPF_PROBE
            value: ""

パッケージからローカル

パッケージからFalcoをインストールする場合、 falco systemdユニットを編集する必要があります。

それには、次のコマンドを実行します:

systemctl edit falco

エディターが開きます。この時点で、このコンテンツをファイルに追加することでユニットの環境変数を設定できます:

[Service]
Environment='FALCO_BPF_PROBE=""'

Falcoバイナリをローカルで使用する

Falcoバイナリを直接使用している場合、次の方法でBPFプローブを有効にできます:

sudo FALCO_BPF_PROBE="" falco

Linux

スクリプト化されたインストール、パッケージマネージャー、またはAnsibleなどの構成管理ツールを使用して、LinuxにFalcoを直接インストールします。Falcoをホストに直接インストールすると、以下が提供されます:

  • Linuxホストの異常を監視する機能。 Falcoの多くのユースケースはコンテナ化されたワークロードの実行に焦点を合わせていますが、Falcoは任意のLinuxホストで異常なアクティビティを監視できます。コンテナ(およびKubernetes)はオプションです。
  • コンテナスケジューラ(Kubernetes)およびコンテナランタイムからの分離。ホストで実行されているFalcoは、Falco構成およびFalcoデーモンの管理からコンテナスケジューラを削除します。これは、コンテナスケジューラが悪意のある攻撃者によって侵害された場合に、Falcoが改ざんされるのを防ぐのに役立ちます。

スクリプトインストール

LinuxにFalcoをインストールするには、必要な手順を実行するシェルスクリプトをダウンロードできます:

curl -o install_falco -s https://falco.org/script/install

次に、 sha256sumツール(または類似のもの)を使用して、スクリプトのSHA256チェックサムを確認します:

sha256sum install_falco

21e8053c37e32f95d91c9393d961af1c63b5839d795c8cac314d05daadea9779でなければなりません。

次に、ルートとして、またはsudoを使用してスクリプトを実行します:

sudo bash install_falco

パッケージインストール

CentOS/RHEL/Amazon Linux

  1. falcosecurity GPGキーを信頼し、yumリポジトリを設定します:

    rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asc
    curl -s -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo
    

    ノート - 現在のマスターのFalcoパッケージを使用する場合は、falcosecurity-rpm-devファイルを使用します。

  2. EPELリポジトリをインストールする:

    ノート — 次のコマンドは、DKMSがディストリビューションで利用できない場合にのみ必要です。「yum list dkms」を使用して、DKMSが利用可能かどうかを確認できます。 必要に応じて、次を使用してインストールします:

    yum install epel-release
    
  3. カーネルヘッダーをインストールする:

    注意 — 次のコマンドは、どのカーネルでも機能しない可能性があります。 パッケージの名前を適切にカスタマイズしてください。

    yum -y install kernel-devel-$(uname -r)
    
  4. Falcoをインストールする:

    yum -y install falco
    

    アンインストールするには、‘yum erase falco'を実行します。

Debian/Ubuntu

  1. falcosecurity GPGキーを信頼し、aptリポジトリーを構成し、パッケージリストを更新します:

    curl -s https://falco.org/repo/falcosecurity-3672BA8F.asc | apt-key add -
    echo "deb https://dl.bintray.com/falcosecurity/deb stable main" | tee -a /etc/apt/sources.list.d/falcosecurity.list
    apt-get update -y
    

    ノート - 現在のマスターからFalcoパッケージを使用する場合は、https://dl.bintray.com/falcosecurity/deb-dev URLをfalcosecurity.listファイルにエコーします。

  2. カーネルヘッダーをインストールする:

    注意 — 次のコマンドは、どのカーネルでも機能しない可能性があります。 パッケージの名前を適切にカスタマイズしてください。

    apt-get -y install linux-headers-$(uname -r)
    
  3. Falcoをインストールする:

    apt-get install -y falco
    

    アンインストールするには、‘apt-get remove falco'を実行します。

Docker

ノート: これらの手順は、LinuxホストでFalcoコンテナーを直接実行するためのものです。KubernetesでFalcoコンテナーを実行する手順については、Kubernetes固有のドキュメントを参照してください。

ホストオペレーティングシステムを完全に制御できる場合は、通常のインストール方法を使用してFalcoをインストールすることをお勧めします。 この方法により、ホストOS上のすべてのコンテナーを完全に可視化できます。 標準の自動/手動インストール手順を変更する必要はありません。

ただし、FalcoはDockerコンテナー内で実行することもできます。 スムーズなデプロイメントを確実にするには、Falcoを実行する前にカーネルヘッダーをホストオペレーティングシステムにインストールする必要があります。

これは通常、apt-getを使用してDebianのようなディストリビューションで実行できます:

apt-get -y install linux-headers-$(uname -r)

RHELのようなディストリビューションの場合:

yum -y install kernel-devel-$(uname -r)

その後、FalcoはDockerを使用して実行できます:

docker pull falcosecurity/falco
docker run -i -t \
    --name falco \
    --privileged \
    -v /var/run/docker.sock:/host/var/run/docker.sock \
    -v /dev:/host/dev \
    -v /proc:/host/proc:ro \
    -v /boot:/host/boot:ro \
    -v /lib/modules:/host/lib/modules:ro \
    -v /usr:/host/usr:ro \
    falcosecurity/falco

動作を確認するには、[イベントジェネレータ](../ event-sources/sample-events)を実行して、Falcoのルールセットをトリガーするアクションを実行します:

docker pull sysdig/falco-event-generator
docker run -it --name falco-event-generator sysdig/falco-event-generator

Dockerコンテナでカスタムルールを使用する

Falcoイメージには、 /etc/falco/falco_rules.yamlにある組み込みのルールセットがあり、ほとんどの目的に適しています。ただし、独自のルールファイルを提供し、Falcoイメージを引き続き使用することもできます。その場合、 -v path-to-falco-rules.yaml:/etc/falco/を追加して、コンテナ内の /etc/falco/falco_rules.yamlに外部ルールファイルをマッピングするボリュームマッピングを追加する必要があります。 falco_rules.yamldocker runコマンドに追加します。 これにより、ユーザーが指定したバージョンでデフォルトのルールが上書きされます

デフォルトの falco_rules.yamlに加えてカスタムルールを使用するには、ローカルディレクトリにカスタムルールを配置できます。 次に、 -v path-to-custom-rules/:/etc/falco/rules.d docker runコマンドに追加して、このディレクトリをマウントします。

構成管理システム

PuppetAnsibleなどの構成管理システムを使用してFalcoをインストールすることもできます。

Puppet

Falco用のPuppetモジュールである sysdig-falcoは、Puppet Forgeで入手できます。

Ansible

@ juju4は、FalcoのAnsibleの役割である juju4.falcoを有益に書いています。 GitHubおよびAnsible Galaxyで入手できます。Ansible Galaxy(v0.7)の最新バージョンはFalco 0.9では動作しませんが、GitHubのバージョンは動作します。

CoreOS

CoreOSでFalcoを実行する推奨方法は、上記のDockerセクションのインストールコマンドを使用して、独自のDockerコンテナー内で実行することです。この方法により、ホストOS上のすべてのコンテナーを完全に可視化できます。

この方法は自動的に更新され、自動セットアップやbash補完などの優れた機能が含まれています。また、CoreOS以外の他のディストリビューションでも使用できる一般的なアプローチです。

ただし、一部のユーザーはCoreOSツールボックスでFalcoを実行することを好む場合があります。推奨される方法ではありませんが、これは通常のインストール方法を使用してツールボックス内にFalcoをインストールしてから、手動で falco-driver-loaderスクリプトを実行することで実現できます:

toolbox --bind=/dev --bind=/var/run/docker.sock
curl -s https://falco.org/script/install | bash
falco-driver-loader