1. はじめに
システム/アプリケーションを開発する際には、テストを通じて不具合を見つけて対処する必要があります。これはセキュリティ上の不具合すなわち脆弱性についても同じことが言えます。サイバー攻撃などからアプリケーションを守るためには、リリースまでに脆弱性を見つけて対処する必要があり、開発の各工程においてさまざまなセキュリティテストを実施します。
一般的に、脆弱性は早く見つけるほど最終的な品質を確保しやすくなることから、脆弱性の早期検出・対処(シフトレフト)には大きな価値があります。そこで本記事では、IAST(Interactive Application Security Testing)を活用したシフトレフト、およびセキュリティテストにおける効果的な活用ポイントをお伝えします。
2. シフトレフトの効果
シフトレフトの具体的な効果は2点あります。
1点目は、開発工程全体の脆弱性対処コストを下げることができる点です。早い工程での脆弱性対処は、後工程での対処よりも容易な場合が多く、また学習効果により、埋め込まれる脆弱性の低減も望めるためです。
2点目は、開発工程の後半に余裕を確保できる点です。脆弱性を早期に減らせるため、リリース前に発見された脆弱性に対処する時間的・要員的な余裕を確保しやすくなります。
図1:シフトレフトの効果
3. セキュリティテストの種類と手法
セキュリティテストは、アプリケーションを取り巻く「技術的環境」、「物理的環境」、「人的環境」のうち「技術的環境」に対して実施するもので、「アプリケーション・セキュリティテスト」と「プラットフォーム・セキュリティテスト」に大別されます。
アプリケーション・セキュリティテストは独自開発したコードやライブラリに対して行うもので、主な手法としてはDAST/SAST/IAST/専門家診断があります。プラットフォーム・セキュリティテストはアプリケーションが動くための基盤に対して行うもので、主な手法としては脆弱性スキャナ/専門家診断があります。
図2:セキュリティテストの種類と手法
今回の記事では、アプリケーション・セキュリティテストの各手法の概要を解説します。
(ア)DAST(Dynamic Application Security Testing)
無害化した攻撃コードをアプリケーションに入力として与え、その出力結果を元に脆弱性を検出する手法です。検査用の環境やデータの準備に加え、検査時に詳細な攻撃シナリオ設定が必要となるため、それらに柔軟に対応できるハイスキルな要員のリソースが十分でないと、セキュリティテストの範囲を制限せざるを得ない場合があります。
図3:DASTのイメージ
(イ)SAST(Static Application Security Testing)
ソースコード/中間コードを解析し、パターンマッチングにより脆弱性を検出する手法です。コード全体を解析するため、誤検出(脆弱性ではないものを誤って検出してしまう事)が多い特徴があります。誤検出を見分けて除去できるようなハイスキルな要員をアサインできない場合、テスト結果への対処で時間・要員などのリソースを浪費するおそれがあります。
図4:SASTのイメージ
(ウ)IAST(Interactive Application Security Testing)
アプリケーションが動作した箇所の処理に脆弱性が含まれていないかを検査する手法です。アプリケーションにIASTエージェントを導入した状態で、システム開発の一般的な正常系テストを実施することで脆弱性の検査ができるため、導入/検査が容易で、かつアプリケーション製造など比較的早い工程から活用が可能です。
正常系テストで実際に通ったコード部分のみを検査するため誤検出が少ないことや、正常系テストの範囲全てが検査対象となるためDASTや後述の専門家診断のように検査範囲を限定する必要がないことが特長です。
図5:IASTのイメージ
(エ)専門家診断
開発者からヒアリングした情報などをもとに、専門家が総合的な観点でシステムの脆弱性を診断する手法です。IASTなどのツールでは検出が難しい、設計に起因する脆弱性を検出することが可能です。DASTと同様、診断用の環境/データの準備や専門家による詳細な攻撃シナリオ設定が必要となるため、依頼期間によっては診断範囲が限定される場合があります。
4. IAST活用のポイント
IASTは比較的早い工程から活用可能で、かつ導入と検査が容易なことから、シフトレフトの実現に適していると言えます。そこで、以下にIASTをより効果的に活用する際のポイントを4点ご紹介します。
ポイント1:正常系テストの網羅性を確保
IASTは正常系テスト時、実際に通ったコード部分を検査します。そのため正常系テストの網羅性が十分でない場合、脆弱性を含むコードを通らず、脆弱性の検出漏れが起きるおそれがあります。このため、正常系テストの網羅性確保はIAST活用時の肝と言えます。
ポイント2:専門家診断と組み合わせる
IASTは「実装に起因する脆弱性」を検査対象としており、「設計に起因する脆弱性」は対象に含まれません。そのため、設計起因の脆弱性は、専門家診断により検出する必要があります。
図1のようにIASTで実装起因の脆弱性の検出/対処をシフトレフトすることで後工程の余裕を確保し、専門家診断によりリリース前までに確実に設計起因の脆弱性を検出/対処するのが効果的な活用方法と言えます。
ポイント3:スモールスタート
IASTを適切に活用するには、IAST活用を前提とした脆弱性対処のルールや開発手順の整備も重要となります。
そして、ルールや手順を整備していても、プロジェクトが不慣れな状態では適切に活用することは難しいため、まずは小規模な単位からスタートして、プロジェクトでうまく活用できるかを検証・改善しながら、少しずつIASTの活用範囲を拡大していくことをお勧めします。
(例:パイロット開発/プロトタイプ開発など先行開発している所から着手する)
ポイント4:テストの自動化と組み合わせる
通常、不具合や脆弱性を修正した際は、以下の3点の確認が必要となります。
- (1)当該の不具合や脆弱性が確かに修正されている
- (2)修正によって新たな不具合を生んでいない
- (3)修正によって新たな脆弱性を生んでいない
一般的に、(1)や(2)に比べると、(3)の確認はテスト項目抽出やテスト実施の難易度が高いと言われています。
IASTを導入した状態で(1)や(2)を目的としたテストを実施すると、(3)についても自動的に確認できるため、効率的に修正時の確認を行うことができます。
さらに言えば、これらの確認は開発工程において繰り返し何度も実施されるものなので、(1)や(2)のテストの自動化を行うことで、効率をより高めることができます。
5. さいごに
本記事では、IASTによるシフトレフトとセキュリティテストで活用する際のポイントを紹介しました。IASTは導入と検査が容易で、かつ精度の高い検査が可能であり、ハイスキルな要員の確保が難しい場合でも効果的なセキュリティテストを行うことができます。
NTTデータには、セキュリティテストの実施だけではなく、計画や導入に関するコンサルティングのノウハウと実績があります。セキュリティテストについてお悩みの場合は、当社までぜひご連絡ください。