Sysdigオープンソースの新しいリリースは、Falcoのプラグインを活用

By 清水 孝郎 - MAY 16, 2022

SHARE:

本文の内容は、2022年5月16日にThomas Labarussiasが投稿したブログNew release of Sysdig Open Source leverages Falco plugins(https://sysdig.com/blog/sysdig-open-source-uses-falco-plugins/)を元に日本語に翻訳・再構成した内容となっております。

Sysdig のメンテナーは、Linux システム上のプロセスやコンテナの活動を分析したり記録したりするための、我々の愛する OSS ツールの最新リリースを発表できることに興奮しています。

完全な変更履歴はGitHubリポジトリで見ることができますが、ここではいくつかのハイライトされた機能を紹介します。

  • プラグインサポート
  • 出力の色
  • Podman のサポート
  • フィルタリングオプションに新しいフラグ proc.is_exe_writable が追加されました。
  • 新しいシステムコールmprotectexecveatcopy_file_rangeclone3
注:この記事を書き始めた直後に、バグフィックスされた0.29.1がリリースされました。

プラグイン

このリリースでは、大きな新機能が追加されています。Falcoの最新リリースに続き、Sysdig OSSでもプラグインを使用することができるようになりました。

Falcoで使用されているのと同じプラグインを、Sysdig OSSの入力を拡張するためにも使用できるようになりました。プラグインは、フィルタリング式/Falcoルールを使用して評価できる新しいイベントソースの追加や、イベントから情報を抽出できる新しいフィールドの定義に役立ちます。

Sysdig Open Source uses Plugins

インストール

まず、Sysdig OSSをまだインストールしていない場合は、以下の手順でお好きなLinux OSで使い始めることができます。

インストールしたら、プラグイン・レジストリなどから必要なプラグインをダウンロードし、以下の手順で /usr/share/sysdig/pluginsにインストールしてください。
mkdir -p /usr/share/sysdig/plugins
cd /tmp
wget https://download.falco.org/plugins/stable/dummy-0.2.0-x86_64.tar.gz
tar xvzf dummy-0.2.0-x86_64.tar.gz
mv libdummy.so /usr/share/sysdig/plugins/

プラグインが正しくデプロイされたことを確認するために、以下のコマンドを実行します。

$ sysdig -Il
Plugin search paths are: /usr/share/sysdig/plugins/
1 Plugins Loaded:
Name: dummy
Description: Reference plugin for educational purposes
Contact: github.com/falcosecurity/plugins
Version: 0.2.0
... output ommited ...

設定ファイル

プラグインを有効にするには、Falcoのプラグイン設定ファイルを使用するか、コマンドラインに引数を渡すかのどちらかになります。

以下は、プラグインフレームワークを簡単にテストするために、10個の合成イベントを生成するためのダミープラグインのコンフィグファイルの例です。
plugins:
  - name: dummy
    library_path: /usr/share/sysdig/plugins/libdummy.so
    init_config:
      jitter: 10
    open_params: ''{"start":1, "maxEvents": 10}''
load_plugins: [dummy]

この設定ファイルを使うには、 --plugin-config-file というオプションの後に、設定内容を含む作成したファイル名を指定するだけです。
$ sysdig --plugin-config-file dummy-config.yaml
1 2022-04-01 13:00:09 [dummy] {"sample": "2"}
2 2022-04-01 13:00:10 [dummy] {"sample": "6"}
3 2022-04-01 13:00:10 [dummy] {"sample": "11"}
... output omitted ...

プラグインの使用方法と設定方法の詳細については、Falco docsのプラグインのセクションを参照してください。

コマンドラインによる設定

また、コマンドラインから -H や -I というオプションを使って、以下のようにプラグインを設定することもできます。
$ sysdig -H dummy:'{"jitter":50}' -I dummy:'{"start":1,"maxEvents":10}'

そのために、この2つの新しいオプションが用意されました。

  • -H : plugin_name プラグインを手動で登録し(パスもサポートされています!)、指定された init_config を JSON 文字列として渡します。
  • -I : plugin_nameプラグインを入力プラグインとして設定し、open_paramsをJSONの文字列として渡します。
使い方の詳細は –help を参照してください。

プラグインが登録されていない場合、システムディレクトリにあるプラグインは自動的に登録されます。

プラグインを手動で登録する場合は、-Hと-Iの両引数を設定する必要があります。

ダミープラグインを使った簡単な最終テストは、以下のような出力になります:

$ sysdig -I dummy:'{ "init_config": 1, "maxEvents": 3}'
1 2022-04-01 13:00:15 [dummy] {"sample": "5"}
2 2022-04-01 13:00:15 [dummy] {"sample": "8"}
3 2022-04-01 13:00:15 [dummy] {"sample": "9"}

次に、より便利な例として、dockerプラグインを試してみましょう。

まず、インストールします:

mkdir -p /usr/share/sysding/plugins/
cd /tmp
wget https://github.com/Issif/docker-plugin/releases/download/v0.1.0/docker-plugin_0.1.0_linux_amd64.tar.gz
tar xvzf docker-plugin_0.1.0_linux_amd64.tar.gz
cp libdocker.so /usr/share/sysding/plugins/

これと似たような構文でSysdigを実行します:
$ sysdig -H docker:'{"flushinterval": 10}' -I docker:'{}'

別の端末で、dockerコンテナを起動します。
$ docker run -ti docker.io/alpine sh

Sysdig OSSがPodmanコンテナをネイティブにサポートしていることは紹介しました。しかし、特にこのプラグインはDockerのイベントと連動するように開発されています。

というような出力が得られるはずです:
1 2022-03-30 19:25:32 [docker] {"status":"create","id":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","from":"alpine","Type":"container","Action":"create","Actor":{"ID":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","Attributes":{"image":"alpine","name":"stoic_goldberg"}},"scope":"local","time":1648661132,"timeNano":1648661132044628389}
2 2022-03-30 19:25:32 [docker] {"status":"attach","id":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","from":"alpine","Type":"container","Action":"attach","Actor":{"ID":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","Attributes":{"image":"alpine","name":"stoic_goldberg"}},"scope":"local","time":1648661132,"timeNano":1648661132046127121}
3 2022-03-30 19:25:32 [docker] {"Type":"network","Action":"connect","Actor":{"ID":"a46db2080f7217fd5ff95064227d7f46a160c7217e9b43a566d8778792bc6ab2","Attributes":{"container":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","name":"bridge","type":"bridge"}},"scope":"local","time":1648661132,"timeNano":1648661132157630105}
4 2022-03-30 19:25:32 [docker] {"status":"start","id":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","from":"alpine","Type":"container","Action":"start","Actor":{"ID":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","Attributes":{"image":"alpine","name":"stoic_goldberg"}},"scope":"local","time":1648661132,"timeNano":1648661132462006264}
5 2022-03-30 19:25:32 [docker] {"status":"resize","id":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","from":"alpine","Type":"container","Action":"resize","Actor":{"ID":"e2ede0ab2e274e98203baf2cbde76ce576452462611cb62b02b799916fc4aede","Attributes":{"height":"37","image":"alpine","name":"stoic_goldberg","width":"294"}},"scope":"local","time":1648661132,"timeNano":1648661132464329983}

また、必要に応じて出力をフォーマットすることも可能です:
sysdig -H docker:'{"flushinterval": 10}' -I docker:'{}' \
  -p 'time=%evt.time status=%docker.status
      from=%docker.from type=%docker.type
      action=%docker.action name=%docker.attributes.name'
time=19:27:34.310497000 status=create from=alpine type=container action=create name=zen_ellis
time=19:27:34.312382000 status=attach from=alpine type=container action=attach name=zen_ellis
time=19:27:34.433546000 status= from= type=network action=connect name=bridge
time=19:27:34.736048000 status=start from=alpine type=container action=start name=zen_ellis
time=19:27:34.736200000 status=resize from=alpine type=container action=resize name=zen_ellis

あるいは、データの書き込み/読み込みのキャプチャーも:
sysdig -H docker:'{"flushinterval": 10}' -I docker:'{}' \
  -w /tmp/docker.scap
sysdig -H docker:'{}' -I docker:'{}' \
  -r /tmp/docker.scap \
  -p 'time=%evt.time status=%docker.status
      from=%docker.from type=%docker.type
      action=%docker.action name=%docker.attributes.name'
time=19:30:19.100057000 status=die from=alpine type=container action=die name=zen_ellis
time=19:30:19.233340000 status= from= type=network action=disconnect name=bridge
time=19:30:20.358480000 status=create from=alpine type=container action=create name=practical_carver
time=19:30:20.358486000 status=attach from=alpine type=container action=attach name=practical_carver
time=19:30:20.470413000 status= from= type=network action=connect name=bridge
time=19:30:20.755902000 status=start from=alpine type=container action=start name=practical_carver
time=19:30:20.755915000 status=resize from=alpine type=container action=resize name=practical_carver

まとめ

プラグインのおかげで、Sysdig OSSは、Falcoと同じように多様なイベントソースを分析し、オンプレミスまたはクラウド上のインフラを保護することができるようになりました。

Falcoは、多様なツールがFalcoのコア機能を活用し、脅威をより早く、より効率的に検知するという共通の目標を達成する、全く新しいエコシステムへの道を切り開いています。

Sysdigのオープンソース・ジャーニーの詳細はこちら


貴社のプロジェクトを、Sysdig OSSやFalcoを使って分析するにはプラグインを提案してください。
私たちのリソースへのフォローは下記からお願いします。