AWS JAPAN APN ブログ

Snyk を利用した AWS における脆弱性管理のベストプラクティス

この記事は、アマゾン ウェブ サービス ジャパン合同会社 パートナーソリューションアーキテクト 櫻谷と、Snyk株式会社 シニアソリューションエンジニア 伊藤仁智 氏による共著です。

近年、ソフトウェアの脆弱性を突く脅威はますます増加しており、安全にシステムを運用するために、統制の取れた継続的な脆弱性管理のプロセスを導入することが求められています。

例えば、Apache Log4j 2 の脆弱性 (Log4Shell: CVE-2021-44228) については皆さんも記憶に新しいのではないでしょうか。この CVE は、リモートから任意のコードが実行可能な非常に危険度の高い脆弱性であり、また多くのソフトウェアに広く導入されているライブラリで、影響を受けたお客様も数多くいたかと思います。これを機に、自社でも継続的な脆弱性管理の仕組みを導入しようと思われたお客様も多いのではないでしょうか。

システムの脆弱性を放置すると、以下のようなセキュリティインシデントが発生し、会社や社会に少なくない損害を与える可能性があります。

  • 仮想通貨のマイニング
  • データの削除および身代金の要求
  • 機微情報の窃取

また、自社が被害者になるだけでなく、他社への攻撃の踏み台に利用され、加害者にもなってしまうという点も見落としがちなリスクです。

では脆弱性管理とはどのように実現できるものでしょうか?これは、一度限りのセキュリティ診断にとどまらない継続的なプロセスです。本番リリース前に確認したから大丈夫、というものではありません。日々新たな攻撃方法や脆弱性が発見される可能性があり、それらに対して迅速な対応を行い続け、被害を最小限に抑えることが脆弱性管理の本質です。

この記事では、AWS 上で稼働するパートナーソリューションが、なるべく運用負荷をかけずに、ツールをうまく活用してセキュリティに関する専門知識を補って、スケーラブルな脆弱性管理の仕組みを導入できるようなガイダンスを提供します。

AWS が推奨するベストプラクティス

まず初めに、AWS では脆弱性管理をどのように捉えているか、一つの例をご紹介します。自社のソリューションが AWS のベストプラクティスに沿って構築されているかをチェックするための仕組みとして、AWS Foundational Technical Review (AWS FTR) という AWS パートナー向け技術検証があります。こちらには、セキュリティ、可用性、運用といった様々な観点からのベストプラクティスが盛り込まれているのですが、脆弱性管理に関して以下のような要件が含まれています。

SECOPS-001 – Perform vulnerability management
Define a mechanism and frequency to scan and patch for vulnerabilities in your dependencies, and in your operating systems to help protect against new threats. Scan and patch your dependencies, and your operating systems on defined frequency. Software vulnerability management is essential to keeping your system secure from threat actors. Embedding vulnerability assessments early into your continuous integration/continuous delivery (CI/CD) pipeline allows you to prioritize remediation of any security vulnerabilities detected. The solution you need to achieve this varies according to the AWS services that you are consuming. To check for vulnerabilities in software running in Amazon EC2 instances, you can add Amazon Inspector to your pipeline to cause your build to fail if Inspector detects vulnerabilities. You can also use open source products such as OWASP Dependency-CheckSnyk, OpenVAS, package managers and AWS Partner tools for vulnerability management.

要約すると、「脅威からシステムを保護するために依存関係および OS の脆弱性を定期的にスキャンしてパッチを適用する仕組みを導入すること」といったような内容になります。また、CI/CD パイプラインに組み込んで自動化することも推奨しています。

対応範囲に関してですが、AWS では責任共有モデルという考え方を取り入れています。AWS LambdaAmazon RDS などのマネージサービスであれば、プラットフォームに対するパッチ適用は AWS が責任を持って行うため、お客様の方で作業が必要なことはありません。しかし、Amazon EC2 のようなサービスをご利用いただいている場合や、お客様が自身で作成するアプリケーションのコンテナイメージ等に関しては、お客様が責任を持って管理していただく領域になります。どのサービスを利用しているか、どんなアーキテクチャかによって対応方法は変わるので、自社の環境に適したメカニズムを導入しましょう。

脆弱性管理のプロセス

脆弱性管理は、大きく次の 3 つのアクションから構成されるプロセスです。

1. 情報収集

どんな脆弱性が発見されたか、自社のシステムではどこに影響が出るかを確認します。被害を最小限に抑えるためには、いかに早くリスクを発見できるかが鍵となります。

2. リスク評価

発見された脆弱性によって、自社のシステムにどんなリスクがもたらされるかを評価します。ただちに攻撃が可能かどうかは、脆弱性の種類やシステムが置かれている環境にも依存するので、脆弱性が見つかったからといって焦らず、まずは落ち着いて状況を精査します。

3. 対応

発見された脆弱性ついてどのような対応を行うかを決めます。パッチを適用するのであればメンテナンスのスケジュールなど準備を行なったり、暫定対応としてファイアウォールの設定やシステムを停止する場合もあるでしょう。また、小さいリスクであれば許容して何も行わないという選択もあります。複数の脆弱性が発見され、すぐに対応しきれない場合は、リスク度に応じて優先順位付けを行います。

品質を維持しながらこれらのプロセスを継続的に行い続けるには、多くの工数と高い技術力が必要です。JPCERT などが公開する情報を日々チェックし、システムでの影響範囲を調査、リスクを適切に評価しパッチ適用の準備を行う、これらの作業を可能な限り迅速に行うのは容易ではありません。また、管理対象のシステムや依存するソフトウェアが多くなればなるほど、人手による運用はスケールしなくなるでしょう。何らかのツールを導入して、作業を自動化する必要があります。

Snyk を活用するメリット

Snyk は AWS のパートナーソリューションとして、デベロッパーファーストのセキュリティプラットフォームを提供します 。前述の AWS FTR に記載されているとおり、Snyk を利用して脆弱性管理が可能です。

Snyk はソースコードの静的解析 (Static Application Security Testing、以下 SAST)、オープンソースソフトウェア (OSS) の脆弱性やライセンスのチェック、コンテナセキュリティや IaC (Infrastructure as Code) の設定ミスを、すべて一つのプラットフォーム上で提供します。Snyk プラットフォームは SaaS で提供しており、導入に際しては新たなインフラの準備は必要ありません。

Snyk Dashboard

レポート (依存パッケージ一覧)

Snyk プラットフォームでは、以下の製品群を提供しています。

  • Snyk Code: ソースコードに含まれる脆弱性をスキャンします。コードの脆弱性だけでなく、コードの修正方法のサンプルも合わせて提供します。Snyk Code はスキャンにかかる時間が短く、IDE や Source Code Management (SCM) システムと連携して使用できるため、開発者にとって使いやすいツールです。Snyk Code は何百万ものオープンソースのリポジトリのコミットから学習する AI エンジンを利用し、Snyk の Security Intelligence データベースと組み合わせることで、継続的に成長する膨大なコードセキュリティ知識ベースを構築します。その知識ベースにより、誤検知を低減し、かつ、修正アドバイスも提供します。
  • Snyk Open Source: パッケージマネージャーにより使用されるオープンソースパッケージのリストを取得し、脆弱性の含まれるパッケージを検知します。モダンなアプリケーションではオープンソースパッケージが多用されています。オープンソースのパッケージの多くは他のパッケージも参照しており (推移的依存)、これらの推移的依存パッケージからも数多くの脆弱性が混入します。Snyk Open Source は推移的依存も含めたパッケージの脆弱性やライセンス違反を発見し対処することができます。また、Snyk Open Source は脆弱性への実用的な修正アドバイスを提供し、プルリクエストを自動作成する修正ワークフローをサポートします。また定期的な自動スキャン (デフォルトでは日次) を行い、新たな脆弱性が検知された場合に速やかに通知を行います。
  • Snyk Container: コンテナイメージに含まれる脆弱性をスキャンします。Snyk Container はコンテナイメージのファイルシステムのスキャンにより、ベースイメージや、パッケージマネージャのマニフェストファイル、それ以外でインストールされたソフトウェアの脆弱性も検知します。また、他のベースイメージとの比較もレポートすることで、より安全なコンテナイメージの作成をサポートします。さらに、定期的な自動スキャン (デフォルトでは日次) を行い、新たな脆弱性が検知された場合に速やかに通知を行います。
  • Snyk IaC: IaC に含まれる設定ミスを、クラウドプロバイダのベストプラクティスや CIS ベンチマーク、また Snyk による脅威モデルの調査結果などをもとにしてスキャンします。それらに加え、Snyk IaC は Open Policy Agent を利用して、独自のカスタムルールを作ることも可能です。Snyk IaC を利用することで、実際にクラウドへのプロビジョニングをする前に IaC の設定ミスやセキュリティ上の問題の修正方法を確認することができます。

モダンなアプリケーションの世界においては開発者の役割が従来から大きく変わります。アプリケーションの開発だけでなく、OSS の利用、コンテナ化や IaC によるインフラプロビジョニングまで開発者に求められ、それぞれにセキュリティも求められてきます。Snyk は各々の領域に対するスキャンを、開発者にとって使いやすいツールとして提供します。

Snyk on AWS のサンプルアーキテクチャ

Snyk は各種ツールとの連携手段を用意しています。CI/CD パイプライン (例 AWS CodePipeline)、Git リポジトリ、コンテナレジストリ (例 Amazon ECR)、サーバーレス(例 AWS Lambda)、ローカル環境の IDE などと簡単に連携しスキャンを開始できます。Snyk の柔軟な連携手段を用い、セキュリティのベストプラクティスを既存の DevOps プロセスで実現することができます。

ユースケース:AWS CodePipeline との連携

CI/CD パイプラインの中に脆弱性スキャンのステップを組み込むことによって、システムの安全性の担保と迅速なソフトウェア開発ライフサイクルを両立する DevSecOps の基盤を構築することができます。AWS CodePipeline と Snyk の連携方法は以下の通りです。

1. パイプラインに脆弱性スキャンを行うためのステージ (Stage) を追加する

2. アクション (Action Provider) で Snyk を選択する
* Invoke タイプで呼び出し可能なアクションとして AWS CodePipeline と統合されています

3. Snyk に接続 (Connect to Snyk) を選択すると、別タブで Snyk のログイン画面を開く
*これは、AWS と Snyk を接続するための OAuth フローです


4. スキャンに関するオプション設定を行い、統合は完了です

この他にも Snyk は AWS の様々なサービスと連携することができます。

  • Snyk Container により、プライベートな AWS ECR リポジトリで管理されたコンテナイメージをスキャンする
  • Snyk Container と Amazon EKS を連携し、デプロイされたコンテナイメージのスキャンを行う
  • Snyk IaC により様々な AWS のサービスをプロビジョニングする前にセキュリティ上の問題や設定ミスを検知する
    • 例:Amazon S3 バケットの ACL 設定、AWS IAM ポリシーの設定、Amazon VPC のセキュリティグループの設定など
  • Snyk IaC により EKS のマニフェストファイルに含まれる脆弱性を検出する

Snyk は SaaS で提供していますが、Snyk Broker というツールを使うことでプライベート環境にある Source Code Management (SCM) システムやコンテナレジストリと連携することが可能です。

まとめ

ソフトウェア開発ライフサイクル (SDLC) において、コードや OSS だけでなく、パッケージ管理やビルドプロセス、そしてクラウドインフラなど様々なソフトウェアサプライチェーンの脆弱性への対応が求められています。Snyk は、全てのワークフローのプロセスにセキュリティチェックを組み込み、シフトレフトを実現するためのソリューションを提供します。Snyk による脆弱性の検知・修正・予防・監視・管理を行うことで、モダンなアプリケーションセキュリティに求められる DevSecOps の成功をお手伝いします。

Snyk の詳細、お問い合わせはこちらです。

以下のリソースもあわせてご覧ください。