Snykで実現する360度のアプリケーションセキュリティ
Soumen Mukherjee
2024年4月24日
0 分で読めますアプリケーション開発は複数の段階から成るプロセスです。アプリはそれぞれ異なる重点領域を持つさまざまな段階を経て開発されます。一方、アプリケーションセキュリティ(AppSec)は、そのすべての段階で常に欠かせません。
たとえば、開発者がコードを書く際には、そのコードが安全であることが求められます。同様に、各段階で扱われる成果物や、最終成果物として生成されるものも、すべて安全でなければなりません。
このような状況で企業にとって悪夢となるのは、各開発段階のセキュリティ対策として個別の機能を担う、多種多様なツールやプラットフォームへの対応です。複数の異なるツールは、コストがかさむだけでなく、ITチームによる資産の管理やガバナンスも困難にします。また、ツールが増えるとビルドパイプラインでのインテグレーションも増え、ビルドプロセスが遅くなったり、工程が増えたりします。開発者も、複数のウィンドウを行き来し、ツールごとに異なる習得方法やアクセス、コラボレーションの課題に直面するため、この状況を嫌います。
しかし、これらの問題を解決する方法があります。セキュアな開発ライフサイクル全体を通して、必要な各段階のゲート制御をすべて提供するプラットフォームがあれば、上記の問題を解消できます。そこで今回は、Snykプラットフォームのさまざまな機能と、360度のアプリケーションセキュリティを実現する方法を簡単に見ていきましょう。

コーディング
セキュリティアーキテクトとして、セキュアコーディングを実現する開発ツールチェーンを構築するには、まず開発者にセキュアコーディングの標準を理解してもらう必要があります。その後も、時間をかけて繰り返し人が介入しながら進めることになります。Snyk Codeを使えば、開発者がIDE向けのSnyk拡張機能を利用して、コーディング中のエラーや見落としによって取り込んでしまう可能性のある脆弱性について、直接情報を得られます。これにより、セキュリティ対策を開発の早い段階に組み込めます。Snyk Extensionは、現在広く使われている主要なIDEすべてに対応しています。
IDEでSnyk Extensionを使い始める方法については、Snyk Extensionのドキュメントをご覧ください。
コードに対する別のゲート制御として、コードリポジトリをSnykと直接連携するよう設定することもできます。Snykは定期的にコードリポジトリをスキャンし、前回のスキャン以降に加えられた変更を確認して、見つかった脆弱なコードを特定します。Snykは、主要なオンプレミスおよびクラウドのコードリポジトリソリューションすべてとのインテグレーションに対応しています。
すぐに使い始める方法については、Snyk Codeのドキュメントをご覧ください。
脆弱性リスク管理
現在のソフトウェアの多くは、利用する多数のサードパーティ製フレームワークを基盤としています。このモデルにはビジネス上の利点があります。再利用可能なコードを活用すれば、アプリケーション開発を迅速化し、機能を追加できます。しかし、脆弱性や悪意のあるコードが含まれている可能性があり、ユーザーに深刻なセキュリティインシデントをもたらす恐れもあるため、諸刃の剣でもあります。セキュリティアーキテクトとしてシフトレフト戦略に沿った技術的対策を導入する場合、Snykなら、IDE向けのSnyk Extensionを使って開発中にオープンソースパッケージの脆弱性をスキャンし、開発者を支援する包括的なツールセットを利用できます。
また、サードパーティ製パッケージの脆弱性は、将来いつ発生するかわかりません。Snykのコードリポジトリ連携を利用すれば、AppSecチームは新たな脆弱性の深刻度を評価するために必要な情報を得られます。さらに、該当する開発チームが修正してメインブランチにマージできるよう、すぐにプルリクエスト(PR)を作成できます。
Snykによる修正PRやマージリクエストの仕組みについては、Snykのドキュメントをご覧ください。
コンテナの脆弱性管理
現在、コンテナを活用した開発が標準となっています。コンテナはクラウド環境だけに限らず、企業のオンプレミス環境でのデプロイにも欠かせません。また、組み込み分野でも広く利用されています。アプライアンスやデバイスでは、コンテナをホストするために必要最小限のフットプリントで、カスタマイズされたLinuxをOSとして実行し、閉鎖された安全な環境を実現しています。
こうした利点がある一方で、アプリケーションで使われている不適切なコードやサードパーティ製パッケージ、あるいはコンテナのベースイメージに含まれるサードパーティ製およびネイティブのパッケージに起因する、コンテナの脆弱性の悪用を防ぐことはできません。
コンテナイメージの脆弱性は一般に、安全でないライブラリや、コンテナイメージに取り込まれたその他の依存関係に起因します。また、ソフトウェアサプライチェーン攻撃や開発環境への侵害によって挿入された悪意のあるコードが、イメージに含まれていることもあります。
こうした問題の多くは、Snyk Containerを利用することで、開発サイクルの早い段階で特定できます。Snykはさまざまなコンテナリポジトリと連携させたり、ビルドパイプラインを通じてコンテナを接続したりできます。また、IDE向けSnyk Extensionの機能を活用して、適切に記述されていないDockerfileや、ベース成果物として悪意のあるイメージを使用したことによる問題も特定できます。
Snyk Containerの機能を詳しく知るには、Snykのドキュメントをご覧ください。
Infrastructure as Codeのセキュリティ
DevOpsの普及に伴い、Infrastructure as Codeが注目されるようになりました。しかし、調査によると、クラウドベースのアプリケーションにおけるセキュリティ脆弱性の多くは、セキュリティ設定の構成ミスに起因しています。
Infrastructure as Code(IaC)セキュリティとは、ソフトウェア開発ライフサイクル全体を通じて、一貫したクラウドセキュリティ対策を組み込むクラウドセキュリティのアプローチです。これにより、構成ミスを早期に検出し、実行時の脆弱性を防止できます。IaCセキュリティは、コードリポジトリやCI/CDツール、または開発者のIDEで早期に適用できます。
IaCセキュリティでは、デプロイ済みのクラウドリソースではなく、IaC内のクラウド構成の問題に対処します。具体的には、次のことを行います。
構成ミスの特定:IaCをスキャンし、設定が不足している、または誤っている変数を特定します。
セキュリティポリシーの定義:IaCを使ってセキュリティポリシーを定義し、インフラストラクチャに変更が加えられた際にそのポリシーを適用できます。
コードリポジトリやビルド自動化ソリューションとのインテグレーションにより、Snyk CLIとIDE向けSnyk Extensionは、開発ライフサイクル全体でシフトレフトのセキュリティを適用するために必要なツールを提供します。
Snyk Infrastructure as Codeについて詳しくは、Snykのドキュメントをご覧ください。
デプロイ後の脆弱性リスク管理
アプリケーションセキュリティへの取り組みは、アプリケーションを安全にデプロイできた時点で終わりではありません。現代のソリューションが利用する多数のサードパーティ製パッケージやコンポーネントには、新たな脆弱性が次々に見つかります。そのため、インフラストラクチャ上のデプロイ済み資産を継続的に監視する必要があります。
現代のソリューションがデプロイされるエコシステムを理解することも重要です。Kubernetes(K8S)は、アプリケーションのデプロイ先として最も広く使われ、好まれている環境です。しかし、実行中のPodやクラスターをどのように監視して脆弱性を見つけ、環境への潜在的な脅威を特定できるよう、関係者に適切に警告するかが課題となります。さらに、複数のクラウドプロバイダーを利用していると、それぞれに固有の課題が加わります。
Snykプラットフォームは、主要なクラウドサーバープロバイダーすべてでKubernetesと連携し、実行中のワークロードをインポートしてスキャンできる独自の機能を提供します。これにより、ワークロードのセキュリティを損なう可能性がある、関連イメージや構成の脆弱性を特定できます。ワークロードのインポート後も、Snykは監視を継続し、新しいイメージのデプロイやワークロード構成の変更に伴うセキュリティ上の問題を特定します。該当するクラスターにインストールすると、Snyk Controllerが稼働中のワークロードの脆弱性の状況をほぼリアルタイムで可視化します。
SnykのKubernetes連携機能について詳しくは、Snykのドキュメントをご覧ください。



