【SCSK技術者によるブログ】Falco初学者講座 - List/Macro編
皆さんこんにちは。
第20回担当の渡邊です。
今回はFalcoのルールを構成する要素のうち、ListとMacroについて解説していきます。
Falcoって何?という方は以下の記事をご覧ください。 https://www.scsk.jp/sp/sysdig/blog/scsk/scskfalco_-_condition.html
List, Macroとは何でしょうか
「要素や式をひとまとめにしたもの」です。
Listは複数の要素を、Macroは式を扱います。
どちらも記述を抽象化し、定義は再利用可能です。
これにより、複雑なconditionを簡潔に表記することができます。
実際の例を見てみましょう。
Listの例
yaml - list: userexec_binaries items: [sudo, su]
Listの定義はKey名にlist、Valueに一意の名前を指定する事で可能です。
itemsは持たせたい要素を記述します。要素とはcondition中で評価させたい個別の値です。
この定義によって、condition句の中でuserexec_binariesという語が「sudoとsuの要素を持つもの」として認識されます。
Listは主にin演算子とセットで使用し、次のように記述します。
in演算子は与えられた項目を含むか評価します。
yaml condition: proc.name in (userexec_binaries)
上記のproc.name in (userexec_binaries)は次のように考える事ができます。
yaml proc.name = sudo or proc.name = su
また、in演算子もnotを利用でき、not inと指定することで「List以外の値の場合」という評価をします。
Macroの例
yaml - macro: container condition: container.id != host
Macroの定義はKey名にmacro、Valueに一意の名前を指定する事で可能です。
Macroは式を扱うため、ルールと同じconditionを用いて記述します。
この定義によって、condition句の中でcontainerという単語は「コンテナIDがhostではない」という式を意味するようになります。
また、Macroの中に異なるMacroを組み込むことも可能です。
参考情報:
Lists - https://falco.org/docs/concepts/rules/basic-elements/#lists
Macros - https://falco.org/docs/concepts/rules/basic-elements/#macros
ListとMacroの活用例
yaml - macro: container condition: container.id != host - list: shell_binaries items: [bash, csh, ksh, sh, tcsh, zsh, dash] - macro: shell_procs condition: proc.name in (shell_binaries) - rule: shell_in_container desc: notice shell activity within a container condition: > spawned_process and container and shell_procs
上記のうち、アラート通知の条件となるのは rule であるshell_in_container のconditionのみです。
このconditionにはshell_binaries, shell_procsというListとMacroが用いられています。
shell_in_containerのconditionは概ね次のような解釈となります。
プロセスが新たに立ち上げられた時、かつ コンテナ環境での実行、かつ プロセス名が[bash, csh, ksh, sh, tcsh, zsh, dash]のいずれか
これはdocker exec <container名> /bin/shの様なアクティビティをトリガーにアラート通知するルールですが、ListやMacroを使う事で簡潔な記述となっていることが分かります。
理解度クイズ
ListやMacroの理解を深めていただけたでしょうか。
最後に理解度を確かめるための問題を出します。よく考えてみてくださいね。
問題
1. 「q1_list」という名称のlistを用い、proc.nameが[cat, echo]のプロセスの場合。というconditionを持つMacro「q1_macro」を作成してください。
回答
問題1:
- list: q1_list
items: [cat, echo]
- macro: q1_macro
condition: proc.name in (q1_list)
最後に
今回はListとMacroの仕組みを解説しました。初めてFalcoに触れる方の学習の一助になれば幸いです。 Falcoはカスタマイズ性が非常に高いため、自分でカスタマイズできるようになると、今まであきらめていたセキュリティ要件を実現するなど、ワンランク上のSysdig活用術を身につけることができます。
今後もFalco Ruleに関する情報をご紹介できればと思います。
担当者紹介

- 担当者名
- 渡邊
- コメント
- コード好き。アニメやドラマにターミナルの画面が出てくると、その内容がどのぐらい正確か必ずチェックします。
- 保有資格
- Certified Kubernetes Administrator
Certified Kubernetes Application Developer
SCSK技術者ブログ

【Sysdig技術者によるブログ】Serverless AgentがAzure Container Appsに対応しました

【Sysdig技術者によるブログ】システムコール分析における生成AIの活用

【SCSK技術者によるブログ】Sysdig情報アップデート~AWS連携にS3オプションが追加されました~

【SCSK技術者によるブログ】Falco初学者講座 - Exceptions編

【SCSK技術者によるブログ】Falco初学者講座 - List/Macro編

【SCSK技術者によるブログ】コンテナの電力消費をSysdig Monitorで監視してみよう

【SCSK技術者によるブログ】Sysdigの脅威検知はFalcoだけじゃない ~Contianer Drift編~

【SCSK技術者によるブログ】~Falco初学者に送る~ Sysdig SageでFalcoを勉強してみよう②

【SCSK技術者によるブログ】~Falco初学者に送る~ Sysdig SageでFalcoを勉強してみよう①

【 SCSK技術者によるブログ】Sysdigの設定をTerraformで管理してみた(Monitor編)

【SCSK技術者によるブログ】Falco初学者講座 - condition編

【SCSK技術者によるブログ】Sysdig Sageを使ってみた

【SCSK技術者によるブログ】Sysdigと組み合わせて効果的なソリューションのご紹介 ~ポリシーエンジン編②~

【SCSK技術者によるブログ】Sysdigをセキュアに使おう~IP Allowlist編~

【SCSK技術者によるブログ】Node ExporterをSysdig Monitorに連携してみた

【SCSK技術者によるブログ】Sysdigの設定をTerraformで管理してみた

【SCSK技術者によるブログ】CNAPPの理解とSysdigのカバレッジ

【SCSK技術者によるブログ】Sysdigの脅威検知はFalcoだけじゃない ~マルウェア検知編~

【SCSK技術者によるブログ】Sysdigのライセンス体系

【SCSK技術者によるブログ】Sysdig とMicrosoft Entra ID間でSAML認証設定を試してみた

【SCSK技術者によるブログ】Sysdigと組み合わせて効果的なソリューションのご紹介 ~ポリシーエンジン編~

【SCSK技術者によるブログ】Sysdigの脅威検知はFalcoだけじゃない ~AWSサインインなりすまし検知編~

【SCSK技術者によるブログ】Sysdig SecureのRisks機能を試してみた
