静的アプリケーションセキュリティテスト(SAST)は、ソフトウェア開発ライフサイクルにおいて非常に重要な要素です。SASTツールは、ソースコードを解析して、コードがコンパイルまたは実行される前にセキュリティ脆弱性やその他の問題を特定します。これにより、開発者は開発プロセスの早い段階で問題を見つけて修正することができ、コスト削減と全体的なセキュリティ向上につながります。
現在、いくつかの一般的なSASTツールが利用可能であり、それぞれに独自の強みと機能があります。この記事では、最も広く使用されているSASTツールを比較します。
CheckMarx
CheckMarx SASTは、ソースコード内のセキュリティ脆弱性、コンプライアンスの問題、およびその他の欠陥を特定するソースコード解析ソリューションです。コードの要素とフローの論理グラフを作成し、このグラフをクエリして問題を検出します。CheckMarxは多くのプログラミング言語をサポートしており、開発ライフサイクルのどの時点でもスキャンを実行できます。
CheckMarxの主な機能は次のとおりです。
- 既知の脆弱性に対する事前設定済みのクエリの広範なリスト
- セキュリティ、QA、およびビジネスロジック用にカスタムクエリを構成する機能
- ランタイムの動作と修正を追跡するためのインタラクティブなインターフェース
- ビルド自動化ツール、SCMシステム、課題追跡ツール、およびCI/CDプラットフォームとの統合
Fortify
OpenText Fortify Static Code Analyzerは、もう1つの主要なSASTツールです。ソースコード内のセキュリティ脆弱性の根本原因を特定し、最も深刻な問題を優先順位付けし、修正のためのガイダンスを提供します。Fortifyは、33以上のプログラミング言語にわたって1,600以上の脆弱性カテゴリをサポートしています。
Fortifyの主な機能は次のとおりです。
- 広範な統合エコシステムを介して開発ツールにセキュリティを組み込む
- Audit Assistantを使用してスキャン深度を調整し、誤検知を最小限に抑える
- CI/CDパイプラインの要求を満たすためにスキャンを動的に拡張する
- 開発の初期段階でソース、バイナリ、またはバイトコードの脆弱性を特定する
- Jenkins、Jira、Azure DevOpsなどのCI/CDツールとの統合
Frogbot
Frogbotは、JFrog Xrayを使用してセキュリティ脆弱性についてプルリクエストをスキャンするGitボットです。新しいプルリクエストが作成またはラベル付けされると、Frogbotはスキャンを実行し、Git UIで直接検出された問題を報告します。これにより、開発者はコードベースにマージされる前に脆弱性に対処できます。
Frogbotの主な機能は次のとおりです。
- 既知の脆弱性についてプルリクエストをスキャンする
- Gitインターフェースでコメントとして調査結果を報告する
- 既存のプルリクエストにラベルを追加してスキャンを再実行する機能
- スキャンエンジンとしてJFrog Xrayと統合する
Veracode
Veracodeは、クラウドベースの自動化されたSASTソリューションを提供します。ソースコードだけでなく、コンパイルされたコード(バイナリ)をスキャンし、より深く、より包括的な結果を提供します。Veracodeは、悪意のあるコードや不適切な機能などの潜在的な問題を特定し、ビジネスリスクに基づいて調査結果を優先順位付けします。
Veracodeの注目すべき点は次のとおりです。
- ソースのみのスキャンから除外される可能性のあるサードパーティライブラリを含めるためにバイナリをスキャンする
- ビジネス目標とリスク許容度に基づいて結果を優先順位付けする
- 誤検知がほとんどなく、非常に正確で実用的な調査結果を提供する
- 専任のセキュリティスタッフを必要とせずに、迅速なスキャンと結果を可能にする
Semgrep
Semgrepは、コマンドラインからCI/CDパイプラインまで、どこでも実行できるオープンソースのSASTツールです。拡張可能なアーキテクチャを備え、カスタマイズと使用が容易になるように設計されています。Semgrepルールはユーザーに表示され、構文がソースコードに似ているため、透過的で理解しやすくなっています。
Semgrepの主な機能は次のとおりです。
- 数秒でスキャンを実行し、CIスキャン時間の中央値は10秒です。
- 複雑な問題を解決するためにカスタムルールを作成できる柔軟性
- カスタムルールの作成を最小限に抑えるための管理されたルールのライブラリを提供する
- 30以上のフレームワークとテクノロジーをサポートする
GitHub CodeQL
CodeQLは、GitHubがセキュリティチェックとバリアント分析に使用するオープンソースの分析エンジンです。多くのプログラミング言語をサポートし、オープンソースのコードベースでスキャンを実行するためのコマンドラインインターフェースとVisual Studio Code拡張機能を提供します。
CodeQLの注目すべき点は次のとおりです。
- セキュリティチェックとバリアント分析を自動化する
- 幅広い言語、ライブラリ、およびフレームワークをサポートする
- CodeQLで使用される技術用語と概念の概要を提供する
Snyk Code
Snyk Codeは、ビルドを必要とせずに、数分でソースコードをスキャンする、開発者にとって使いやすいSASTツールです。コードに沿ってリアルタイムの結果を提供し、開発者が問題を迅速に修正できるように修正アドバイスを提供します。Snyk Codeは、一般的な言語、IDE、およびCI/CDツールと互換性があります。
Snyk Codeの主な機能は次のとおりです。
- コードの記述時にスキャンし、IDEからの自動スキャンを実行する
- 開発者にとって使いやすい修正アドバイスを含む、実用的な結果を提供する
- 機械学習を活用して堅牢な知識ベースを構築する
- デプロイメントステータスとエクスポージャーに基づいて問題を優先順位付けする
Tencent Xcheck
Tencent Xcheckは、Tencent Cloudによって開発された静的アプリケーションセキュリティテスト(SAST)ツールです。開発者がソースコード内のセキュリティ脆弱性やその他の問題を特定するのに役立つように設計されています。
- Xcheckは、さまざまなプログラミング言語の構文特性を正確に理解できるため、コードの誤解によって発生する誤検知の問題を解決するのに役立ちます。
- ユーザー定義のセキュリティ保護対策を識別して、誤検知をさらに削減できます。
- Xcheckは、サポートされている言語の正しい構文でプロジェクト全体をスキャンできます。
- Webバックエンドアプリケーションコードを迅速にスキャンできますが、深くネストされた再帰コードでは時間がかかる場合があります。
他のSASTツールとの比較
- Redditの投稿によると、Xcheckはコンパイルせずに生のソースコードを直接スキャンでき、そのスキャン速度はCheckmarxよりも100倍高速です。
デプロイメントとセキュリティ
- Xcheckはオンプレミスにデプロイされるため、テスト対象のソースコードは企業ネットワーク内に残り、ソースコードの漏洩のリスクを回避できます。
- ソースコードを含む製品ライフサイクル全体が企業ネットワークから離れることはありません。
Tencent Xcheckは、開発者がコード内のセキュリティ問題を検出するのに役立つ、高速かつ正確なSASTツールです。オンプレミスのデプロイメントモデルにより、ソースコードのセキュリティが確保されます。速度と精度に関しては他のSASTツールよりも優れていますが、一部のエンタープライズ向けSASTツールほど多くの言語をサポートしていないか、広範なエコシステムを持っていない可能性があります。
Semgrep
- コマンドラインからCI/CDパイプラインまで、どこでも実行できるオープンソースSASTツール
- 拡張可能なアーキテクチャを備え、カスタマイズと使用が容易になるように設計されている
- 30以上のフレームワークとテクノロジーをサポート
- カスタムルールの作成を最小限に抑えるための管理されたルールのライブラリを提供する
- 数秒でスキャンを実行し、CIスキャン時間の中央値は10秒
Bandit
- Pythonコードのスキャン用に特別に設計されたオープンソースSASTツール
- Python用の包括的なソース脆弱性スキャナー
Brakeman
- Ruby on Railsアプリケーション用に特別に設計されたオープンソースの脆弱性スキャナー
OWASP Dependency-Check
- 既知の脆弱なコンポーネントの使用を識別するオープンソースツール
- Javaおよび.NETプロジェクトをサポート
- Gradle、Jenkins、Mavenなどのビルドツールと統合
PMD
- Java、JavaScript、Salesforce、およびその他の言語をサポートするオープンソースSASTツール
- Ant、Maven、Gradle、Jenkinsなどのビルドツールと統合
PHPStan
- PHP用のオープンソースSASTツール
- Bitbucket、GitHub、およびGitLabとの統合をサポート
Cppcheck
- CおよびC++コード用のオープンソースSASTツール
- JenkinsおよびVisual Studioと統合
これらは、利用可能な多くのオープンソースSASTツールのほんの一例です。SASTツールを選択する際には、使用するプログラミング言語、必要なカスタマイズと透明性のレベル、結果の速度と精度、既存のツールおよびワークフローとの統合の容易さなどの要素を考慮することが重要です。
まとめ
静的アプリケーションセキュリティテストは、安全なソフトウェア開発の重要な部分です。この記事で比較したSASTツールはそれぞれ独自の強みと機能を持っていますが、開発プロセスのできるだけ早い段階で、開発者がセキュリティ脆弱性を見つけて修正できるようにすることを目的としています。
SASTツールを選択する際には、使用するプログラミング言語、必要なカスタマイズと透明性のレベル、結果の速度と精度、既存のツールおよびワークフローとの統合の容易さなどの要素を考慮してください。これらのツールの多くは、無料トライアルまたはオープンソースバージョンを提供しているため、試してみて、どれが自分のニーズに最適かを確認できます。
最終的に、SASTの目標は、攻撃者によって悪用される可能性のある問題を検出して修正することにより、アプリケーションの全体的なセキュリティを向上させることです。SASTを開発プロセスに組み込むことで、より安全なソフトウェアを構築し、コストのかかる侵害のリスクを軽減できます。