Tracee: eBPFを使用したコンテナトレース #AquaSecurity #Container #Security #Tracee #OSS #eBPF
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2019年11月6日に公開された「Tracee: Tracing Containers with eBPF」の日本語翻訳です。
Tracee: eBPFを使用したコンテナトレース
今週のVelocity Berlinでは、A Beginner’s Guide to eBPFという講演を行います。それと同時に、eBPFを使用したコンテナ内のイベントをトレースするTraceeという新しいAqua Securityオープンソースプロジェクトを開始します。Traceeはほとんどの開発者が日常的に行う必要のないツールですが、コンテナセキュリティ実装の詳細に関心がある人にとっては役立つツールです。
eBPFは、カーネル内でカスタムプログラムを実行できるカーネル技術です。通常、bpftraceなどの強力な可観測性ツールに使用されます。
Traceeはコンテナイベントにフォーカスする
eBPFを使用してシステムコールなどのイベントをトレースすることは新しい試みではありません。今年初めに行われたDockerConでの講演「eBPF Superpowers」で、私のライブコーディングによるサンプルをご覧いただけます。この話をまとめていた際、私はBrendan Greggのような巨人の肩の上に立っているような気持ちになりました。Traceeはホストで実行されている他プロセスからのイベントに煩わされることなく、コンテナ内で生成されたイベントのみを表示することができます。
ご存知のように、ホストマシンから見るとコンテナは実際にはただのLinuxプロセスにすぎません。コンテナ化されたプロセスと通常プロセスに違いがない場合、Traceeはイベントがどのコンテナから来たかを、どのように検出できるのでしょうか?
コンテナは通常、独自のプロセスID(PID)名前空間で開始されます。その名前空間内では、最初のプロセスはID 1を持っているように見えます。Traceeは実行中の新しいバイナリを監視し、プロセスのPID名前空間の観点からプロセスIDをチェックします。IDが1であると思われるプロセスが見つかると、Traceeはそれが新しいPID名前空間内の最初のプロセスであることを認識してトレースを開始します。同じPID名前空間を共有する他のプロセスもトレースされます。Traceeはコンテナ内の子プロセスと、PID名前空間を共有する同じKubernetes pod内の他のコンテナをキャッチします。
このアプローチは、既存の(既に起動している)コンテナがトレースされないことを意味します。コンテナを検出するためには、最初にTraceeを実行してからコンテナを起動する必要があります。
Tracee の入手先
TraceeはAquaの研究チームのYaniv Agmanによって作成され、現在は実験中です。カーネルがプロセスに必要な機能があるかどうかをチェックするcap_capableなどの他のイベントと同様に、最も一般的なシステムコールのトレースをサポートします。
Traceeの利用方法と出力例については、GitHubのREADMEをご覧ください。
たくさんのフィードバックをお待ちしております。