Sysdig

SCSK株式会社

ブログ

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

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

皆さんこんにちは。
第21回担当の渡邊です。
今回はFalcoのルールを構成する要素のうち、Exceptionsについて解説していきます。

Falcoって何?という方は以下の記事をご覧ください。
https://www.scsk.jp/sp/sysdig/blog/scsk/scskfalco_-_condition.html

Exceptionsとは何でしょうか

アラート通知の対象外にしたいふるまいのホワイトリスト」です。
例えば、開発環境はアラート通知の対象外にしたい場面があると思いますが、そのような場合に利用するのがExceptionsです。
※本記事では、以降「アラート通知の対象」を「検知対象」とも表記します。

and not との違いは?

Exceptionsを利用せずとも、condition内でand not条件を使用することで任意のふるまいを検知対象外にできます。

しかし、The Falco blogでの指摘どおり、and notの多用でconditionの可読性が低下する場合にはExceptionsの利用を考えてみてください。
Why Are Exceptions Useful?: https://falco.org/blog/falco-rules-now-support-exceptions/#why-are-exceptions-useful

また、exceptionsで実現できない条件はconditionにand notで記述する必要があります。

Exceptionsの実際の定義

実際の定義を見てみましょう。

yaml
- rule: Write below binary dir
  ...
  exceptions:
    - name: known_bin_writers
      fields: [proc.name, fd.name]
      comps: [=, contains]
	  values:
	   - [nginx, /usr/bin/nginx]
	   - [apache, /bin/apache]

参考: https://falco.org/blog/falco-rules-now-support-exceptions/

上記の Write below binary dir は /bin, /sbinといったディレクトリへの書き込みが検知対象のルールです。

このexceptionsの解釈は

(proc.name = nginx and fd.name contains /usr/bin/nginx) or 
(proc.name = apache and fd.name contains /bin/apache)

を含むふるまいを検知対象外とします。

戸惑いを感じた方もいらっしゃるかもしれませんが、exceptionsが躓きやすい理由の一つに、定義を見て直観的に効力を理解しづらい点が挙げられます。

そこで、本記事では読解に焦点を当て、基本的なパターンから一つづつ解説していきます。

Exceptionsを構成する4要素

読解の前に、まずはExceptions構成する項目 fields, comps, values, nameの説明をします。

1. fields

fieldsはシステムコールに付随する情報の項目名を格納し、RuleやMacroのconditionで用いるproc.name等フィールドを指定できます。
フィールド一覧は以下のドキュメントを参考にしてみてください。
Supported Fields for Conditions and Outputs - https://falco.org/docs/reference/rules/supported-fields/

2. comps

fieldsとvaluesの関係性を決める演算子を格納する項目で、=やin等の値を指定します。

3. values

fieldsとcompsの評価対象となる具体的な値を格納する項目です。
例えばプロセス名「sh」に合致するふるまいを検知対象外にする場合、valuesにはshを指定します。

4. name

例外に名前を付けます。
名称はexceptions配下で一意である必要があります。

Exceptionsの基本的な解釈

exceptionsの解釈は「 <fields> と <values> が <comps> のとき検知対象外とする」ですが、Falco Ruleと同じ構文に直すのであれば「 <fields> <comps> <values> 」の順番で並べます。 冒頭のWrite below binary dirは難しい例のため、最小構成で説明します。

- rule: test-rule
  ::
  exceptions:
    - name: exclusion_1
      fields: 
        - fd.name
      comps: 
        - '='
      values: 
        - [/etc]

上記はfd.name = /etcを含むふるまいを検知対象外にします。
解釈に当てはめると「fd.name と /etc が = の時」検知対象外となります。
これを<fields> <comps> <values> の順に並べ替えると「 fd.name = /etc 」という式になるので理解しやすくなります。

また、見方を変えて「fields, comps, valuesを上から縦に並べて見る」事も理解を助ける1つの方法です。
上記のexceptionsを見やすくしたものを画像で示します。(これは説明用に整形したため、実際には登録できない場合があります。)

20250306-1.png

矢印に沿って読むと fd.name = /etc となりますね。

以上がExceptionsの基本的な解釈です。

Exceptionsでorやandを表現する。

先ほどは一つの条件を登録しました。
しかし、「fieldsとcompsは同じだけど、異なるvaluesを複数指定したい」、「2つ以上のfieldsを組み合わせたい」場合もあるかと思います。
その様な場合について解説していきます。

orの実装例1 - 1つの例外に複数の値を持たせたい場合

valuesに配列と値を追加します。

- rule: test-rule
  ::
  exceptions:
    - name: exclusion_2
      fields: 
        - proc.cmdline
      comps: 
        - contains
      values: 
        - [sh]
        - [bash]

これにより

proc.cmdline contains sh or proc.cmdline contains bash 

を含むふるまいが検知対象外となります。

orの実装例2 - 2つ目の例外を追加したい場合

複数の条件を持たせたい場合、exceptionsの直下にname, fields, comps, valuesを新たに設けます。

- rule: test-rule
  ::
  exceptions:
    - name: exclusion_2
      fields: 
        - proc.cmdline
      comps: 
        - contains
      values: 
        - [sh]
    - name: exclusion_3
      fields: 
        - fd.name
      comps: 
        - startswith
      values: 
        - [/bin]

これにより

proc.cmdline contains sh or fd.name startswith /bin 

を含むふるまいが検知対象外となります。

andの実装例 - 1つの例外の中で、2つ以上の条件を指定したい場合

exceptionsで特に難しいのがandの表現です。
結論から言うと「同じindexにあるfields, comps, valuesで式を作り、各indexで作られる式をAndで結ぶ」なのですが、文字で書くとわかりづらいため、冒頭のWrite below binary dirの内容を少し簡単にし、図を交えて説明します。
※indexとは、配列の位置(0番目、1番目...)を指します。

yaml
- rule: Write below binary dir
  ...
  exceptions:
    - name: known_bin_writers
      fields: [proc.name, fd.name]
      comps: [=, contains]
values:
	   - [nginx, /usr/bin/nginx]

冒頭でも説明したとおり、このexceptionsは

proc.name = nginx and fd.name contains /usr/bin/nginx 

を含むふるまいを検知対象外とします。

記述内容を結論に当てはめてみましょう。

1. 「同じindexにあるfields, comps, valuesで式を作り」は、次の表の「式」部分が完成系です。

20250306-2.png

exceptionsは <fields> <comps> <values> の順に配置すると式が成り立つため、これに従うと index 0の群では 「proc.name = nginx」、index 1の群では 「fd.name contains /usr/bin/nginx」という式が出来上がります。

2. 「各indexで作られる式をandで結ぶ」なので、index 0群と index 1群の式をandで結ぶと

proc.name = nginx and fd.name contains /usr/bin/nginx 

となります。

理解度クイズ

Exceptionsの理解を深めていただけたでしょうか。
最後に理解度を確認する問題を出します。よく考えてみてくださいね。

問題

1. proc.exepath が /bin/sh または /bin/bash のふるまいを検知対象外とするexceptionsを作成してください。
2. 次のexceptionsはどのようなふるまいを検知対象外にしますか。

  exceptions:
    - name: q2_question
      fields: [proc.name, evt.res]
      comps: [in, !=]
      values:
        - [[sh, bash], 0]

回答

1. 回答例2つ:

  exceptions:
    - name: q1_answer
      fields: [proc.exepath]
      comps: [=]
      values:
        - [/bin/sh]
        - [/bin/bash]

---
  exceptions:
    - name: q1_answer
      fields: [proc.exepath]
      comps: [in]
      values:
        - [[/bin/sh, /bin/bash]]

2. proc.name in (sh, bash) and evt.res != 0 のふるまい

最後に

今回はExceptionsの解釈に焦点をあて解説しました。初めてFalcoに触れる方の学習の一助になれば幸いです。
Falcoはカスタマイズ性が非常に高いため、自分でカスタマイズできるようになると、今まであきらめていたセキュリティ要件を実現するなど、ワンランク上のSysdig活用術を身につけることができます。

今後もFalco Ruleに関する情報をご紹介できればと思います。

担当者紹介

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

SCSK技術者ブログ

Platform Engineering Kaigi 2025 参加レポート

Platform Engineering Kaigi 2025 参加レポート

検知から対応をシームレスに! Sysdigの新機能「Response Action」でインシデント対応を迅速化

検知から対応をシームレスに! Sysdigの新機能「Response Action」でインシデント対応を迅速化

【SCSK技術者によるブログ】生成AIでSysdigエージェントのアップグレードを効率化 〜Helm values.yamlの移行作業を自動化〜

【SCSK技術者によるブログ】生成AIでSysdigエージェントのアップグレードを効率化 〜Helm values.yamlの移行作業を自動化〜

【SCSK技術者によるブログ】Sysdigの「Search」機能を体験!生成AIでクエリの学習コスト無しに脆弱性調査

【SCSK技術者によるブログ】Sysdigの「Search」機能を体験!生成AIでクエリの学習コスト無しに脆弱性調査

【SCSK技術者によるブログ】ゼロトラスト文脈でのクラウドセキュリティ、そしてSysdig

【SCSK技術者によるブログ】ゼロトラスト文脈でのクラウドセキュリティ、そしてSysdig

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

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

【SCSK技術者によるブログ】生成AIで過検知対策を効率化!Sysdig Sageの実力検証

【SCSK技術者によるブログ】生成AIで過検知対策を効率化!Sysdig Sageの実力検証

【SCSK技術者によるブログ】なぜ今、Sysdigが選ばれるのか?動画で解説!クラウドネイティブセキュリティの最前線 - SCSKの日本語伴走サポートで安心導入

【SCSK技術者によるブログ】なぜ今、Sysdigが選ばれるのか?動画で解説!クラウドネイティブセキュリティの最前線 - SCSKの日本語伴走サポートで安心導入

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

【SCSK技術者によるブログ】Sysdigの防御機能Kill Processを試してみた

【SCSK技術者によるブログ】Sysdigの防御機能Kill Processを試してみた

ページトップへ