【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を見やすくしたものを画像で示します。(これは説明用に整形したため、実際には登録できない場合があります。)
矢印に沿って読むと 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で式を作り」は、次の表の「式」部分が完成系です。
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に関する情報をご紹介できればと思います。
担当者紹介
- 担当者名
- 渡邊
- コメント
- コード好き。アニメやドラマにターミナルの画面が出てくると、その内容がどのぐらい正確か必ずチェックします。
- 保有資格
- Certified Kubernetes Administrator
Certified Kubernetes Application Developer
SCSK技術者ブログ
Sysdig運用の基本!トラブルシューティングのポイントを解説
クラウドにおけるサーバーレスワークロードの保護:Sysdig Secureによるアプローチ
Platform Engineering Kaigi 2025 参加レポート
検知から対応をシームレスに! Sysdigの新機能「Response Action」でインシデント対応を迅速化
【SCSK技術者によるブログ】生成AIでSysdigエージェントのアップグレードを効率化 〜Helm values.yamlの移行作業を自動化〜
【SCSK技術者によるブログ】Sysdigの「Search」機能を体験!生成AIでクエリの学習コスト無しに脆弱性調査
【SCSK技術者によるブログ】ゼロトラスト文脈でのクラウドセキュリティ、そしてSysdig
【SCSK技術者によるブログ】Sysdigと組み合わせて効果的なソリューションのご紹介 ~ネットワークポリシー編~
【SCSK技術者によるブログ】生成AIで過検知対策を効率化!Sysdig Sageの実力検証
【SCSK技術者によるブログ】なぜ今、Sysdigが選ばれるのか?動画で解説!クラウドネイティブセキュリティの最前線 - SCSKの日本語伴走サポートで安心導入
【SCSK技術者によるブログ】Serverless AgentがAzure Container Appsに対応しました
【SCSK技術者によるブログ】システムコール分析における生成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機能を試してみた