
Sysdig脆弱性ポリシーを設計してみた
お疲れさまです。とーちです。
前回の記事ではSysdigの脅威検知ポリシーをTerraformで設定する方法について紹介しました。今回はSysdigのもう一つの重要な機能である「脆弱性ポリシー」について、その設計方法と実装のポイントを詳しく解説していきます。
前提知識
まずは脆弱性ポリシーについて理解を深めるために、基本的な知識を整理しておきましょう。
脆弱性ポリシーとは、Sysdigでコンテナイメージやホストの脆弱性をスキャンした際に、そのスキャン結果が決められた基準を満たしているかどうかを判断するための一連のルールです。これを適切に設定することで、以下のようなメリットが得られます:
- コンテナイメージを使用する際の組織横断のルールを敷き、ガバナンスを強化できる
- 脆弱性の多いイメージが本番環境にデプロイされることを防止できる
- セキュリティ基準を明確に定義し、チーム全体で共有できる
特にGitHub Actionsなどのツールと組み合わせることで、CI/CDパイプラインで作成したコンテナイメージに対して脆弱性スキャンを行い、ポリシーに違反していればパイプライン処理をそこで中止するといった運用が可能になります。
脆弱性スキャンをするタイミング
Sysdigでは大きく分けて以下の3つのタイミングで脆弱性スキャンを実行できます:
-
パイプライン:Sysdig CLIスキャナーというバイナリファイルを使用して、CI/CDパイプラインの中でコンテナイメージをスキャンします。これによりビルド段階で脆弱性をチェックできます。
-
レジストリ:ECRなどのコンテナレジストリに格納されたコンテナイメージの脆弱性スキャンを行います。実行するためにはKubernetesクラスターが必要です。
-
ランタイム:Kubernetes上で稼働中のコンテナの脆弱性スキャンを行うことができます。詳細は公式ドキュメントを参照してください。
これらのスキャンタイミングを適切に組み合わせることで、コンテナライフサイクル全体を通じたセキュリティを確保できます。
設計方針
脆弱性ポリシーを設計する際には、いくつかの重要な設定項目を検討する必要があります。
脆弱性ポリシーの主要設定項目
脆弱性ポリシーには以下のような設定項目があります。詳細はSysdigの公式ドキュメントで確認できます。
- Rules:どういった基準を満たす必要があるかを定義したルール集である「Rule Bundles」を指定します。
- Scopes:この脆弱性ポリシーを適用する範囲を決めます。Pipeline、Registry、Runtimeの3つから選択し、例えばPipelineなら特定のイメージ(例:
quay.io/alpine/alpine
)のみをポリシーの対象とするといったことが可能です。 - Notifications:ポリシーに違反している時に、指定した通知チャネル(メールやSlackなど)にアラートを送るための設定です。
Rule Bundlesの設定
Rule Bundlesには、実際にどのような脆弱性があったらポリシー違反とするかを設定します。このルールがかなり賢く設定できるようになっており、個人的にはこれだけでもSysdigを採用する価値があると感じています。
具体的には以下のようなルールを設定することができ、「本当に対応する必要のある脆弱性」を効率的に洗い出せるようになっています
- 脆弱性のSeverity(脅威度)が指定した基準以上だった場合
- 悪用の手口が公開されている場合
- ネットワーク経由で攻撃可能な場合
- 修正パッチが公開されているか否か
これらの基準をAND条件で組み合わせたものが一つのルールとなり、複数のルールを束ねたものがRule Bundlesとなっています。Rule Bundlesは複数のルールの集合なわけですが、実際に脆弱性スキャンされる際には一つでもルールに違反があれば、ポリシー違反となる形です。
なお、SysdigはデフォルトでいくつかのRule Bundlesを用意しています。これらを参考にするのも良いと思います。
脆弱性ポリシーの設計
脅威検知のときと同様に全体的な方針をまず考えてみます。また今回はスキャンタイミングはパイプラインに絞って検討します。
前回の脅威検知ポリシー設計と同様に、全体に適用する基本ポリシーとチームで個別の要件が必要な場合に追加するポリシーの2層で設定、というのは良いと思うのですが、基本ポリシーについては少し考慮すべき点があります
実際にPoC的にコンテナイメージをスキャンしてもらってわかったのですが、コンテナイメージは人によって使うイメージが千差万別であるため、基本ポリシーはかなり緩めに設定しないと運用が回らなさそうだと感じました。
そこで基本ポリシーのRule Bundlesは以下のような設定としました。もちろんシステムに応じてどのようなルールが最適かは変わりますので、実際に設計する際にはシステム特性なども鑑みて各々のシステムにあった設計を行うようにしてください
基本ポリシー(全体適用)の例
- 脆弱性のSeverity(脅威度)がCritical以上
- 修正パッチが公開されている
- 悪用の手口が公開されている
Terraformで実装、、、といきたいところだったが
さて、ではTerraformで脆弱性ポリシーを実装してみましょうといきたいところでしたが、Sysdig Providerのドキュメントを見る限りではレガシースキャンポリシーしかサポートされていないようでした。脆弱性ポリシーのサポートが待たれますね。
以上、とーちでした。