本文の内容は、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をチェックしてください。