アプリケーションが 複雑に なるにつれて、 その 保護も 難しくなります。
アプリケーションを 構成する ソースコードには、 独自に 開発した コードだけでなく、 多くの サードパーティ製オープンソースコードも 含まれています。 安全な コードを リリースしながら 開発の スピードも 維持したい 開発チームや セキュリティチームは、 包括的な ソフトウェアセキュリティ戦略の 一環と して、 静的アプリケーションセキュリティテスト (SAST)と ソフトウェア構成分析 (SCA)を 組み合わせる 必要が あります。
とはいえ、 言う ほど 簡単ではありません。
従来から 使われてきた、 より 歴史の 長い テスト手法である SASTは、 アプリケーションセキュリティの 最初の 取り組みと して 理に かなった 選択肢でした。 利用可能な SASTツールは 数多く あり、 選定に 役立つ手法や ベストプラクティスも 十分に 文書化されています。 しかし、 SASTソリューションには、 速度、 精度、 使いやすさの 面で 評判が よくないと いう 問題が あります。 こうした 欠点が、 チームに よる SASTの 導入を 妨げたり、 代わりに SCAを 選ばせたりする 可能性が あります。
従来の SCAソリューションも 大差は なく、 統合が 難しく、 誤検知が 多いと いう 実績が あります。 オープンソースパッケージの 脆弱性が SCAへの 注目を 高めているにも かかわらず、 SCAの 導入は まだ 限定的で、 オープンソースセキュリティ対策を 利用していると 回答した 組織は わずか 38%です。 また、 依存関係 (および その 依存関係)を スキャンできても、 SCAでは 自社で 記述した コードの 脆弱性は 検出できません。
しかし、 SASTと SCAを 個別に 使う ことは、 ツールの 乱立を 抑え、 アプリケーションセキュリティツールを 統合したいと いう 組織の 高まる ニーズに 反しています。 その ため、 SAST または SCAの どちらかを 選ぶ 発想に なりがちで、 SAST と SCAを 組み合わせて 使う ことが 検討されません。
この 記事では、 SAST と SCAを 組み合わせるべき 理由と、 ツールを 乱立させずに 両方を 導入する 方法を ご紹介します。
SASTとSCAの違いとは? SASTと SCAの 違いを 理解する ことは、 両者を 組み合わせた アプローチの 導入に 大きく 役立ちます。
SASTの用途とは? SASTは、 アプリケーションの ソースコードや バイトコードを スキャンし、 OWASP Top 10や CWEなどの セキュリティ脆弱性を 検出する、 構造的な アプリケーションセキュリティテスト手法です。 ソースコードや バイトコードの ほか、 ドキュメントや 仕様書など、 さまざまな 情報も 評価できます。 最新の SASTツールは 元の コードを 中間表現に 変換し、 通常は 論理ソルバー上で 動作する ルールセットを 使って、 さまざまな 種類の テストを 実施します。
SASTの 利点は、 アプリケーションが 取り得る あらゆる 実行経路や 状態を 網羅し、 開発者が 当初想定していなかった バグも 検出できる ことです。 検出された 問題には、 ファイル名や 行番号を 含む、 アプリケーション内の 正確な 場所や 経路を 示す情報と、 問題そのものに 関する 詳細を 付記する 必要が あります。
従来の SASTツールの 欠点の 1つは、 ツールベンダーが、 真の 問題を 検出する こと、 考えられる すべての 問題を 検出する こと、 計算リソースの 使用量と いう 3つの 要素の バランスを 取らなければならない 点です。 その ため、 従来の ツールでは アプリケーションの 挙動を 過大に 見積もり、 計算時間を 優先する 代わりに、 一定数の 誤警告や 見落としを 許容する 妥協が 生じます。 それでも、 大規模な プロジェクトでは、 従来の SASTツールに よる スキャンに 数日、 場合に よっては 数週間かかることがあります。
SCAの用途とは? 最新の アプリケーションは、 数十から 数百に 及ぶこともある オープンソースパッケージ (依存関係)に 依存しています。 実際、 アプリケーションの 98%に オープンソースソフトウェアが 含まれています 。 これらの 依存関係も、 推移的依存関係と 呼ばれる 別の オープンソースパッケージに 依存しています。 オープンソースパッケージは、 テキストの 書式設定と いった 単純な タスクから、 複雑な フレームワークや ランタイムまで、 幅広い 用途を 担っています。
オープンソースパッケージは、 ひとまとまりの ものとして 扱うのが 一般的な ベストプラクティスです。 コードの パッチ適用や 変更は、 それを パッケージに 提供し、 取り込んで もらう 限り 歓迎されます。 ローカルで 変更すると パッケージの バージョン管理が 崩れ、 新しい バージョンを ダウンロードした 際に 変更が 上書きされる 可能性が あります。
SCAは、 アプリケーションで 直接または 間接的に 使用されている オープンソースの 依存関係を スキャンし、 その 分析結果を 脆弱性データと 照合して、 依存関係に 含まれる 可能性の ある 既知の セキュリティ脆弱性を 追跡する アプリケーションセキュリティ手法です。 脆弱性が 見つかると、 脆弱性そのものに 関する 情報が 通知され、 場合に よっては 推奨される 修正方法も 提示されます。 重要な 点と して、 SCAは オープンソースパッケージに 含まれる ライセンスを 特定し、 オープンソースの 利用に よって 生じる 法的リスクの 把握にも 役立ちます。
SASTとSCAを併用する理由 2つの テスト手法には 機能上の 違いが ある ため、 同じ 条件で 単純に 比較するのは 適切ではありません。
開発プロセスの 早い 段階で 導入され、 ソースコードを テストするなどの 共通点は ありますが、 アプリケーションを 構成する コードの 異なる 2つの タイプを 対象と しています。 SASTは 社内で 記述した コードが もたら すリスクの 軽減に 役立ち、 SCAは 組織外で 記述された コードが もたら すリスクの 軽減に 役立ちます。
したがって、 効果的な アプリケーションセキュリティ対策には、 両方の リスクを 管理・軽減できる セキュリティテスト ツールを 取り入れる 必要が あります。 この アプローチに より、 独自開発の コードと オープンソースコンポーネントを 包括的に 可視化し、 開発ライフサイクルの 早期から 全体に わたって 問題を 特定・修正できる ため、 リスクを 総合的に 軽減できます。
併用アプローチに求められる要件 併用アプローチの 選択は 簡単ではありません。 アプリケーションセキュリティ プログラムの 一環と して SASTと SCAの 両方を 導入するには、 組織文化や 技術面での 課題が あります。
DevSecOpsモデルでは、 開発者が より 大きな 責任を 担うことが 求められます。 しかし、 従来の ソリューションを 過去および現在に わたって 使ってきた 経験から、 開発者が 1つの テスト手法を 導入する ことさえ 難しく、 2つと なればな おさらです。 すでに 利用している ツールに、 さらに セキュリティツールを 追加する ことに 抵抗を 感じる チームも あるでしょう。
手軽な 解決策は、 SASTと SCAの ツールを CI/CDパイプラインに 統合し、 検出結果を 開発者に 戻す ことかもしれません。 しかし、 それでは プロセスが 分断され、 スキャンの 完了と 修正の 適用を 待ってから デプロイすることになります。 アジャイルな DevOpsの 世界では、 リリースを 数週間遅らせる ことは 現実的な 選択肢ではありません。
その ため、 併用型の アプリケーションセキュリティ プログラムを 成功させるには、 何よりも 開発者に とって 使いやすい ソリューションが 必要です。 既存の 開発ワークフローに 迅速かつ 簡単に、 早い 段階から 統合できる SASTおよびSCAツールの ほうが、 動作が 遅く、 使いにくく、 開発の 後 期にしか 導入できない ツールよりも、 開発者に 利用されやすくなります。
さらに、 SASTと SCAの スキャンを 同時に 実行する、あるいは 同じ ツール内で 実施できる 統合ワークフローは、 開発者の 複雑さを 軽減し、 セキュリティに かかる 全体的な コストも 抑えます。
Snykのアプローチ:Snyk CodeとSnyk Open Source Snykプラットフォームは SASTと SCAを 組み合わせた アプリケーションセキュリティを 提供し、 今日の アプリケーションを 構成する さまざまな 要素を、 安全かつ 迅速に 開発できるようにします。
SAST向けの Snyk Code と、 SCA向けの Snyk Open Source を 併用すると、 使いやすく、 セルフサービスで 利用できる、 高速かつ 高精度な テストを 実現できます。 開発者と セキュリティチームは、 自社の 独自コードに おける セキュリティ上の 問題と、 オープンソースの 依存関係に 含まれる 既知の 脆弱性の 両方を 簡単に 見つけ、 優先順位を 付けて 修正できます。 これに より、 リスクを 軽減し、 安全な 開発の スピードを 高められます。
アプリケーションは CI/CDパイプラインに 入る 前に 修正される ため、 スキャン待ちに よる 遅延や、 検出結果の トリアージおよび 問題報告の 作成と いった 負担が なくなります。 これに より、 アプリケーションセキュリティチームは 組織全体の セキュリティ態勢に 注力できます。
Snykの 統合テストは 開発の 早い 段階から、 開発ライフサイクル全体に わたって 実施できます。 たとえば、 IDE内から 開始できます。
1つのツール、2つのスキャン方法:SnykのJetBrains IDEプラグインの実際の動作。
スキャンは 短時間で 完了し、 結果は 開発者の 作業環境に わかりやすい 説明とともに 表示されます。 アプリケーション内の データフローを 元の コードに 重ねて 表示し、 複数の ファイル間も 移動できます。 同様の 状況で 他の 開発者が どのように 問題に 対処したかを 示す、 オープンソースプロジェクトの 事例も 確認できます。 何より、 スキャンが 高速で 回数に 制限が ないため、 開発者は 小さな 変更も 頻繁に スキャンし、 ソースコード管理システムに 反映する 前に 問題を 修正できます。
Snykは、 その後の 開発段階でも 統合スキャンを 自動的に 実施します。 たとえば、 GitHubから 新しい プロジェクトを インポートすると、 Snykは リポジトリ内の ソースコードに 対して SAST (1)と SCA (2)の テストを 自動的に 実行します。
Snykにインポートされたプロジェクト。SASTとSCAのスキャン結果を1つの統合ビューで確認できます。
重要な 点と して、 Snykプラットフォームは Snyk Intel Vulnerability Database を 基盤と しています。 この データベースは、 複数の 公開情報源、 Snykの 大規模な 開発者コミュニティからの フィードバック、 Snyk専任の 調査チームの 成果を 組み合わせ、 市場で もっとも 包括的で、 タイムリーかつ 実用性の 高い 脆弱性データを 提供します。 これに より、 スキャン結果と 対応する 修正の 推奨内容の 精度が 保たれます。
Snykの UIを 使うと、 開発チームと セキュリティチームは、 新たに 判明した 脆弱性が ないか、 コードベースを 定期的に 監視できます。 たとえば、 最近の Log4shell脆弱性 では、 Snyk Open Sourceを 利用する ことで、 Snykユーザーは アプリケーションの コードベース全体を 簡単かつ 迅速に スキャンし、 脆弱性の ある リポジトリを 特定して、 適切に 対処できました。 また、 PRチェックを 使ったり、 Snykを CI/CDパイプラインに 統合したりする ことで、 テストを 自動化し、 必須に できます。
Snykは スキャン数、 コード行数、 プロジェクト数に 応じた ライセンスではありません。 アプリケーションセキュリティチームは、 ライセンス費用を 理由に 重要な プロジェクトだけに スキャン対象を 絞ったり、 スキャン頻度を 制限したりする 必要は ありません。 必要なだけ、 好きな 頻度で コードを スキャンできます。
最後に、 Snykプラットフォームは コンテナ と Infrastructure as Code (IaC)の 脆弱性も スキャンします (以前の スクリーンショットで お気づきかもしれません)。 これに より、 アプリケーションを 構成する さまざまな コード要素を 総合的に 把握できます。
勝者は……両方 SASTと SCAは、 組み合わせる ことでより 高い 効果を 発揮し、 組織は 使用している すべての ソフトウェアを 網羅的に 把握できます。
最新の アプリケーションを 保護する 取り組みには、 その 開発を 支える プロセスと 同じ 俊敏性が 求められます。 アプリケーションセキュリティでは 両方の ツールを 使う ことが 今や 事実上の 標準と なっており、 PCI DSS や、 アプリケーションセキュリティと ソフトウェアサプライチェーン攻撃 の 増加に 対応する 世界各国の 政府の 取り組みなど、 さまざまな 規制要件への 準拠に おいても 求められるようになっています。
安全な アプリケーションを 提供したい 組織は、 過去の 経験や 特定の 手法への 偏見、 あるいは 予算の 制約を 理由に、 どちらか 一方を 選ぶ 必要は ありません。 SASTと SCAは、 アプリケーションを 構成する すべての ソースコードを 不可欠かつ 包括的に 可視化する ため、 あらゆる アプリケーションセキュリティ プログラムの 重要な 要素と なるべきです。
SASTと SCAを どう 始めれば よいかわからない 方は、 Snykを 無料で お試しください。
CTFを 始めよう オンデマンドの バーチャル入門ワークショップで、 CTFチャレンジの 解き方を 学びましょう。