静的解析(SAST、静的アプリケーション・セキュリティ・テスト)は、ソースコードを解析し、組織のアプリケーションが攻撃されやすくなるセキュリティ脆弱性を検出します。静的解析は、コードをコンパイルする前にアプリケーションをスキャンします。ホワイトボックステストとも呼ばれます。
静的解析は動作するアプリケーションやコードの実行が不要なため、ソフトウェア開発ライフサイクル(SDLC)の初期段階から実行されます。静的解析により、開発の初期段階で脆弱性を発見することで、開発を中断したり、アプリケーションの最終リリースまで脆弱性を持ち越したりすることなく問題を迅速に解決することができます。
静的解析ツールを利用することで、開発チームはコードの作成中にリアルタイムでフィードバックを受けることができるため、SDLCの次の工程にコードを引き継ぐ前に問題を修正することが可能になります。これによりセキュリティ関連の問題の考慮が後手に回らずに済みます。また、SASTツールでは、ソースコード内で発見した問題をグラフィカルに表示することもできます。これによりコードの修正が容易になります。脆弱性の具体的な個所を示し、リスクのあるコードをハイライトするツールもあります。ツールを用いることで問題の修正方法やコードの最適な修正箇所に関する詳細なガイダンスを得ることができるため、セキュリティ分野の高度な専門知識が不要です。
静的解析ツールはカスタマイズされたレポートを作成し、オフラインでエクスポートしたり、ダッシュボードを用いて追跡したりすることもできます。ツールによって報告されたセキュリティの問題のすべてを体系化された方法で追跡することにより、問題を速やかに修正し、リリース時のアプリケーションの問題を削減することが可能になります。このプロセスはセキュアSDLCの実現に有益です。
静的解析ツールはアプリケーション上で日次ビルド時、月次ビルド時、コードのチェックイン時、コードのリリース時などに定期的に実行するのが効果的です。
開発者の人数に比較してセキュリティ人材の確保は難しいケースがよくあります。アプリケーションのごく一部についてさえ、コードレビューを任せられる要員を見つけることが困難な場合もあります。静的解析ツールの最大の長所は、コードベースを100%解析できるという点です。しかも、人が手動で行うセキュア・コードレビューよりはるかに高速です。静的解析ツールは数百万行のソースコードをわずか数分でスキャンできます。また、バッファ・オーバーフロー、SQLインジェクション、クロスサイト・スクリプティングなどの重大な脆弱性を高い精度で自動的に発見します。このように、静的解析をSDLCに統合することにより、開発したソースコードの全体的な品質に劇的な効果をもたらすことが可能です。
言語、フレームワーク、プラットフォームが異なる多数のアプリケーションに存在する場合、静的解析を効率的に実行するにはシンプルな6つのステップに従う必要があります。
シノプシスは、SDLCとサプライ・チェーンにセキュリティと品質を組み込む包括的なソリューションをご提供しています。
IDE用静的解析(Code Sight)は、リアルタイムの開発者向け静的解析ツールです。Code Sightを利用することにより、コーディング中に脆弱性をスキャンし、発見することができます。CodeSightを統合開発環境(IDE)に統合することで、セキュリティの脆弱性を発見し、その対策のためのガイダンスを得ることができます。
シノプシスの静的解析ツール(Coverity)もコーディング中に重大な不具合やセキュリティ上の弱点を検出する機能を備えています。Coverityはフルパス・カバレッジをサポートしており、すべてのコード行およびすべての潜在的な実行パスを確実にテストします。ソースコードおよび基盤のフレームワークを詳細に把握することで高精度な解析結果を提供します。このため、大量の誤検知で開発者の時間を無駄にしません。
Coverityは、千人規模の開発チームに対応し、ソースコードが1億行を超える様な大規模プロジェクトでも容易に解析することができます。Coverityは、バージョン管理システム、ビルドおよび継続的インテグレーション、バグ・トラッキング、アプリケーション・ライフサイクル・マネジメント(ALM)ソリューションや統合開発環境(IDE)など、開発プロセスをサポートする重要なツールやシステムと短時間で統合できます。
侵害件数の増大により、組織のアプリケーション・セキュリティへの関心が高まり、早期段階でのアプリケーション脆弱性の発見とリスクの緩和が求められるようになっています。アプリケーション・セキュリティ・テストには静的解析と動的解析(DAST、動的アプリケーション・セキュリティ・テスト)の2種類があります。どちらもセキュリティの欠陥を発見するテスト手法ですが、その方法には大きな違いがあります。
以下では、2つのテスト手法の主な違いを説明します。