クラウドネイティブなランタイムセキュリティプロジェクトのFalcoが、バージョン0.31.0をリリースした。今回のリリースでは、イベントソースやイベントエクストラクタをFalcoに追加定義する手段として、プラグインシステムが新たに導入されている。プラグインシステムには開発を簡略化するSDKも含まれる他、今回のリリースにはAWS CloudTrailプラグインが新たに同梱されている。
FalcoはLinuxのシステムコール実行を検知して、警告を発することができる。Falcoのルールエンジンは、アプリケーションやコンテナ、ホスト、コンテナプラットフォーム内の異常なアクティビティを検出する能力を持つ。カーネルからのシステムコールを監視する手段として、Linux Kernel Instrumentationを使用している。Falcoの警告は、特定のシステムコールの使用やシステムコール引数、あるいはシステムコールを実行したプロセスの特性に対して発することができる。これらのルールには、特権コンテナを利用した特権昇格、ネームスペース変更、広く知られたディレクトリへの読み/書き操作、symlinkの生成といった動作が含まれている。
今回のリリースで新設されたプラグインシステムは、ソースプラグイン(source plugin)と呼ばれるイベントソースを、Falcoエンジンに追加する方法を標準化するためのものだ。ソースプラグインに加えて、コアライブラリや他のプラグインが生成したイベントからのフィールド抽出を行うエクストラクタプラグイン(extractor plugin)を記述することもできる。プラグインは、必要な機能をエクスポートするものであれば、ほぼ任意の言語での記述が可能だ。ただし、プラグイン開発用の推奨言語はGo、続いてC++となっており、この2つの言語による開発を容易にするためのSDKがリリースされている。
プラグインフレームワークを加えたFalcoのアーキテクチャ(提供:Falco)
ソースプラグインは新たなイベントソースを定義するもので、フィールドに基づいてイベントから情報を取り出すことができる。情報を取得したプラグインは、サポートするフィールドのセットを返す。このフィールドに対して、フィルタ式やFalcoルール条件を関係演算子や論理演算子で組み合わせて使用することができる。ソースプラグインの返すイベントにはイベントソースが指定されている。このイベントソースはプラグインの名前とは違うものであるため、複数のプラグインが同じイベントソースを指定することも可能だ。
ソースプラグインはプラグインIDも提供する必要がある。プラグインIDはグローバルにユニークな値として、Falcoリポジトリに登録されたものでなければならない。このIDはメモリ内のイベントオブジェクトに格納され、イベントを挿入した関連プラグインを後で特定するために使用される。このIDはキャプチャファイルにも格納されており、キャプチャファイルを後で読み込んだ時に、メモリ内のイベントオブジェクトを再生成するために使用される。新たなプラグインを登録するには、詳細情報をプラグインレジストリファイルに記述した上でプルリクエストをオープンすればよい。
第2のタイプのプラグインであるエクストラクタプラグインは、新たなイベントソースは提供せず、他のイベントソースからフィールドを抽出するものだ。エクストラクタプラグインではオプションとして、解析の対象にするイベントソースのセットを指定することができる。イベントソースを指定しない場合には、すべての生成イベントが渡される。サポート外の値を検出して対応する処理を行うのはプラグインの責任である。
プラグインはFalco内のトラステッドコード(trusted code)であり、Falcoと同じスレッド内において、同じアドレス空間で実行される点に注意が必要だ。このような構成のため、プラグインがFalcoをクラッシュさせる可能性がある。Falcoチームでは、ユーザがプラグインのローディングを制御および監視を行うことを想定している。
新たに提供されるAWS Cloudtrailプラグインは、Cloudtrailイベントに含まれるログファイルをフェッチして解析し、個々のログエントリからイベントを発行する機能を備えている。ログはS3バケット、SNS通知を発行するSQSキュー、あるいはローカルファイルシステムのパスから得ることができる。エクスポート可能なフィールドフィールドとしては、イベント時間、AWSリージョン、リソースインスタンス名などがある。プラグイン以外では、Cloudtrailログ内の疑わしいアクティビティを監視するために、新たなルールが追加されている。例えば以下のルールは、マルチファクタ認証を行っていないコンソールアクセスを検出するものだ。
- rule: Console Login Without MFA
desc: Detect a console login without MFA.
condition:
ct.name="ConsoleLogin" and ct.error=""
and json.value[/userIdentity/type]!="AssumedRole" and json.value[/responseElements/ConsoleLogin]="Success"
and json.value[/additionalEventData/MFAUsed]="No"
output:
Detected a console login without MFA (requesting user=%ct.user, requesting IP=%ct.srcip, AWS region=%ct.region)
priority: CRITICAL
source: aws_cloudtrail
changelogにはこれらの変更や、リリースに含まれる他の改良点が詳細に説明されている。Falcoはオープンソースで、Apache 2.0ライセンス下でダウンロード可能である。開発チームは定期的なオフィス時間を設けて、ユーザをサポートしている。