ブログ

Falco ルールの作成を始める!

Falco ルールの作成を始める!

本文の内容は、2018年3月7日にSysdigのMichael Ducyが投稿したブログ(https://sysdig.com/blog/getting-started-writing-falco-rules/)を元に日本語に翻訳・再構成した内容となっております。

SysdigのFalcoは、アプリケーションおよびコンテナの異常な動作を検出するための強力な動作アクティビティ監視ツールです。 一般的なベストプラクティスのための25のルールが付属していますが、運用およびアプリケーションの要件に合わせてカスタムルールの作成をすぐに開始する必要があります。 せっかちで、待ちたくないですか? Falcoのインストール方法は、プロジェクトのGitHub wikiで学ぶことができます。

Sysdigフィルターの構文

ルールの作成を開始するには、ルール条件の作成に使用するSysdigフィルター構文を理解することが重要です。 Sysdigフィルターは、システムで発生するシステムコールとイベントに関するさまざまな情報を公開します。 これらのフィルターは、「フィールドクラス」と呼ばれる一連のクラスに編成されます。 Sysdigがインストールされている場合、sysdig -lを実行することにより、常に最新のクラスを照会できます。 クラスとフィールドのリストもドキュメントに記載されています。 以下は、Sysdigが提供するクラスのリストです。 クラス(およびフィールド)の豊富なライブラリが利用可能であることがわかります。

fd - File Descriptors

process - Processes

evt - System Events

user - Users

group - Groups

syslog - Syslog messages

container - Container info

fdlist - FD poll events

k8s - Kubernetes events

mesos - Mesos events

span - Start/Stop markers

evtin - Filter based on Spans

ルールの基本

FalcoルールはYAMLで記述されており、さまざまな必須およびオプションのキーがあります。

rule: Name of the rule.

desc: Description of what the rule is filtering for.

condition: The logic statement that triggers a notification.

output: The message that will be shown in the notification.

priority: The "logging level" of the notification.

tags: Used to categorize rules. (optional)

enabled: Turn the rule on or off (optional, defaults to true)

必要なキーを使用して、非常に基本的なルールを作成できます。

- rule: Detect bash in a container
  desc: You shouldn't have a shell run in a container
  condition: container.id != host and proc.name = bash
  output: Bash ran inside a container (user=%user.name command=%proc.cmdline %container.info)
  priority: INFO

これは便利なルールですが、システムは単なるbashよりも多くのシェルを提供します。 Falcoでは、アイテムのセットを含む「リスト」を定義できます。 これを使用して、リスト内のシェルがコンテナ内で実行されるたびに警告するようにFalcoに指示できます。

- list: system_shells
  items: [bash, zsh, ksh, sh, csh]

このリストを定義したら、ルールを変更してプロセス名のリストから読み取ることができます。

- rule: Detect shells in a container
  desc: You shouldn't have a shell ran in a container
  condition: container.id != host and proc.name in (system_shells)
  output: Bash ran inside a container (user=%user.name command=%proc.cmdline %container.info)
  priority: INFO

Falcoは、これら5つのシェルのいずれかがコンテナ内で実行されるたびに警告を発します。 もちろん、Falcoはデフォルトのルールセットで、このユースケースに対してより完全なルールを提供します。

もっと学ぶには

これまで見てきたように、Falcoのルールは簡単に記述できますが、異常なシステム動作を検出するための非常に強力なツールを提供します。 コンテナ、不変のインフラストラクチャ、およびマイクロサービスの世界では、Falcoは、ユーザーがこれらの新しいパラダイムのベストプラクティスに従うようにするのに役立ちます。 また、Falcoルールは、実行中の異常なバイナリ(クリプトマイニングなど)または異常なネットワーク接続について警告することにより、侵害される可能性のあるシステムへの警告に役立ちます。

さらに情報が必要ですか? GitHub wikiのFalcoのドキュメントを確認するか、Sysdig Slackチームに参加してください。

Sysdig Secure

Sysdig Falcoの機能は気に入っているが、より多くの統合、ユーザーアクティビティの監査、ルールに基づいてコンテナを強制停止または一時停止する機能、およびルールが失敗したときにコンテナの状態をキャプチャする機能が必要な場合は、Sysdig Secureをチェックしてください。

ご質問・お問い合わせはこちら

top