In this article
コードスキャン入門
コードスキャンの仕組みや活用するツール、ベストプラクティスを解説します。
コードスキャンは、アプリケーション開発の基盤となる重要な要素のひとつです。開発チームがソフトウェア開発ライフサイクル(SDLC)の早い段階でコードをスキャンすれば、本番環境に持ち込まれるリスクや欠陥、バグを大幅に減らせます。SDLCの早い段階でコードの問題を修正する方が、本番環境へのリリース直前にセキュリティテストや品質テストをすべて実施するよりも、コストと時間を大幅に抑えられます。
この記事では、コードスキャンの基本について、次の内容を解説します。
コードスキャンとは?
コードスキャンとは、ソフトウェア開発ライフサイクル(SDLC)全体を通じてコードを分析する手法です。開発者は一般に、開発パイプライン全体で脆弱性やエラーを特定するためにコードスキャンを活用します。チームはさまざまなスキャン方法を使い、アプリケーションの異なる部分に潜む問題を見つけます。こうした手法は定期的に実行するほか、開発者が特定の作業を行ったときに自動で開始されるよう設定することもよくあります。
セキュリティ上の問題やエラーを見つけるためにコードをスキャンすると、次のようなメリットが得られます。
アプリケーションのエラーや脆弱性を削減。SDLCの早い段階で問題を発見することで、エラーを最小限に抑えた状態でアプリケーションを本番環境にリリースできます。
後工程で開発者にかかる作業を軽減。コードスキャンを利用すると、新しいコードをコミットするたびに開発チームが問題を修正できます。数週間後、数か月後ではなく、開発中に問題を解決する方が、はるかに効率的で費用対効果にも優れています。
組織全体のセキュリティ態勢を強化。コードの脆弱性は、組織全体のセキュリティ態勢に隙を生む可能性があります。ひとつのアプリケーションにセキュリティ上の問題があれば、接続するネットワークやデータベースもリスクにさらされるおそれがあります。脆弱性が発生した時点で修正することで、チームは全体的なセキュリティ態勢を強化し、シークレット管理など、コーディング以外の領域でもセキュリティのベストプラクティスを推進できます。
コードスキャンとコードセキュリティ
開発のスピードが速い現代において、セキュリティコードスキャンはアプリケーションを保護するうえで欠かせません。開発プロセスの早い段階で脆弱性を発見することで、本番環境に持ち込まれるセキュリティ上の問題を最小限に抑えられます。SDLCの終盤まで問題の修正を待つと、チームは難しい選択を迫られます。リスクを残したまま期限どおりにリリースするか、それともリスクの軽減に取り組んでリリースを遅らせるか。
SDLC全体を通じてコードをスキャンすれば、セキュリティのベストプラクティスを損なわずに、DevOpsのスピードを維持できます。
セキュリティコードスキャナーは、自社開発のソースコード、サードパーティー製コンポーネント、クラウドインフラストラクチャに含まれるさまざまな種類のセキュリティ脆弱性を検出できます。多くの場合、OWASP Top 10に挙げられるSQLインジェクション、安全でない設計、セキュリティの設定ミス、脆弱または古いコンポーネント、ソフトウェアやデータの完全性に関する不備などを検出します。
コードをスキャンして脆弱性を見つける方法
チームは、さまざまな開発環境に潜む脆弱性を見つけるために、セキュリティコードスキャン手法を活用する必要があります。特に一般的な手法は次の2つです。
静的アプリケーションセキュリティテスト(SAST)。このスキャン手法では、自社開発コードをリアルタイムでチェックします。多くの場合、チームはSnyk Codeなどのツールを使ってSASTコードチェックを設定し、開発者がプルリクエストを作成すると自動的に実行されるようにします。
インタラクティブアプリケーションセキュリティテスト(IAST)。IASTは、QA・テストの段階で、アプリケーションの機能を「内部から」検査します。自動テストや人によるテストでアプリケーションが操作されている間、その動作を監視し、操作によって生じたセキュリティ上の問題を検出します。
コードスキャンツールを検討する際は、次の機能に注目しましょう。
柔軟に設定できる構成オプション
実行に移せる修正案
コンプライアンス要件への対応に役立つ充実したレポート機能
信頼できる情報源に基づく最新のセキュリティインテリジェンス
CI/CDパイプラインソリューションなど、既存のツールとのインテグレーション
プログラミング言語別のツールをお探しの場合は、Snykが紹介するJavaおよびPython向けの主要なスキャンツールをご覧ください。Snykは、Java、JavaScript、Pythonをはじめ、主要なプログラミング言語すべてに対応したコードスキャンを提供しています。
コードスキャンのベストプラクティス
コードスキャンを成功させるには、セキュリティチームと開発チームによる戦略的な計画が欠かせません。次のベストプラクティスを参考に、コードスキャンを始めましょう。
1. コードスキャンを定期的に実施する。コードスキャンは一定の頻度で実施しましょう。一定の日数ごとにスキャンする、開発者がコーディング中にいつでもスキャンできるようにする、といった方法があります。
2. CI/CDパイプラインにコードスキャンを組み込む。既存のCI/CDプラクティスにセキュリティコードスキャンを組み込むと効果的です。たとえば、継続的インテグレーション中にユニットテストと並行してSASTスキャンを実行するチームもあります。
3. 開発者にセキュアコーディングのプラクティスを習得してもらう。安全なコーディング方法を学ぶことで、開発チームは脆弱性を未然に防げます。コーディングミスが起きたらすぐに開発者に知らせ、今後のセキュアコーディングに役立ててもらいましょう。
4. コードスキャンと手動のコードレビューを併用する。チームは自動コードスキャンと手動コードレビューを組み合わせて活用しましょう。手動のコードレビューで目に見えるエラーを先に見つけてから自動スキャンを実行することで、コードスキャナーでは検出できない問題を発見できる可能性があります。
5. コードスキャンで検出した問題に対処し、優先順位を付ける。アプリケーションにコードの問題があると把握するだけでは十分ではありません。次に、チームは問題のトリアージと修正の計画を立てる必要があります。具体的な修正手順を提示できるコードスキャナーを使うと効果的です。
6. セキュリティコードスキャンを、ほかのアプリケーションセキュリティのベストプラクティスと併用する。チームは、ソフトウェア構成分析(SCA)も活用しましょう。SCAでは、オープンソースコードやコンテナのベースイメージなど、サードパーティー製コンポーネントに含まれる脆弱性やライセンス上の問題を検出・修正できます。また、動的アプリケーションセキュリティテスト(DAST)では、フロントエンドへの攻撃をシミュレートして、本番環境のアプリケーションをテストします。
Snykによるコードスキャン
Snykは、開発者ファーストのコードスキャン体験を提供します。SAST製品であるSnyk Codeは、開発者がIDEやCLIでコードを書く際に、修正案を提示できるよう設計されています。Snyk CodeはCI/CDパイプラインにも組み込めるため、プルリクエストが作成されるたびにスキャンできます。このプロアクティブなアプローチにより、チームメンバーが脆弱なコードをコードベースにマージするのを防ぎます。
開発パイプライン全体を通じてコードを保護する、Snykのアプリケーションセキュリティソリューションについて、詳しくご覧ください。