Sysdig Secureを導入してコンテナイメージのスキャンをしてみた

Sysdig Secureの導入〜コンテナイメージのスキャンまで
2022.10.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

お疲れさまです。とーちです。
Sysdig に入門してみました。今回は Sysdig Secure の初期導入と コンテナイメージをスキャンをするところまでやってみたいと思います。

この記事の対象者

  • Sysdig に入門してみたい方
  • Sysdig の概要を知りたい方

Sysdig Secure とは?

Sysdig Secure って何?という方もいらっしゃると思いますので、概要を説明していこうと思います。
Sysdig Secure は Sysdig 社のセキュリティ製品の一つで、AWS 等のクラウド上でコンテナを運用する際のセキュリティに関するアレコレを解決するものとなっています。
Sysdig 社のサイトを見ると製品は以下の3種類があるようです。

  • Sysdig Secure:コンテナ、Kubernetes、クラウド環境向けセキュリティ  ← 今回扱うのはコレ
  • Sysdig Monitor:Kubernetes と Prometheus のモニタリング
  • Sysdig Secure DevOps Platform:上記2製品を含むセキュリティ・モニタリングプラットフォーム

こちらが公式ページになりますので、詳細についてはこちらをご参照ください。

Sysdig Secure の機能

主な機能としては以下のものがあります。※Sysdig 公式ドキュメントより

  • パフォーマンス データとセキュリティ データの表示
  • ホストとイメージのスキャン、監査、およびランタイムの脆弱性管理機能
  • 分散環境のポスチャ管理
  • ランタイム検出
  • インシデント対応とフォレンジック

イメージのスキャンは機能がイメージしやすいかと思います。
ポスチャ管理には、例えば Sysdig Secure に紐付けた AWS アカウントに対して CIS ベンチマーク等のコンプライアンス標準に準拠しているかを自動でチェックする機能等が含まれています。
ランタイム検出はコンテナ、アプリケーション等のアクティビティに基づくリアルタイムの脅威検出機能となっており、個人的にはこの機能が目玉かなと思っています。
インシデント対応とフォレンジックについては、ポリシー違反やインシデントが発生した際にシステムキャプチャを作成して調査したり、ポリシー違反に対してコンテナの kill 等のアクションを定義して自動で対応といったことが出来るようです。

試してみた

ここからは実際に無料トライアルを使って、どんなことが出来るのかを具体的に確認していこうと思います。 本記事では Sysdig Secure を導入して、イメージスキャンするところまでを試してみたいと思います。

無料トライアル開始

無料トライアルは以下のページの「無料お試し」をクリックすると始めることが出来ます。

「無料お試し」をクリックすると以下のような記入欄が表示されるので、情報を入力していきます。
SaaS リージョンの箇所は どのリージョンにある Sysdig 管理画面を使うかという選択のようです。今回は「aws-ap-sydney」にしてみました。

Sysdig Secure トライアル申し込みページより

情報を入力して送信ボタンを押すと、指定したメールアドレス宛に以下のようなメールが届きます。

「START YOUR TRIAL」
をクリックすると以下のような画面が開くので、Sysdig 管理画面にログインするためのパスワードを設定します。

ログイン

管理画面は以下のようになってます。

AWS アカウントとの接続

まずは AWS アカウントを接続します。 画面左の「Integrations」から「Cloud Accounts」を選択します

画面右のほうにある「Connect Account」→「AWS」と選択すると以下の画面が出るので 接続したい AWS アカウント ID と作成する IAM ロール名を入力します。IAM ロールは既存のものと重複しない名前にする必要があります。

この後の Cloudformation の画面で使うので、Sysdig Secure API Token の値をコピーしておきましょう。
「Deploy on ECS compute workload」と「Deploy on AppRunner compute workload」のどちらかを選べるようになっていますが、好きなほうを選んで OK です。Sysdig 連携で必要となる AWS リソースを ECS で作るか AppRunner で作るかの選択です。AppRunner のほうは作成できるリージョンに制限がありますが、「リソースをあまり必要としない」とマニュアルに記載があるので、今回は AppRunner で作成してみました。
入力できたら「Launch Stack」ボタンを押します。(事前に対象の AWS アカウントにログインしておく必要があります)

Cloudformation の作成画面が表示されるので、先程コピーした Sysdig Secure API Token の値を入力します。

「Modules to Deploy」で ECR スキャンと Fargate イメージスキャン機能のデプロイをするかどうか選択できます。色々試したいのでとりあえず「Yes」にしておきます。
またその下の「CloudTrail SNS Topic」には、CloudTrail で「SNS 通知の配信先」として設定した SNS トピックの ARN を指定します。

Cloudformation が実行完了してしばらくすると Sysdig 管理画面に接続した AWS アカウントの情報が表示されるようになります。例えば、「Posture」を選ぶと接続した AWS アカウントの CIS ベンチマーク(CIS AWS Foundations Benchmark)の準拠状況を確認出来たりします。

コンテナイメージのスキャンについて

続いてコンテナイメージのスキャンを実行していこうと思いますが、その前に Sysdig Secure のスキャンについてご説明しようと思います。

スキャンエンジン

2022/10/25 現在、Sysdig Secure には以下2つのスキャンエンジンがあります。

  • Legacy Scanner engine
  • Vulnerability Management engine

Legacy Scanner engine はその名の通り、以前のバージョンのスキャンエンジンです。
公式マニュアルによると 2022/4/19 以降に Sysdig Secure を使い始めたユーザは Sysdig の担当者に連絡して設定を有効化してもらわないと使えないようです。
実際、私の Sysdig 管理画面では使えないようになっていました。

そのためここでは Vulnerability Management engine について説明します。

Vulnerability Management engine

Vulnerability Management engine のスキャンのタイミングは大きく分けて2つあります。

Vulnerability Management | Sysdig Documentation より

上記の図にある通り、パイプライン上でのスキャンとランタイム(コンテナ実行中)のスキャンの2つを実行タイミングとしています。
マニュアルによると、コンテナイメージがビルドされたときには脆弱性を含んでいなくとも、時間が経ち、新たな脆弱性が発見されるなどして外部の状況が変わってくれば、同じコンテナイメージでも新たに脆弱性が発生するため、各フェーズでスキャンをしているとのことです。
なお、2022/10/25 時点では Vulnerability Management engine では、ホストとレジストリのスキャンはサポートされていないようです。Legacy Scanner engine では ECR のスキャン等にも対応しているので、今後サポートされることを期待しましょう。

パイプラインでのスキャン

パイプラインという名前になっていますが、Sysdig から提供される実態としては "sysdig-cli-scanner" という CLI ツールになっています。そのため、CI/CD パイプラインに組み込む際には"sysdig-cli-scanner" のダウンロードと実行というステップをパイプラインに含める必要があります。

sysdig-cli-scanner を使ってみる

mac 用の"sysdig-cli-scanner"も提供されていたので、今回はこれを手元の端末に入れて、docker イメージのスキャンをしてみようと思います。
"sysdig-cli-scanner"実行時に引数として、API トークンと API URL を指定する必要がありますが、API トークンに関しては、 Sysdig 管理画面の
「Settings」→「User Profile」→「Sysdig Secure API」
で確認できますし、API URL に関してはこちらの URLの Sysdig Secure の Endpoint の値を入れれば OK です。

# ダウンロード
$ curl -LO "https://download.sysdig.com/scanning/bin/sysdig-cli-scanner/$(curl -L -s https://download.sysdig.com/scanning/sysdig-cli-scanner/latest_version.txt)/darwin/arm64/sysdig-cli-scanner"
# 実行権限付与
$ chmod +x ./sysdig-cli-scanner
# docker イメージの pull
$ docker pull httpd
# docker イメージのスキャン
$ SECURE_API_TOKEN=<Sysdig 管理画面から確認できる API トークン> sysdig-cli-scanner --apiurl <Sysdig Secure エンドポイント URL> httpd:latest -o ./test.txt
2022-10-25T23:44:50+09:00 Starting analysis with Sysdig scanner version 1.2.10-rc
2022-10-25T23:44:50+09:00 Retrieving vulnerabilities DB...
2022-10-25T23:44:50+09:00 Done, using cached DB
2022-10-25T23:44:50+09:00 Loading vulnerabilities DB...
2022-10-25T23:44:50+09:00 Done
2022-10-25T23:44:51+09:00 Retrieving image...
2022-10-25T23:44:53+09:00 Done
2022-10-25T23:44:53+09:00 Scan started...
2022-10-25T23:44:54+09:00 Uploading result to backend...
2022-10-25T23:44:54+09:00 Done
2022-10-25T23:44:54+09:00 Total execution time 3.909504667s

Type: dockerImage
ImageID: sha256:3b92488c71376c7152809142454b848d10974c3ad15ed71bf95c18b8cc932a6c
Digest:
BaseOS: debian 11.5
PullString: httpd:latest

83 vulnerabilities found
3 Critical (0 fixable)
6 High (0 fixable)
4 Medium (0 fixable)
5 Low (0 fixable)
65 Negligible (0 fixable)

                  POLICIES EVALUATION
    Policy: Sysdig Best Practices FAILED (5 failures)

Policies evaluation FAILED at 2022-10-25T23:44:54+09:00
Full image results here: https://app.au1.sysdig.com/****
Execution logs written to: /****/test.txt

httpd の latest のイメージでスキャンしてみた結果です。 結果は FAILED になりました。sysdig-cli-scanner のリターンコードの値は1になっていたので、CI/CD パイプラインに組み込む際はリターンコードでも次のステップに進むかどうかを判断できそうです。

個人的に良いなと思ったのは、デフォルトでポリシーが用意されていてそのポリシーに沿って、コンテナイメージが問題ないかどうかを判断してくれるところです。
デフォルトのポリシーには例えば
「脆弱性の影響度が Critical 以上でかつ修正済パッケージがある(けど適用されてない)」や
「脆弱性の影響度が High 以上で CVSS スコア項目の Attack Vector が Network のもの」
等がある場合に NG と判断するようなルールがあります。
脆弱性たくさん出てきたけど結局どれが対応しないといけないものなんだろう・・・と思った経験があったので、このように指針の一例を提示してくれるのはありがたいと思いました。

まとめ

Sysdig Secure を使ってコンテナイメージのスキャンを試してみました。まだまだ使いこなしていない機能がたくさんあるので順次試してみて、またブログ等で共有したいと思います。

以上、とーちでした。