Google Cloudとコンテナの継続的なセキュリティ
本文の内容は、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リポジトリで見ることができますが、ここではいくつかのハイライトされた機能を紹介します。
proc.is_exe_writable
が追加されました。mprotect
, execveat
, copy_file_range
, clone3
注:この記事を書き始めた直後に、バグフィックスされた0.29.1がリリースされました。
このリリースでは、大きな新機能が追加されています。Falcoの最新リリースに続き、Sysdig OSSでもプラグインを使用することができるようになりました。
Falcoで使用されているのと同じプラグインを、Sysdig OSSの入力を拡張するためにも使用できるようになりました。プラグインは、フィルタリング式/Falcoルールを使用して評価できる新しいイベントソースの追加や、イベントから情報を抽出できる新しいフィールドの定義に役立ちます。
まず、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つの新しいオプションが用意されました。
使い方の詳細は -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によって分析されていませんか?そのためのプラグインを提案してください。私たちのリソースをフォローください。