Secure code scanningの概要
Secure code scanning(セキュアコードスキャニング)は、ソースコードに潜むセキュリティ上の欠陥や品質上の問題を検出するための手法です。専用ツールや解析手法を用いて、自社開発コード、サードパーティライブラリ、コンテナイメージ、公開リポジトリなどをスキャンし、コード品質上の問題やセキュリティ脆弱性、ハードコードされたシークレット、プライバシーリスクなどを検出して、修正対応を支援します。
文章校正ツールがスペルミスを未然に防ぐように、コードスキャナーは潜在的な脆弱性や非効率な記述を検知します。このプロセスを経て、本番環境へリリースする前に潜在的な問題を早期に検出できるようになります。
本記事では、コードスキャンにおける具体的なステップ、導入効果、代表的なアプローチ、そして運用のベストプラクティスを解説します。
Watch 5-min Wiz Code demo
See how Wiz Code surfaces SAST, SCA, IaC, and secrets findings alongside real runtime exposure.

コードスキャンで検知可能な主な脆弱性
コードスキャンツールは、フローベース分析、セマンティック分析、パターンマッチング、ファジング、ヒューリスティック分析などの解析手法を活用し、OWASP Top 10に含まれる脆弱性を含む幅広いリスクを検出します。
以下に、代表的な脆弱性の例とその検出メカニズムをまとめます。
| 脆弱性(名称) | 検出メカニズム(説明) |
|---|---|
| SQLインジェクション | 入力サニタイズの不備を探索。適切な処理を介さず、入力欄へSQLクエリを直接投入できてしまう設計上の問題を特定します。 |
| クロスサイト・リクエスト・フォージェリ (CSRF) | 入力検証の不備や安全でないシステムトークンの洗い出し。認証済みユーザーのブラウザを悪用し、意図しないリクエストを送信させる攻撃につながる箇所を検出します。 |
| リモートコード実行 (RCE) | 設定ミスや不適切な検証メカニズムの特定。攻撃者がリモートから任意のコードを実行できる条件を精査します。 |
| バッファオーバーフロー | メモリバッファの許容容量を超えるデータの受け取り。メモリ管理の不備や、脆弱性を誘発する設定ミスを検知します。 |
| ハードコードされたシークレット | 高エントロピー文字列や既知のパターンのスキャン。コード内にAPIキーやパスワードなどの機密情報が埋め込まれている兆候を抽出します。 |
実例
2023年5月、MOVEit Transferを標的としたSQLインジェクション攻撃が確認されました。この攻撃では、マネージド・ファイル・転送(MFT)サービスのコードに存在した3つの重大な脆弱性が悪用され、大規模なデータ流出が発生。GreyNoiseやKrollをはじめ、多くの顧客に大きな影響が及びました。
各種状況証拠から、この脆弱性は2年以上にわたり潜伏していた可能性が指摘されています。Secure code scanningを導入していれば、これらの欠陥を早期に検出・修正し、被害の軽減やインシデントの早期発見につなげられた可能性があります。
2024年6月、Wiz Researchチームは、AIモデル実行用のオープンソースプロジェクト「Ollama」において、悪用可能なリモートコード実行(RCE)脆弱性(CVE-2024-37032)を発見しました。この脆弱性を突くことで、攻撃者は外部公開されているOllamaのAPIサーバーに対し、巧妙に細工したHTTPリクエストを送信できる状態にありました。
このセキュリティ問題はすでに修正済みですが、AIプロジェクトに携わる開発者にとって、この事例は極めて重要な教訓を示しています。Secure code scanningは、設定ミスやRCEのような深刻なリスクを是正するうえで、重要な役割を果たします。
コードスキャンが求められる理由
ソフトウェア開発プロセスにおいて、Secure code scanningの重要性が高まっています。コードのセキュリティ問題は避けがたく、放置すれば短期間で悪用可能な脆弱性へと発展し、開発チームやユーザー、インフラ全体に深刻な影響を及ぼしかねません。リリース前にスキャンを実行すべき主な理由は以下の通りです。
リリースサイクル短縮によるセキュリティ課題
競争優位性を確保するため、多くの企業がリリースサイクルを短縮しています。その反面、開発・セキュリティの両チームがアプリを作り込み、潜在的なリスクを解消するための時間は削られがちです。結果として、脆弱性を抱えたままのソフトウェアがデプロイされるリスクが高まります。
コードスキャンを導入すれば、定期実行やIDEへのコード追加に合わせた自動スキャンが可能です。開発プロセスの早期段階(シフトレフト)で組み込むほど、修正コストや複雑性を抑えつつ、安全性を担保したままリリースサイクルを加速できます。
増加するデータ侵害とセキュリティリスク
Forresterの調査によると、2023年には3,205件のデータ侵害が報告されており、1日あたり約9件に相当します。デプロイ前に脆弱性を検出するコードスキャンは、SDLC(ソフトウェア開発ライフサイクル)へセキュアコーディングを組み込む有効な手段の一つです。これにより、ソフトウェアのセキュリティと品質向上に加え、データ侵害リスクの低減にもつながります。
データ侵害によるコストと影響
データ侵害の影響は広範です。法令・規制違反による罰金、訴訟、財務へのダメージ、さらには顧客からの信頼失墜が含まれます。通信大手T-Mobileの事例では、2022年のデータ侵害に伴う集団訴訟の和解に3億5,000万ドルを支払いました。
コストはこれに留まらず、多額の弁護士費用やセキュリティ強化への追加投資も必要となり、企業の評判や顧客信頼にも影響を受けています。
こうした事態を防ぐため、一部のコードスキャンツールではアプリケーション内のデータフロー分析を通じてファイルや関数の呼び出しに含まれる機微データを検知し、プロアクティブな修復を支援します。
Software Composition Analysis(SCA)の仕組み
Software Composition Analysis(SCA)は、コードベースを体系的にスキャンし、オープンソースの依存関係を検出。セキュリティ、ライセンス、運用の各リスクを特定する手法です。一般的なワークフローは以下のステップで構成されます。
1. 依存関係の検出(Dependency Discovery)
SCAツールは、ソースコードやビルドファイル(package.json、requirements.txt、pom.xml等)、コンテナイメージなどをスキャンし、オープンソースコンポーネントを一覧化します。
直接の依存関係
明示的に宣言されているコンポーネント
間接的な依存関係(Transitive dependencies)
依存パッケージにより自動的に取り込まれるコンポーネント
2. コンポーネントの特定
特定された依存関係は、名称やバージョンに基づきフィンガープリント化され、以下のデータベースと照合されます。
公開脆弱性データベース(NVD、GitHub Advisories等)
パッケージレジストリ(npm、PyPI、Maven Central等)
独自の脅威インテリジェンス(Threat Intelligence)
このステップにより、コンポーネントが既知のメタデータや脆弱性へ正確に紐づけられます。
3. 脆弱性との関連付け(Vulnerability Correlation)
コンポーネント特定後、SCAツールは脆弱性データベースと突合し、以下の情報を確認できます。
既知のCVE(共通脆弱性識別子)
悪用可能性(悪用可能性や既知の攻撃コードの有無)
深刻度評価(CVSSスコア)
4. ライセンスとポリシーのチェック
セキュリティ課題だけでなく、各コンポーネントのライセンス(GPL、MIT、Apache 2.0等)を評価し、以下を検知します。
組織のポリシーに抵触する非互換ライセンス
法的義務が生じる可能性があるコピーレフト・ライセンス
5. リスクスコアリングと優先順位付け
近年のSCAツールは、単なる検知に留まりません。以下の観点からリスクの優先順位を判定します。
依存関係の重要度(ランタイムでのロード状況等)
脆弱性の深刻度
到達可能性(Reachability)分析(脆弱なコードパスが実際に呼び出されるか)
6. 修正対応の支援
実用的な修復方法を提示します。
アップグレード推奨(より安全なバージョンの提示)
ツールによっては、修正用プルリクエストやパッチ生成を支援
7. 継続的なモニタリング
多くのSCAソリューションは、リリース後も継続的な監視を提供。デプロイ済みのコンポーネントに新たな脆弱性が判明した際、即座にアラートを発します。
コードスキャンの代表的なアプローチ
コードスキャンの手法とツールは多岐にわたり、それぞれに適用領域があります。代表的なものを整理します。
| 手法/ツール | 説明 |
|---|---|
| SAST(静的解析) | 実行前のソースコードを解析。古いパッケージ、アクセス制御の不備、未処理の外部入力、バッファオーバーフローなどの一般的なリスクを検出します。 |
| DAST(動的解析) | 実行中のアプリケーションに対して疑似的な攻撃リクエストを送信し、実行環境(ランタイム)で発生するRCEや競合状態、CSRFといった脆弱性を特定します。 |
| SCA(ソフトウェア構成分析) | ソースコードやコンテナイメージ内の依存関係を分析し、NVD等のデータベースと照合し、既知の脆弱性との関連を評価します。 |
| IAST(対話型解析) | SASTとDAST双方のメリットを組み合わせたハイブリッドな解析手法です。 |
| シークレットスキャニング | リポジトリやパイプラインを解析。ハードコードされた認証情報を検出し、クラウドインフラへの不正アクセスを未然に防ぎます。 |
コードスキャンにおける運用の課題
各手法には独自の強みと弱みがあります。また、多くの手法に共通する課題として、誤検知(False Positive)と見落とし(False Negative)への対策が不可欠です。
誤検知(False Positive)
問題がないにもかかわらず、脆弱性として検出してしまう状態
見落とし(False Negative)
深刻な脆弱性が存在するにもかかわらず、ツールが検知に失敗する状態
これらを最小化するには、SDLC(ソフトウェア開発ライフサイクル)全体で複数の手法を併用することが推奨されます。各アプローチの強みを補完し合うことで、包括的なセキュリティ体制の構築に役立ちます。
Software Composition Analysis(SCA)の利点
SCAは、ソフトウェア・サプライチェーンのセキュリティを強固にし、アプリケーションのリスクを低減するうえで、主に以下のメリットをもたらします。
早期段階でのリスク検知
依存関係に含まれる既知の脆弱性を開発の初期に特定。後工程での重大なセキュリティインシデントを未然に防ぎます。
ライセンス・コンプライアンスの遵守
法的リスクを招く恐れのあるオープンソースライセンスを検出し、コンプライアンスの徹底を支援します。
サプライチェーンの可視化
直接的および間接的な依存関係を把握することで、見落とされやすい依存関係上のリスクを特定しやすくなります。
修正対応の迅速化(Remediation)の実現
脆弱なコンポーネントの使用箇所を即座に特定。開発者はデプロイ前に、迅速かつ的確な修正を行えます。
開発初期段階でのセキュリティ強化
SCAをCI/CDパイプラインや開発ワークフローへ統合。開発スピードを損なうことなく、一貫したセキュリティポリシーを適用できます。
コードスキャンで押さえるべき7つのポイント
効率的かつ堅牢なセキュリティ体制を構築するために、以下の7つのポイントを実践してください。
1. ソースコード保護ポリシーの策定
いつ、どのようにコードをスキャンし、暗号化などでいかに保護するかを明確にします。また、コードやDevOpsパイプラインへのアクセス権限(管理ロール)を厳格に定義。これにより、不正な改ざんやコードの流出を未然に防ぎます。
2. 適切なツール構成の選定
ツール選定の際は、以下の要件を満たしているか評価してください。
ワークフローの自動化:開発プロセスにシームレスに統合し、リリースサイクルを停滞させないか
広範な言語サポート:使用しているテクノロジースタックを網羅し、セキュリティの死角を排除しているか
セキュアコーディングの支援:OWASPのガイドラインに沿った実装を、開発者が自然に実践できるよう導いているか
最新の脅威インテリジェンス:常に最新の脆弱性情報を参照し、見落とし(False Negative)を最小化できるか
コンプライアンス管理の強化:コードレベルで規制遵守を支援し、データ侵害や法的な罰金リスクを低減できるか
実行可能なレポートの提供:迅速な脆弱性解消に直結する、具体的で詳細な修正案を提示できるか
部門横断のコラボレーション:リリースサイクルを阻害することなく、各チーム間の連携を促進できるか
CI/CD Pipeline Security Best Practices [Cheat Sheet]
In this 13 page cheat sheet we'll cover best practices in the following areas of the CI/CD pipeline: Infrastructure security, code security, secrets management, access and authentication, monitoring and response

3. セキュリティテストの早期実施(シフトレフト)
「シフトレフト」および「セキュア・バイ・デザイン」のアプローチを採用します。開発の早期段階でセキュリティを組み込むことで、後工程で発覚した際の膨大な修正コスト(時間・工数・費用)を長期的に削減します。
4. 自動スキャンと定期スキャンの併用
自動スキャンは開発ライフサイクルを通じて即時のフィードバックを提供し、定期スキャンは特定時点での詳細な分析を担います。定期的なスキャンは、セキュリティプログラムの成熟度を長期的に追跡する指標としても有効です。
5. リスクへの迅速な対処と優先順位付け
Forbesの調査では、セキュリティチームが少なくともクラウドアラートの23%を未調査のまま放置し、未解決にしているとされています。未解決のリスクは、攻撃者に格好の機会を与えます。修正パッチの適用やソフトウェア更新を迅速に行い、リスクを低減した状態を維持してください。
また、リスクの優先順位を判定し、アラート疲労(Alert Fatigue)を軽減できるツールを選べば、チームの検証負荷も大幅に低減します。
6. 運用環境に応じたチューニング
ビジネスコンテキストの取り込み、感度設定の調整、必要に応じた例外・ホワイトリスト・ブラックリストの追加、ルールやシグネチャの定義が含まれます。これらを複数のコードスキャンツール/手法と組み合わせることで、網羅的かつ正確な検出結果を得やすくなり、誤検知の抑制にもつながります。
7. セキュアコーディング意識の向上
トレーニングや脆弱性トレンドの共有を通じ、組織全体の理解を促進します。開発者が「最初からクリーンなコードを書く」ことのメリット(リリース後の手戻り削減)を実感できる環境を整えてください。
Wiz Codeによるセキュリティ強化
Wizは、包括的なクラウドネイティブ・アプリケーション保護プラットフォーム(CNAPP)を中核に、コードからクラウドまでを統合的に保護するセキュリティソリューションを提供します。新機能であるWiz Codeは、コードスキャン機能を拡張し本番環境へデプロイする前のコードに対し、エージェントレスで脆弱性や設定ミス、シークレットを効率的にスキャンします。
アプリケーションコードとIaC(Infrastructure as Code)の双方をスキャンすることで、Wizは開発初期段階で脆弱性を検知します。開発チームは問題の特定と修復をより迅速に実行でき、現代のDevSecOpsワークフローに対応したセキュアコーディングを定着させることが可能です。
さらに、Wiz CodeをCI/CDパイプラインへ統合することで、開発ワークフローへの影響を抑えながら、継続的なスキャンと監視を実現できます。これにより、クラウド環境での開発スピードを維持しつつ、セキュリティ強化を支援します。
Secure your cloud from code to production
Learn why CISOs at the fastest growing companies trust Wiz to accelerate secure cloud development.